summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--lib/rubygems/ext/ext_conf_builder.rb17
-rw-r--r--test/rubygems/test_gem_installer.rb32
-rw-r--r--version.h2
4 files changed, 57 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 11188a5faa..09e4f63d50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Mar 17 23:22:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/ext_conf_builder.rb
+ (Gem::Ext::ExtConfBuilder.hack_for_obsolete_style_gems): remove
+ circular dependencies in install-so too. [ruby-core:52882]
+ [Bug #7698]
+
Sun Mar 17 23:19:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
diff --git a/lib/rubygems/ext/ext_conf_builder.rb b/lib/rubygems/ext/ext_conf_builder.rb
index e11a1cdfbc..7babf409a0 100644
--- a/lib/rubygems/ext/ext_conf_builder.rb
+++ b/lib/rubygems/ext/ext_conf_builder.rb
@@ -11,6 +11,21 @@ require 'tempfile'
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
+ def self.hack_for_obsolete_style_gems(directory)
+ return unless directory and File.identical?(directory, ".")
+ mf = Gem.read_binary 'Makefile'
+ changed = false
+ changed |= mf.gsub!(/^(install-rb-default:)(.*)/) {
+ "#$1#{$2.gsub(/(?:^|\s+)\$\(RUBY(?:ARCH|LIB)DIR\)\/\S+(?=\s|$)/, '')}"
+ }
+ changed |= mf.gsub!(/^(install-so:.*DLLIB.*\n)((?:\t.*\n)+)/) {
+ "#$1#{$2.gsub(/.*INSTALL.*DLLIB.*\n/, '')}"
+ }
+ if changed
+ File.open('Makefile', 'wb') {|f| f.print mf}
+ end
+ end
+
def self.build(extension, directory, dest_path, results, args=[])
siteconf = Tempfile.open(%w"siteconf .rb", ".") do |f|
f.puts "require 'rbconfig'"
@@ -28,6 +43,8 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
run cmd, results
+ hack_for_obsolete_style_gems directory
+
make dest_path, results
results
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index 7387f3ab0c..1ef68888a3 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -1011,6 +1011,38 @@ load Gem.bin_path('a', 'executable', version)
assert File.exist?(File.join(@spec.gem_dir, rb))
end
+ def test_install_extension_flat
+ @spec.require_paths = ["."]
+
+ @spec.extensions << "extconf.rb"
+
+ write_file File.join(@tempdir, "extconf.rb") do |io|
+ io.write <<-RUBY
+ require "mkmf"
+
+ CONFIG['CC'] = '$(TOUCH) $@ ||'
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
+
+ create_makefile("#{@spec.name}")
+ RUBY
+ end
+
+ # empty depend file for no auto dependencies
+ @spec.files += %W"depend #{@spec.name}.c".each {|file|
+ write_file File.join(@tempdir, file)
+ }
+
+ so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
+ assert !File.exist?(so)
+ use_ui @ui do
+ path = Gem::Package.build @spec
+
+ @installer = Gem::Installer.new path
+ @installer.install
+ end
+ assert File.exist?(so)
+ end
+
def test_installation_satisfies_dependency_eh
quick_spec 'a'
diff --git a/version.h b/version.h
index 8bb9ece2cc..4a4c9b2c25 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2013-03-17"
-#define RUBY_PATCHLEVEL 60
+#define RUBY_PATCHLEVEL 61
#define RUBY_RELEASE_YEAR 2013
#define RUBY_RELEASE_MONTH 3