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'] -