autoproj 1.5.2 → 1.5.3
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 +23 -0
- data/bin/autoproj +29 -26
- data/doc/guide/src/package_sets/importers.page +12 -10
- data/lib/autoproj/autobuild.rb +3 -17
- data/lib/autoproj/cmdline.rb +12 -10
- data/lib/autoproj/default.osdeps +4 -0
- data/lib/autoproj/manifest.rb +92 -47
- data/lib/autoproj/osdeps.rb +29 -6
- data/lib/autoproj/version.rb +1 -1
- metadata +7 -7
data/History.txt
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
= Version 1.5.3
|
|
2
|
+
* use osdeps-provided packages instead of autobuild-built ones even if they are
|
|
3
|
+
implicitely selected in the layout (i.e. because of a package set name).
|
|
4
|
+
* allow to force using the autobuild-built package instead of the OSdeps
|
|
5
|
+
provided one by explicitely listing the package name in the layout.
|
|
6
|
+
* fix multiple loading of manifests (harmless, but annoying)
|
|
7
|
+
* added an 'overrides' section in source.yml, and made the version_control
|
|
8
|
+
field local to the given package set. This is because there is too much
|
|
9
|
+
possibility for name clashes when people start sharing package sets, and it
|
|
10
|
+
allows to simply change some of the VCS parameters (most often, the branch)
|
|
11
|
+
without having to redefine the complete configuration.
|
|
12
|
+
* packages defined in the local source do not need to have an entry in
|
|
13
|
+
overrides.yml anymore. Only proper package sets do.
|
|
14
|
+
* fix env.sh update in cases of build failures
|
|
15
|
+
* fix osdeps/autobuild package unification in some cases. In particular,
|
|
16
|
+
autoproj will fall-back to self-built packages if an OS package is not
|
|
17
|
+
provided on *this particular OS/version pair*, even though it exists for
|
|
18
|
+
other OSes or other versions of the same OS.
|
|
19
|
+
* in case the layout selects some packages, partial build commands should not
|
|
20
|
+
forcefully select packages that are not part of the layout at all.
|
|
21
|
+
* add the ability to override the default.osdeps file by setting
|
|
22
|
+
AUTOPROJ_DEFAULT_OSDEPS environment variable
|
|
23
|
+
|
|
1
24
|
= Version 1.5.2
|
|
2
25
|
* fix ignored_packages and exclude_packages
|
|
3
26
|
|
data/bin/autoproj
CHANGED
|
@@ -9,6 +9,7 @@ require 'autoproj'
|
|
|
9
9
|
require 'autoproj/autobuild'
|
|
10
10
|
require 'open-uri'
|
|
11
11
|
require 'autoproj/cmdline'
|
|
12
|
+
require 'pp'
|
|
12
13
|
|
|
13
14
|
require 'highline'
|
|
14
15
|
include Autoproj
|
|
@@ -95,10 +96,10 @@ report(Autobuild.debug) do
|
|
|
95
96
|
end
|
|
96
97
|
|
|
97
98
|
selected_packages = Autoproj::CmdLine.resolve_user_selection(selected_packages)
|
|
99
|
+
Autoproj.manifest.explicit_selection = selected_packages
|
|
98
100
|
Autoproj::CmdLine.initial_package_setup
|
|
99
101
|
|
|
100
102
|
if Autoproj::CmdLine.only_status?
|
|
101
|
-
STDERR.puts
|
|
102
103
|
all_enabled_packages = Autoproj::CmdLine.import_packages(selected_packages)
|
|
103
104
|
Autoproj::CmdLine.status(all_enabled_packages)
|
|
104
105
|
exit(0)
|
|
@@ -126,34 +127,36 @@ report(Autobuild.debug) do
|
|
|
126
127
|
osdeps.install(Autoproj.build_system_dependencies)
|
|
127
128
|
end
|
|
128
129
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if Autoproj::CmdLine.build? || Autoproj::CmdLine.doc? || Autoproj::CmdLine.update_os_dependencies?
|
|
136
|
-
if all_enabled_packages.empty?
|
|
137
|
-
STDERR.puts color("autoproj: nothing to do", :bold)
|
|
138
|
-
elsif Autoproj::CmdLine.build? || Autoproj::CmdLine.doc?
|
|
139
|
-
Autoproj::CmdLine.build_packages(selected_packages, all_enabled_packages)
|
|
140
|
-
elsif Autoproj::CmdLine.update_os_dependencies?
|
|
141
|
-
manifest.install_os_dependencies(all_enabled_packages)
|
|
142
|
-
end
|
|
130
|
+
begin
|
|
131
|
+
# Now, we actually do the import. Unfortunately, at this stage, we need to
|
|
132
|
+
# import the package and its dependencies ourselves so that we are able to
|
|
133
|
+
# build the list of packages that have actually been selected on the command
|
|
134
|
+
# line.
|
|
135
|
+
all_enabled_packages = Autoproj::CmdLine.import_packages(selected_packages)
|
|
143
136
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
137
|
+
if Autoproj::CmdLine.build? || Autoproj::CmdLine.doc? || Autoproj::CmdLine.update_os_dependencies?
|
|
138
|
+
if all_enabled_packages.empty?
|
|
139
|
+
STDERR.puts color("autoproj: nothing to do", :bold)
|
|
140
|
+
elsif Autoproj::CmdLine.build? || Autoproj::CmdLine.doc?
|
|
141
|
+
Autoproj::CmdLine.build_packages(selected_packages, all_enabled_packages)
|
|
142
|
+
elsif Autoproj::CmdLine.update_os_dependencies?
|
|
143
|
+
manifest.install_os_dependencies(all_enabled_packages)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Now, do some sanity checks on the result
|
|
147
|
+
prefixes = all_enabled_packages.inject(Set.new) do |set, pkg_name|
|
|
148
|
+
set << Autobuild::Package[pkg_name].prefix
|
|
149
|
+
end
|
|
150
|
+
prefixes.each do |prefix|
|
|
151
|
+
libdir = File.join(prefix, "lib")
|
|
152
|
+
if File.directory?(libdir)
|
|
153
|
+
Autoproj.validate_solib_dependencies(libdir)
|
|
154
|
+
end
|
|
152
155
|
end
|
|
153
156
|
end
|
|
157
|
+
ensure
|
|
158
|
+
Autoproj.export_env_sh
|
|
159
|
+
STDERR.puts color("autoproj: updated #{Autoproj.root_dir}/env.sh", :green)
|
|
154
160
|
end
|
|
155
|
-
|
|
156
|
-
Autoproj.export_env_sh
|
|
157
|
-
STDERR.puts color("autoproj: updated #{Autoproj.root_dir}/env.sh", :green)
|
|
158
161
|
end
|
|
159
162
|
|
|
@@ -18,11 +18,15 @@ version_control:
|
|
|
18
18
|
Autoproj follows the following rules to find the importer definition for a given
|
|
19
19
|
package:
|
|
20
20
|
|
|
21
|
-
- it
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
package
|
|
25
|
-
|
|
21
|
+
- it loads the information contained in the version_control section of the
|
|
22
|
+
package set that defines the considered package
|
|
23
|
+
- it will apply any modification that is contained in the overrides section by
|
|
24
|
+
the package sets listed *after* the aforementionned package set
|
|
25
|
+
|
|
26
|
+
For both the version_control and overrides section, autoproj will match the
|
|
27
|
+
package's name with the package\_name fields. It will consider every matching
|
|
28
|
+
block (i.e. every package\_name that matches), overriding earlier setup by later
|
|
29
|
+
ones.
|
|
26
30
|
|
|
27
31
|
As an example, let's consider the following manifest:
|
|
28
32
|
|
|
@@ -47,10 +51,8 @@ version_control:
|
|
|
47
51
|
Finally, the rubim.drivers package set has:
|
|
48
52
|
|
|
49
53
|
{coderay:: ruby}
|
|
50
|
-
|
|
54
|
+
overrides:
|
|
51
55
|
- orocos/logger:
|
|
52
|
-
type: git
|
|
53
|
-
url: git://github.com/$PACKAGE.git
|
|
54
56
|
branch: perf
|
|
55
57
|
{coderay}
|
|
56
58
|
|
|
@@ -61,8 +63,8 @@ Then, the following will happen:
|
|
|
61
63
|
* in addition, the 'branch' flag of orocos/orocos.rb will be overriden from
|
|
62
64
|
'master' (the default) to 'roby'
|
|
63
65
|
* in the case of orocos/logger, since there is a matching definition in
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
the overrides section of rubim.drivers, the 'perf' branch will be checked out
|
|
67
|
+
instead of the 'roby' branch, keeping the same importer type and URL
|
|
66
68
|
|
|
67
69
|
The remaining of this page will detail the various options that exist to import
|
|
68
70
|
a source package.
|
data/lib/autoproj/autobuild.rb
CHANGED
|
@@ -11,7 +11,7 @@ module Autobuild
|
|
|
11
11
|
|
|
12
12
|
alias __depends_on__ depends_on
|
|
13
13
|
def depends_on(name)
|
|
14
|
-
if Autoproj.osdeps.has?(name)
|
|
14
|
+
if Autoproj.osdeps.has?(name) && !Autoproj.manifest.explicitly_selected_package?(name)
|
|
15
15
|
@os_packages ||= Set.new
|
|
16
16
|
@os_packages << name
|
|
17
17
|
else
|
|
@@ -328,12 +328,7 @@ class Autobuild::Git
|
|
|
328
328
|
def snapshot(package, target_dir)
|
|
329
329
|
Dir.chdir(package.srcdir) do
|
|
330
330
|
head_commit = `git rev-parse #{branch}`.chomp
|
|
331
|
-
{
|
|
332
|
-
'type' => 'git',
|
|
333
|
-
'url' => repository,
|
|
334
|
-
'commit' => head_commit,
|
|
335
|
-
'patches' => patches
|
|
336
|
-
}
|
|
331
|
+
{ 'commit' => head_commit }
|
|
337
332
|
end
|
|
338
333
|
end
|
|
339
334
|
end
|
|
@@ -344,16 +339,7 @@ class Autobuild::ArchiveImporter
|
|
|
344
339
|
FileUtils.mkdir_p archive_dir
|
|
345
340
|
FileUtils.cp @cachefile, archive_dir
|
|
346
341
|
|
|
347
|
-
{
|
|
348
|
-
'type' => 'archive',
|
|
349
|
-
'url' => File.join('$AUTOPROJ_SOURCE_DIR', File.basename(@cachefile)),
|
|
350
|
-
'mode' => @mode,
|
|
351
|
-
'update_cached_file' => false,
|
|
352
|
-
'patches' => patches,
|
|
353
|
-
'no_subdirectory' => @options[:no_subdirectory],
|
|
354
|
-
'archive_dir' => archive_dir
|
|
355
|
-
|
|
356
|
-
}
|
|
342
|
+
{ 'url' => File.join('$AUTOPROJ_SOURCE_DIR', File.basename(@cachefile)) }
|
|
357
343
|
end
|
|
358
344
|
end
|
|
359
345
|
|
data/lib/autoproj/cmdline.rb
CHANGED
|
@@ -187,10 +187,10 @@ module Autoproj
|
|
|
187
187
|
source_yml = source.raw_description_file
|
|
188
188
|
STDERR.puts " #{source_yml['name']}"
|
|
189
189
|
if source.local?
|
|
190
|
-
|
|
190
|
+
puts " local source in #{source.local_dir}"
|
|
191
191
|
else
|
|
192
|
-
|
|
193
|
-
|
|
192
|
+
puts " from: #{source.vcs}"
|
|
193
|
+
puts " local: #{source.local_dir}"
|
|
194
194
|
end
|
|
195
195
|
|
|
196
196
|
lines = []
|
|
@@ -212,15 +212,17 @@ module Autoproj
|
|
|
212
212
|
w_col1 = col1.size if !w_col1 || col1.size > w_col1
|
|
213
213
|
w_col2 = col2.size if !w_col2 || col2.size > w_col2
|
|
214
214
|
end
|
|
215
|
-
|
|
215
|
+
puts " packages:"
|
|
216
216
|
format = " | %-#{w_col1}s | %-#{w_col2}s |"
|
|
217
217
|
lines.each do |col1, col2|
|
|
218
|
-
|
|
218
|
+
puts(format % [col1, col2])
|
|
219
219
|
end
|
|
220
220
|
end
|
|
221
221
|
end
|
|
222
222
|
end
|
|
223
223
|
|
|
224
|
+
# Returns the set of packages that are actually selected based on what
|
|
225
|
+
# the user gave on the command line
|
|
224
226
|
def self.resolve_user_selection(selected_packages)
|
|
225
227
|
manifest = Autoproj.manifest
|
|
226
228
|
|
|
@@ -280,7 +282,7 @@ module Autoproj
|
|
|
280
282
|
|
|
281
283
|
current_packages.
|
|
282
284
|
delete_if { |pkg| all_enabled_packages.include?(pkg.name) }
|
|
283
|
-
all_enabled_packages |= current_packages
|
|
285
|
+
all_enabled_packages |= current_packages.map(&:name).to_set
|
|
284
286
|
|
|
285
287
|
# We import first so that all packages can export the
|
|
286
288
|
# additional targets they provide.
|
|
@@ -319,7 +321,7 @@ module Autoproj
|
|
|
319
321
|
STDERR.puts "autoproj: finished importing packages"
|
|
320
322
|
end
|
|
321
323
|
|
|
322
|
-
return all_enabled_packages
|
|
324
|
+
return all_enabled_packages
|
|
323
325
|
end
|
|
324
326
|
|
|
325
327
|
def self.build_packages(selected_packages, all_enabled_packages)
|
|
@@ -950,10 +952,10 @@ EOTEXT
|
|
|
950
952
|
else Hash.new
|
|
951
953
|
end
|
|
952
954
|
|
|
953
|
-
if overrides['
|
|
954
|
-
overrides['
|
|
955
|
+
if overrides['overrides']
|
|
956
|
+
overrides['overrides'].concat(version_control)
|
|
955
957
|
else
|
|
956
|
-
overrides['
|
|
958
|
+
overrides['overrides'] = version_control
|
|
957
959
|
end
|
|
958
960
|
|
|
959
961
|
File.open(overrides_path, 'w') do |io|
|
data/lib/autoproj/default.osdeps
CHANGED
data/lib/autoproj/manifest.rb
CHANGED
|
@@ -198,7 +198,7 @@ module Autoproj
|
|
|
198
198
|
def local?; vcs.local? end
|
|
199
199
|
# True if this source defines nothing
|
|
200
200
|
def empty?
|
|
201
|
-
!source_definition['version_control'] &&
|
|
201
|
+
!source_definition['version_control'] && !source_definition['overrides']
|
|
202
202
|
!each_package.find { true } &&
|
|
203
203
|
!File.exists?(File.join(raw_local_dir, "overrides.rb")) &&
|
|
204
204
|
!File.exists?(File.join(raw_local_dir, "init.rb"))
|
|
@@ -357,20 +357,25 @@ module Autoproj
|
|
|
357
357
|
data
|
|
358
358
|
end
|
|
359
359
|
|
|
360
|
+
# Returns the default importer for this package set
|
|
361
|
+
def default_importer
|
|
362
|
+
importer_definition_for('default')
|
|
363
|
+
end
|
|
364
|
+
|
|
360
365
|
# Returns an importer definition for the given package, if one is
|
|
361
366
|
# available. Otherwise returns nil.
|
|
362
367
|
#
|
|
363
368
|
# The returned value is a VCSDefinition object.
|
|
364
|
-
def
|
|
369
|
+
def version_control_field(package_name, section_name, validate = true)
|
|
365
370
|
urls = source_definition['urls'] || Hash.new
|
|
366
371
|
urls['HOME'] = ENV['HOME']
|
|
367
372
|
|
|
368
|
-
all_vcs = source_definition[
|
|
373
|
+
all_vcs = source_definition[section_name]
|
|
369
374
|
if all_vcs
|
|
370
375
|
if all_vcs.kind_of?(Hash)
|
|
371
|
-
raise ConfigError, "wrong format for the
|
|
376
|
+
raise ConfigError, "wrong format for the #{section_name} section, you forgot the '-' in front of the package names"
|
|
372
377
|
elsif !all_vcs.kind_of?(Array)
|
|
373
|
-
raise ConfigError, "wrong format for the
|
|
378
|
+
raise ConfigError, "wrong format for the #{section_name} section"
|
|
374
379
|
end
|
|
375
380
|
end
|
|
376
381
|
|
|
@@ -435,14 +440,25 @@ module Autoproj
|
|
|
435
440
|
vcs_spec.dup.each do |name, value|
|
|
436
441
|
vcs_spec[name] = expand(value, expansions)
|
|
437
442
|
end
|
|
438
|
-
vcs_spec
|
|
439
443
|
|
|
440
|
-
|
|
444
|
+
# If required, verify that the configuration is a valid VCS
|
|
445
|
+
# configuration
|
|
446
|
+
if validate
|
|
447
|
+
Autoproj.normalize_vcs_definition(vcs_spec)
|
|
448
|
+
end
|
|
449
|
+
vcs_spec
|
|
441
450
|
end
|
|
442
451
|
rescue ConfigError => e
|
|
443
452
|
raise ConfigError, "#{e.message} in #{source_file}", e.backtrace
|
|
444
453
|
end
|
|
445
454
|
|
|
455
|
+
def importer_definition_for(package_name)
|
|
456
|
+
vcs_spec = version_control_field(package_name, 'version_control_field')
|
|
457
|
+
if vcs_spec
|
|
458
|
+
Autoproj.normalize_vcs_definition(vcs_spec)
|
|
459
|
+
end
|
|
460
|
+
end
|
|
461
|
+
|
|
446
462
|
def each_package
|
|
447
463
|
if !block_given?
|
|
448
464
|
return enum_for(:each_package)
|
|
@@ -471,6 +487,12 @@ module Autoproj
|
|
|
471
487
|
File.join(Autoproj.config_dir, "overrides.yml")
|
|
472
488
|
end
|
|
473
489
|
|
|
490
|
+
# Returns the default importer for this package set
|
|
491
|
+
def default_importer
|
|
492
|
+
importer_definition_for('default') ||
|
|
493
|
+
Autoproj.normalize_vcs_definition(:type => 'none')
|
|
494
|
+
end
|
|
495
|
+
|
|
474
496
|
def raw_description_file
|
|
475
497
|
path = source_file
|
|
476
498
|
if File.file?(path)
|
|
@@ -512,6 +534,15 @@ module Autoproj
|
|
|
512
534
|
end
|
|
513
535
|
end
|
|
514
536
|
|
|
537
|
+
# The set of packages that are selected by the user, either through the
|
|
538
|
+
# manifest file or through the command line, as a set of package names
|
|
539
|
+
attr_accessor :explicit_selection
|
|
540
|
+
|
|
541
|
+
# Returns true if +pkg_name+ has been explicitely selected
|
|
542
|
+
def explicitly_selected_package?(pkg_name)
|
|
543
|
+
explicit_selection && explicit_selection.include?(pkg_name)
|
|
544
|
+
end
|
|
545
|
+
|
|
515
546
|
def self.load(file)
|
|
516
547
|
begin
|
|
517
548
|
data = YAML.load(File.read(file))
|
|
@@ -666,6 +697,13 @@ module Autoproj
|
|
|
666
697
|
end
|
|
667
698
|
|
|
668
699
|
if @sources
|
|
700
|
+
if load_description
|
|
701
|
+
@sources.each do |src|
|
|
702
|
+
if !src.source_definition
|
|
703
|
+
src.load_description_file
|
|
704
|
+
end
|
|
705
|
+
end
|
|
706
|
+
end
|
|
669
707
|
return @sources.each(&block)
|
|
670
708
|
end
|
|
671
709
|
|
|
@@ -687,9 +725,7 @@ module Autoproj
|
|
|
687
725
|
end
|
|
688
726
|
|
|
689
727
|
all_sources.each(&block)
|
|
690
|
-
|
|
691
|
-
@sources = all_sources
|
|
692
|
-
end
|
|
728
|
+
@sources = all_sources
|
|
693
729
|
end
|
|
694
730
|
|
|
695
731
|
# Register a new package
|
|
@@ -802,15 +838,26 @@ module Autoproj
|
|
|
802
838
|
package_set
|
|
803
839
|
end
|
|
804
840
|
|
|
805
|
-
each_source.to_a
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
841
|
+
sources = each_source.to_a
|
|
842
|
+
|
|
843
|
+
# Remove sources listed before the package source
|
|
844
|
+
while !sources.empty? && sources[0].name != package_source.name
|
|
845
|
+
sources.shift
|
|
846
|
+
end
|
|
847
|
+
package_source = sources.shift
|
|
848
|
+
|
|
849
|
+
# Get the version control information from the package source. There
|
|
850
|
+
# must be one
|
|
851
|
+
vcs_spec = package_source.version_control_field(package_name, 'version_control')
|
|
852
|
+
return if !vcs_spec
|
|
853
|
+
|
|
854
|
+
sources.each do |src|
|
|
855
|
+
overrides_spec = src.version_control_field(package_name, 'overrides', false)
|
|
856
|
+
if overrides_spec
|
|
857
|
+
vcs_spec.merge!(overrides_spec)
|
|
811
858
|
end
|
|
812
859
|
end
|
|
813
|
-
|
|
860
|
+
Autoproj.normalize_vcs_definition(vcs_spec)
|
|
814
861
|
end
|
|
815
862
|
|
|
816
863
|
# Sets up the package importers based on the information listed in
|
|
@@ -832,7 +879,7 @@ module Autoproj
|
|
|
832
879
|
def load_importers
|
|
833
880
|
packages.each_value do |pkg|
|
|
834
881
|
vcs = importer_definition_for(pkg.autobuild.name, pkg.package_set) ||
|
|
835
|
-
|
|
882
|
+
pkg.package_set.default_importer
|
|
836
883
|
|
|
837
884
|
if vcs
|
|
838
885
|
Autoproj.add_build_system_dependency vcs.type
|
|
@@ -855,8 +902,9 @@ module Autoproj
|
|
|
855
902
|
raise ConfigError, "#{name} is neither a package nor a source"
|
|
856
903
|
end
|
|
857
904
|
packages.values.
|
|
858
|
-
|
|
859
|
-
|
|
905
|
+
find_all { |pkg| pkg.package_set.name == source.name }.
|
|
906
|
+
map { |pkg| pkg.autobuild.name }.
|
|
907
|
+
find_all { |pkg_name| !Autoproj.osdeps || !Autoproj.osdeps.has?(pkg_name) }
|
|
860
908
|
end
|
|
861
909
|
end
|
|
862
910
|
|
|
@@ -921,29 +969,25 @@ module Autoproj
|
|
|
921
969
|
end
|
|
922
970
|
end
|
|
923
971
|
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
packages.each do |pkg_name|
|
|
930
|
-
pkg = Autobuild::Package[pkg_name]
|
|
931
|
-
pkg.srcdir = File.join(srcdir, pkg_name)
|
|
932
|
-
pkg.prefix = prefix
|
|
933
|
-
pkg.logdir = logdir
|
|
934
|
-
end
|
|
935
|
-
|
|
936
|
-
yield
|
|
972
|
+
# Returns the set of package names that are available for installation.
|
|
973
|
+
# It is the set of packages listed in the layout minus the exluded and
|
|
974
|
+
# ignred ones
|
|
975
|
+
def all_package_names
|
|
976
|
+
default_packages
|
|
937
977
|
end
|
|
938
978
|
|
|
979
|
+
# Returns the set of packages that should be built if the user does not
|
|
980
|
+
# specify any on the command line
|
|
939
981
|
def default_packages
|
|
940
982
|
names = if layout = data['layout']
|
|
941
983
|
layout_packages(layout, true)
|
|
942
984
|
else
|
|
943
985
|
# No layout, all packages are selected
|
|
944
986
|
packages.values.
|
|
945
|
-
map { |pkg| pkg.autobuild.name }
|
|
987
|
+
map { |pkg| pkg.autobuild.name }.
|
|
988
|
+
find_all { |pkg_name| !Autoproj.osdeps || !Autoproj.osdeps.has?(pkg_name) }
|
|
946
989
|
end
|
|
990
|
+
|
|
947
991
|
names.delete_if { |pkg_name| excluded?(pkg_name) || ignored?(pkg_name) }
|
|
948
992
|
names.to_set
|
|
949
993
|
end
|
|
@@ -1024,25 +1068,25 @@ module Autoproj
|
|
|
1024
1068
|
def expand_package_selection(selected_packages)
|
|
1025
1069
|
base_dir = Autoproj.root_dir
|
|
1026
1070
|
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
#
|
|
1030
|
-
|
|
1031
|
-
map do |name, pkg|
|
|
1032
|
-
pkg.name
|
|
1033
|
-
end
|
|
1071
|
+
# The expanded selection
|
|
1072
|
+
expanded_packages = Set.new
|
|
1073
|
+
# All the packages that are available on this installation
|
|
1074
|
+
all_package_names = self.all_package_names
|
|
1034
1075
|
|
|
1035
1076
|
# First, remove packages that are directly referenced by name or by
|
|
1036
1077
|
# package set names
|
|
1037
1078
|
selected_packages.delete_if do |sel|
|
|
1038
1079
|
sel = Regexp.new(Regexp.quote(sel))
|
|
1039
1080
|
|
|
1040
|
-
packages =
|
|
1041
|
-
|
|
1081
|
+
packages = all_package_names.
|
|
1082
|
+
find_all { |pkg_name| pkg_name =~ sel }.
|
|
1083
|
+
to_set
|
|
1084
|
+
expanded_packages |= packages
|
|
1042
1085
|
|
|
1043
1086
|
sources = each_source.find_all { |source| source.name =~ sel }
|
|
1044
1087
|
sources.each do |source|
|
|
1045
|
-
|
|
1088
|
+
packages = resolve_package_set(source.name).to_set
|
|
1089
|
+
expanded_packages |= (packages & all_package_names)
|
|
1046
1090
|
end
|
|
1047
1091
|
|
|
1048
1092
|
!packages.empty? && !sources.empty?
|
|
@@ -1056,12 +1100,13 @@ module Autoproj
|
|
|
1056
1100
|
each_package_set(nil) do |layout_name, packages, _|
|
|
1057
1101
|
selected_packages.delete_if do |sel|
|
|
1058
1102
|
if layout_name[0..-1] =~ Regexp.new("#{sel}\/?$")
|
|
1059
|
-
expanded_packages
|
|
1103
|
+
expanded_packages |= packages.to_set
|
|
1060
1104
|
else
|
|
1061
1105
|
match = Regexp.new("^#{Regexp.quote(sel)}")
|
|
1062
|
-
|
|
1106
|
+
all_package_names.each do |pkg_name|
|
|
1107
|
+
pkg = Autobuild::Package[pkg_name]
|
|
1063
1108
|
if pkg.srcdir =~ match
|
|
1064
|
-
expanded_packages <<
|
|
1109
|
+
expanded_packages << pkg_name
|
|
1065
1110
|
end
|
|
1066
1111
|
end
|
|
1067
1112
|
end
|
data/lib/autoproj/osdeps.rb
CHANGED
|
@@ -31,7 +31,16 @@ module Autoproj
|
|
|
31
31
|
|
|
32
32
|
AUTOPROJ_OSDEPS = File.join(File.expand_path(File.dirname(__FILE__)), 'default.osdeps')
|
|
33
33
|
def self.load_default
|
|
34
|
-
@default_osdeps
|
|
34
|
+
if @default_osdeps
|
|
35
|
+
@default_osdeps
|
|
36
|
+
else
|
|
37
|
+
file = ENV['AUTOPROJ_DEFAULT_OSDEPS'] || AUTOPROJ_OSDEPS
|
|
38
|
+
if !File.file?(file)
|
|
39
|
+
STDERR.puts "WARN: #{file} (from AUTOPROJ_DEFAULT_OSDEPS) is not a file, falling back to #{AUTOPROJ_OSDEPS}"
|
|
40
|
+
file = AUTOPROJ_OSDEPS
|
|
41
|
+
end
|
|
42
|
+
@default_osdeps = OSDependencies.load(file)
|
|
43
|
+
end
|
|
35
44
|
end
|
|
36
45
|
|
|
37
46
|
attr_reader :definitions
|
|
@@ -128,14 +137,18 @@ module Autoproj
|
|
|
128
137
|
'arch' => 'pacman -Sy --noconfirm %s'
|
|
129
138
|
}
|
|
130
139
|
|
|
131
|
-
|
|
140
|
+
# Resolves the given OS dependencies into the actual packages that need
|
|
141
|
+
# to be installed on this particular OS.
|
|
142
|
+
#
|
|
143
|
+
# Raises ConfigError if some packages can't be found
|
|
144
|
+
def resolve_os_dependencies(dependencies)
|
|
132
145
|
os_name, os_version = operating_system
|
|
133
146
|
if !OS_PACKAGE_INSTALL.has_key?(os_name)
|
|
134
147
|
raise ConfigError, "I don't know how to install packages on #{os_name}"
|
|
135
148
|
end
|
|
136
149
|
|
|
137
|
-
shell_snippets = ""
|
|
138
150
|
os_packages = []
|
|
151
|
+
shell_snippets = []
|
|
139
152
|
dependencies.each do |name|
|
|
140
153
|
dep_def = definitions[name]
|
|
141
154
|
if !dep_def
|
|
@@ -154,6 +167,7 @@ module Autoproj
|
|
|
154
167
|
end
|
|
155
168
|
|
|
156
169
|
data = os_entry.last
|
|
170
|
+
|
|
157
171
|
# This package does not need to be installed on this operating system (example: build tools on Gentoo)
|
|
158
172
|
next if !data || data == "ignore"
|
|
159
173
|
|
|
@@ -177,20 +191,29 @@ module Autoproj
|
|
|
177
191
|
elsif data.to_str =~ /\w+/
|
|
178
192
|
os_packages << data.to_str
|
|
179
193
|
else
|
|
180
|
-
shell_snippets <<
|
|
194
|
+
shell_snippets << data.to_str
|
|
181
195
|
end
|
|
182
196
|
end
|
|
183
197
|
|
|
198
|
+
return os_packages, shell_snippets
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def generate_os_script(dependencies)
|
|
203
|
+
os_name, os_version = operating_system
|
|
204
|
+
os_packages, shell_snippets = resolve_os_dependencies(dependencies)
|
|
205
|
+
|
|
184
206
|
"#! /bin/bash\n" +
|
|
185
207
|
GAIN_ROOT_ACCESS + "\n" +
|
|
186
208
|
(OS_PACKAGE_INSTALL[os_name] % [os_packages.join(" ")]) +
|
|
187
|
-
"\n" + shell_snippets
|
|
209
|
+
"\n" + shell_snippets.join("\n")
|
|
188
210
|
end
|
|
189
211
|
|
|
190
212
|
# Returns true if there is an operating-system package with that name,
|
|
191
213
|
# and false otherwise
|
|
192
214
|
def has?(name)
|
|
193
|
-
partition_packages([name].to_set)
|
|
215
|
+
osdeps, gemdeps = partition_packages([name].to_set)
|
|
216
|
+
resolve_os_dependencies(osdeps)
|
|
194
217
|
true
|
|
195
218
|
rescue ConfigError
|
|
196
219
|
false
|
data/lib/autoproj/version.rb
CHANGED
metadata
CHANGED
|
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
segments:
|
|
6
6
|
- 1
|
|
7
7
|
- 5
|
|
8
|
-
-
|
|
9
|
-
version: 1.5.
|
|
8
|
+
- 3
|
|
9
|
+
version: 1.5.3
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Sylvain Joyeux
|
|
@@ -14,7 +14,7 @@ autorequire:
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date: 2010-
|
|
17
|
+
date: 2010-06-08 00:00:00 +02:00
|
|
18
18
|
default_executable:
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
@@ -97,8 +97,8 @@ dependencies:
|
|
|
97
97
|
segments:
|
|
98
98
|
- 2
|
|
99
99
|
- 0
|
|
100
|
-
-
|
|
101
|
-
version: 2.0.
|
|
100
|
+
- 4
|
|
101
|
+
version: 2.0.4
|
|
102
102
|
type: :development
|
|
103
103
|
version_requirements: *id006
|
|
104
104
|
- !ruby/object:Gem::Dependency
|
|
@@ -139,8 +139,8 @@ dependencies:
|
|
|
139
139
|
segments:
|
|
140
140
|
- 2
|
|
141
141
|
- 6
|
|
142
|
-
-
|
|
143
|
-
version: 2.6.
|
|
142
|
+
- 1
|
|
143
|
+
version: 2.6.1
|
|
144
144
|
type: :development
|
|
145
145
|
version_requirements: *id009
|
|
146
146
|
description: |-
|