rubygems-update 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -1
  4. data/.autotest +1 -0
  5. data/History.txt +32 -0
  6. data/Manifest.txt +2 -0
  7. data/lib/rubygems.rb +14 -5
  8. data/lib/rubygems/available_set.rb +70 -72
  9. data/lib/rubygems/commands/cert_command.rb +1 -0
  10. data/lib/rubygems/commands/query_command.rb +7 -7
  11. data/lib/rubygems/commands/setup_command.rb +21 -4
  12. data/lib/rubygems/commands/sources_command.rb +13 -0
  13. data/lib/rubygems/config_file.rb +29 -16
  14. data/lib/rubygems/defaults.rb +1 -1
  15. data/lib/rubygems/dependency_installer.rb +18 -10
  16. data/lib/rubygems/dependency_list.rb +1 -1
  17. data/lib/rubygems/dependency_resolver.rb +17 -4
  18. data/lib/rubygems/ext/builder.rb +0 -7
  19. data/lib/rubygems/ext/ext_conf_builder.rb +43 -8
  20. data/lib/rubygems/installer.rb +4 -4
  21. data/lib/rubygems/package.rb +2 -1
  22. data/lib/rubygems/rdoc.rb +10 -1
  23. data/lib/rubygems/remote_fetcher.rb +8 -3
  24. data/lib/rubygems/security.rb +21 -1
  25. data/lib/rubygems/security/policy.rb +2 -0
  26. data/lib/rubygems/source.rb +10 -0
  27. data/lib/rubygems/spec_fetcher.rb +38 -0
  28. data/lib/rubygems/specification.rb +1 -1
  29. data/lib/rubygems/ssl_certs/GeoTrust_Global_CA.pem +20 -0
  30. data/lib/rubygems/test_utilities.rb +6 -3
  31. data/test/rubygems/test_gem.rb +13 -1
  32. data/test/rubygems/test_gem_commands_fetch_command.rb +4 -0
  33. data/test/rubygems/test_gem_commands_query_command.rb +16 -0
  34. data/test/rubygems/test_gem_commands_setup_command.rb +18 -1
  35. data/test/rubygems/test_gem_commands_sources_command.rb +39 -0
  36. data/test/rubygems/test_gem_config_file.rb +15 -0
  37. data/test/rubygems/test_gem_dependency_installer.rb +55 -0
  38. data/test/rubygems/test_gem_dependency_resolver_api_set.rb +80 -0
  39. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +1 -7
  40. data/test/rubygems/test_gem_installer.rb +92 -1
  41. data/test/rubygems/test_gem_remote_fetcher.rb +3 -0
  42. data/test/rubygems/test_gem_source.rb +11 -0
  43. data/test/rubygems/test_gem_source_list.rb +1 -1
  44. data/test/rubygems/test_gem_spec_fetcher.rb +80 -8
  45. data/test/rubygems/test_require.rb +19 -8
  46. metadata +14 -11
  47. metadata.gz.sig +0 -0
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
3
+ MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
4
+ YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
5
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
6
+ R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
7
+ 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
8
+ fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
9
+ iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
10
+ 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
11
+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
12
+ MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
13
+ ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
14
+ uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
15
+ Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
16
+ tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
17
+ PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
18
+ hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
19
+ 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
20
+ -----END CERTIFICATE-----
@@ -38,6 +38,11 @@ class Gem::FakeFetcher
38
38
  end
39
39
 
40
40
  def find_data(path)
41
+ if URI === path and "URI::#{path.scheme.upcase}" != path.class.name then
42
+ raise ArgumentError,
43
+ "mismatch for scheme #{path.scheme} and class #{path.class}"
44
+ end
45
+
41
46
  path = path.to_s
42
47
  @paths << path
43
48
  raise ArgumentError, 'need full URI' unless path =~ %r'^https?://'
@@ -49,7 +54,7 @@ class Gem::FakeFetcher
49
54
  @data[path]
50
55
  end
51
56
 
52
- def fetch_path path, mtime = nil
57
+ def fetch_path path, mtime = nil, head = false
53
58
  data = find_data(path)
54
59
 
55
60
  if data.respond_to?(:call) then
@@ -121,8 +126,6 @@ class Gem::FakeFetcher
121
126
 
122
127
  path = File.join path, name
123
128
 
124
- Gem.ensure_gem_subdirectories install_dir
125
-
126
129
  if source_uri =~ /^http/ then
127
130
  File.open(path, "wb") do |f|
128
131
  f.write fetch_path(File.join(source_uri, "gems", name))
@@ -665,7 +665,7 @@ class TestGem < Gem::TestCase
665
665
  end
666
666
 
667
667
  def test_self_default_sources
668
- assert_equal %w[http://rubygems.org/], Gem.default_sources
668
+ assert_equal %w[https://rubygems.org/], Gem.default_sources
669
669
  end
670
670
 
671
671
  def test_self_detect_gemdeps
@@ -700,6 +700,18 @@ class TestGem < Gem::TestCase
700
700
  assert File.directory? File.join(@gemhome, "cache")
701
701
  end
702
702
 
703
+ def test_self_ensure_gem_directories_permissions
704
+ FileUtils.rm_r @gemhome
705
+ Gem.use_paths @gemhome
706
+
707
+ Gem.ensure_gem_subdirectories @gemhome, 0750
708
+
709
+ assert File.directory? File.join(@gemhome, "cache")
710
+
711
+ assert_equal 0750, File::Stat.new(@gemhome).mode & 0777
712
+ assert_equal 0750, File::Stat.new(File.join(@gemhome, "cache")).mode & 0777
713
+ end unless win_platform?
714
+
703
715
  def test_self_ensure_gem_directories_safe_permissions
704
716
  FileUtils.rm_r @gemhome
705
717
  Gem.use_paths @gemhome
@@ -18,6 +18,8 @@ class TestGemCommandsFetchCommand < Gem::TestCase
18
18
  @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
19
19
  File.read(@a2.cache_file)
20
20
 
21
+ refute_path_exists File.join(@tempdir, 'cache'), 'sanity check'
22
+
21
23
  @cmd.options[:args] = [@a2.name]
22
24
 
23
25
  use_ui @ui do
@@ -28,6 +30,8 @@ class TestGemCommandsFetchCommand < Gem::TestCase
28
30
 
29
31
  assert_path_exists(File.join(@tempdir, @a2.file_name),
30
32
  "#{@a2.full_name} not fetched")
33
+ refute_path_exists File.join(@tempdir, 'cache'),
34
+ 'gem repository directories must not be created'
31
35
  end
32
36
 
33
37
  def test_execute_prerelease
@@ -430,5 +430,21 @@ pl \(1\)
430
430
  assert_equal expected, @ui.output
431
431
  end
432
432
 
433
+ def test_make_entry
434
+ @fetcher.data.delete \
435
+ "#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{@a2.original_name}.gemspec.rz"
436
+
437
+ entry_tuples = [
438
+ [Gem::NameTuple.new(@a2.name, @a2.version, @a2.platform),
439
+ Gem.sources.first],
440
+ ]
441
+
442
+ platforms = { @a2.version => [@a2.platform] }
443
+
444
+ entry = @cmd.send :make_entry, entry_tuples, platforms
445
+
446
+ assert_equal 'a (2)', entry
447
+ end
448
+
433
449
  end
434
450
 
@@ -11,11 +11,17 @@ class TestGemCommandsSetupCommand < Gem::TestCase
11
11
  @cmd.options[:prefix] = @install_dir
12
12
 
13
13
  FileUtils.mkdir_p 'bin'
14
- FileUtils.mkdir_p 'lib/rubygems'
14
+ FileUtils.mkdir_p 'lib/rubygems/ssl_certs'
15
15
 
16
16
  open 'bin/gem', 'w' do |io| io.puts '# gem' end
17
17
  open 'lib/rubygems.rb', 'w' do |io| io.puts '# rubygems.rb' end
18
18
  open 'lib/rubygems/test_case.rb', 'w' do |io| io.puts '# test_case.rb' end
19
+ open 'lib/rubygems/ssl_certs/foo.pem', 'w' do |io| io.puts 'PEM' end
20
+ end
21
+
22
+ def test_pem_files_in
23
+ assert_equal %w[rubygems/ssl_certs/foo.pem],
24
+ @cmd.pem_files_in('lib').sort
19
25
  end
20
26
 
21
27
  def test_rb_files_in
@@ -23,6 +29,17 @@ class TestGemCommandsSetupCommand < Gem::TestCase
23
29
  @cmd.rb_files_in('lib').sort
24
30
  end
25
31
 
32
+ def test_install_lib
33
+ @cmd.extend FileUtils
34
+
35
+ Dir.mktmpdir 'lib' do |dir|
36
+ @cmd.install_lib dir
37
+
38
+ assert_path_exists File.join(dir, 'rubygems.rb')
39
+ assert_path_exists File.join(dir, 'rubygems/ssl_certs/foo.pem')
40
+ end
41
+ end
42
+
26
43
  def test_remove_old_lib_files
27
44
  lib = File.join @install_dir, 'lib'
28
45
  lib_rubygems = File.join lib, 'rubygems'
@@ -118,6 +118,45 @@ source #{@gem_repo} already present in the cache
118
118
  assert_equal '', @ui.error
119
119
  end
120
120
 
121
+ def test_execute_add_http_rubygems_org
122
+ http_rubygems_org = 'http://rubygems.org'
123
+ util_setup_fake_fetcher
124
+
125
+ install_specs @a1
126
+
127
+ specs = Gem::Specification.map { |spec|
128
+ [spec.name, spec.version, spec.original_platform]
129
+ }
130
+
131
+ specs_dump_gz = StringIO.new
132
+ Zlib::GzipWriter.wrap specs_dump_gz do |io|
133
+ Marshal.dump specs, io
134
+ end
135
+
136
+ @fetcher.data["#{http_rubygems_org}/specs.#{@marshal_version}.gz"] =
137
+ specs_dump_gz.string
138
+
139
+ @cmd.handle_options %W[--add #{http_rubygems_org}]
140
+
141
+ util_setup_spec_fetcher
142
+
143
+ ui = Gem::MockGemUi.new "n"
144
+
145
+ use_ui ui do
146
+ assert_raises Gem::MockGemUi::TermError do
147
+ @cmd.execute
148
+ end
149
+ end
150
+
151
+ assert_equal [@gem_repo], Gem.sources
152
+
153
+ expected = <<-EXPECTED
154
+ EXPECTED
155
+
156
+ assert_equal expected, @ui.output
157
+ assert_empty @ui.error
158
+ end
159
+
121
160
  def test_execute_add_bad_uri
122
161
  @cmd.handle_options %w[--add beta-gems.example.com]
123
162
 
@@ -164,6 +164,21 @@ class TestGemConfigFile < Gem::TestCase
164
164
  assert_equal 2048, @cfg.bulk_threshold
165
165
  end
166
166
 
167
+ def test_api_keys
168
+ assert_nil @cfg.instance_variable_get :@api_keys
169
+
170
+ temp_cred = File.join Gem.user_home, '.gem', 'credentials'
171
+ FileUtils.mkdir File.dirname(temp_cred)
172
+ File.open temp_cred, 'w', 0600 do |fp|
173
+ fp.puts ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
174
+ end
175
+
176
+ util_config_file
177
+
178
+ assert_equal({:rubygems => '701229f217cdf23b1344c7b4b54ca97'},
179
+ @cfg.api_keys)
180
+ end
181
+
167
182
  def test_check_credentials_permissions
168
183
  skip 'chmod not supported' if win_platform?
169
184
 
@@ -35,6 +35,61 @@ class TestGemDependencyInstaller < Gem::TestCase
35
35
  util_reset_gems
36
36
  end
37
37
 
38
+ def test_available_set_for_name
39
+ util_setup_gems
40
+ p1a, = util_gem 'a', '10.a'
41
+ util_setup_spec_fetcher p1a, @a1, @a1_pre
42
+
43
+ inst = Gem::DependencyInstaller.new
44
+
45
+ available = inst.available_set_for 'a', Gem::Requirement.default
46
+
47
+ assert_equal %w[a-1], available.set.map { |s| s.spec.full_name }
48
+ end
49
+
50
+ def test_available_set_for_name_prerelease
51
+ util_setup_gems
52
+ p1a, = util_gem 'a', '10.a'
53
+ util_setup_spec_fetcher p1a, @a1, @a1_pre
54
+
55
+ inst = Gem::DependencyInstaller.new :prerelease => true
56
+
57
+ available = inst.available_set_for 'a', Gem::Requirement.default
58
+
59
+ assert_equal %w[a-10.a],
60
+ available.sorted.map { |s| s.spec.full_name }
61
+ end
62
+
63
+ def test_available_set_for_dep
64
+ util_setup_gems
65
+ p1a, = util_gem 'a', '10.a'
66
+ util_setup_spec_fetcher p1a, @a1, @a1_pre
67
+
68
+ inst = Gem::DependencyInstaller.new
69
+
70
+ dep = Gem::Dependency.new 'a', Gem::Requirement.default
71
+
72
+ available = inst.available_set_for dep, Gem::Requirement.default
73
+
74
+ assert_equal %w[a-1], available.set.map { |s| s.spec.full_name }
75
+ end
76
+
77
+ def test_available_set_for_dep_prerelease
78
+ util_setup_gems
79
+ p1a, = util_gem 'a', '10.a'
80
+ util_setup_spec_fetcher p1a, @a1, @a1_pre
81
+
82
+ inst = Gem::DependencyInstaller.new :prerelease => true
83
+
84
+ dep = Gem::Dependency.new 'a', Gem::Requirement.default
85
+ dep.prerelease = true
86
+
87
+ available = inst.available_set_for dep, Gem::Requirement.default
88
+
89
+ assert_equal %w[a-10.a],
90
+ available.sorted.map { |s| s.spec.full_name }
91
+ end
92
+
38
93
  def test_install
39
94
  util_setup_gems
40
95
 
@@ -0,0 +1,80 @@
1
+ require 'rubygems/test_case'
2
+ require 'rubygems/dependency_resolver'
3
+
4
+ class TestGemDependencyResolverAPISet < Gem::TestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ @DR = Gem::DependencyResolver
10
+
11
+ @api_set = @DR::APISet.new
12
+ @uri = 'https://rubygems.org/api/v1/dependencies'
13
+ @fetcher = Gem::FakeFetcher.new
14
+ Gem::RemoteFetcher.fetcher = @fetcher
15
+ end
16
+
17
+ def test_find_all
18
+ b_entry = {
19
+ :name => 'b',
20
+ :number => '2',
21
+ :platform => 'ruby',
22
+ :dependencies => [['a', '>= 0']],
23
+ }
24
+
25
+ @fetcher.data["#{@uri}?gems=b"] = Marshal.dump [b_entry]
26
+
27
+ b_req = @DR::DependencyRequest.new dep('b', '>= 0'), nil
28
+
29
+ expected = [
30
+ @DR::APISpecification.new(@api_set, b_entry)
31
+ ]
32
+
33
+ assert_equal expected, @api_set.find_all(b_req)
34
+ end
35
+
36
+ def test_prefetch
37
+ b_entry = {
38
+ :name => 'b',
39
+ :number => '2',
40
+ :platform => 'ruby',
41
+ :dependencies => [['a', '>= 0']],
42
+ }
43
+
44
+ a_entry = {
45
+ :name => 'a',
46
+ :number => '2',
47
+ :platform => 'ruby',
48
+ :dependencies => [],
49
+ }
50
+
51
+ @fetcher.data["#{@uri}?gems=a,b"] = Marshal.dump [a_entry, b_entry]
52
+
53
+ a_req = @DR::DependencyRequest.new dep('a', '>= 0'), nil
54
+ b_req = @DR::DependencyRequest.new dep('b', '>= 0'), nil
55
+
56
+ @api_set.prefetch([b_req, a_req])
57
+
58
+ assert_equal [a_entry], @api_set.versions('a')
59
+ assert_equal [b_entry], @api_set.versions('b')
60
+ end
61
+
62
+ def test_versions_cache
63
+ entry = {
64
+ :name => 'b',
65
+ :number => '2',
66
+ :platform => 'ruby',
67
+ :dependencies => [['a', '>= 0']],
68
+ }
69
+
70
+ @fetcher.data["#{@uri}?gems=b"] = Marshal.dump [entry]
71
+
72
+ assert_equal [entry], @api_set.versions('b')
73
+
74
+ @fetcher.data["#{@uri}?gems=b"] = 'garbage'
75
+
76
+ assert_equal [entry], @api_set.versions('b'), 'version data must be cached'
77
+ end
78
+
79
+ end
80
+
@@ -110,7 +110,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
110
110
  #{Gem.ruby} extconf.rb.*
111
111
  checking for main\(\) in .*?nonexistent/m, error.message)
112
112
 
113
- assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
113
+ assert_equal("#{Gem.ruby} extconf.rb", output[0])
114
114
  end
115
115
 
116
116
  def test_class_make
@@ -134,12 +134,6 @@ checking for main\(\) in .*?nonexistent/m, error.message)
134
134
 
135
135
  assert_equal make_command, output[0]
136
136
  assert_equal "#{make_command} install", output[2]
137
-
138
- edited_makefile = Gem.read_binary makefile_path
139
- edited_makefile.gsub!(/\r/, '') if Gem.win_platform?
140
-
141
- assert_match "\nRUBYARCHDIR = #{@ext}$(target_prefix)\n", edited_makefile
142
- assert_match "\nRUBYLIBDIR = #{@ext}$(target_prefix)\n", edited_makefile
143
137
  end
144
138
 
145
139
  def test_class_make_no_Makefile
@@ -119,7 +119,8 @@ load Gem.bin_path('a', 'executable', version)
119
119
  File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f|
120
120
  f.write <<-'RUBY'
121
121
  puts "IN EXTCONF"
122
- File.open 'extconf_args', 'w' do |f|
122
+ extconf_args = File.join File.dirname(__FILE__), 'extconf_args'
123
+ File.open extconf_args, 'w' do |f|
123
124
  f.puts ARGV.inspect
124
125
  end
125
126
 
@@ -190,6 +191,43 @@ load Gem.bin_path('a', 'executable', version)
190
191
  Gem::ConfigMap[:bindir] = orig_bindir
191
192
  end
192
193
 
194
+ def test_check_executable_overwrite_format_executable
195
+ @installer.generate_bin
196
+
197
+ @spec = Gem::Specification.new do |s|
198
+ s.files = ['lib/code.rb']
199
+ s.name = "a"
200
+ s.version = "3"
201
+ s.summary = "summary"
202
+ s.description = "desc"
203
+ s.require_path = 'lib'
204
+ end
205
+
206
+ open File.join(util_inst_bindir, 'executable'), 'w' do |io|
207
+ io.write <<-EXEC
208
+ #!/usr/local/bin/ruby
209
+ #
210
+ # This file was generated by RubyGems
211
+
212
+ gem 'other', version
213
+ EXEC
214
+ end
215
+
216
+ util_make_exec
217
+ Gem::Installer.exec_format = 'foo-%s-bar'
218
+ @installer.gem_dir = @spec.gem_dir
219
+ @installer.wrappers = true
220
+ @installer.format_executable = true
221
+
222
+ @installer.generate_bin # should not raise
223
+
224
+ installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
225
+ assert File.exist? installed_exec
226
+
227
+ wrapper = File.read installed_exec
228
+ assert_match %r|generated by RubyGems|, wrapper
229
+ end
230
+
193
231
  def test_check_executable_overwrite_other_gem
194
232
  util_conflict_executable true
195
233
 
@@ -1000,7 +1038,17 @@ load Gem.bin_path('a', 'executable', version)
1000
1038
  RUBY
1001
1039
  end
1002
1040
 
1041
+ Dir.mkdir(File.join("lib", @spec.name))
1042
+ rb2 = File.join("lib", @spec.name, "#{@spec.name}.rb")
1043
+ @spec.files << rb2
1044
+ write_file File.join(@tempdir, rb2) do |io|
1045
+ io.write <<-RUBY
1046
+ # #{@spec.name}/#{@spec.name}.rb
1047
+ RUBY
1048
+ end
1049
+
1003
1050
  assert !File.exist?(File.join(@spec.gem_dir, rb))
1051
+ assert !File.exist?(File.join(@spec.gem_dir, rb2))
1004
1052
  use_ui @ui do
1005
1053
  path = Gem::Package.build @spec
1006
1054
 
@@ -1008,6 +1056,49 @@ load Gem.bin_path('a', 'executable', version)
1008
1056
  @installer.install
1009
1057
  end
1010
1058
  assert File.exist?(File.join(@spec.gem_dir, rb))
1059
+ assert File.exist?(File.join(@spec.gem_dir, rb2))
1060
+ end
1061
+
1062
+ def test_install_extension_flat
1063
+ skip '1.9.2 and earlier mkmf.rb does not create TOUCH' if
1064
+ RUBY_VERSION < '1.9.3'
1065
+
1066
+ @spec.require_paths = ["."]
1067
+
1068
+ @spec.extensions << "extconf.rb"
1069
+
1070
+ write_file File.join(@tempdir, "extconf.rb") do |io|
1071
+ io.write <<-RUBY
1072
+ require "mkmf"
1073
+
1074
+ CONFIG['CC'] = '$(TOUCH) $@ ||'
1075
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
1076
+
1077
+ create_makefile("#{@spec.name}")
1078
+ RUBY
1079
+ end
1080
+
1081
+ # empty depend file for no auto dependencies
1082
+ @spec.files += %W"depend #{@spec.name}.c".each {|file|
1083
+ write_file File.join(@tempdir, file)
1084
+ }
1085
+
1086
+ so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
1087
+ assert !File.exist?(so)
1088
+ use_ui @ui do
1089
+ path = Gem::Package.build @spec
1090
+
1091
+ @installer = Gem::Installer.new path
1092
+ @installer.install
1093
+ end
1094
+ assert File.exist?(so)
1095
+ rescue
1096
+ puts '-' * 78
1097
+ puts File.read File.join(@gemhome, 'gems', 'a-2', 'Makefile')
1098
+ puts '-' * 78
1099
+ puts File.read File.join(@gemhome, 'gems', 'a-2', 'gem_make.out')
1100
+ puts '-' * 78
1101
+ raise
1011
1102
  end
1012
1103
 
1013
1104
  def test_installation_satisfies_dependency_eh