autoproj 1.2.6 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|