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 CHANGED
@@ -1,3 +1,7 @@
1
+ = Version 1.3.0
2
+ * Fix limitations of using layouts. autoproj is now able to find out
3
+ cross-layout dependencies and act accordingly.
4
+
1
5
  = Version 1.2.6
2
6
  * Fix mail reporting
3
7
 
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
- * autobuild scripts that describe what can be built and how it should be built.
36
- These scripts an also list a set of configuration options that allow to
37
- parametrize the build. In general, there should be only a limited number of
38
- such options.
39
- * a source.yml file which describes the package set itself, and where the software
40
- packages are located (what version control system and what URL).
41
- * optionally, a file that describe prepackaged dependencies that can be
42
- installed by using the operating system package management system.
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 above :)
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 do_status(packages)
124
- console = Autoproj.console
122
+ def display_status(packages)
123
+ last_was_in_sync = false
125
124
 
126
- Autobuild::Reporting.report do
127
- last_was_in_sync = false
128
- packages.sort.each do |pkg|
129
- pkg = Autobuild::Package[pkg]
125
+ packages.each do |pkg|
126
+ lines = []
130
127
 
131
- if !pkg.importer.respond_to?(:status)
132
- # This importer does not support status display
133
- STDERR.puts color(" this package's importer does not support status display", :bold, :red)
134
- next
135
- end
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
- lines = []
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.name}"
146
+ STDERR.print ", #{pkg.autoproj_name}"
148
147
  else
149
- STDERR.print pkg.name
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
- if last_was_in_sync
179
- STDERR.puts color(": local and remote are in sync", :green)
180
- end
178
+ if last_was_in_sync
179
+ STDERR.puts color(": local and remote are in sync", :green)
180
+ end
181
181
 
182
- last_was_in_sync = false
183
- STDERR.print "#{pkg.name}:"
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
- if lines.size == 1
186
- STDERR.puts lines.first
187
- else
188
- STDERR.puts
189
- STDERR.puts lines.join("\n")
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
- if last_was_in_sync
193
- STDERR.puts color(": local and remote are in sync", :green)
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
- Autobuild::Reporting.report do
245
- osdeps = Autoproj::OSDependencies.load_default
246
- osdeps.install([vcs.type])
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
- begin
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
- Autobuild::Reporting.report do
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
- Autobuild::Reporting.report do
436
- osdeps = manifest.known_os_packages
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
- Autobuild::Reporting.report do
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 " vcs: #{source.vcs}, #{source.vcs.options.inspect}"
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
- sort.
512
- each do |name|
513
- STDERR.puts " #{name}"
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
- Autobuild::Reporting.report do
542
- osdeps = manifest.known_os_packages
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
- # We are doing a status, now is the right time. Otherwise, build ! But
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
- if only_do_status
588
- STDERR.puts color("autoproj: status of packages in #{name}", :bold)
589
- do_status(enabled_packages)
590
- elsif !enabled_packages.empty?
591
- Autobuild::Reporting.report do
592
- STDERR.puts
593
- STDERR.puts color("autoproj: now building #{name}", :bold)
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
- Autobuild.apply(all_enabled_packages, "autoproj-#{name}")
641
- Autobuild::Reporting.success
642
- end
643
- end
644
-
645
- # Now mark them as handled
646
- packages.each do |pkg_name|
647
- handled_packages[pkg_name] = name
648
- end
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
- Autobuild::Reporting.report do
659
- prepare_targets = (packages - enabled_packages).
660
- find_all { |pkg_name| File.directory?(Autobuild::Package[pkg_name].srcdir) }.
661
- map { |pkg_name| "#{pkg_name}-prepare" }
662
- task "autoproj-#{name}-prepare" => prepare_targets
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
- if (mode == "build" || mode == "fast-build")
670
- if packages.all? { |pkg_name| File.directory?(Autobuild::Package[pkg_name].srcdir) }
671
- all_env_sh << name
672
- Autoproj.export_env_sh(name)
673
- else
674
- STDERR.puts color("WARN: #{name} has not been completely built, #{name}env.sh is not updated", :magenta)
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
- libdir = File.join(prefix, "lib")
679
- if File.directory?(libdir)
680
- Autoproj.validate_solib_dependencies(libdir)
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 !all_env_sh.empty?
685
- STDERR.puts <<-EOTEXT
686
-
687
-
688
- add the following lines at the bottom of your .bashrc:
689
- #{all_env_sh.map { |name| "source #{Dir.pwd}#{name}env.sh" }.join("\n ")}
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
- EOTEXT
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
- rescue ConfigError => e
699
- STDERR.puts
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
- rescue Interrupt
705
- STDERR.puts
706
- STDERR.puts color("Interrupted by user", :red, :bold)
707
- if debug then raise
708
- else exit 1
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