autoproj 2.0.0.rc32 → 2.0.0.rc33
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.
- 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
|