def output(output_path)
output_check(output_path)
%w(BUILD RPMS SRPMS SOURCES SPECS).each { |d| FileUtils.mkdir_p(build_path(d)) }
args = ["rpmbuild", "-bb"]
if %x{uname -m}.chomp != self.architecture
rpm_target = self.architecture
end
if !attributes[:rpm_os].nil?
rpm_target = "#{architecture}-unknown-#{attributes[:rpm_os]}"
end
if !rpm_target.nil?
args += ["--target", rpm_target]
end
args += ["--define", "dist .#{attributes[:rpm_dist]}"] if attributes[:rpm_dist]
args += [
"--define", "buildroot #{build_path}/BUILD",
"--define", "_topdir #{build_path}",
"--define", "_sourcedir #{build_path}",
"--define", "_rpmdir #{build_path}/RPMS",
"--define", "_tmppath #{attributes[:workdir]}"
]
args += ["--sign"] if attributes[:rpm_sign?]
if attributes[:rpm_auto_add_directories?]
fs_dirs_list = File.join(template_dir, "rpm", "filesystem_list")
fs_dirs = File.readlines(fs_dirs_list).reject { |x| x =~ /^\s*#/}.map { |x| x.chomp }
fs_dirs.concat((attributes[:auto_add_exclude_directories] or []))
Find.find(staging_path) do |path|
next if path == staging_path
if File.directory? path and !File.symlink? path
add_path = path.gsub(/^#{staging_path}/,'')
self.directories << add_path if not fs_dirs.include? add_path
end
end
else
self.directories = self.directories.map { |x| self.prefixed_path(x) }
alldirs = []
self.directories.each do |path|
Find.find(File.join(staging_path, path)) do |subpath|
if File.directory? subpath and !File.symlink? subpath
alldirs << subpath.gsub(/^#{staging_path}/, '')
end
end
end
self.directories = alldirs
end
allconfigs = []
self.config_files.each do |path|
cfg_path = File.join(staging_path, path)
raise "Config file path #{cfg_path} does not exist" unless File.exist?(cfg_path)
Find.find(cfg_path) do |p|
allconfigs << p.gsub("#{staging_path}/", '') if File.file? p
end
end
allconfigs.sort!.uniq!
self.config_files = allconfigs.map { |x| File.join("/", x) }
(attributes[:rpm_init_list] or []).each do |init|
name = File.basename(init, ".init")
dest_init = File.join(staging_path, "etc/init.d/#{name}")
FileUtils.mkdir_p(File.dirname(dest_init))
FileUtils.cp init, dest_init
File.chmod(0755, dest_init)
end
(attributes[:rpm_rpmbuild_define] or []).each do |define|
args += ["--define", define]
end
Find.find(staging_path) do |path|
src = path.gsub(/^#{staging_path}/, '')
dst = File.join(build_path, build_sub_dir, src)
copy_entry(path, dst)
end
rpmspec = template("rpm.erb").result(binding)
specfile = File.join(build_path("SPECS"), "#{name}.spec")
File.write(specfile, rpmspec)
edit_file(specfile) if attributes[:edit?]
args << specfile
logger.info("Running rpmbuild", :args => args)
safesystem(*args)
::Dir["#{build_path}/RPMS/**/*.rpm"].each do |rpmpath|
FileUtils.cp(rpmpath, output_path)
end
end