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 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