autoproj 1.7.0.b1 → 1.7.0.b2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/bin/autoproj +0 -7
- data/lib/autoproj.rb +1 -0
- data/lib/autoproj/autobuild.rb +10 -0
- data/lib/autoproj/cmdline.rb +79 -31
- data/lib/autoproj/manifest.rb +61 -67
- data/lib/autoproj/version.rb +1 -1
- metadata +7 -7
data/Rakefile
CHANGED
data/bin/autoproj
CHANGED
data/lib/autoproj.rb
CHANGED
data/lib/autoproj/autobuild.rb
CHANGED
@@ -468,6 +468,12 @@ def package(name)
|
|
468
468
|
Autobuild::Package[name]
|
469
469
|
end
|
470
470
|
|
471
|
+
# Returns true if +name+ is a valid package and is neither excluded nor ignored
|
472
|
+
# from the build
|
473
|
+
def package_selected?(name)
|
474
|
+
Autoproj.manifest.package_selected?(name, false)
|
475
|
+
end
|
476
|
+
|
471
477
|
# Returns true if +name+ is a valid package and is included in the build
|
472
478
|
def package_enabled?(name)
|
473
479
|
Autoproj.manifest.package_enabled?(name, false)
|
@@ -479,3 +485,7 @@ def disable_imports_from(name)
|
|
479
485
|
Autoproj.manifest.disable_imports_from(name)
|
480
486
|
end
|
481
487
|
|
488
|
+
# Moves the given package to a new subdirectory
|
489
|
+
def move_package(name, new_dir)
|
490
|
+
Autoproj.manifest.move_package(name, new_dir)
|
491
|
+
end
|
data/lib/autoproj/cmdline.rb
CHANGED
@@ -219,28 +219,28 @@ module Autoproj
|
|
219
219
|
#
|
220
220
|
# First, we allow to user to specify packages based on disk paths, so
|
221
221
|
# resolve those
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
end
|
222
|
+
manifest.packages.each_value do |pkg_def|
|
223
|
+
pkg = pkg_def.autobuild
|
224
|
+
pkg_name = pkg.name
|
225
|
+
|
226
|
+
layout =
|
227
|
+
if randomize_layout?
|
228
|
+
Digest::SHA256.hexdigest(pkg_name)[0, 12]
|
229
|
+
else manifest.whereis(pkg_name)
|
230
|
+
end
|
232
231
|
|
233
|
-
|
234
|
-
|
235
|
-
|
232
|
+
place =
|
233
|
+
if target = manifest.moved_packages[pkg_name]
|
234
|
+
File.join(layout, target)
|
235
|
+
else
|
236
|
+
File.join(layout, pkg_name)
|
237
|
+
end
|
236
238
|
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
end
|
243
|
-
seen |= packages
|
239
|
+
pkg = Autobuild::Package[pkg_name]
|
240
|
+
pkg.srcdir = File.join(Autoproj.root_dir, place)
|
241
|
+
pkg.prefix = File.join(Autoproj.build_dir, layout)
|
242
|
+
pkg.doc_target_dir = File.join(Autoproj.build_dir, 'doc', name, pkg_name)
|
243
|
+
pkg.logdir = File.join(pkg.prefix, "log")
|
244
244
|
end
|
245
245
|
|
246
246
|
# Now call the blocks that the user defined in the autobuild files. We do it
|
@@ -268,20 +268,24 @@ module Autoproj
|
|
268
268
|
|
269
269
|
|
270
270
|
def self.display_configuration(manifest, package_list = nil)
|
271
|
-
#
|
272
|
-
#
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
Autoproj.progress("autoproj: no package sets defined in autoproj/manifest", :bold, :red)
|
278
|
-
return
|
271
|
+
# Load the manifest for packages that are already present on the
|
272
|
+
# file system
|
273
|
+
manifest.packages.each_value do |pkg|
|
274
|
+
if File.directory?(pkg.autobuild.srcdir)
|
275
|
+
manifest.load_package_manifest(pkg.autobuild.name)
|
276
|
+
end
|
279
277
|
end
|
280
278
|
|
281
279
|
all_packages = Hash.new
|
282
280
|
if package_list
|
283
|
-
|
281
|
+
all_selected_packages = Set.new
|
284
282
|
package_list.each do |name|
|
283
|
+
all_selected_packages << name
|
284
|
+
Autobuild::Package[name].all_dependencies(all_selected_packages)
|
285
|
+
end
|
286
|
+
|
287
|
+
package_sets = Set.new
|
288
|
+
all_selected_packages.each do |name|
|
285
289
|
pkg_set = manifest.definition_source(name)
|
286
290
|
package_sets << pkg_set
|
287
291
|
all_packages[name] = [manifest.package(name).autobuild, pkg_set.name]
|
@@ -295,6 +299,11 @@ module Autoproj
|
|
295
299
|
end
|
296
300
|
end
|
297
301
|
|
302
|
+
if package_sets.empty?
|
303
|
+
Autoproj.progress("autoproj: no package sets defined in autoproj/manifest", :bold, :red)
|
304
|
+
return
|
305
|
+
end
|
306
|
+
|
298
307
|
Autoproj.progress
|
299
308
|
Autoproj.progress("autoproj: package sets", :bold)
|
300
309
|
package_sets.each do |pkg_set|
|
@@ -338,6 +347,11 @@ module Autoproj
|
|
338
347
|
vcs_def = manifest.importer_definition_for(pkg.name)
|
339
348
|
Autoproj.progress "#{pkg.name}#{": #{pkg_manifest.short_documentation}" if pkg_manifest && pkg_manifest.short_documentation}", :bold
|
340
349
|
Autoproj.progress " defined in #{pkg_set}"
|
350
|
+
if File.directory?(pkg.srcdir)
|
351
|
+
Autoproj.progress " checked out in #{pkg.srcdir}"
|
352
|
+
else
|
353
|
+
Autoproj.progress " will be checked out in #{pkg.srcdir}"
|
354
|
+
end
|
341
355
|
Autoproj.progress " #{vcs_def.to_s}"
|
342
356
|
|
343
357
|
if !File.directory?(pkg.srcdir)
|
@@ -463,7 +477,13 @@ module Autoproj
|
|
463
477
|
raise ConfigError.new, "#{pkg.name} has no VCS, but is not checked out in #{pkg.srcdir}"
|
464
478
|
end
|
465
479
|
|
466
|
-
|
480
|
+
## COMPLETELY BYPASS RAKE HERE
|
481
|
+
# The reason is that the ordering of import/prepare between
|
482
|
+
# packages is not important BUT the ordering of import vs.
|
483
|
+
# prepare in one package IS important: prepare is the method
|
484
|
+
# that takes into account dependencies.
|
485
|
+
pkg.import
|
486
|
+
Rake::Task["#{pkg.name}-import"].instance_variable_set(:@already_invoked, true)
|
467
487
|
manifest.load_package_manifest(pkg.name)
|
468
488
|
pkg.resolve_optional_dependencies
|
469
489
|
verify_package_availability(pkg.name)
|
@@ -471,7 +491,8 @@ module Autoproj
|
|
471
491
|
|
472
492
|
current_packages.each do |pkg|
|
473
493
|
verify_package_availability(pkg.name)
|
474
|
-
|
494
|
+
pkg.prepare
|
495
|
+
Rake::Task["#{pkg.name}-prepare"].instance_variable_set(:@already_invoked, true)
|
475
496
|
|
476
497
|
# Verify that its dependencies are there, and add
|
477
498
|
# them to the selected_packages set so that they get
|
@@ -1430,6 +1451,33 @@ export PATH=$GEM_HOME/bin:$PATH
|
|
1430
1451
|
end
|
1431
1452
|
end
|
1432
1453
|
end
|
1454
|
+
|
1455
|
+
# This method sets up autoproj and loads the configuration available in
|
1456
|
+
# the current autoproj installation. It is meant as a simple way to
|
1457
|
+
# initialize an autoproj environment for standalone tools
|
1458
|
+
#
|
1459
|
+
# Beware, it changes the current directory to the autoproj root dir
|
1460
|
+
def self.initialize_and_load
|
1461
|
+
require 'autoproj/autobuild'
|
1462
|
+
require 'open-uri'
|
1463
|
+
require 'autoproj/cmdline'
|
1464
|
+
|
1465
|
+
Autoproj::CmdLine.parse_arguments(ARGV.dup, false)
|
1466
|
+
Dir.chdir(Autoproj.root_dir)
|
1467
|
+
|
1468
|
+
Autoproj::CmdLine.update_os_dependencies = false
|
1469
|
+
Autoproj::CmdLine.initialize
|
1470
|
+
Autoproj::CmdLine.load_configuration
|
1471
|
+
Autoproj::CmdLine.initial_package_setup
|
1472
|
+
|
1473
|
+
# Load the manifest for packages that are already present on the
|
1474
|
+
# file system
|
1475
|
+
manifest.packages.each_value do |pkg|
|
1476
|
+
if File.directory?(pkg.autobuild.srcdir)
|
1477
|
+
manifest.load_package_manifest(pkg.autobuild.name)
|
1478
|
+
end
|
1479
|
+
end
|
1480
|
+
end
|
1433
1481
|
end
|
1434
1482
|
end
|
1435
1483
|
|
data/lib/autoproj/manifest.rb
CHANGED
@@ -495,10 +495,6 @@ module Autoproj
|
|
495
495
|
#
|
496
496
|
# The returned value is a VCSDefinition object.
|
497
497
|
def version_control_field(package_name, section_name, validate = true)
|
498
|
-
if !source_definition
|
499
|
-
raise InternalError, "source #{name} has not been loaded"
|
500
|
-
end
|
501
|
-
|
502
498
|
urls = source_definition['urls'] || Hash.new
|
503
499
|
urls['HOME'] = ENV['HOME']
|
504
500
|
|
@@ -779,6 +775,7 @@ module Autoproj
|
|
779
775
|
@automatic_exclusions = Hash.new
|
780
776
|
@constants_definitions = Hash.new
|
781
777
|
@disabled_imports = Set.new
|
778
|
+
@moved_packages = Hash.new
|
782
779
|
|
783
780
|
@constant_definitions = Hash.new
|
784
781
|
if Autoproj.has_config_key?('manifest_source')
|
@@ -1055,9 +1052,6 @@ module Autoproj
|
|
1055
1052
|
# internal name used to represent the package and +into+ the directory
|
1056
1053
|
# in which the package should be checked out.
|
1057
1054
|
def self.create_autobuild_package(vcs, text_name, into)
|
1058
|
-
if !into
|
1059
|
-
raise
|
1060
|
-
end
|
1061
1055
|
importer = vcs.create_autobuild_importer
|
1062
1056
|
return if !importer # updates have been disabled by using the 'none' type
|
1063
1057
|
|
@@ -1071,9 +1065,6 @@ module Autoproj
|
|
1071
1065
|
#
|
1072
1066
|
# See create_autobuild_package for informations about the arguments.
|
1073
1067
|
def self.update_package_set(vcs, text_name, into)
|
1074
|
-
if !into
|
1075
|
-
raise
|
1076
|
-
end
|
1077
1068
|
fake_package = create_autobuild_package(vcs, text_name, into)
|
1078
1069
|
fake_package.import
|
1079
1070
|
|
@@ -1255,12 +1246,16 @@ module Autoproj
|
|
1255
1246
|
#
|
1256
1247
|
# If recursive is false, yields only the packages at this level.
|
1257
1248
|
# Otherwise, return all packages.
|
1258
|
-
def layout_packages(layout_def, recursive, validate = true)
|
1259
|
-
result = []
|
1249
|
+
def layout_packages(result, layout_def, recursive, validate = true)
|
1260
1250
|
layout_def.each do |value|
|
1261
1251
|
if !value.kind_of?(Hash) # sublayout
|
1262
1252
|
begin
|
1263
|
-
|
1253
|
+
pkgs = resolve_package_set(value)
|
1254
|
+
pkgs.each do |p|
|
1255
|
+
result << p
|
1256
|
+
Autobuild::Package[p].all_dependencies(result)
|
1257
|
+
end
|
1258
|
+
|
1264
1259
|
rescue ConfigError
|
1265
1260
|
raise if validate
|
1266
1261
|
end
|
@@ -1269,7 +1264,7 @@ module Autoproj
|
|
1269
1264
|
|
1270
1265
|
if recursive
|
1271
1266
|
each_sublayout(layout_def) do |sublayout_name, sublayout_def|
|
1272
|
-
|
1267
|
+
layout_packages(result, sublayout_def, true)
|
1273
1268
|
end
|
1274
1269
|
end
|
1275
1270
|
|
@@ -1286,36 +1281,6 @@ module Autoproj
|
|
1286
1281
|
end
|
1287
1282
|
end
|
1288
1283
|
|
1289
|
-
# Looks into the layout setup in the manifest, and yields each layout
|
1290
|
-
# and sublayout in order
|
1291
|
-
def each_layout_level(selection = nil, layout_name = '/', layout_def = data['layout'], &block)
|
1292
|
-
if !layout_def
|
1293
|
-
yield(layout_name, default_packages, default_packages)
|
1294
|
-
return nil
|
1295
|
-
end
|
1296
|
-
|
1297
|
-
selection = selection.to_set if selection
|
1298
|
-
|
1299
|
-
# First of all, do the packages at this level
|
1300
|
-
packages = layout_packages(layout_def, false)
|
1301
|
-
# Remove excluded packages
|
1302
|
-
packages.delete_if { |pkg_name| excluded?(pkg_name) }
|
1303
|
-
|
1304
|
-
if selection
|
1305
|
-
selected_packages = packages.find_all { |pkg_name| selection.include?(pkg_name) }
|
1306
|
-
else
|
1307
|
-
selected_packages = packages.dup
|
1308
|
-
end
|
1309
|
-
if !packages.empty?
|
1310
|
-
yield(layout_name, packages.to_set, selected_packages.to_set)
|
1311
|
-
end
|
1312
|
-
|
1313
|
-
# Now, enumerate the sublayouts
|
1314
|
-
each_sublayout(layout_def) do |subname, sublayout|
|
1315
|
-
each_layout_level(selection, "#{layout_name}#{subname}/", sublayout, &block)
|
1316
|
-
end
|
1317
|
-
end
|
1318
|
-
|
1319
1284
|
# Returns the set of package names that are explicitely listed in the
|
1320
1285
|
# layout, minus the excluded and ignored ones
|
1321
1286
|
def all_layout_packages(validate = true)
|
@@ -1336,12 +1301,11 @@ module Autoproj
|
|
1336
1301
|
|
1337
1302
|
# Returns true if +name+ is a valid package and is included in the build
|
1338
1303
|
#
|
1339
|
-
# If +validate+ is true, the
|
1340
|
-
#
|
1341
|
-
# loaded.
|
1304
|
+
# If +validate+ is true, the method will raise ArgumentError if the
|
1305
|
+
# package does not exists.
|
1342
1306
|
#
|
1343
|
-
# If it is false,
|
1344
|
-
#
|
1307
|
+
# If it is false, the method will simply return false on non-defined
|
1308
|
+
# packages
|
1345
1309
|
def package_enabled?(name, validate = true)
|
1346
1310
|
if !Autobuild::Package[name]
|
1347
1311
|
if validate
|
@@ -1353,11 +1317,25 @@ module Autoproj
|
|
1353
1317
|
!excluded?(name)
|
1354
1318
|
end
|
1355
1319
|
|
1320
|
+
# Returns true if +name+ is a valid package and is neither excluded from
|
1321
|
+
# the build, nor ignored from the build
|
1322
|
+
#
|
1323
|
+
# If +validate+ is true, the method will raise ArgumentError if the
|
1324
|
+
# package does not exists.
|
1325
|
+
#
|
1326
|
+
# If it is false, the method will simply return false on non-defined
|
1327
|
+
# packages
|
1328
|
+
def package_selected?(name, validate = true)
|
1329
|
+
if package_enabled?(name)
|
1330
|
+
!ignored?(name)
|
1331
|
+
end
|
1332
|
+
end
|
1333
|
+
|
1356
1334
|
# Returns the set of packages that should be built if the user does not
|
1357
1335
|
# specify any on the command line
|
1358
1336
|
def default_packages(validate = true)
|
1359
1337
|
names = if layout = data['layout']
|
1360
|
-
layout_packages(layout, true, validate)
|
1338
|
+
layout_packages(Set.new, layout, true, validate)
|
1361
1339
|
else
|
1362
1340
|
# No layout, all packages are selected
|
1363
1341
|
all_packages
|
@@ -1367,15 +1345,27 @@ module Autoproj
|
|
1367
1345
|
names.to_set
|
1368
1346
|
end
|
1369
1347
|
|
1348
|
+
def search_layout(layout_level, layout_data, *names)
|
1349
|
+
layout_data.each do |value|
|
1350
|
+
if value.kind_of?(Hash)
|
1351
|
+
each_sublayout(value) do |subname, subdef|
|
1352
|
+
if result = search_layout("#{layout_level}/#{subname}", subdef)
|
1353
|
+
return result
|
1354
|
+
end
|
1355
|
+
end
|
1356
|
+
|
1357
|
+
elsif names.include?(value)
|
1358
|
+
return layout_level
|
1359
|
+
end
|
1360
|
+
end
|
1361
|
+
nil
|
1362
|
+
end
|
1363
|
+
|
1370
1364
|
# Returns the package directory for the given package name
|
1371
1365
|
def whereis(package_name)
|
1372
1366
|
Autoproj.in_file(self.file) do
|
1373
|
-
|
1374
|
-
|
1375
|
-
return layout_name
|
1376
|
-
end
|
1377
|
-
end
|
1378
|
-
raise ArgumentError, "cannot find #{package_name} in the layout section"
|
1367
|
+
set_name = definition_source(package_name).name
|
1368
|
+
return (search_layout("/", (data['layout'] || Hash.new), package_name, set_name) || "/")
|
1379
1369
|
end
|
1380
1370
|
end
|
1381
1371
|
|
@@ -1501,23 +1491,13 @@ module Autoproj
|
|
1501
1491
|
!packages.empty? || !sources.empty?
|
1502
1492
|
end
|
1503
1493
|
|
1504
|
-
# Now, search for layout names
|
1505
|
-
each_layout_level(nil) do |layout_name, packages, _|
|
1506
|
-
selected_packages.each do |sel|
|
1507
|
-
if layout_name[0..-1] =~ Regexp.new("#{sel}\/?$")
|
1508
|
-
expanded_packages |= packages.to_set
|
1509
|
-
end
|
1510
|
-
end
|
1511
|
-
end
|
1512
|
-
|
1513
1494
|
# Finally, check for package source directories
|
1514
1495
|
all_packages = self.all_package_names
|
1515
1496
|
selected_packages.each do |sel|
|
1516
|
-
match_dir = Regexp.new("^#{Regexp.quote(sel)}")
|
1517
1497
|
match_pkg_name = Regexp.new(Regexp.quote(sel))
|
1518
1498
|
all_packages.each do |pkg_name|
|
1519
1499
|
pkg = Autobuild::Package[pkg_name]
|
1520
|
-
if pkg_name =~ match_pkg_name || pkg.srcdir =~
|
1500
|
+
if pkg_name =~ match_pkg_name || sel =~ Regexp.new("^#{Regexp.quote(pkg.srcdir)}") || pkg.srcdir =~ Regexp.new("^#{Regexp.quote(sel)}")
|
1521
1501
|
# Check-out packages that are not in the manifest only
|
1522
1502
|
# if they are explicitely selected
|
1523
1503
|
if pkg_name != sel && pkg.srcdir != sel && !all_layout_packages.include?(pkg.name)
|
@@ -1533,6 +1513,20 @@ module Autoproj
|
|
1533
1513
|
expanded_packages.delete_if { |pkg_name| excluded?(pkg_name) || ignored?(pkg_name) }
|
1534
1514
|
expanded_packages.to_set
|
1535
1515
|
end
|
1516
|
+
|
1517
|
+
attr_reader :moved_packages
|
1518
|
+
|
1519
|
+
# Moves the given package name from its current subdirectory to the
|
1520
|
+
# provided one.
|
1521
|
+
#
|
1522
|
+
# For instance, for a package called drivers/xsens_imu
|
1523
|
+
#
|
1524
|
+
# move("drivers/xsens_imu", "data_acquisition")
|
1525
|
+
#
|
1526
|
+
# will move the package into data_acquisition/xsens_imu
|
1527
|
+
def move_package(package_name, new_dir)
|
1528
|
+
moved_packages[package_name] = File.join(new_dir, File.basename(package_name))
|
1529
|
+
end
|
1536
1530
|
end
|
1537
1531
|
|
1538
1532
|
class << self
|
data/lib/autoproj/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autoproj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 6629748
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 7
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 1.7.0.
|
10
|
+
- b2
|
11
|
+
version: 1.7.0.b2
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Sylvain Joyeux
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-11-
|
19
|
+
date: 2010-11-24 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -27,12 +27,12 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
hash:
|
30
|
+
hash: 49
|
31
31
|
segments:
|
32
32
|
- 1
|
33
33
|
- 5
|
34
|
-
-
|
35
|
-
version: 1.5.
|
34
|
+
- 25
|
35
|
+
version: 1.5.25
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id001
|
38
38
|
- !ruby/object:Gem::Dependency
|