Parent

Packager

A packager produces a package in the preferred OS format (e.g. RPM, DEB)

Attributes

makefile[R]

Public Class Methods

new(project) click to toggle source
# File lib/makeconf/packager.rb, line 6
def initialize(project)
  @project = project
  @specfile = nil                 # RPM spec file
  @makefile = Makefile.new
end

Public Instance Methods

add(f) click to toggle source

Add a native package definition file (RPM spec file, etc.)

# File lib/makeconf/packager.rb, line 13
def add(f)
  raise 'Unsupported file format' unless f =~ /\.spec$/
  @specfile = f
  @makefile.distribute f
end
finalize() click to toggle source
# File lib/makeconf/packager.rb, line 19
def finalize
  make_rpm_spec if @specfile.nil?

  # Make a copy of the specfile that we can tweak later on
  specfile_copy = "rpm/SPECS/#{@project.id}.spec"

  @makefile.add_target(
          'package',
          ['clean', @project.distfile],
              ['rm -rf rpm *.rpm',
           'mkdir -p rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS',
           'mkdir -p rpm/RPMS/`uname -m`',
                   "cp #{@project.distfile} rpm/SOURCES",
                   "cp #{@specfile} #{specfile_copy}",
           "perl -pi -e 's/^Version:.*/Version: #{@project.version}/' #{specfile_copy}",
                   'rpmbuild --define "_topdir `pwd`/rpm" -bs ' + specfile_copy,
           'rpmbuild --define "_topdir `pwd`/rpm" -bb ' + specfile_copy,
           'mv ./rpm/SRPMS/* ./rpm/RPMS/*/*.rpm .',
               'rm -rf rpm',
              ])
  @makefile.add_rule('clean', Platform.rm('*.rpm')) # FIXME: wildcard is bad
end
make_rpm_spec() click to toggle source

Generate an RPM spec file

# File lib/makeconf/packager.rb, line 43
def make_rpm_spec
  @specfile = 'rpm.spec'
  puts 'creating rpm.spec'
  File.unlink('rpm.spec') if File.exist?('rpm.spec')
  f = File.open('rpm.spec', 'w')
  f.puts # DO NOT EDIT -- automatically generated by ./configureName:       #{@project.id}Summary:    #{@project.summary}Version:    #{@project.version}Release:    1License:    #{@project.license}Vendor:     #{@project.author}Group:      System Environment/LibrariesSource0:    %{name}-%version.tar.gz%description#{@project.description}%prep#%setup -q -n #{@project.id}-#{@project.version}%setup%build./configure --prefix=/usr --disable-staticmake%installmake DESTDIR=%{buildroot} install%clean[ %{buildroot} != "/" ] && rm -rf %{buildroot}%post -p /sbin/ldconfig%postun -p /sbin/ldconfig%files%defattr(-,root,root)#{ @project.installer.package_manifest }%changelog* Thu Jan 01 2011 Some Person <nobody@nobody.invalid> - #{@project.version}-1- automatically generated spec file
f.close()
@makefile.add_rule('distclean', Platform.rm('rpm.spec'))
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.