1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
require 'test/unit'
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
require 'rubygems/ext'
class TestGemExtExtConfBuilder < RubyGemTestCase
def setup
super
@ext = File.join @tempdir, 'ext'
@dest_path = File.join @tempdir, 'prefix'
FileUtils.mkdir_p @ext
FileUtils.mkdir_p @dest_path
end
def test_class_build
File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
end
output = []
Dir.chdir @ext do
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
end
expected = [
"ruby extconf.rb",
"creating Makefile\n",
"make",
"make: Nothing to be done for `all'.\n",
"make install",
"make: Nothing to be done for `install'.\n"
]
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
end
def test_class_build_extconf_fail
File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
extconf.puts "require 'mkmf'"
extconf.puts "have_library 'nonexistent' or abort 'need libnonexistent'"
extconf.puts "create_makefile 'foo'"
end
output = []
error = assert_raise Gem::InstallError do
Dir.chdir @ext do
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
end
end
assert_match(/\Aextconf failed:
#{Gem.ruby} extconf.rb.*
checking for main\(\) in .*?nonexistent/m, error.message)
assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
end
def test_class_make
output = []
makefile_path = File.join(@ext, 'Makefile')
File.open makefile_path, 'w' do |makefile|
makefile.puts "RUBYARCHDIR = $(foo)$(target_prefix)"
makefile.puts "RUBYLIBDIR = $(bar)$(target_prefix)"
makefile.puts "all:"
makefile.puts "install:"
end
Dir.chdir @ext do
Gem::Ext::ExtConfBuilder.make @ext, output
end
case RUBY_PLATFORM
when /mswin/ then
assert_equal 'nmake', output[0]
assert_equal 'nmake install', output[2]
else
assert_equal 'make', output[0]
assert_equal 'make install', output[2]
end
edited_makefile = <<-EOF
RUBYARCHDIR = #{@ext}$(target_prefix)
RUBYLIBDIR = #{@ext}$(target_prefix)
all:
install:
EOF
assert_equal edited_makefile, File.read(makefile_path)
end
def test_class_make_no_Makefile
error = assert_raise Gem::InstallError do
Dir.chdir @ext do
Gem::Ext::ExtConfBuilder.make @ext, ['output']
end
end
expected = <<-EOF.strip
Makefile not found:
output
EOF
assert_equal expected, error.message
end
end
|