Fixed some C/C++ compiler errors due to stricter checks.
[rubinius.git] / rakelib / package.rb
blob4bfedbca43385685832157f57e078a2018d21981
2 def write_md5_digest_file(filename)
3   require 'digest/md5'
5   digest_file = "#{filename}.md5"
6   File.open(digest_file, "w") do |f|
7     f.puts Digest::MD5.file(filename).hexdigest
8   end
10   puts "Computed MD5 to #{digest_file}"
11 end
13 def write_sha1_digest_file(filename)
14   require 'digest/sha1'
16   digest_file = "#{filename}.sha1"
17   File.open(digest_file, "w") do |f|
18     f.puts Digest::SHA1.file(filename).hexdigest
19   end
21   puts "Computed SHA1 to #{digest_file}"
22 end
24 def write_sha512_digest_file(filename)
25   require 'digest/sha2'
27   digest_file = "#{filename}.sha512"
28   File.open(digest_file, "w") do |f|
29     f.puts Digest::SHA512.file(filename).hexdigest
30   end
32   puts "Computed SHA512 to #{digest_file}"
33 end
35 def rbx_version
36   release_revision.first
37 end
39 class RubiniusPackager
40   attr_writer :prefix, :root, :bin, :config, :archive, :package
42   def initialize(options={})
43     @prefix = options[:prefix]
44     @root = options[:root]
45     @bin = options[:bin]
46     @config = options[:config]
47     @archive = options[:archive]
48     @package = options[:package]
49   end
51   # passed verbatim to --prefix
52   def prefix
53     default = "/rubinius/#{rbx_version}"
54     @prefix || default
55   end
57   # root directory of the build
58   def root
59     @root ||= BUILD_CONFIG[:builddir][0...-BUILD_CONFIG[:prefixdir].size]
60   end
62   # path for a binary symlink
63   def bin
64     @bin
65   end
67   # any configure options
68   def config
69     config = ["--prefix=#{prefix} --preserve-prefix"]
70     config << @config
71     config.join(" ")
72   end
74   # "zip", "tar.gz", "tar.bz2"
75   def archive
76     @archive || "tar.bz2"
77   end
79   # name of the final package file minus #archive
80   def package
81     default = "rubinius-#{rbx_version}"
82     @package || default
83   end
85   def create_archive(package_name)
86     name = "#{BUILD_CONFIG[:sourcedir]}/#{package_name}"
88     Dir.chdir root do
89       case archive
90       when "zip"
91         sh "zip --symlinks -r #{name} *"
92       when "tar.gz"
93         sh "tar -c -f - * | gzip > #{name}"
94       when "tar.bz2"
95         sh "tar -c -f - * | bzip2 -9 > #{name}"
96       else
97         raise RuntimeError, "unknown archive format: #{archive}"
98       end
99     end
100   end
102   def build
103     package_name = package + "." + archive
104     sh "rm -rf #{package_name}*"
106     ENV["RELEASE"] = "1"
107     sh "./configure #{config}"
108     load_configuration
110     sh "rake -q clean"
111     sh "rake -q build"
113     sh "strip -S #{BUILD_CONFIG[:build_exe]}" unless BUILD_CONFIG[:debug_build]
115     if bin
116       sh "mkdir -p #{root}#{File.dirname(bin)}"
118       bin = "#{prefix}#{BUILD_CONFIG[:bindir]}"
119       bin_link = "#{root}#{bin}"
121       sh "ln -sf #{bin} #{bin_link}"
122     end
124     create_archive package_name
125     write_sha512_digest_file package_name
126   rescue Object => e
127     # Some rake versions swallow the backtrace, so we do it explicitly.
128     STDERR.puts e.message, e.backtrace
129   end