зеркало из https://github.com/github/ruby.git
* lib/rubygems/ext/builder.rb (Gem::Ext::Builder.make): Pass
DESTDIR via command line to override what's in MAKEFLAGS. This fixes an installation problem under a package building environment where DESTDIR is specified in the (parent) command line. [Fixes GH-327] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
7565d728b6
Коммит
8cc3103722
|
@ -1,3 +1,11 @@
|
|||
Tue Jun 25 22:28:07 2013 Akinori MUSHA <knu@iDaemons.org>
|
||||
|
||||
* lib/rubygems/ext/builder.rb (Gem::Ext::Builder.make): Pass
|
||||
DESTDIR via command line to override what's in MAKEFLAGS. This
|
||||
fixes an installation problem under a package building
|
||||
environment where DESTDIR is specified in the (parent) command
|
||||
line. [Fixes GH-327]
|
||||
|
||||
Tue Jun 25 21:43:13 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* bignum.c (big2dbl): Use (BDIGIT)1 instead of 1UL.
|
||||
|
|
|
@ -23,9 +23,14 @@ class Gem::Ext::Builder
|
|||
make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
|
||||
end
|
||||
|
||||
['', ' install'].each do |target|
|
||||
cmd = "#{make_program}#{target}"
|
||||
run(cmd, results, "make#{target}")
|
||||
['', 'install'].each do |target|
|
||||
# Pass DESTDIR via command line to override what's in MAKEFLAGS
|
||||
cmd = [
|
||||
make_program,
|
||||
'"DESTDIR=%s"' % ENV['DESTDIR'],
|
||||
target
|
||||
].join(' ').rstrip
|
||||
run(cmd, results, "make #{target}".rstrip)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ require 'rubygems/test_utilities'
|
|||
require 'pp'
|
||||
require 'zlib'
|
||||
require 'pathname'
|
||||
require 'shellwords'
|
||||
Gem.load_yaml
|
||||
|
||||
require 'rubygems/mock_gem_ui'
|
||||
|
@ -89,6 +90,63 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||
refute File.exist?(path), msg
|
||||
end
|
||||
|
||||
def scan_make_command_lines(output)
|
||||
output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
|
||||
end
|
||||
|
||||
def parse_make_command_line(line)
|
||||
command, *args = line.shellsplit
|
||||
|
||||
targets = []
|
||||
macros = {}
|
||||
|
||||
args.each do |arg|
|
||||
case arg
|
||||
when /\A(\w+)=/
|
||||
macros[$1] = $'
|
||||
else
|
||||
targets << arg
|
||||
end
|
||||
end
|
||||
|
||||
targets << '' if targets.empty?
|
||||
|
||||
{
|
||||
:command => command,
|
||||
:targets => targets,
|
||||
:macros => macros,
|
||||
}
|
||||
end
|
||||
|
||||
def assert_contains_make_command(target, output, msg = nil)
|
||||
if output.match(/\n/)
|
||||
msg = message(msg) {
|
||||
'Expected output containing make command "%s": %s' % [
|
||||
('%s %s' % [make_command, target]).rstrip,
|
||||
output.inspect
|
||||
]
|
||||
}
|
||||
else
|
||||
msg = message(msg) {
|
||||
'Expected make command "%s": %s' % [
|
||||
('%s %s' % [make_command, target]).rstrip,
|
||||
output.inspect
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
assert scan_make_command_lines(output).any? { |line|
|
||||
make = parse_make_command_line(line)
|
||||
|
||||
if make[:targets].include?(target)
|
||||
yield make, line if block_given?
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
}, msg
|
||||
end
|
||||
|
||||
include Gem::DefaultUserInteraction
|
||||
|
||||
undef_method :default_test if instance_methods.include? 'default_test' or
|
||||
|
|
|
@ -38,8 +38,8 @@ install (FILES test.txt DESTINATION bin)
|
|||
assert_match \
|
||||
%r%^cmake \. -DCMAKE_INSTALL_PREFIX=#{Regexp.escape @dest_path}%, output
|
||||
assert_match %r%#{Regexp.escape @ext}%, output
|
||||
assert_match %r%^#{Regexp.escape make_command}$%, output
|
||||
assert_match %r%^#{Regexp.escape make_command} install$%, output
|
||||
assert_contains_make_command '', output
|
||||
assert_contains_make_command 'install', output
|
||||
assert_match %r%test\.txt%, output
|
||||
end
|
||||
|
||||
|
@ -82,8 +82,8 @@ install (FILES test.txt DESTINATION bin)
|
|||
|
||||
output = output.join "\n"
|
||||
|
||||
assert_match %r%^#{make_command}%, output
|
||||
assert_match %r%^#{make_command} install%, output
|
||||
assert_contains_make_command '', output
|
||||
assert_contains_make_command 'install', output
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -30,9 +30,9 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
|||
|
||||
assert_equal "sh ./configure --prefix=#{@dest_path}", output.shift
|
||||
assert_equal "", output.shift
|
||||
assert_equal make_command, output.shift
|
||||
assert_contains_make_command '', output.shift
|
||||
assert_match(/^ok$/m, output.shift)
|
||||
assert_equal make_command + " install", output.shift
|
||||
assert_contains_make_command 'install', output.shift
|
||||
assert_match(/^ok$/m, output.shift)
|
||||
end
|
||||
|
||||
|
@ -76,8 +76,8 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
|||
Gem::Ext::ConfigureBuilder.build nil, nil, @dest_path, output
|
||||
end
|
||||
|
||||
assert_equal make_command, output[0]
|
||||
assert_equal "#{make_command} install", output[2]
|
||||
assert_contains_make_command '', output[0]
|
||||
assert_contains_make_command 'install', output[2]
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -32,14 +32,8 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
|
||||
assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
|
||||
assert_equal "creating Makefile\n", output[1]
|
||||
case RUBY_PLATFORM
|
||||
when /mswin/ then
|
||||
assert_equal "nmake", output[2]
|
||||
assert_equal "nmake install", output[4]
|
||||
else
|
||||
assert_equal "make", output[2]
|
||||
assert_equal "make install", output[4]
|
||||
end
|
||||
assert_contains_make_command '', output[2]
|
||||
assert_contains_make_command 'install', output[4]
|
||||
end
|
||||
|
||||
def test_class_build_rbconfig_make_prog
|
||||
|
@ -56,8 +50,8 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
end
|
||||
|
||||
assert_equal "creating Makefile\n", output[1]
|
||||
assert_equal make_command, output[2]
|
||||
assert_equal "#{make_command} install", output[4]
|
||||
assert_contains_make_command '', output[2]
|
||||
assert_contains_make_command 'install', output[4]
|
||||
ensure
|
||||
RbConfig::CONFIG['configure_args'] = configure_args
|
||||
end
|
||||
|
@ -80,7 +74,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
end
|
||||
|
||||
assert_equal "creating Makefile\n", output[1]
|
||||
assert_equal "anothermake", output[2]
|
||||
assert_contains_make_command '', output[2]
|
||||
ensure
|
||||
RbConfig::CONFIG['configure_args'] = configure_args
|
||||
ENV['make'] = env_make
|
||||
|
@ -132,8 +126,8 @@ checking for main\(\) in .*?nonexistent/m, error.message)
|
|||
Gem::Ext::ExtConfBuilder.make @ext, output
|
||||
end
|
||||
|
||||
assert_equal make_command, output[0]
|
||||
assert_equal "#{make_command} install", output[2]
|
||||
assert_contains_make_command '', output[0]
|
||||
assert_contains_make_command 'install', output[2]
|
||||
end
|
||||
|
||||
def test_class_make_no_Makefile
|
||||
|
|
Загрузка…
Ссылка в новой задаче