tasks/bin/cross-ruby.rake in rake-compiler-1.0.8 vs tasks/bin/cross-ruby.rake in rake-compiler-1.0.9
- old
+ new
@@ -56,17 +56,20 @@
# Unset any possible variable that might affect compilation
["CC", "CXX", "CPPFLAGS", "LDFLAGS", "RUBYOPT"].each do |var|
ENV.delete(var)
end
+source_dir = "#{USER_HOME}/sources/#{RUBY_CC_VERSION}"
+build_dir = "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}"
+
# define a location where sources will be stored
-directory "#{USER_HOME}/sources/#{RUBY_CC_VERSION}"
-directory "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}"
+directory source_dir
+directory build_dir
# clean intermediate files and folders
-CLEAN.include("#{USER_HOME}/sources/#{RUBY_CC_VERSION}")
-CLEAN.include("#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}")
+CLEAN.include(source_dir)
+CLEAN.include(build_dir)
# remove the final products and sources
CLOBBER.include("#{USER_HOME}/sources")
CLOBBER.include("#{USER_HOME}/builds")
CLOBBER.include("#{USER_HOME}/ruby/#{MINGW_HOST}/#{RUBY_CC_VERSION}")
@@ -85,24 +88,30 @@
end
end
# Extract the sources
source_file = RUBY_SOURCE ? RUBY_SOURCE.split('/').last : "#{RUBY_CC_VERSION}.tar.bz2"
-file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}" => ["#{USER_HOME}/sources/#{source_file}"] do |t|
+file source_dir => ["#{USER_HOME}/sources/#{source_file}"] do |t|
chdir File.dirname(t.name) do
t.prerequisites.each { |f| sh "tar xf #{File.basename(f)}" }
end
end
# backup makefile.in
-file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in.bak" => ["#{USER_HOME}/sources/#{RUBY_CC_VERSION}"] do |t|
- cp "#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in", t.name
+if RUBY_CC_VERSION >= "ruby-2.7.0"
+ makefile_in = "#{source_dir}/template/Makefile.in"
+else
+ makefile_in = "#{source_dir}/Makefile.in"
end
+makefile_in_bak = "#{makefile_in}.bak"
+file makefile_in_bak => [source_dir] do |t|
+ cp makefile_in, makefile_in_bak
+end
# correct the makefiles
-file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in" => ["#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in.bak"] do |t|
- content = File.open(t.name, 'rb') { |f| f.read }
+file makefile_in => [makefile_in_bak] do |t|
+ content = File.open(makefile_in_bak, 'rb') { |f| f.read }
out = ""
content.each_line do |line|
if line =~ /^\s*ALT_SEPARATOR =/
@@ -111,11 +120,11 @@
out << line
end
end
when_writing("Patching Makefile.in") {
- File.open(t.name, 'wb') { |f| f.write(out) }
+ File.open(makefile_in, 'wb') { |f| f.write(out) }
}
end
task :mingw32 do
unless MINGW_HOST then
@@ -124,12 +133,11 @@
fail
end
end
# generate the makefile in a clean build location
-file "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/Makefile" => ["#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}",
- "#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in"] do |t|
+file "#{build_dir}/Makefile" => [build_dir, makefile_in] do |t|
options = [
"--host=#{MINGW_HOST}",
"--target=#{MINGW_TARGET}",
"--build=#{RUBY_BUILD}",
@@ -147,18 +155,18 @@
sh File.expand_path("../../../sources/#{RUBY_CC_VERSION}/configure"), *options
end
end
# make
-file "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/ruby.exe" => ["#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/Makefile"] do |t|
+file "#{build_dir}/ruby.exe" => ["#{build_dir}/Makefile"] do |t|
chdir File.dirname(t.prerequisites.first) do
sh MAKE
end
end
# make install
-file "#{USER_HOME}/ruby/#{MINGW_HOST}/#{RUBY_CC_VERSION}/bin/ruby.exe" => ["#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/ruby.exe"] do |t|
+file "#{USER_HOME}/ruby/#{MINGW_HOST}/#{RUBY_CC_VERSION}/bin/ruby.exe" => ["#{build_dir}/ruby.exe"] do |t|
chdir File.dirname(t.prerequisites.first) do
sh "#{MAKE} install"
end
end
task :install => ["#{USER_HOME}/ruby/#{MINGW_HOST}/#{RUBY_CC_VERSION}/bin/ruby.exe"]
@@ -208,6 +216,5 @@
Rake.application.display_tasks_and_comments
end
desc "Build #{RUBY_CC_VERSION} suitable for cross-platform development."
task 'cross-ruby' => [:mingw32, :install, 'update-config']
-