autoproj 2.0.0.rc32 → 2.0.0.rc33
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/Gemfile +2 -0
- data/autoproj.gemspec +3 -1
- data/bin/autoproj_bootstrap +94 -99
- data/bin/autoproj_install +94 -99
- data/lib/autoproj/autobuild.rb +1 -1
- data/lib/autoproj/configuration.rb +4 -26
- data/lib/autoproj/ops/install.rb +94 -99
- data/lib/autoproj/package_managers/bundler_manager.rb +42 -21
- data/lib/autoproj/test.rb +155 -5
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +7 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1bbd3c8a0a54c4344fc5865309106b3869d16bf
|
4
|
+
data.tar.gz: 84ba1ca1161c05483ab51c3239a59c48e8cfcea4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 311b9232ca6168cb33c3a2ee97cdfe793be6d29904f82e1a78cb863c84dce4e5992d8d529b6ac0c9d47d58aec3417902a50053a1490629f99d3b554f79e05278
|
7
|
+
data.tar.gz: 671e7b5fceb741dac1ef521f985bf352e83fabe6a9a79030baf9fbb865eba0c0c69e26103a063a47933def4fb71f6f731bf42abb5c89441bc41d06e67308a283
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/autoproj.gemspec
CHANGED
@@ -5,7 +5,9 @@ require 'autoproj/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "autoproj"
|
8
|
-
|
8
|
+
# The envvar is here for the benefit of tests that require to create gems
|
9
|
+
# with a "fake" version
|
10
|
+
s.version = ENV['__AUTOPROJ_TEST_FAKE_VERSION'] || Autoproj::VERSION
|
9
11
|
s.authors = ["Sylvain Joyeux"]
|
10
12
|
s.email = "sylvain.joyeux@m4x.org"
|
11
13
|
s.summary = "Easy installation and management of sets of software packages"
|
data/bin/autoproj_bootstrap
CHANGED
@@ -41,12 +41,8 @@ module Autoproj
|
|
41
41
|
|
42
42
|
def initialize(root_dir)
|
43
43
|
@root_dir = root_dir
|
44
|
-
if File.file?(autoproj_gemfile_path)
|
45
|
-
@gemfile = File.read(autoproj_gemfile_path)
|
46
|
-
else
|
47
|
-
@gemfile = default_gemfile_contents
|
48
|
-
end
|
49
44
|
@gem_source = "https://rubygems.org"
|
45
|
+
@gemfile = nil
|
50
46
|
|
51
47
|
@autoproj_options = Array.new
|
52
48
|
|
@@ -66,7 +62,6 @@ module Autoproj
|
|
66
62
|
|
67
63
|
default_gem_path = File.join(Dir.home, '.autoproj', 'gems')
|
68
64
|
@gems_install_path = default_gem_path
|
69
|
-
@autoproj_install_path = default_gem_path
|
70
65
|
end
|
71
66
|
|
72
67
|
def env_for_child
|
@@ -136,33 +131,10 @@ module Autoproj
|
|
136
131
|
relative_path_from(Pathname.new(dot_gem_dir)).to_s
|
137
132
|
end
|
138
133
|
|
139
|
-
# The path into which autoproj and its dependencies should be installed
|
140
|
-
#
|
141
|
-
# They are installed in a versioned subdirectory of this path, e.g.
|
142
|
-
# {#gem_path_suffix}. It is always absolute.
|
143
|
-
#
|
144
|
-
# @return [String]
|
145
|
-
attr_reader :autoproj_install_path
|
146
|
-
# The GEM_HOME into which the autoproj gems should be installed
|
147
|
-
def autoproj_gem_home; File.join(autoproj_install_path, gem_path_suffix) end
|
148
|
-
# Sets the place where autoproj should be installed
|
149
|
-
#
|
150
|
-
# @param [String] path Sets the path given to bundler, i.e. the
|
151
|
-
# gems will be installed under the {#gem_path_suffix}
|
152
|
-
def autoproj_install_path=(path)
|
153
|
-
@autoproj_install_path = File.expand_path(path)
|
154
|
-
end
|
155
|
-
# Install autoproj in Gem's default user dir
|
156
|
-
def install_autoproj_in_gem_user_dir
|
157
|
-
@autoproj_install_path = File.join(Gem.user_home, '.gem')
|
158
|
-
end
|
159
|
-
|
160
134
|
# The path into which the workspace's gems should be installed
|
161
135
|
#
|
162
136
|
# They are installed in a versioned subdirectory of this path, e.g.
|
163
|
-
# {#gem_path_suffix}.
|
164
|
-
# relative, in which case it is relative to the workspace's prefix
|
165
|
-
# directory.
|
137
|
+
# {#gem_path_suffix}.
|
166
138
|
#
|
167
139
|
# @return [String]
|
168
140
|
attr_reader :gems_install_path
|
@@ -190,7 +162,7 @@ module Autoproj
|
|
190
162
|
# (see #prefer_index_over_os_packages?)
|
191
163
|
def prefer_indep_over_os_packages=(flag); @prefer_indep_over_os_packages = !!flag end
|
192
164
|
|
193
|
-
def guess_gem_program
|
165
|
+
def self.guess_gem_program
|
194
166
|
ruby_bin = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
195
167
|
ruby_bindir = RbConfig::CONFIG['bindir']
|
196
168
|
|
@@ -225,25 +197,24 @@ module Autoproj
|
|
225
197
|
@local = true
|
226
198
|
end
|
227
199
|
opt.on '--gem-source=URL', String, "use this source for RubyGems instead of rubygems.org" do |url|
|
228
|
-
|
200
|
+
@gem_source = url
|
229
201
|
end
|
230
|
-
opt.on '--
|
231
|
-
|
232
|
-
self.autoproj_install_path = path
|
233
|
-
self.gems_install_path = path
|
234
|
-
else
|
235
|
-
self.install_autoproj_in_gem_user_dir
|
236
|
-
self.install_gems_in_gem_user_dir
|
237
|
-
end
|
202
|
+
opt.on '--gems-path=PATH', "install gems under this path instead of ~/.autoproj/gems" do |path|
|
203
|
+
self.gems_install_path = path
|
238
204
|
end
|
239
|
-
opt.on '--
|
240
|
-
self.
|
241
|
-
self.gems_install_path = 'gems'
|
205
|
+
opt.on '--public-gems', "install gems in the default gem location" do
|
206
|
+
self.install_gems_in_gem_user_dir
|
242
207
|
end
|
243
208
|
opt.on '--version=VERSION_CONSTRAINT', String, 'use the provided string as a version constraint for autoproj' do |version|
|
209
|
+
if @gemfile
|
210
|
+
raise "cannot give both --version and --gemfile"
|
211
|
+
end
|
244
212
|
@gemfile = default_gemfile_contents(version)
|
245
213
|
end
|
246
214
|
opt.on '--gemfile=PATH', String, 'use the given Gemfile to install autoproj instead of the default' do |path|
|
215
|
+
if @gemfile
|
216
|
+
raise "cannot give both --version and --gemfile"
|
217
|
+
end
|
247
218
|
@gemfile = File.read(path)
|
248
219
|
end
|
249
220
|
opt.on '--seed-config=PATH', String, 'path to a seed file that should be used to initialize the configuration' do |path|
|
@@ -274,7 +245,7 @@ module Autoproj
|
|
274
245
|
out: '/dev/null')
|
275
246
|
return if !result
|
276
247
|
|
277
|
-
bundler_path = File.join(
|
248
|
+
bundler_path = File.join(gems_gem_home, 'bin', 'bundler')
|
278
249
|
if File.exist?(bundler_path)
|
279
250
|
bundler_path
|
280
251
|
end
|
@@ -287,14 +258,14 @@ module Autoproj
|
|
287
258
|
env_for_child,
|
288
259
|
Gem.ruby, gem_program, 'install', '--env-shebang', '--no-document', '--no-format-executable', '--clear-sources', '--source', gem_source,
|
289
260
|
*local,
|
290
|
-
"--bindir=#{File.join(
|
261
|
+
"--bindir=#{File.join(gems_gem_home, 'bin')}", 'bundler')
|
291
262
|
|
292
263
|
if !result
|
293
|
-
STDERR.puts "FATAL: failed to install bundler in #{
|
264
|
+
STDERR.puts "FATAL: failed to install bundler in #{gems_gem_home}"
|
294
265
|
nil
|
295
266
|
end
|
296
267
|
|
297
|
-
bundler_path = File.join(
|
268
|
+
bundler_path = File.join(gems_gem_home, 'bin', 'bundler')
|
298
269
|
if File.exist?(bundler_path)
|
299
270
|
bundler_path
|
300
271
|
else
|
@@ -315,7 +286,7 @@ module Autoproj
|
|
315
286
|
|
316
287
|
opts = Array.new
|
317
288
|
opts << '--local' if local?
|
318
|
-
opts << "--path=#{
|
289
|
+
opts << "--path=#{gems_install_path}"
|
319
290
|
shims_path = File.join(dot_autoproj, 'bin')
|
320
291
|
result = system(clean_env,
|
321
292
|
Gem.ruby, bundler, 'install',
|
@@ -329,39 +300,69 @@ module Autoproj
|
|
329
300
|
exit 1
|
330
301
|
end
|
331
302
|
ensure
|
332
|
-
self.class.
|
303
|
+
self.class.rewrite_shims(shims_path, ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
333
304
|
end
|
334
305
|
|
335
|
-
def self.
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
end
|
306
|
+
def self.rewrite_shims(shim_path, ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
307
|
+
FileUtils.mkdir_p shim_path
|
308
|
+
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
309
|
+
io.puts "#! /bin/sh"
|
310
|
+
io.puts "exec #{ruby_executable} \"$@\""
|
341
311
|
end
|
312
|
+
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
342
313
|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
io.write filtered.join("")
|
314
|
+
FileUtils.touch File.join(shim_path, 'bundler')
|
315
|
+
FileUtils.touch File.join(shim_path, 'bundle')
|
316
|
+
Dir.glob(File.join(shim_path, '*')) do |bin_script|
|
317
|
+
next if !File.file?(bin_script)
|
318
|
+
bin_name = File.basename(bin_script)
|
319
|
+
next if bin_name == 'ruby'
|
320
|
+
|
321
|
+
bin_shim = File.join(shim_path, bin_name)
|
322
|
+
bin_script_lines = File.readlines(bin_script)
|
323
|
+
File.open(bin_shim, 'w') do |io|
|
324
|
+
if bin_name == 'bundler' || bin_name == 'bundle'
|
325
|
+
io.puts shim_bundler(ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
326
|
+
else
|
327
|
+
load_line = bin_script_lines.grep(/load Gem.bin_path/).first
|
328
|
+
io.puts shim_script(ruby_executable, autoproj_gemfile_path, gems_gem_home, load_line)
|
329
|
+
end
|
360
330
|
end
|
331
|
+
FileUtils.chmod 0755, bin_shim
|
361
332
|
end
|
333
|
+
end
|
362
334
|
|
363
|
-
|
364
|
-
|
335
|
+
def self.shim_bundler(ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
336
|
+
"#! #{ruby_executable}
|
337
|
+
|
338
|
+
if defined?(Bundler)
|
339
|
+
Bundler.with_clean_env do
|
340
|
+
exec($0, *ARGV)
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
ENV.delete('BUNDLE_GEMFILE')
|
345
|
+
ENV['GEM_HOME'] = '#{gems_gem_home}'
|
346
|
+
ENV.delete('GEM_PATH')
|
347
|
+
Gem.paths = Hash['GEM_HOME' => '#{gems_gem_home}', 'GEM_PATH' => '']
|
348
|
+
|
349
|
+
load Gem.bin_path('bundler', 'bundler')"
|
350
|
+
end
|
351
|
+
|
352
|
+
def self.shim_script(ruby_executable, autoproj_gemfile_path, gems_gem_home, load_line)
|
353
|
+
"#! #{ruby_executable}
|
354
|
+
|
355
|
+
if defined?(Bundler)
|
356
|
+
Bundler.with_clean_env do
|
357
|
+
exec($0, *ARGV)
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
ENV['BUNDLE_GEMFILE'] = '#{autoproj_gemfile_path}'
|
362
|
+
require 'rubygems'
|
363
|
+
Gem.paths = Hash['GEM_HOME' => '#{gems_gem_home}', 'GEM_PATH' => '']
|
364
|
+
require 'bundler/setup'
|
365
|
+
#{load_line}"
|
365
366
|
end
|
366
367
|
|
367
368
|
def save_env_sh(*vars)
|
@@ -392,6 +393,15 @@ module Autoproj
|
|
392
393
|
end
|
393
394
|
|
394
395
|
def save_gemfile
|
396
|
+
gemfile =
|
397
|
+
if @gemfile
|
398
|
+
@gemfile
|
399
|
+
elsif File.file?(autoproj_gemfile_path)
|
400
|
+
File.read(autoproj_gemfile_path)
|
401
|
+
else
|
402
|
+
default_gemfile_contents
|
403
|
+
end
|
404
|
+
|
395
405
|
FileUtils.mkdir_p File.dirname(autoproj_gemfile_path)
|
396
406
|
File.open(autoproj_gemfile_path, 'w') do |io|
|
397
407
|
io.write gemfile
|
@@ -434,46 +444,32 @@ module Autoproj
|
|
434
444
|
end
|
435
445
|
end
|
436
446
|
|
437
|
-
def self.save_ruby_and_bundler_shims(shim_path, ruby_executable, bundler_path)
|
438
|
-
FileUtils.mkdir_p shim_path
|
439
|
-
bundler_rubylib = File.expand_path(File.join('..', '..', 'lib'), bundler_path)
|
440
|
-
File.open(File.join(shim_path, 'bundler'), 'w') do |io|
|
441
|
-
io.puts "#! /bin/sh"
|
442
|
-
io.puts "exec #{ruby_executable} #{bundler_path} \"$@\""
|
443
|
-
end
|
444
|
-
FileUtils.chmod 0755, File.join(shim_path, 'bundler')
|
445
|
-
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
446
|
-
io.puts "#! /bin/sh"
|
447
|
-
io.puts "exec #{ruby_executable} \"$@\""
|
448
|
-
end
|
449
|
-
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
450
|
-
end
|
451
|
-
|
452
447
|
def install
|
453
448
|
if ENV['BUNDLER_GEMFILE']
|
454
449
|
raise "cannot run autoproj_install or autoproj_bootstrap while under a 'bundler exec' subcommand or having loaded an env.sh. Open a new console and try again"
|
455
450
|
end
|
456
451
|
|
457
|
-
gem_program = guess_gem_program
|
452
|
+
gem_program = self.class.guess_gem_program
|
458
453
|
puts "Detected 'gem' to be #{gem_program}"
|
459
|
-
env['GEM_HOME'] = [
|
454
|
+
env['GEM_HOME'] = [gems_gem_home]
|
460
455
|
|
461
456
|
if bundler = find_bundler(gem_program)
|
462
457
|
puts "Detected bundler at #{bundler}"
|
463
458
|
else
|
464
|
-
puts "Installing bundler in #{
|
459
|
+
puts "Installing bundler in #{gems_gem_home}"
|
465
460
|
if !(bundler = install_bundler(gem_program))
|
466
461
|
exit 1
|
467
462
|
end
|
468
463
|
end
|
469
|
-
self.class.
|
464
|
+
self.class.rewrite_shims(
|
470
465
|
File.join(dot_autoproj, 'bin'),
|
471
466
|
ruby_executable,
|
472
|
-
|
467
|
+
autoproj_gemfile_path,
|
468
|
+
gems_gem_home)
|
473
469
|
env['PATH'].unshift File.join(dot_autoproj, 'bin')
|
474
470
|
save_gemfile
|
475
471
|
|
476
|
-
puts "Installing autoproj in #{
|
472
|
+
puts "Installing autoproj in #{gems_gem_home}"
|
477
473
|
install_autoproj(bundler)
|
478
474
|
end
|
479
475
|
|
@@ -500,13 +496,12 @@ module Autoproj
|
|
500
496
|
end
|
501
497
|
|
502
498
|
@config = config
|
503
|
-
%w{
|
499
|
+
%w{gems_install_path prefer_indep_over_os_packages}.each do |flag|
|
504
500
|
instance_variable_set "@#{flag}", config.fetch(flag, false)
|
505
501
|
end
|
506
502
|
end
|
507
503
|
|
508
504
|
def save_config
|
509
|
-
config['autoproj_install_path'] = autoproj_install_path
|
510
505
|
config['gems_install_path'] = gems_install_path
|
511
506
|
config['prefer_indep_over_os_packages'] = prefer_indep_over_os_packages?
|
512
507
|
File.open(autoproj_config_path, 'w') { |io| YAML.dump(config, io) }
|
@@ -551,13 +546,13 @@ module Autoproj
|
|
551
546
|
require 'autobuild'
|
552
547
|
puts "saving env.sh and .autoproj/env.sh"
|
553
548
|
save_env_sh(*vars)
|
554
|
-
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options)
|
549
|
+
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options, '--debug')
|
555
550
|
STDERR.puts "failed to run autoproj envsh on the newly installed autoproj (#{autoproj_path})"
|
556
551
|
exit 1
|
557
552
|
end
|
558
553
|
# This is really needed on an existing install to install the
|
559
554
|
# gems that were present in the v1 layout
|
560
|
-
if !system(Gem.ruby, autoproj_path, 'osdeps')
|
555
|
+
if !system(Gem.ruby, autoproj_path, 'osdeps', '--debug')
|
561
556
|
STDERR.puts "failed to run autoproj osdeps on the newly installed autoproj (#{autoproj_path})"
|
562
557
|
exit 1
|
563
558
|
end
|
data/bin/autoproj_install
CHANGED
@@ -41,12 +41,8 @@ module Autoproj
|
|
41
41
|
|
42
42
|
def initialize(root_dir)
|
43
43
|
@root_dir = root_dir
|
44
|
-
if File.file?(autoproj_gemfile_path)
|
45
|
-
@gemfile = File.read(autoproj_gemfile_path)
|
46
|
-
else
|
47
|
-
@gemfile = default_gemfile_contents
|
48
|
-
end
|
49
44
|
@gem_source = "https://rubygems.org"
|
45
|
+
@gemfile = nil
|
50
46
|
|
51
47
|
@autoproj_options = Array.new
|
52
48
|
|
@@ -66,7 +62,6 @@ module Autoproj
|
|
66
62
|
|
67
63
|
default_gem_path = File.join(Dir.home, '.autoproj', 'gems')
|
68
64
|
@gems_install_path = default_gem_path
|
69
|
-
@autoproj_install_path = default_gem_path
|
70
65
|
end
|
71
66
|
|
72
67
|
def env_for_child
|
@@ -136,33 +131,10 @@ module Autoproj
|
|
136
131
|
relative_path_from(Pathname.new(dot_gem_dir)).to_s
|
137
132
|
end
|
138
133
|
|
139
|
-
# The path into which autoproj and its dependencies should be installed
|
140
|
-
#
|
141
|
-
# They are installed in a versioned subdirectory of this path, e.g.
|
142
|
-
# {#gem_path_suffix}. It is always absolute.
|
143
|
-
#
|
144
|
-
# @return [String]
|
145
|
-
attr_reader :autoproj_install_path
|
146
|
-
# The GEM_HOME into which the autoproj gems should be installed
|
147
|
-
def autoproj_gem_home; File.join(autoproj_install_path, gem_path_suffix) end
|
148
|
-
# Sets the place where autoproj should be installed
|
149
|
-
#
|
150
|
-
# @param [String] path Sets the path given to bundler, i.e. the
|
151
|
-
# gems will be installed under the {#gem_path_suffix}
|
152
|
-
def autoproj_install_path=(path)
|
153
|
-
@autoproj_install_path = File.expand_path(path)
|
154
|
-
end
|
155
|
-
# Install autoproj in Gem's default user dir
|
156
|
-
def install_autoproj_in_gem_user_dir
|
157
|
-
@autoproj_install_path = File.join(Gem.user_home, '.gem')
|
158
|
-
end
|
159
|
-
|
160
134
|
# The path into which the workspace's gems should be installed
|
161
135
|
#
|
162
136
|
# They are installed in a versioned subdirectory of this path, e.g.
|
163
|
-
# {#gem_path_suffix}.
|
164
|
-
# relative, in which case it is relative to the workspace's prefix
|
165
|
-
# directory.
|
137
|
+
# {#gem_path_suffix}.
|
166
138
|
#
|
167
139
|
# @return [String]
|
168
140
|
attr_reader :gems_install_path
|
@@ -190,7 +162,7 @@ module Autoproj
|
|
190
162
|
# (see #prefer_index_over_os_packages?)
|
191
163
|
def prefer_indep_over_os_packages=(flag); @prefer_indep_over_os_packages = !!flag end
|
192
164
|
|
193
|
-
def guess_gem_program
|
165
|
+
def self.guess_gem_program
|
194
166
|
ruby_bin = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
195
167
|
ruby_bindir = RbConfig::CONFIG['bindir']
|
196
168
|
|
@@ -225,25 +197,24 @@ module Autoproj
|
|
225
197
|
@local = true
|
226
198
|
end
|
227
199
|
opt.on '--gem-source=URL', String, "use this source for RubyGems instead of rubygems.org" do |url|
|
228
|
-
|
200
|
+
@gem_source = url
|
229
201
|
end
|
230
|
-
opt.on '--
|
231
|
-
|
232
|
-
self.autoproj_install_path = path
|
233
|
-
self.gems_install_path = path
|
234
|
-
else
|
235
|
-
self.install_autoproj_in_gem_user_dir
|
236
|
-
self.install_gems_in_gem_user_dir
|
237
|
-
end
|
202
|
+
opt.on '--gems-path=PATH', "install gems under this path instead of ~/.autoproj/gems" do |path|
|
203
|
+
self.gems_install_path = path
|
238
204
|
end
|
239
|
-
opt.on '--
|
240
|
-
self.
|
241
|
-
self.gems_install_path = 'gems'
|
205
|
+
opt.on '--public-gems', "install gems in the default gem location" do
|
206
|
+
self.install_gems_in_gem_user_dir
|
242
207
|
end
|
243
208
|
opt.on '--version=VERSION_CONSTRAINT', String, 'use the provided string as a version constraint for autoproj' do |version|
|
209
|
+
if @gemfile
|
210
|
+
raise "cannot give both --version and --gemfile"
|
211
|
+
end
|
244
212
|
@gemfile = default_gemfile_contents(version)
|
245
213
|
end
|
246
214
|
opt.on '--gemfile=PATH', String, 'use the given Gemfile to install autoproj instead of the default' do |path|
|
215
|
+
if @gemfile
|
216
|
+
raise "cannot give both --version and --gemfile"
|
217
|
+
end
|
247
218
|
@gemfile = File.read(path)
|
248
219
|
end
|
249
220
|
opt.on '--seed-config=PATH', String, 'path to a seed file that should be used to initialize the configuration' do |path|
|
@@ -274,7 +245,7 @@ module Autoproj
|
|
274
245
|
out: '/dev/null')
|
275
246
|
return if !result
|
276
247
|
|
277
|
-
bundler_path = File.join(
|
248
|
+
bundler_path = File.join(gems_gem_home, 'bin', 'bundler')
|
278
249
|
if File.exist?(bundler_path)
|
279
250
|
bundler_path
|
280
251
|
end
|
@@ -287,14 +258,14 @@ module Autoproj
|
|
287
258
|
env_for_child,
|
288
259
|
Gem.ruby, gem_program, 'install', '--env-shebang', '--no-document', '--no-format-executable', '--clear-sources', '--source', gem_source,
|
289
260
|
*local,
|
290
|
-
"--bindir=#{File.join(
|
261
|
+
"--bindir=#{File.join(gems_gem_home, 'bin')}", 'bundler')
|
291
262
|
|
292
263
|
if !result
|
293
|
-
STDERR.puts "FATAL: failed to install bundler in #{
|
264
|
+
STDERR.puts "FATAL: failed to install bundler in #{gems_gem_home}"
|
294
265
|
nil
|
295
266
|
end
|
296
267
|
|
297
|
-
bundler_path = File.join(
|
268
|
+
bundler_path = File.join(gems_gem_home, 'bin', 'bundler')
|
298
269
|
if File.exist?(bundler_path)
|
299
270
|
bundler_path
|
300
271
|
else
|
@@ -315,7 +286,7 @@ module Autoproj
|
|
315
286
|
|
316
287
|
opts = Array.new
|
317
288
|
opts << '--local' if local?
|
318
|
-
opts << "--path=#{
|
289
|
+
opts << "--path=#{gems_install_path}"
|
319
290
|
shims_path = File.join(dot_autoproj, 'bin')
|
320
291
|
result = system(clean_env,
|
321
292
|
Gem.ruby, bundler, 'install',
|
@@ -329,39 +300,69 @@ module Autoproj
|
|
329
300
|
exit 1
|
330
301
|
end
|
331
302
|
ensure
|
332
|
-
self.class.
|
303
|
+
self.class.rewrite_shims(shims_path, ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
333
304
|
end
|
334
305
|
|
335
|
-
def self.
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
end
|
306
|
+
def self.rewrite_shims(shim_path, ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
307
|
+
FileUtils.mkdir_p shim_path
|
308
|
+
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
309
|
+
io.puts "#! /bin/sh"
|
310
|
+
io.puts "exec #{ruby_executable} \"$@\""
|
341
311
|
end
|
312
|
+
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
342
313
|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
io.write filtered.join("")
|
314
|
+
FileUtils.touch File.join(shim_path, 'bundler')
|
315
|
+
FileUtils.touch File.join(shim_path, 'bundle')
|
316
|
+
Dir.glob(File.join(shim_path, '*')) do |bin_script|
|
317
|
+
next if !File.file?(bin_script)
|
318
|
+
bin_name = File.basename(bin_script)
|
319
|
+
next if bin_name == 'ruby'
|
320
|
+
|
321
|
+
bin_shim = File.join(shim_path, bin_name)
|
322
|
+
bin_script_lines = File.readlines(bin_script)
|
323
|
+
File.open(bin_shim, 'w') do |io|
|
324
|
+
if bin_name == 'bundler' || bin_name == 'bundle'
|
325
|
+
io.puts shim_bundler(ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
326
|
+
else
|
327
|
+
load_line = bin_script_lines.grep(/load Gem.bin_path/).first
|
328
|
+
io.puts shim_script(ruby_executable, autoproj_gemfile_path, gems_gem_home, load_line)
|
329
|
+
end
|
360
330
|
end
|
331
|
+
FileUtils.chmod 0755, bin_shim
|
361
332
|
end
|
333
|
+
end
|
362
334
|
|
363
|
-
|
364
|
-
|
335
|
+
def self.shim_bundler(ruby_executable, autoproj_gemfile_path, gems_gem_home)
|
336
|
+
"#! #{ruby_executable}
|
337
|
+
|
338
|
+
if defined?(Bundler)
|
339
|
+
Bundler.with_clean_env do
|
340
|
+
exec($0, *ARGV)
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
ENV.delete('BUNDLE_GEMFILE')
|
345
|
+
ENV['GEM_HOME'] = '#{gems_gem_home}'
|
346
|
+
ENV.delete('GEM_PATH')
|
347
|
+
Gem.paths = Hash['GEM_HOME' => '#{gems_gem_home}', 'GEM_PATH' => '']
|
348
|
+
|
349
|
+
load Gem.bin_path('bundler', 'bundler')"
|
350
|
+
end
|
351
|
+
|
352
|
+
def self.shim_script(ruby_executable, autoproj_gemfile_path, gems_gem_home, load_line)
|
353
|
+
"#! #{ruby_executable}
|
354
|
+
|
355
|
+
if defined?(Bundler)
|
356
|
+
Bundler.with_clean_env do
|
357
|
+
exec($0, *ARGV)
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
ENV['BUNDLE_GEMFILE'] = '#{autoproj_gemfile_path}'
|
362
|
+
require 'rubygems'
|
363
|
+
Gem.paths = Hash['GEM_HOME' => '#{gems_gem_home}', 'GEM_PATH' => '']
|
364
|
+
require 'bundler/setup'
|
365
|
+
#{load_line}"
|
365
366
|
end
|
366
367
|
|
367
368
|
def save_env_sh(*vars)
|
@@ -392,6 +393,15 @@ module Autoproj
|
|
392
393
|
end
|
393
394
|
|
394
395
|
def save_gemfile
|
396
|
+
gemfile =
|
397
|
+
if @gemfile
|
398
|
+
@gemfile
|
399
|
+
elsif File.file?(autoproj_gemfile_path)
|
400
|
+
File.read(autoproj_gemfile_path)
|
401
|
+
else
|
402
|
+
default_gemfile_contents
|
403
|
+
end
|
404
|
+
|
395
405
|
FileUtils.mkdir_p File.dirname(autoproj_gemfile_path)
|
396
406
|
File.open(autoproj_gemfile_path, 'w') do |io|
|
397
407
|
io.write gemfile
|
@@ -434,46 +444,32 @@ module Autoproj
|
|
434
444
|
end
|
435
445
|
end
|
436
446
|
|
437
|
-
def self.save_ruby_and_bundler_shims(shim_path, ruby_executable, bundler_path)
|
438
|
-
FileUtils.mkdir_p shim_path
|
439
|
-
bundler_rubylib = File.expand_path(File.join('..', '..', 'lib'), bundler_path)
|
440
|
-
File.open(File.join(shim_path, 'bundler'), 'w') do |io|
|
441
|
-
io.puts "#! /bin/sh"
|
442
|
-
io.puts "exec #{ruby_executable} #{bundler_path} \"$@\""
|
443
|
-
end
|
444
|
-
FileUtils.chmod 0755, File.join(shim_path, 'bundler')
|
445
|
-
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
446
|
-
io.puts "#! /bin/sh"
|
447
|
-
io.puts "exec #{ruby_executable} \"$@\""
|
448
|
-
end
|
449
|
-
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
450
|
-
end
|
451
|
-
|
452
447
|
def install
|
453
448
|
if ENV['BUNDLER_GEMFILE']
|
454
449
|
raise "cannot run autoproj_install or autoproj_bootstrap while under a 'bundler exec' subcommand or having loaded an env.sh. Open a new console and try again"
|
455
450
|
end
|
456
451
|
|
457
|
-
gem_program = guess_gem_program
|
452
|
+
gem_program = self.class.guess_gem_program
|
458
453
|
puts "Detected 'gem' to be #{gem_program}"
|
459
|
-
env['GEM_HOME'] = [
|
454
|
+
env['GEM_HOME'] = [gems_gem_home]
|
460
455
|
|
461
456
|
if bundler = find_bundler(gem_program)
|
462
457
|
puts "Detected bundler at #{bundler}"
|
463
458
|
else
|
464
|
-
puts "Installing bundler in #{
|
459
|
+
puts "Installing bundler in #{gems_gem_home}"
|
465
460
|
if !(bundler = install_bundler(gem_program))
|
466
461
|
exit 1
|
467
462
|
end
|
468
463
|
end
|
469
|
-
self.class.
|
464
|
+
self.class.rewrite_shims(
|
470
465
|
File.join(dot_autoproj, 'bin'),
|
471
466
|
ruby_executable,
|
472
|
-
|
467
|
+
autoproj_gemfile_path,
|
468
|
+
gems_gem_home)
|
473
469
|
env['PATH'].unshift File.join(dot_autoproj, 'bin')
|
474
470
|
save_gemfile
|
475
471
|
|
476
|
-
puts "Installing autoproj in #{
|
472
|
+
puts "Installing autoproj in #{gems_gem_home}"
|
477
473
|
install_autoproj(bundler)
|
478
474
|
end
|
479
475
|
|
@@ -500,13 +496,12 @@ module Autoproj
|
|
500
496
|
end
|
501
497
|
|
502
498
|
@config = config
|
503
|
-
%w{
|
499
|
+
%w{gems_install_path prefer_indep_over_os_packages}.each do |flag|
|
504
500
|
instance_variable_set "@#{flag}", config.fetch(flag, false)
|
505
501
|
end
|
506
502
|
end
|
507
503
|
|
508
504
|
def save_config
|
509
|
-
config['autoproj_install_path'] = autoproj_install_path
|
510
505
|
config['gems_install_path'] = gems_install_path
|
511
506
|
config['prefer_indep_over_os_packages'] = prefer_indep_over_os_packages?
|
512
507
|
File.open(autoproj_config_path, 'w') { |io| YAML.dump(config, io) }
|
@@ -551,13 +546,13 @@ module Autoproj
|
|
551
546
|
require 'autobuild'
|
552
547
|
puts "saving env.sh and .autoproj/env.sh"
|
553
548
|
save_env_sh(*vars)
|
554
|
-
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options)
|
549
|
+
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options, '--debug')
|
555
550
|
STDERR.puts "failed to run autoproj envsh on the newly installed autoproj (#{autoproj_path})"
|
556
551
|
exit 1
|
557
552
|
end
|
558
553
|
# This is really needed on an existing install to install the
|
559
554
|
# gems that were present in the v1 layout
|
560
|
-
if !system(Gem.ruby, autoproj_path, 'osdeps')
|
555
|
+
if !system(Gem.ruby, autoproj_path, 'osdeps', '--debug')
|
561
556
|
STDERR.puts "failed to run autoproj osdeps on the newly installed autoproj (#{autoproj_path})"
|
562
557
|
exit 1
|
563
558
|
end
|