autoproj 1.2.6 → 1.3.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 +4 -0
- data/Manifest.txt +1 -0
- data/README.txt +32 -9
- data/bin/autoproj +225 -176
- data/doc/guide/src/autobuild.page +1 -1
- data/doc/guide/src/customization.page +5 -5
- data/doc/guide/src/error_messages.page +16 -0
- data/doc/guide/src/index.page +32 -9
- data/doc/guide/src/source_yml.page +38 -17
- data/doc/guide/src/structure.page +1 -1
- data/lib/autoproj/autobuild.rb +6 -0
- data/lib/autoproj/default.osdeps +6 -0
- data/lib/autoproj/manifest.rb +147 -42
- data/lib/autoproj/osdeps.rb +16 -7
- data/lib/autoproj/system.rb +8 -2
- data/lib/autoproj/version.rb +1 -1
- data/samples/autoproj/manifest +5 -1
- metadata +3 -2
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -12,6 +12,7 @@ doc/guide/src/autoproj_bootstrap
|
|
12
12
|
doc/guide/src/customization.page
|
13
13
|
doc/guide/src/default.css
|
14
14
|
doc/guide/src/default.template
|
15
|
+
doc/guide/src/error_messages.page
|
15
16
|
doc/guide/src/htmldoc.metainfo
|
16
17
|
doc/guide/src/htmldoc.virtual
|
17
18
|
doc/guide/src/images/bodybg.png
|
data/README.txt
CHANGED
@@ -32,14 +32,16 @@ Components of an Autoproj installation
|
|
32
32
|
-------------------------------------
|
33
33
|
A autoproj installation is seeded by _package sets_. A package set is a local or remote
|
34
34
|
directory in which there is:
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
*
|
40
|
-
packages
|
41
|
-
|
42
|
-
|
35
|
+
|
36
|
+
* a list of available packages, and information on how to build these packages.
|
37
|
+
This list, and the build information, are Ruby scripts that use the autobuild
|
38
|
+
API. [More ...](autobuild.html)
|
39
|
+
* version control information: where to get the source code for each of the
|
40
|
+
packages defined in the set.
|
41
|
+
|
42
|
+
Then, an autoproj configuration is simply a list of package sets (i.e. a list of
|
43
|
+
packages that are available to build), and a file that selects which packages
|
44
|
+
should be built. This file is the <tt>manifest</tt>.
|
43
45
|
|
44
46
|
Bootstrapping
|
45
47
|
-------------
|
@@ -59,7 +61,28 @@ The canonical way is the following:
|
|
59
61
|
ruby autoproj\_bootstrap
|
60
62
|
{.cmdline}
|
61
63
|
|
62
|
-
* follow the instructions printed by the script
|
64
|
+
* follow the instructions printed by the script<tt>manifest</tt>.
|
65
|
+
|
66
|
+
Additionally, if you are given a reference to a source code repository in which
|
67
|
+
an autoproj configuration is stored (i.e. a directory in which a manifest is
|
68
|
+
present), you can bootstrap this configuration directly:
|
69
|
+
|
70
|
+
wget http://doudou.github.com/autoproj/autoproj\_bootstrap <br />
|
71
|
+
ruby autoproj\_bootstrap VCS
|
72
|
+
{.cmdline}
|
73
|
+
|
74
|
+
For instance, to build all packages made available by the RubyInMotion project,
|
75
|
+
do
|
76
|
+
|
77
|
+
wget http://doudou.github.com/autoproj/autoproj\_bootstrap <br />
|
78
|
+
ruby autoproj\_bootstrap git git://github.com/doudou/rubim.all.git
|
79
|
+
{.cmdline}
|
80
|
+
|
81
|
+
Additional options can be given for the version control system. For instance,
|
82
|
+
|
83
|
+
wget http://doudou.github.com/autoproj/autoproj\_bootstrap <br />
|
84
|
+
ruby autoproj\_bootstrap git git://github.com/doudou/rubim.all.git branch=stable
|
85
|
+
{.cmdline}
|
63
86
|
|
64
87
|
Software packages in Autoproj
|
65
88
|
-----------------------------
|
data/bin/autoproj
CHANGED
@@ -113,28 +113,27 @@ args = ARGV.dup
|
|
113
113
|
parser.parse!(args)
|
114
114
|
mode = args.shift
|
115
115
|
selected_packages = args.dup
|
116
|
-
all_env_sh = Array.new
|
117
116
|
Autobuild::Reporting << Autoproj::Reporter.new
|
118
117
|
|
119
118
|
def color(*args)
|
120
119
|
Autoproj.console.color(*args)
|
121
120
|
end
|
122
121
|
|
123
|
-
def
|
124
|
-
|
122
|
+
def display_status(packages)
|
123
|
+
last_was_in_sync = false
|
125
124
|
|
126
|
-
|
127
|
-
|
128
|
-
packages.sort.each do |pkg|
|
129
|
-
pkg = Autobuild::Package[pkg]
|
125
|
+
packages.each do |pkg|
|
126
|
+
lines = []
|
130
127
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
128
|
+
if !pkg.importer.respond_to?(:status)
|
129
|
+
# This importer does not support status display
|
130
|
+
STDERR.puts color(" the importer of #{pkg.autoproj_name} does not support status display (#{pkg.importer.class.name})", :bold, :red)
|
131
|
+
next
|
132
|
+
end
|
136
133
|
|
137
|
-
|
134
|
+
if !File.directory?(pkg.srcdir)
|
135
|
+
lines << color(" is not imported yet", :magenta)
|
136
|
+
else
|
138
137
|
status = pkg.importer.status(pkg)
|
139
138
|
if status.uncommitted_code
|
140
139
|
lines << color(" contains uncommitted modifications", :red)
|
@@ -144,9 +143,9 @@ def do_status(packages)
|
|
144
143
|
when Autobuild::Importer::Status::UP_TO_DATE
|
145
144
|
if !status.uncommitted_code
|
146
145
|
if last_was_in_sync
|
147
|
-
STDERR.print ", #{pkg.
|
146
|
+
STDERR.print ", #{pkg.autoproj_name}"
|
148
147
|
else
|
149
|
-
STDERR.print pkg.
|
148
|
+
STDERR.print pkg.autoproj_name
|
150
149
|
end
|
151
150
|
last_was_in_sync = true
|
152
151
|
next
|
@@ -174,25 +173,51 @@ def do_status(packages)
|
|
174
173
|
lines << color(" #{line}", :magenta)
|
175
174
|
end
|
176
175
|
end
|
176
|
+
end
|
177
177
|
|
178
|
-
|
179
|
-
|
180
|
-
|
178
|
+
if last_was_in_sync
|
179
|
+
STDERR.puts color(": local and remote are in sync", :green)
|
180
|
+
end
|
181
181
|
|
182
|
-
|
183
|
-
|
182
|
+
last_was_in_sync = false
|
183
|
+
if pkg.respond_to?(:text_name)
|
184
|
+
STDERR.print "#{pkg.text_name}:"
|
185
|
+
else
|
186
|
+
STDERR.print "#{pkg.autoproj_name}:"
|
187
|
+
end
|
184
188
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
end
|
189
|
+
if lines.size == 1
|
190
|
+
STDERR.puts lines.first
|
191
|
+
else
|
192
|
+
STDERR.puts
|
193
|
+
STDERR.puts lines.join("\n")
|
191
194
|
end
|
192
|
-
|
193
|
-
|
195
|
+
end
|
196
|
+
if last_was_in_sync
|
197
|
+
STDERR.puts color(": local and remote are in sync", :green)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
def do_status(packages)
|
201
|
+
console = Autoproj.console
|
202
|
+
|
203
|
+
sources = Autoproj.manifest.each_configuration_source.
|
204
|
+
map do |vcs, text_name, pkg_name, local_dir|
|
205
|
+
Autoproj::Manifest.create_autobuild_package(vcs, text_name, pkg_name, local_dir)
|
194
206
|
end
|
207
|
+
|
208
|
+
if !sources.empty?
|
209
|
+
STDERR.puts color("autoproj: displaying status of configuration", :bold)
|
210
|
+
display_status(sources)
|
211
|
+
STDERR.puts
|
195
212
|
end
|
213
|
+
|
214
|
+
|
215
|
+
STDERR.puts color("autoproj: displaying status of packages", :bold)
|
216
|
+
packages = packages.sort.map do |pkg_name|
|
217
|
+
Autobuild::Package[pkg_name]
|
218
|
+
end
|
219
|
+
display_status(packages)
|
220
|
+
|
196
221
|
end
|
197
222
|
|
198
223
|
def switch_config(*args)
|
@@ -241,11 +266,9 @@ def do_switch_config(*args)
|
|
241
266
|
vcs = Autoproj.normalize_vcs_definition(vcs_def)
|
242
267
|
|
243
268
|
# Install the OS dependencies required for this VCS
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
Autoproj::Manifest.import_whole_installation(vcs, File.join(Dir.pwd, "autoproj"))
|
248
|
-
end
|
269
|
+
osdeps = Autoproj::OSDependencies.load_default
|
270
|
+
osdeps.install([vcs.type])
|
271
|
+
Autoproj::Manifest.update_source(vcs, "autoproj main configuration", File.join(Dir.pwd, "autoproj"))
|
249
272
|
|
250
273
|
# Now write it in the config file
|
251
274
|
File.open(File.join(Autoproj.config_dir, "config.yml"), "a") do |io|
|
@@ -320,8 +343,31 @@ EOTEXT
|
|
320
343
|
|
321
344
|
end
|
322
345
|
|
346
|
+
def report(debug)
|
347
|
+
Autobuild::Reporting.report do
|
348
|
+
yield
|
349
|
+
Autobuild::Reporting.success
|
350
|
+
end
|
351
|
+
|
352
|
+
rescue ConfigError => e
|
353
|
+
STDERR.puts
|
354
|
+
STDERR.puts color(e.message, :red, :bold)
|
355
|
+
if debug then raise
|
356
|
+
else exit 1
|
357
|
+
end
|
358
|
+
rescue Interrupt
|
359
|
+
STDERR.puts
|
360
|
+
STDERR.puts color("Interrupted by user", :red, :bold)
|
361
|
+
if debug then raise
|
362
|
+
else exit 1
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
Autobuild.doc_errors = false
|
367
|
+
Autobuild.do_doc = false
|
368
|
+
|
323
369
|
# Find the autoproj root dir
|
324
|
-
|
370
|
+
report(debug) do
|
325
371
|
case mode
|
326
372
|
when "bootstrap"
|
327
373
|
# If there is no argument, We need one more argument. It is either a VCS type or a path to a
|
@@ -398,8 +444,6 @@ begin
|
|
398
444
|
Autobuild.prefix = Autoproj.build_dir
|
399
445
|
Autobuild.srcdir = root_dir
|
400
446
|
Autobuild.logdir = File.join(Autobuild.prefix, 'log')
|
401
|
-
Autobuild.doc_errors = false
|
402
|
-
Autobuild.do_doc = false
|
403
447
|
if mail_config[:to]
|
404
448
|
Autobuild::Reporting << Autobuild::MailReporter.new(mail_config)
|
405
449
|
end
|
@@ -417,9 +461,7 @@ begin
|
|
417
461
|
# installed (i.e. that the user did not remove it)
|
418
462
|
manifest = Manifest.load(manifest_path)
|
419
463
|
if manifest.vcs && mode != "bootstrap"
|
420
|
-
|
421
|
-
manifest.update_yourself
|
422
|
-
end
|
464
|
+
manifest.update_yourself
|
423
465
|
manifest = Manifest.load(manifest_path)
|
424
466
|
end
|
425
467
|
Autoproj.manifest = manifest
|
@@ -432,18 +474,14 @@ begin
|
|
432
474
|
# If we need to install some packages to import our remote sources, do it
|
433
475
|
if !no_os_deps && !source_os_dependencies.empty?
|
434
476
|
STDERR.puts color("autoproj: installing prepackaged dependencies to access the source definitions", :bold)
|
435
|
-
|
436
|
-
|
437
|
-
osdeps.install(source_os_dependencies)
|
438
|
-
end
|
477
|
+
osdeps = manifest.known_os_packages
|
478
|
+
osdeps.install(source_os_dependencies)
|
439
479
|
end
|
440
480
|
|
441
481
|
# Update the remote sources if there are any
|
442
482
|
if manifest.has_remote_sources?
|
443
483
|
STDERR.puts color("autoproj: updating remote definitions of package sets", :bold)
|
444
|
-
|
445
|
-
manifest.update_remote_sources
|
446
|
-
end
|
484
|
+
manifest.update_remote_sources
|
447
485
|
STDERR.puts
|
448
486
|
end
|
449
487
|
|
@@ -502,16 +540,34 @@ begin
|
|
502
540
|
if source.local?
|
503
541
|
STDERR.puts " local source in #{source.local_dir}"
|
504
542
|
else
|
505
|
-
STDERR.puts "
|
543
|
+
STDERR.puts " from: #{source.vcs}"
|
506
544
|
STDERR.puts " local: #{source.local_dir}"
|
507
545
|
end
|
508
546
|
|
547
|
+
lines = []
|
509
548
|
source.each_package.
|
510
|
-
map { |pkg| pkg.name }.
|
511
|
-
|
512
|
-
each do |name|
|
513
|
-
|
549
|
+
map { |pkg| [pkg.name, Autoproj.manifest.package_manifests[pkg.name]] }.
|
550
|
+
sort_by { |name, _| name }.
|
551
|
+
each do |name, manifest|
|
552
|
+
vcs_def = Autoproj.manifest.importer_definition_for(name)
|
553
|
+
if manifest
|
554
|
+
lines << [name, manifest.short_documentation]
|
555
|
+
lines << ["", vcs_def.to_s]
|
556
|
+
else
|
557
|
+
lines << [name, vcs_def.to_s]
|
558
|
+
end
|
514
559
|
end
|
560
|
+
|
561
|
+
w_col1, w_col2 = nil
|
562
|
+
lines.each do |col1, col2|
|
563
|
+
w_col1 = col1.size if !w_col1 || col1.size > w_col1
|
564
|
+
w_col2 = col2.size if !w_col2 || col2.size > w_col2
|
565
|
+
end
|
566
|
+
STDERR.puts " packages:"
|
567
|
+
format = " | %-#{w_col1}s | %-#{w_col2}s |"
|
568
|
+
lines.each do |col1, col2|
|
569
|
+
STDERR.puts(format % [col1, col2])
|
570
|
+
end
|
515
571
|
end
|
516
572
|
end
|
517
573
|
end
|
@@ -538,10 +594,8 @@ begin
|
|
538
594
|
if !no_os_deps
|
539
595
|
STDERR.puts
|
540
596
|
STDERR.puts color("autoproj: installing prepackaged dependencies for build system & version control", :bold)
|
541
|
-
|
542
|
-
|
543
|
-
osdeps.install(Autoproj.build_system_dependencies - source_os_dependencies)
|
544
|
-
end
|
597
|
+
osdeps = manifest.known_os_packages
|
598
|
+
osdeps.install(Autoproj.build_system_dependencies - source_os_dependencies)
|
545
599
|
end
|
546
600
|
|
547
601
|
# Now starts a different stage of the whole build. Until now, we were
|
@@ -551,23 +605,10 @@ begin
|
|
551
605
|
# First, we allow to user to specify packages based on disk paths, so
|
552
606
|
# resolve those
|
553
607
|
selected_packages = Autoproj.manifest.expand_package_selection(selected_packages)
|
608
|
+
seen = Set.new
|
609
|
+
Autoproj.manifest.each_package_set do |name, packages, enabled_packages|
|
610
|
+
packages -= seen
|
554
611
|
|
555
|
-
# This keeps a hash of package_name => layout_name for all packages that
|
556
|
-
# have already been handled
|
557
|
-
handled_packages = Hash.new
|
558
|
-
|
559
|
-
Autoproj.manifest.each_package_set(selected_packages) do |name, packages, enabled_packages|
|
560
|
-
packages -= handled_packages.keys.to_set
|
561
|
-
enabled_packages -= handled_packages.keys.to_set
|
562
|
-
|
563
|
-
# Here, 'packages' are the packages listed in the layout configuration,
|
564
|
-
# and 'enabled_packages' the ones that
|
565
|
-
#
|
566
|
-
# They do not (yet) take into account dependency information -- this is
|
567
|
-
# not doable as the manifests have not been loaded yet (the packages
|
568
|
-
# aren't imported). We add this information later on
|
569
|
-
|
570
|
-
# Setup directories
|
571
612
|
srcdir = File.join(Autoproj.root_dir, name)
|
572
613
|
prefix = File.join(Autoproj.build_dir, name)
|
573
614
|
logdir = File.join(prefix, "log")
|
@@ -578,134 +619,142 @@ begin
|
|
578
619
|
pkg.prefix = prefix
|
579
620
|
pkg.logdir = logdir
|
580
621
|
end
|
622
|
+
seen |= packages
|
623
|
+
end
|
581
624
|
|
582
|
-
|
583
|
-
# only if there is some packages to build (and avoid display of progress
|
584
|
-
# messages if there is nothing to build)
|
585
|
-
all_enabled_packages = Set.new
|
625
|
+
if only_do_status
|
586
626
|
STDERR.puts
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
STDERR.puts color(" updating packages", :bold)
|
596
|
-
# We actually have a problem there: the packages in
|
597
|
-
# enabled_packages are *not* taking into account dependencies as
|
598
|
-
# we can't load the manifests yet ...
|
599
|
-
#
|
600
|
-
# So we have to make our own dependency analysis. Fortunately
|
601
|
-
# (for us), there is no need to import packages in order, so we
|
602
|
-
# can do a simple BFS
|
603
|
-
#
|
604
|
-
# Additional benefit: it computes the set of packages
|
605
|
-
packages_to_import = enabled_packages.dup
|
606
|
-
while !packages_to_import.empty?
|
607
|
-
import_now, packages_to_import = packages_to_import, Set.new
|
608
|
-
import_now.each do |pkg_name|
|
609
|
-
# Already handled at another place in the layout
|
610
|
-
next if handled_packages.has_key?(pkg_name)
|
611
|
-
# Already handled in this part of the layout
|
612
|
-
next if all_enabled_packages.include?(pkg_name)
|
613
|
-
# Not handled already. Import, load the manifest, add to
|
614
|
-
# all_enabled_packages and add the dependencies
|
615
|
-
Rake::Task["#{pkg_name}-import"].invoke
|
616
|
-
manifest.load_package_manifest(pkg_name)
|
617
|
-
all_enabled_packages << pkg_name
|
618
|
-
Autobuild::Package[pkg_name].dependencies.each do |dep_name|
|
619
|
-
if !handled_packages.has_key?(dep_name) &&
|
620
|
-
!packages.include?(dep_name)
|
621
|
-
raise ConfigError, "#{pkg_name}, at #{name} in the layout, depends on #{dep_name} but this package appears in the layout neither at #{name} nor before"
|
622
|
-
end
|
623
|
-
packages_to_import << dep_name
|
624
|
-
end
|
625
|
-
end
|
626
|
-
end
|
627
|
-
|
628
|
-
if !no_os_deps
|
629
|
-
STDERR.puts color(" installing prepackaged dependencies", :bold)
|
630
|
-
manifest.install_os_dependencies(all_enabled_packages)
|
631
|
-
end
|
627
|
+
all_packages = Set.new
|
628
|
+
Autoproj.manifest.handle_enabled_packages(selected_packages) do |name, _, layout_enabled|
|
629
|
+
all_packages |= layout_enabled
|
630
|
+
end
|
631
|
+
do_status(all_packages)
|
632
|
+
exit(0)
|
633
|
+
end
|
632
634
|
|
633
|
-
# And now build
|
634
|
-
if Autobuild.only_doc
|
635
|
-
STDERR.puts color(" building and installing documentation", :bold)
|
636
|
-
else
|
637
|
-
STDERR.puts color(" building and installing packages", :bold)
|
638
|
-
end
|
639
635
|
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
636
|
+
# First thing: do the import. We are handling the imports ourselves as it
|
637
|
+
# allows us to complete the enabled_packages set with the package
|
638
|
+
# dependencies. The scheme is as follows:
|
639
|
+
# * we import a package, prepare it and load its manifest
|
640
|
+
# * we look at its dependencies. Dependencies are either already handled
|
641
|
+
# (and nothing needs to be done) or are to-be-handled at this level.
|
642
|
+
# Otherwise, it is considered as an error
|
643
|
+
#
|
644
|
+
seen = Set.new
|
645
|
+
Autoproj.manifest.each_package_set do |name, packages, enabled_packages|
|
646
|
+
packages -= seen
|
649
647
|
|
650
|
-
# Now call the prepare target for all packages as it may be useful for
|
651
|
-
# the rest of the builds and for the generation of the env.sh file
|
652
|
-
#
|
653
|
-
# Note that we don't really have to care about dependencies, but we do
|
654
|
-
# it anyway
|
655
648
|
old_update_flag = Autobuild.do_update
|
656
649
|
begin
|
657
650
|
Autobuild.do_update = false
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
Rake::Task["autoproj-#{name}-prepare"].invoke
|
651
|
+
packages.each do |pkg_name|
|
652
|
+
pkg = Autobuild::Package[pkg_name]
|
653
|
+
if File.directory?(pkg.srcdir)
|
654
|
+
Rake::Task["#{pkg_name}-import"].invoke
|
655
|
+
end
|
664
656
|
end
|
665
657
|
ensure
|
666
658
|
Autobuild.do_update = old_update_flag
|
667
659
|
end
|
668
660
|
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
661
|
+
seen |= packages
|
662
|
+
end
|
663
|
+
|
664
|
+
STDERR.puts
|
665
|
+
STDERR.puts color("autoproj: importing and loading selected packages", :bold)
|
666
|
+
all_packages = Set.new
|
667
|
+
all_enabled_packages = Set.new
|
668
|
+
all_sublayouts = Set.new
|
669
|
+
Autoproj.manifest.handle_enabled_packages(selected_packages) do |name, packages, enabled_packages, _|
|
670
|
+
packages -= all_enabled_packages
|
671
|
+
enabled_packages -= all_enabled_packages
|
672
|
+
all_sublayouts << name
|
673
|
+
|
674
|
+
packages_to_import = enabled_packages.dup.to_set
|
675
|
+
while !packages_to_import.empty?
|
676
|
+
import_now, packages_to_import = packages_to_import, Set.new
|
677
|
+
import_now.sort.each do |pkg_name|
|
678
|
+
# Already handled in this part of the layout
|
679
|
+
next if all_enabled_packages.include?(pkg_name)
|
680
|
+
|
681
|
+
# Not handled already. Import.
|
682
|
+
Autobuild::Package[pkg_name].import
|
683
|
+
manifest.load_package_manifest(pkg_name)
|
684
|
+
all_enabled_packages << pkg_name
|
685
|
+
|
686
|
+
# Add its dependencies to the next import set
|
687
|
+
Autobuild::Package[pkg_name].dependencies.each do |dep_name|
|
688
|
+
if !Autobuild::Package[dep_name]
|
689
|
+
raise ConfigError, "#{pkg_name} depends on #{dep_name}, but it does not seem to exist"
|
690
|
+
elsif all_enabled_packages.include?(dep_name)
|
691
|
+
next
|
692
|
+
end
|
693
|
+
packages_to_import << dep_name
|
694
|
+
end
|
675
695
|
end
|
696
|
+
all_packages.merge(packages)
|
676
697
|
end
|
698
|
+
end
|
677
699
|
|
678
|
-
|
679
|
-
|
680
|
-
|
700
|
+
old_update_flag = Autobuild.do_update
|
701
|
+
begin
|
702
|
+
Autobuild.do_update = false
|
703
|
+
prepare_targets = all_packages.
|
704
|
+
find_all { |pkg_name| File.directory?(Autobuild::Package[pkg_name].srcdir) }.
|
705
|
+
map { |pkg_name| "#{pkg_name}-prepare" }
|
706
|
+
task "autoproj-prepare" => prepare_targets
|
707
|
+
Rake::Task["autoproj-prepare"].invoke
|
708
|
+
ensure
|
709
|
+
Autobuild.do_update = old_update_flag
|
710
|
+
end
|
711
|
+
|
712
|
+
if (mode =~ /build/)
|
713
|
+
missing_packages = all_packages.find_all { |pkg_name| !File.directory?(Autobuild::Package[pkg_name].srcdir) }
|
714
|
+
if missing_packages.empty?
|
715
|
+
# Backward compatibility: check if name/env.sh exists, and if it is
|
716
|
+
# the case, simply replace it with a link to the root one. And issue
|
717
|
+
# a warning
|
718
|
+
all_sublayouts.each do |name|
|
719
|
+
env_file = File.join(Autoproj.root_dir, name, "env.sh")
|
720
|
+
if name != '/' && File.file?(env_file)
|
721
|
+
File.open(env_file, 'w') do |io|
|
722
|
+
io.puts "source #{Autoproj.root_dir}/env.sh"
|
723
|
+
end
|
724
|
+
end
|
725
|
+
end
|
726
|
+
Autoproj.export_env_sh
|
727
|
+
else
|
728
|
+
STDERR.puts color("WARN: #{missing_packages.join(", ")} are not yet imported, #{Autoproj.root_dir}/env.sh might not be up to date", :magenta)
|
681
729
|
end
|
682
730
|
end
|
683
731
|
|
684
|
-
if !
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
WARNING: autoproj will not work until your restart all
|
692
|
-
your consoles, or run the following in them:
|
693
|
-
#{all_env_sh.map { |name| "$ source #{Dir.pwd}#{name}env.sh" }.join("\n ")}
|
732
|
+
if !no_os_deps
|
733
|
+
if !all_enabled_packages.empty?
|
734
|
+
STDERR.puts color("autoproj: installing prepackaged dependencies", :bold)
|
735
|
+
manifest.install_os_dependencies(all_enabled_packages)
|
736
|
+
end
|
737
|
+
end
|
694
738
|
|
695
|
-
|
739
|
+
if all_enabled_packages.empty?
|
740
|
+
STDERR.puts color("autoproj: nothing to do", :bold)
|
741
|
+
elsif Autobuild.do_build
|
742
|
+
if Autobuild.only_doc
|
743
|
+
STDERR.puts color("autoproj: building and installing documentation", :bold)
|
744
|
+
else
|
745
|
+
STDERR.puts color("autoproj: building and installing packages", :bold)
|
746
|
+
end
|
747
|
+
Autobuild.apply(all_enabled_packages, "autoproj-build")
|
696
748
|
end
|
697
749
|
|
698
|
-
|
699
|
-
|
700
|
-
STDERR.puts color(e.message, :red, :bold)
|
701
|
-
if debug then raise
|
702
|
-
else exit 1
|
750
|
+
prefixes = all_enabled_packages.inject(Set.new) do |set, pkg_name|
|
751
|
+
set << Autobuild::Package[pkg_name].prefix
|
703
752
|
end
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
753
|
+
prefixes.each do |prefix|
|
754
|
+
libdir = File.join(prefix, "lib")
|
755
|
+
if File.directory?(libdir)
|
756
|
+
Autoproj.validate_solib_dependencies(libdir)
|
757
|
+
end
|
709
758
|
end
|
710
759
|
end
|
711
760
|
|