diff options
author | Sutou Kouhei <kou@clear-code.com> | 2019-12-11 06:24:43 +0900 |
---|---|---|
committer | Sutou Kouhei <kou@clear-code.com> | 2019-12-11 06:24:43 +0900 |
commit | 6822686f0c45e752974de02a980365515e843267 (patch) | |
tree | 07c994f8c2308047c25b89a4e05ccfe8799aebf9 | |
parent | f808dd7a74893d6269c6cc72e049d7bb85b84b65 (diff) | |
download | rake-compiler-6822686f0c45e752974de02a980365515e843267.tar.gz |
Add support for Ruby 2.7
GitHub: fix #161
Reported by Masaki Hara. Thanks!!!
-rw-r--r-- | tasks/bin/cross-ruby.rake | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/tasks/bin/cross-ruby.rake b/tasks/bin/cross-ruby.rake index 6230799..37dd220 100644 --- a/tasks/bin/cross-ruby.rake +++ b/tasks/bin/cross-ruby.rake @@ -58,13 +58,16 @@ MINGW_TARGET = MINGW_HOST.gsub('msvc', '') 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") @@ -87,20 +90,26 @@ 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 = "" @@ -113,7 +122,7 @@ file "#{USER_HOME}/sources/#{RUBY_CC_VERSION}/Makefile.in" => ["#{USER_HOME}/sou 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 @@ -126,8 +135,7 @@ task :mingw32 do 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}", @@ -149,14 +157,14 @@ file "#{USER_HOME}/builds/#{MINGW_HOST}/#{RUBY_CC_VERSION}/Makefile" => ["#{USER 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 @@ -210,4 +218,3 @@ end desc "Build #{RUBY_CC_VERSION} suitable for cross-platform development." task 'cross-ruby' => [:mingw32, :install, 'update-config'] - |