diff --git a/lib/rubygems/ext/ext_conf_builder.rb b/lib/rubygems/ext/ext_conf_builder.rb index f38fe5947ec7..e97e2998ecac 100644 --- a/lib/rubygems/ext/ext_conf_builder.rb +++ b/lib/rubygems/ext/ext_conf_builder.rb @@ -37,6 +37,10 @@ def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_di end end + if File.exist?(File.join(extension_dir, "gem.build_skipped")) + return ["Skipping the extension build"] + end + ENV["DESTDIR"] = nil make dest_path, results, extension_dir, tmp_dest_relative diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 5f0546b93da9..d600734ca76b 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -1416,6 +1416,27 @@ def test_build_extensions_default_gem assert_path_not_exist spec.extension_dir end + def test_extconf_skip_build + ext_spec + + assert_path_not_exist @ext.extension_dir, "sanity check" + refute_empty @ext.extensions, "sanity check" + + extconf_rb = File.join @ext.gem_dir, @ext.extensions.first + FileUtils.mkdir_p File.dirname extconf_rb + + File.open extconf_rb, "w" do |f| + f.write <<-'RUBY' + File.write("gem.build_skipped", "") + File.write("Makefile", "syntax-error") + RUBY + end + + @ext.build_extensions + + assert_path_exist @ext.extension_dir + end + def test_build_extensions_error pend "extensions don't quite work on jruby" if Gem.java_platform? ext_spec