autoproj 1.3.4 → 1.4.0
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.
- data/History.txt +11 -0
- data/Manifest.txt +6 -2
- data/README.txt +15 -13
- data/Rakefile +1 -1
- data/bin/autoproj +18 -8
- data/doc/guide/ext/init.rb +1 -0
- data/doc/guide/src/autoproj_bootstrap +120 -16
- data/doc/guide/src/customization.page +1 -1
- data/doc/guide/src/default.css +11 -0
- data/doc/guide/src/default.template +1 -1
- data/doc/guide/src/error_messages.page +2 -1
- data/doc/guide/src/htmldoc.metainfo +4 -0
- data/doc/guide/src/index.page +15 -13
- data/doc/guide/src/manifest.xml +14 -0
- data/doc/guide/src/{autobuild.page → package_sets/autobuild.page} +77 -11
- data/doc/guide/src/package_sets/importers.page +164 -0
- data/doc/guide/src/{source_yml.page → package_sets/index.page} +7 -2
- data/doc/guide/src/package_sets/manifest-xml.page +29 -0
- data/doc/guide/src/package_sets/osdeps.page +123 -0
- data/doc/guide/src/structure.page +43 -12
- data/lib/autoproj/autobuild.rb +81 -15
- data/lib/autoproj/default.osdeps +27 -3
- data/lib/autoproj/manifest.rb +27 -2
- data/lib/autoproj/osdeps.rb +49 -6
- data/lib/autoproj/system.rb +47 -2
- data/lib/autoproj/version.rb +1 -1
- metadata +29 -5
data/History.txt
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
= Version 1.4.0
|
2
|
+
* ruby 1.9 compatible
|
3
|
+
* fixes w.r.t. running autoproj under a Ruby interpreter that is not called
|
4
|
+
'ruby' (as ruby1.9.1 on Debian)
|
5
|
+
* packages that os-depend on 'ruby' will now depend on either ruby18 or ruby19,
|
6
|
+
depending on the ruby version used.
|
7
|
+
* add Arch-Linux support
|
8
|
+
* fixes w.r.t. the 'doc' mode. In particular, the documentation installation
|
9
|
+
now follows the layout.
|
10
|
+
* some cosmetic fixes
|
11
|
+
|
1
12
|
= Version 1.3.4
|
2
13
|
* Improve the RubyGems support
|
3
14
|
- a given osdeps name can refer to a mixture of RubyGems and OS packages
|
data/Manifest.txt
CHANGED
@@ -7,7 +7,6 @@ doc/guide/config.yaml
|
|
7
7
|
doc/guide/ext/init.rb
|
8
8
|
doc/guide/ext/previous_next.rb
|
9
9
|
doc/guide/ext/rdoc_links.rb
|
10
|
-
doc/guide/src/autobuild.page
|
11
10
|
doc/guide/src/autoproj_bootstrap
|
12
11
|
doc/guide/src/customization.page
|
13
12
|
doc/guide/src/default.css
|
@@ -21,7 +20,12 @@ doc/guide/src/images/footerbg.png
|
|
21
20
|
doc/guide/src/images/gradient1.png
|
22
21
|
doc/guide/src/images/gradient2.png
|
23
22
|
doc/guide/src/index.page
|
24
|
-
doc/guide/src/
|
23
|
+
doc/guide/src/manifest.xml
|
24
|
+
doc/guide/src/package_sets/autobuild.page
|
25
|
+
doc/guide/src/package_sets/importers.page
|
26
|
+
doc/guide/src/package_sets/index.page
|
27
|
+
doc/guide/src/package_sets/manifest-xml.page
|
28
|
+
doc/guide/src/package_sets/osdeps.page
|
25
29
|
doc/guide/src/structure.page
|
26
30
|
lib/autoproj.rb
|
27
31
|
lib/autoproj/autobuild.rb
|
data/README.txt
CHANGED
@@ -28,20 +28,22 @@ specification. More specifically, the package manifest files are common between
|
|
28
28
|
ROS package management and autoproj (more details in the following of this
|
29
29
|
document).
|
30
30
|
|
31
|
-
|
31
|
+
Overview of an autoproj installation
|
32
32
|
-------------------------------------
|
33
|
-
A autoproj installation is seeded by _package sets_. A package set is a local or remote
|
34
|
-
directory in which there is:
|
35
33
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
packages defined in the set.
|
34
|
+
The idea in an autoproj installation is that people share _definitions_ for a
|
35
|
+
set of packages that can depend on each other. Then, anyone can cherry-pick in
|
36
|
+
these definitions to build its own installation (in practice, one builds a
|
37
|
+
complete configuration per-project).
|
41
38
|
|
42
|
-
|
43
|
-
|
44
|
-
|
39
|
+
Each package definition includes:
|
40
|
+
|
41
|
+
* how to get the package's source code
|
42
|
+
* how to build the package
|
43
|
+
* on what the package depends. This can be either another package built by
|
44
|
+
autoproj, or an operating system package.
|
45
|
+
|
46
|
+
See [this page](structure.html) for more information.
|
45
47
|
|
46
48
|
Bootstrapping
|
47
49
|
-------------
|
@@ -97,6 +99,6 @@ As a guideline, we recommend that inter-package dependencies are managed by
|
|
97
99
|
using pkg-config.
|
98
100
|
|
99
101
|
To describe the package, and more importantly to setup cross-package
|
100
|
-
dependencies, an optional manifest file can be
|
101
|
-
|
102
|
+
dependencies, [an optional manifest file can be
|
103
|
+
added](package_sets/manifest-xml.html).
|
102
104
|
|
data/Rakefile
CHANGED
@@ -30,7 +30,7 @@ begin
|
|
30
30
|
if !system('doc/update_github')
|
31
31
|
raise "cannot update the gh-pages branch for GitHub"
|
32
32
|
end
|
33
|
-
if !system('git', 'push', 'origin', 'gh-pages')
|
33
|
+
if !system('git', 'push', 'origin', '+gh-pages')
|
34
34
|
raise "cannot push the documentation"
|
35
35
|
end
|
36
36
|
end
|
data/bin/autoproj
CHANGED
@@ -81,6 +81,7 @@ Additional options:
|
|
81
81
|
Autobuild.verbose = true
|
82
82
|
Rake.application.options.trace = true
|
83
83
|
debug = true
|
84
|
+
Autobuild.debug = true
|
84
85
|
end
|
85
86
|
opts.on('--nice NICE', Integer, 'nice the subprocesses to the given value') do |value|
|
86
87
|
Autobuild.nice = value
|
@@ -126,12 +127,8 @@ def display_status(packages)
|
|
126
127
|
lines = []
|
127
128
|
|
128
129
|
if !pkg.importer.respond_to?(:status)
|
129
|
-
#
|
130
|
-
|
131
|
-
next
|
132
|
-
end
|
133
|
-
|
134
|
-
if !File.directory?(pkg.srcdir)
|
130
|
+
lines << color(" the #{pkg.importer.class.name.gsub(/.*::/, '')} importer does not support status display", :bold, :red)
|
131
|
+
elsif !File.directory?(pkg.srcdir)
|
135
132
|
lines << color(" is not imported yet", :magenta)
|
136
133
|
else
|
137
134
|
status = pkg.importer.status(pkg)
|
@@ -305,7 +302,10 @@ def do_bootstrap(*args)
|
|
305
302
|
STDERR.puts "autoproj: reusing bootstrap from #{File.dirname(ENV['GEM_HOME'])}"
|
306
303
|
FileUtils.cp_r ENV['GEM_HOME'], ".gems"
|
307
304
|
ENV['GEM_HOME'] = File.join(Dir.pwd, ".gems")
|
308
|
-
|
305
|
+
|
306
|
+
require 'rbconfig'
|
307
|
+
ruby = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
308
|
+
exec ruby, $0, *ARGV
|
309
309
|
end
|
310
310
|
|
311
311
|
# If we are not getting the installation setup from a VCS, copy the template
|
@@ -377,6 +377,8 @@ end
|
|
377
377
|
Autobuild.doc_errors = false
|
378
378
|
Autobuild.do_doc = false
|
379
379
|
|
380
|
+
Autoproj::OSDependencies.autodetect_ruby
|
381
|
+
|
380
382
|
# Find the autoproj root dir
|
381
383
|
report(debug) do
|
382
384
|
case mode
|
@@ -421,6 +423,7 @@ report(debug) do
|
|
421
423
|
end
|
422
424
|
when "doc"
|
423
425
|
Autobuild.do_update = false
|
426
|
+
no_os_deps = true
|
424
427
|
Autobuild.do_doc = true
|
425
428
|
Autobuild.only_doc = true
|
426
429
|
else
|
@@ -464,7 +467,13 @@ report(debug) do
|
|
464
467
|
osdeps = Autoproj::OSDependencies.load_default
|
465
468
|
if osdeps.install(%w{autobuild autoproj})
|
466
469
|
# We updated autobuild or autoproj themselves ... Restart !
|
467
|
-
|
470
|
+
require 'rbconfig'
|
471
|
+
ruby = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
472
|
+
if mode == "bootstrap"
|
473
|
+
exec(ruby, $0, 'list-sets')
|
474
|
+
else
|
475
|
+
exec(ruby, $0, *ARGV)
|
476
|
+
end
|
468
477
|
end
|
469
478
|
|
470
479
|
manifest_path = File.join(Autoproj.config_dir, 'manifest')
|
@@ -623,6 +632,7 @@ report(debug) do
|
|
623
632
|
pkg = Autobuild::Package[pkg_name]
|
624
633
|
pkg.srcdir = File.join(srcdir, pkg_name)
|
625
634
|
pkg.prefix = prefix
|
635
|
+
pkg.doc_target_dir = File.join(Autoproj.build_dir, 'doc', name, pkg_name)
|
626
636
|
pkg.logdir = logdir
|
627
637
|
end
|
628
638
|
seen |= packages
|
data/doc/guide/ext/init.rb
CHANGED
@@ -11,6 +11,7 @@ config = Webgen::WebsiteAccess.website.config
|
|
11
11
|
|
12
12
|
config = Webgen::WebsiteAccess.website.config
|
13
13
|
config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/autoproj_bootstrap'
|
14
|
+
config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/manifest.xml'
|
14
15
|
|
15
16
|
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
16
17
|
require 'ext/rdoc_links'
|
@@ -5,18 +5,23 @@ if RUBY_VERSION < "1.8.7"
|
|
5
5
|
exit 1
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
ENV['PATH'] = "#{ENV['GEM_HOME']}/bin:#{ENV['PATH']}"
|
8
|
+
needed_gem_home = "#{Dir.pwd}/.gems"
|
10
9
|
if $LOADED_FEATURES.find { |str| str =~ /bygems/ }
|
11
|
-
ENV['
|
12
|
-
|
10
|
+
if ENV['GEM_HOME'] != needed_gem_home
|
11
|
+
require 'rbconfig'
|
12
|
+
RUBY = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
13
|
+
|
14
|
+
ENV['GEM_HOME'] = needed_gem_home
|
15
|
+
exec RUBY, __FILE__, *ARGV
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
|
-
|
19
|
+
|
20
|
+
ENV['GEM_HOME'] = needed_gem_home
|
21
|
+
ENV['PATH'] = "#{ENV['GEM_HOME']}/bin:#{ENV['PATH']}"
|
16
22
|
|
17
23
|
require 'yaml'
|
18
24
|
require 'set'
|
19
|
-
require 'rubygems'
|
20
25
|
|
21
26
|
module Autoproj
|
22
27
|
class ConfigError < RuntimeError; end
|
@@ -32,6 +37,22 @@ module Autobuild
|
|
32
37
|
def self.progress(str)
|
33
38
|
STDERR.puts " #{str}"
|
34
39
|
end
|
40
|
+
|
41
|
+
class << self
|
42
|
+
attr_reader :programs
|
43
|
+
end
|
44
|
+
@programs = Hash.new
|
45
|
+
def self.tool(name)
|
46
|
+
# Let the ability to set programs[name] to nil to make sure we don't use
|
47
|
+
# that program. This is used later on in this file to make sure we
|
48
|
+
# aren't using the wrong rubygems binary
|
49
|
+
if programs.has_key?(name)
|
50
|
+
programs[name]
|
51
|
+
else
|
52
|
+
name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
35
56
|
module Subprocess
|
36
57
|
def self.run(name, phase, *cmd)
|
37
58
|
output = `#{cmd.join(" ")}`
|
@@ -57,16 +78,36 @@ module Autoproj
|
|
57
78
|
|
58
79
|
OSDependencies.new(data)
|
59
80
|
end
|
81
|
+
|
82
|
+
class << self
|
83
|
+
attr_reader :aliases
|
84
|
+
end
|
85
|
+
@aliases = Hash.new
|
86
|
+
|
87
|
+
def self.alias(old_name, new_name)
|
88
|
+
@aliases[new_name] = old_name
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.autodetect_ruby
|
92
|
+
ruby_package =
|
93
|
+
if RUBY_VERSION < "1.9.0" then "ruby18"
|
94
|
+
else "ruby19"
|
95
|
+
end
|
96
|
+
self.alias(ruby_package, "ruby")
|
97
|
+
end
|
98
|
+
|
60
99
|
AUTOPROJ_OSDEPS = File.join(File.expand_path(File.dirname(__FILE__)), 'default.osdeps')
|
61
100
|
def self.load_default
|
62
101
|
@default_osdeps ||= OSDependencies.load(AUTOPROJ_OSDEPS)
|
63
102
|
end
|
64
103
|
|
65
104
|
attr_reader :definitions
|
66
|
-
|
105
|
+
def gem_fetcher
|
106
|
+
@gem_fetcher ||= Gem::SpecFetcher.fetcher
|
107
|
+
end
|
108
|
+
|
67
109
|
def initialize(defs = Hash.new)
|
68
110
|
@definitions = defs.to_hash
|
69
|
-
@gem_fetcher = Gem::SpecFetcher.fetcher
|
70
111
|
end
|
71
112
|
|
72
113
|
def merge(info)
|
@@ -95,6 +136,10 @@ module Autoproj
|
|
95
136
|
release_string =~ /^.*([^\s]+)$/
|
96
137
|
version = $1
|
97
138
|
['gentoo', [version]]
|
139
|
+
elsif File.exists?('/etc/arch-release')
|
140
|
+
codename = "Unknown"
|
141
|
+
puts "Found Arch"
|
142
|
+
['arch', [codename]]
|
98
143
|
else
|
99
144
|
raise ConfigError, "Unknown operating system"
|
100
145
|
end
|
@@ -129,7 +174,8 @@ module Autoproj
|
|
129
174
|
OS_PACKAGE_INSTALL = {
|
130
175
|
'debian' => 'apt-get install -y %s',
|
131
176
|
'ubuntu' => 'apt-get install -y %s',
|
132
|
-
'gentoo' => 'emerge --noreplace %s'
|
177
|
+
'gentoo' => 'emerge --noreplace %s',
|
178
|
+
'arch' => 'pacman -Sy --noconfirm %s'
|
133
179
|
}
|
134
180
|
|
135
181
|
def generate_os_script(dependencies)
|
@@ -192,7 +238,7 @@ module Autoproj
|
|
192
238
|
# call-seq:
|
193
239
|
# partition_packages(package_names) => os_packages, gem_packages
|
194
240
|
def partition_packages(package_set, package_osdeps = Hash.new)
|
195
|
-
package_set = package_set.to_set
|
241
|
+
package_set = package_set.map { |name| OSDependencies.aliases[name] || name }.to_set
|
196
242
|
osdeps, gems = [], []
|
197
243
|
package_set.to_set.each do |name|
|
198
244
|
pkg_def = definitions[name]
|
@@ -230,6 +276,19 @@ module Autoproj
|
|
230
276
|
return osdeps, gems
|
231
277
|
end
|
232
278
|
|
279
|
+
def guess_gem_program
|
280
|
+
if Autobuild.programs['gem']
|
281
|
+
return Autobuild.programs['gem']
|
282
|
+
end
|
283
|
+
|
284
|
+
ruby_bin = Config::CONFIG['RUBY_INSTALL_NAME']
|
285
|
+
if ruby_bin =~ /^ruby(.+)$/
|
286
|
+
Autobuild.programs['gem'] = "gem#{$1}"
|
287
|
+
else
|
288
|
+
Autobuild.programs['gem'] = "gem"
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
233
292
|
# Requests the installation of the given set of packages
|
234
293
|
def install(packages, package_osdeps = Hash.new)
|
235
294
|
osdeps, gems = partition_packages(packages, package_osdeps)
|
@@ -269,7 +328,7 @@ module Autoproj
|
|
269
328
|
if !installed.empty? && Autobuild.do_update
|
270
329
|
# Look if we can update the package ...
|
271
330
|
dep = Gem::Dependency.new(name, version_requirements)
|
272
|
-
available =
|
331
|
+
available = gem_fetcher.find_matching(dep)
|
273
332
|
installed_version = installed.map(&:version).max
|
274
333
|
available_version = available.map { |(name, v), source| v }.max
|
275
334
|
needs_update = (available_version > installed_version)
|
@@ -282,12 +341,14 @@ module Autoproj
|
|
282
341
|
|
283
342
|
# Now install what is left
|
284
343
|
if !gems.empty?
|
344
|
+
guess_gem_program
|
345
|
+
|
285
346
|
if Autoproj.verbose
|
286
347
|
STDERR.puts "Installing rubygems dependencies with"
|
287
348
|
STDERR.puts "gem install #{gems.join(" ")}"
|
288
349
|
end
|
289
350
|
Autobuild.progress "installing/updating RubyGems dependencies: #{gems.join(", ")}"
|
290
|
-
Autobuild::Subprocess.run 'autoproj', 'osdeps', 'gem', 'install', *gems
|
351
|
+
Autobuild::Subprocess.run 'autoproj', 'osdeps', Autobuild.tool('gem'), 'install', *gems
|
291
352
|
did_something ||= true
|
292
353
|
end
|
293
354
|
|
@@ -302,24 +363,44 @@ DEFS = <<EODEFS
|
|
302
363
|
# The following definitions are needed to bootstrap autoproj
|
303
364
|
none: ignore
|
304
365
|
|
305
|
-
|
366
|
+
ruby18:
|
306
367
|
debian,ubuntu:
|
307
368
|
- ruby1.8-dev
|
308
369
|
- ruby1.8
|
370
|
+
- rubygems1.8
|
371
|
+
- ri1.8
|
309
372
|
- libopenssl-ruby1.8
|
310
373
|
gentoo:
|
311
374
|
- dev-lang/ruby:1.8
|
312
375
|
|
376
|
+
ruby19:
|
377
|
+
debian,ubuntu:
|
378
|
+
- ruby1.9.1
|
379
|
+
- ruby1.9.1-dev
|
380
|
+
- rubygems1.9.1
|
381
|
+
- ri1.9.1
|
382
|
+
- libopenssl-ruby1.9.1
|
383
|
+
gentoo:
|
384
|
+
- dev-lang/ruby:1.9
|
385
|
+
arch:
|
386
|
+
- ruby
|
387
|
+
|
388
|
+
rdoc: gem
|
389
|
+
|
313
390
|
build-essential:
|
314
391
|
debian,ubuntu: build-essential
|
315
392
|
gentoo:
|
393
|
+
arch:
|
316
394
|
|
317
395
|
libxml2:
|
318
396
|
debian,ubuntu: libxml2-dev
|
319
397
|
gentoo: dev-libs/libxml2
|
398
|
+
arch: libxml2
|
399
|
+
|
320
400
|
libxslt:
|
321
401
|
debian,ubuntu: libxslt1-dev
|
322
402
|
gentoo: dev-libs/libxslt
|
403
|
+
arch: libxslt
|
323
404
|
|
324
405
|
autobuild: gem
|
325
406
|
autoproj: gem
|
@@ -328,35 +409,58 @@ autoproj: gem
|
|
328
409
|
git:
|
329
410
|
debian,ubuntu: git-core
|
330
411
|
gentoo: dev-util/git
|
331
|
-
|
412
|
+
arch: git
|
332
413
|
svn:
|
333
414
|
debian,ubuntu: subversion
|
334
415
|
gentoo: dev-util/subversion
|
335
|
-
|
416
|
+
arch: subversion
|
336
417
|
cmake:
|
337
418
|
debian,ubuntu: cmake
|
338
419
|
gentoo: dev-util/cmake
|
420
|
+
arch: cmake
|
339
421
|
|
340
422
|
autotools:
|
341
423
|
debian,ubuntu: [automake1.9, autoconf]
|
342
424
|
gentoo: [sys-devel/automake:1.9, sys-devel/autoconf]
|
425
|
+
arch: automake autoconf
|
343
426
|
|
344
427
|
lsb_release:
|
345
428
|
debian,ubuntu: lsb-release
|
346
429
|
gentoo: sys-apps/lsb-release
|
430
|
+
arch:
|
347
431
|
|
348
432
|
archive:
|
349
433
|
debian,ubuntu: [tar, unzip]
|
350
434
|
gentoo: [app-arch/tar, app-arch/unzip]
|
435
|
+
arch: [tar, unzip]
|
351
436
|
|
352
437
|
# vim: expandtab
|
353
438
|
|
354
439
|
|
355
440
|
EODEFS
|
356
441
|
|
357
|
-
|
442
|
+
# First thing we do is install a proper ruby environment. We make sure that we
|
443
|
+
# aren't installing any gems for now (as we need to choose the right gem
|
444
|
+
# binary) by setting Autobuild.programs['gem'] to nil
|
445
|
+
Autobuild.programs['gem'] = nil
|
446
|
+
Autoproj::OSDependencies.autodetect_ruby
|
447
|
+
|
448
|
+
begin
|
449
|
+
osdeps_management = Autoproj::OSDependencies.new(YAML.load(DEFS))
|
450
|
+
STDERR.puts "autoproj: installing a proper Ruby environment (this can take a long time)"
|
451
|
+
osdeps_management.install(['ruby'])
|
452
|
+
rescue Autoproj::ConfigError => e
|
453
|
+
STDERR.puts "failed: #{e.message}"
|
454
|
+
exit(1)
|
455
|
+
end
|
456
|
+
|
457
|
+
# Now try to find out the name of the gem binary
|
458
|
+
PACKAGES = %w{rdoc libxml2 libxslt build-essential lsb_release}
|
358
459
|
USER_PACKAGES = %w{autoproj}
|
359
460
|
|
461
|
+
ENV['RUBYOPT'] = "-rubygems"
|
462
|
+
require 'rubygems'
|
463
|
+
|
360
464
|
packages = PACKAGES.dup
|
361
465
|
if ARGV.first != "dev"
|
362
466
|
packages += USER_PACKAGES
|
@@ -105,7 +105,7 @@ Local overrides of version control information
|
|
105
105
|
|
106
106
|
The <tt>autoproj/overrides.yml</tt> allows you to override version control information
|
107
107
|
for specific packages. It has the same format than the source.yml file of
|
108
|
-
package sets, so [check that page out](
|
108
|
+
package sets, so [check that page out](package_sets/importers.html) for more information.
|
109
109
|
|
110
110
|
This file can in particular be used to avoid further updates to a given software
|
111
111
|
package. Simply do:
|