autobuild 1.20.0 → 1.23.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.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +25 -0
- data/.github/workflows/test.yml +30 -0
- data/.rubocop.yml +14 -7
- data/autobuild.gemspec +7 -6
- data/bin/autobuild +1 -1
- data/lib/autobuild/build_logfile.rb +1 -2
- data/lib/autobuild/config.rb +5 -5
- data/lib/autobuild/environment.rb +126 -58
- data/lib/autobuild/exceptions.rb +13 -6
- data/lib/autobuild/import/archive.rb +33 -23
- data/lib/autobuild/import/cvs.rb +6 -6
- data/lib/autobuild/import/darcs.rb +4 -4
- data/lib/autobuild/import/git-lfs.rb +4 -4
- data/lib/autobuild/import/git.rb +155 -73
- data/lib/autobuild/import/hg.rb +7 -7
- data/lib/autobuild/import/svn.rb +17 -10
- data/lib/autobuild/importer.rb +37 -39
- data/lib/autobuild/mail_reporter.rb +5 -2
- data/lib/autobuild/package.rb +28 -15
- data/lib/autobuild/packages/autotools.rb +6 -10
- data/lib/autobuild/packages/cmake.rb +13 -9
- data/lib/autobuild/packages/dummy.rb +0 -4
- data/lib/autobuild/packages/gnumake.rb +1 -1
- data/lib/autobuild/packages/orogen.rb +11 -4
- data/lib/autobuild/packages/pkgconfig.rb +2 -2
- data/lib/autobuild/packages/python.rb +19 -8
- data/lib/autobuild/packages/ruby.rb +5 -5
- data/lib/autobuild/parallel.rb +9 -17
- data/lib/autobuild/pkgconfig.rb +1 -0
- data/lib/autobuild/progress_display.rb +67 -43
- data/lib/autobuild/rake_task_extension.rb +6 -0
- data/lib/autobuild/reporting.rb +15 -9
- data/lib/autobuild/subcommand.rb +30 -26
- data/lib/autobuild/test_utility.rb +6 -3
- data/lib/autobuild/timestamps.rb +3 -3
- data/lib/autobuild/utility.rb +22 -4
- data/lib/autobuild/version.rb +1 -1
- data/lib/autobuild.rb +0 -3
- metadata +28 -26
- data/.travis.yml +0 -19
data/lib/autobuild/importer.rb
CHANGED
@@ -203,7 +203,8 @@ module Autobuild
|
|
203
203
|
|
204
204
|
patches_fingerprint_string = patches_fingerprint(package)
|
205
205
|
if patches_fingerprint_string
|
206
|
-
Digest::SHA1.hexdigest(vcs_fingerprint_string +
|
206
|
+
Digest::SHA1.hexdigest(vcs_fingerprint_string +
|
207
|
+
patches_fingerprint_string)
|
207
208
|
elsif patches.empty?
|
208
209
|
vcs_fingerprint_string
|
209
210
|
end
|
@@ -211,16 +212,19 @@ module Autobuild
|
|
211
212
|
|
212
213
|
# basic fingerprint of the package and its dependencies
|
213
214
|
def vcs_fingerprint(package)
|
214
|
-
#each importer type should implement its own
|
215
|
-
Autoproj.warn "Fingerprint in #{package.name} has not been implemented
|
216
|
-
|
215
|
+
# each importer type should implement its own
|
216
|
+
Autoproj.warn "Fingerprint in #{package.name} has not been implemented "\
|
217
|
+
"for this type of packages, results should be discarded"
|
218
|
+
nil
|
217
219
|
end
|
218
220
|
|
219
221
|
# fingerprint for patches associated to this package
|
220
222
|
def patches_fingerprint(package)
|
221
223
|
cur_patches = currently_applied_patches(package)
|
222
|
-
cur_patches.map(&:shift) #leave only level and source information
|
223
|
-
|
224
|
+
cur_patches.map(&:shift) # leave only level and source information
|
225
|
+
if !patches.empty? && cur_patches
|
226
|
+
Digest::SHA1.hexdigest(cur_patches.sort.flatten.join(""))
|
227
|
+
end
|
224
228
|
end
|
225
229
|
|
226
230
|
# Sets the number of times update / checkout should be retried before giving
|
@@ -314,12 +318,10 @@ module Autobuild
|
|
314
318
|
end
|
315
319
|
|
316
320
|
# Enumerate the post-import hooks for this importer
|
317
|
-
def each_post_hook(error: false)
|
321
|
+
def each_post_hook(error: false, &block)
|
318
322
|
return enum_for(__method__, error: false) unless block_given?
|
319
323
|
|
320
|
-
self.class.each_post_hook(error: error)
|
321
|
-
yield(callback)
|
322
|
-
end
|
324
|
+
self.class.each_post_hook(error: error, &block)
|
323
325
|
|
324
326
|
post_hooks.each do |hook|
|
325
327
|
yield(hook.callback) if hook.always || !error
|
@@ -355,11 +357,12 @@ module Autobuild
|
|
355
357
|
message = Autobuild.color('interrupted', :red)
|
356
358
|
if last_error
|
357
359
|
raise last_error
|
358
|
-
else
|
360
|
+
else
|
361
|
+
raise
|
359
362
|
end
|
360
|
-
rescue ::Exception =>
|
363
|
+
rescue ::Exception => e
|
361
364
|
message = Autobuild.color('update failed', :red)
|
362
|
-
last_error =
|
365
|
+
last_error = e
|
363
366
|
# If the package is patched, it might be that the update
|
364
367
|
# failed because we needed to unpatch first. Try it out
|
365
368
|
#
|
@@ -378,11 +381,11 @@ module Autobuild
|
|
378
381
|
rescue Interrupt
|
379
382
|
raise
|
380
383
|
rescue ::Exception
|
381
|
-
raise
|
384
|
+
raise e
|
382
385
|
end
|
383
386
|
end
|
384
387
|
|
385
|
-
retry_count = update_retry_count(
|
388
|
+
retry_count = update_retry_count(e, retry_count)
|
386
389
|
raise unless retry_count
|
387
390
|
|
388
391
|
package.message "update failed in #{package.importdir}, "\
|
@@ -399,20 +402,21 @@ module Autobuild
|
|
399
402
|
fallback(e, package, :import, package)
|
400
403
|
end
|
401
404
|
|
402
|
-
def perform_checkout(package, options
|
405
|
+
def perform_checkout(package, **options)
|
403
406
|
last_error = nil
|
404
407
|
package.progress_start "checking out %s", :done_message => 'checked out %s' do
|
405
408
|
retry_count = 0
|
406
409
|
begin
|
407
|
-
checkout(package, options)
|
410
|
+
checkout(package, **options)
|
408
411
|
execute_post_hooks(package)
|
409
412
|
rescue Interrupt
|
410
413
|
if last_error then raise last_error
|
411
|
-
else
|
414
|
+
else
|
415
|
+
raise
|
412
416
|
end
|
413
|
-
rescue ::Exception =>
|
414
|
-
last_error =
|
415
|
-
retry_count = update_retry_count(
|
417
|
+
rescue ::Exception => e
|
418
|
+
last_error = e
|
419
|
+
retry_count = update_retry_count(e, retry_count)
|
416
420
|
raise unless retry_count
|
417
421
|
|
418
422
|
package.message "checkout of %s failed, "\
|
@@ -456,31 +460,26 @@ module Autobuild
|
|
456
460
|
# ID is given will, in this mode, reset the repository to the requested ID
|
457
461
|
# (if that does not involve losing commits). Otherwise, it will only
|
458
462
|
# ensure that the requested commit ID is present in the current HEAD.
|
459
|
-
def import(
|
463
|
+
def import( # rubocop:disable Metrics/ParameterLists
|
464
|
+
package, *old_boolean,
|
465
|
+
ignore_errors: false, checkout_only: false, allow_interactive: true, **options
|
466
|
+
)
|
460
467
|
# Backward compatibility
|
461
|
-
unless
|
462
|
-
|
468
|
+
unless old_boolean.empty?
|
469
|
+
old_boolean = old_boolean.first
|
463
470
|
Autoproj.warn "calling #import with a boolean as second argument "\
|
464
471
|
"is deprecated, switch to the named argument interface instead"
|
465
|
-
Autoproj.warn " e.g. call import(package, only_local: #{
|
472
|
+
Autoproj.warn " e.g. call import(package, only_local: #{old_boolean})"
|
466
473
|
Autoproj.warn " #{caller(1..1).first}"
|
467
|
-
options =
|
474
|
+
options[:only_local] = old_boolean
|
468
475
|
end
|
469
476
|
|
470
|
-
options = Kernel.validate_options options,
|
471
|
-
only_local: false,
|
472
|
-
reset: false,
|
473
|
-
checkout_only: false,
|
474
|
-
ignore_errors: false,
|
475
|
-
allow_interactive: true
|
476
|
-
ignore_errors = options.delete(:ignore_errors)
|
477
|
-
|
478
477
|
importdir = package.importdir
|
479
478
|
if File.directory?(importdir)
|
480
479
|
package.isolate_errors(mark_as_failed: false,
|
481
480
|
ignore_errors: ignore_errors) do
|
482
|
-
if !
|
483
|
-
perform_update(package, options)
|
481
|
+
if !checkout_only && package.update?
|
482
|
+
perform_update(package, checkout_only: false, **options)
|
484
483
|
elsif Autobuild.verbose
|
485
484
|
package.message "%s: not updating"
|
486
485
|
end
|
@@ -488,12 +487,11 @@ module Autobuild
|
|
488
487
|
|
489
488
|
elsif File.exist?(importdir)
|
490
489
|
raise ConfigException.new(package, 'import'),
|
491
|
-
|
490
|
+
"#{importdir} exists but is not a directory"
|
492
491
|
else
|
493
492
|
package.isolate_errors(mark_as_failed: true,
|
494
493
|
ignore_errors: ignore_errors) do
|
495
|
-
perform_checkout(package,
|
496
|
-
allow_interactive: options[:allow_interactive])
|
494
|
+
perform_checkout(package, allow_interactive: allow_interactive)
|
497
495
|
true
|
498
496
|
end
|
499
497
|
end
|
@@ -22,8 +22,11 @@ if Autobuild::HAS_RMAIL
|
|
22
22
|
end
|
23
23
|
|
24
24
|
attr_reader :from_email, :to_email, :smtp_hostname, :smtp_port,
|
25
|
-
|
25
|
+
:subject, :only_errors
|
26
|
+
|
26
27
|
def initialize(config)
|
28
|
+
super()
|
29
|
+
|
27
30
|
@from_email = (config[:from] || default_mail)
|
28
31
|
@to_email = (config[:to] || default_mail)
|
29
32
|
@subject =
|
@@ -78,7 +81,7 @@ if Autobuild::HAS_RMAIL
|
|
78
81
|
to_email.each do |email|
|
79
82
|
mail.header.to = email
|
80
83
|
smtp.send_mail(RMail::Serialize.write('', mail),
|
81
|
-
|
84
|
+
from_email, email)
|
82
85
|
end
|
83
86
|
end
|
84
87
|
|
data/lib/autobuild/package.rb
CHANGED
@@ -64,7 +64,7 @@ module Autobuild
|
|
64
64
|
# Some statistics about the commands that have been run
|
65
65
|
attr_reader :statistics
|
66
66
|
|
67
|
-
EnvOp = Struct.new :type, :name, :values
|
67
|
+
EnvOp = Struct.new :type, :name, :values # rubocop:disable Lint/StructNewOverride
|
68
68
|
|
69
69
|
# List of environment values added by this package with {#env_add},
|
70
70
|
# {#env_add_path} or {#env_set}
|
@@ -119,7 +119,8 @@ module Autobuild
|
|
119
119
|
def update?
|
120
120
|
if @update.nil?
|
121
121
|
Autobuild.do_update
|
122
|
-
else
|
122
|
+
else
|
123
|
+
@update
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
@@ -150,6 +151,7 @@ module Autobuild
|
|
150
151
|
@imported = false
|
151
152
|
@prepared = false
|
152
153
|
@built = false
|
154
|
+
@disabled = nil
|
153
155
|
|
154
156
|
if Hash === spec
|
155
157
|
name, depends = spec.to_a.first
|
@@ -286,6 +288,11 @@ module Autobuild
|
|
286
288
|
add_env_op EnvOp.new(:add_prefix, prefix, [includes])
|
287
289
|
end
|
288
290
|
|
291
|
+
# Add a file to be sourced at the end of the generated env file
|
292
|
+
def env_source_after(file, shell: "sh")
|
293
|
+
add_env_op EnvOp.new(:source_after, file, shell: shell)
|
294
|
+
end
|
295
|
+
|
289
296
|
# Hook called by autoproj to set up the default environment for this
|
290
297
|
# package
|
291
298
|
#
|
@@ -326,7 +333,11 @@ module Autobuild
|
|
326
333
|
set[env_op.name] = [self, env_op.values]
|
327
334
|
end
|
328
335
|
end
|
329
|
-
|
336
|
+
if env_op.type == :source_after
|
337
|
+
env.send(env_op.type, env_op.name, **env_op.values)
|
338
|
+
else
|
339
|
+
env.send(env_op.type, env_op.name, *env_op.values)
|
340
|
+
end
|
330
341
|
ops << env_op
|
331
342
|
end
|
332
343
|
ops
|
@@ -402,8 +413,8 @@ module Autobuild
|
|
402
413
|
def isolate_errors(options = Hash.new)
|
403
414
|
options = Hash[mark_as_failed: true] unless options.kind_of?(Hash)
|
404
415
|
options = validate_options options,
|
405
|
-
|
406
|
-
|
416
|
+
mark_as_failed: true,
|
417
|
+
ignore_errors: Autobuild.ignore_errors
|
407
418
|
|
408
419
|
# Don't do anything if we already have failed
|
409
420
|
if failed?
|
@@ -448,12 +459,12 @@ module Autobuild
|
|
448
459
|
# be done there as well.
|
449
460
|
#
|
450
461
|
# (see Importer#import)
|
451
|
-
def import(options
|
452
|
-
options =
|
462
|
+
def import(*old_boolean, **options)
|
463
|
+
options = { only_local: old_boolean.first } unless old_boolean.empty?
|
453
464
|
|
454
465
|
@import_invoked = true
|
455
466
|
if @importer
|
456
|
-
result = @importer.import(self, options)
|
467
|
+
result = @importer.import(self, **options)
|
457
468
|
elsif update?
|
458
469
|
message "%s: no importer defined, doing nothing"
|
459
470
|
end
|
@@ -491,16 +502,17 @@ module Autobuild
|
|
491
502
|
suffix << token.gsub(/%s/, name)
|
492
503
|
elsif suffix.empty?
|
493
504
|
prefix << token
|
494
|
-
else
|
505
|
+
else
|
506
|
+
suffix << token
|
495
507
|
end
|
496
508
|
end
|
497
509
|
if suffix.empty?
|
498
|
-
|
510
|
+
msg
|
499
511
|
elsif prefix_style.empty?
|
500
|
-
|
512
|
+
(prefix + suffix).join(" ")
|
501
513
|
else
|
502
514
|
colorized_prefix = Autobuild.color(prefix.join(" "), *prefix_style)
|
503
|
-
|
515
|
+
[colorized_prefix, *suffix].join(" ")
|
504
516
|
end
|
505
517
|
end
|
506
518
|
|
@@ -527,7 +539,7 @@ module Autobuild
|
|
527
539
|
args[0] = process_formatting_string(args[0], :bold)
|
528
540
|
done_message = process_formatting_string(done_message) if done_message
|
529
541
|
Autobuild.progress_start(self, *args,
|
530
|
-
|
542
|
+
done_message: done_message, **raw_options, &block)
|
531
543
|
end
|
532
544
|
|
533
545
|
def progress(*args)
|
@@ -686,10 +698,11 @@ module Autobuild
|
|
686
698
|
pkg = Autobuild::Package[pkg_name]
|
687
699
|
unless (fingerprint = memo[pkg.name])
|
688
700
|
fingerprint = pkg.fingerprint(recursive: true, memo: memo)
|
689
|
-
|
701
|
+
break unless fingerprint
|
690
702
|
end
|
691
703
|
fingerprint
|
692
704
|
end
|
705
|
+
return unless dependency_fingerprints
|
693
706
|
|
694
707
|
memo[name] = Digest::SHA1.hexdigest(
|
695
708
|
self_fingerprint + dependency_fingerprints.join(""))
|
@@ -837,7 +850,7 @@ module Autobuild
|
|
837
850
|
end
|
838
851
|
|
839
852
|
# Make sure that this package will be ignored in the build
|
840
|
-
def disable(
|
853
|
+
def disable(_phases = Autobuild.all_phases)
|
841
854
|
@disabled = true
|
842
855
|
end
|
843
856
|
|
@@ -25,13 +25,8 @@ module Autobuild
|
|
25
25
|
# To override this default behaviour on a per-package basis, use Autotools#use
|
26
26
|
#
|
27
27
|
class Autotools < Configurable
|
28
|
-
attr_accessor
|
29
|
-
|
30
|
-
attr_accessor :aclocal_flags
|
31
|
-
attr_accessor :autoheader_flags
|
32
|
-
attr_accessor :autoconf_flags
|
33
|
-
attr_accessor :automake_flags
|
34
|
-
attr_accessor :bear_flags
|
28
|
+
attr_accessor :using, :configureflags, :aclocal_flags, :autoheader_flags,
|
29
|
+
:autoconf_flags, :automake_flags, :bear_flags
|
35
30
|
|
36
31
|
@builddir = 'build'
|
37
32
|
@@enable_bear_globally = false
|
@@ -151,7 +146,7 @@ module Autobuild
|
|
151
146
|
FileUtils.rm_f configurestamp
|
152
147
|
end
|
153
148
|
|
154
|
-
def import(options
|
149
|
+
def import(**options)
|
155
150
|
# We force a regen after the first checkout. The issue is that
|
156
151
|
# autotools is less robust than it should, and very often it is
|
157
152
|
# better to generate the build system for the system on which we
|
@@ -211,7 +206,8 @@ module Autobuild
|
|
211
206
|
varname, = o.split("=").first
|
212
207
|
if (current_flag = testflags.find { |fl| fl =~ /^#{varname}=/ })
|
213
208
|
current_flag != o
|
214
|
-
else
|
209
|
+
else
|
210
|
+
false
|
215
211
|
end
|
216
212
|
end
|
217
213
|
end
|
@@ -278,7 +274,7 @@ module Autobuild
|
|
278
274
|
file conffile => "#{conffile}#{confext}"
|
279
275
|
elsif using[:autoconf]
|
280
276
|
raise PackageException.new(self, 'prepare'),
|
281
|
-
|
277
|
+
"neither configure.ac nor configure.in present in #{srcdir}"
|
282
278
|
end
|
283
279
|
|
284
280
|
file conffile do
|
@@ -25,6 +25,7 @@ module Autobuild
|
|
25
25
|
end
|
26
26
|
|
27
27
|
attr_writer :full_reconfigures
|
28
|
+
|
28
29
|
def full_reconfigures?
|
29
30
|
@full_reconfigures
|
30
31
|
end
|
@@ -36,8 +37,7 @@ module Autobuild
|
|
36
37
|
# It can be overriden on a per-package basis with CMake.generator=
|
37
38
|
attr_accessor :generator
|
38
39
|
|
39
|
-
attr_reader :prefix_path
|
40
|
-
attr_reader :module_path
|
40
|
+
attr_reader :prefix_path, :module_path
|
41
41
|
|
42
42
|
# Whether files that are not within CMake's install manifest but are
|
43
43
|
# present in the prefix should be deleted. Note that the contents of
|
@@ -63,6 +63,7 @@ module Autobuild
|
|
63
63
|
|
64
64
|
# a key => value association of defines for CMake
|
65
65
|
attr_reader :defines
|
66
|
+
|
66
67
|
# The list of all -D options that should be passed on to CMake
|
67
68
|
def all_defines
|
68
69
|
additional_defines = Hash[
|
@@ -81,6 +82,7 @@ module Autobuild
|
|
81
82
|
# Sets a generator explicitely for this component. See #generator and
|
82
83
|
# CMake.generator
|
83
84
|
attr_writer :generator
|
85
|
+
|
84
86
|
# The CMake generator to use. You must choose one that generates
|
85
87
|
# Makefiles. If not set for this package explicitely, it is using the
|
86
88
|
# global value CMake.generator.
|
@@ -267,7 +269,7 @@ module Autobuild
|
|
267
269
|
run('doc', Autobuild.tool(:doxygen), doxyfile)
|
268
270
|
end
|
269
271
|
|
270
|
-
def common_utility_handling(utility, target, start_msg, done_msg)
|
272
|
+
def common_utility_handling(utility, target, *args, start_msg, done_msg)
|
271
273
|
utility.source_ref_dir = builddir
|
272
274
|
utility.task do
|
273
275
|
progress_start start_msg, :done_message => done_msg do
|
@@ -277,7 +279,7 @@ module Autobuild
|
|
277
279
|
run(utility.name,
|
278
280
|
Autobuild.tool(:make),
|
279
281
|
"-j#{parallel_build_level}",
|
280
|
-
target,
|
282
|
+
target, *args,
|
281
283
|
working_directory: builddir)
|
282
284
|
end
|
283
285
|
yield if block_given?
|
@@ -295,7 +297,7 @@ module Autobuild
|
|
295
297
|
|
296
298
|
def with_tests(target = 'test', &block)
|
297
299
|
common_utility_handling(
|
298
|
-
test_utility, target,
|
300
|
+
test_utility, target, "ARGS=-V",
|
299
301
|
"running tests for %s",
|
300
302
|
"successfully ran tests for %s", &block)
|
301
303
|
end
|
@@ -320,7 +322,7 @@ module Autobuild
|
|
320
322
|
end
|
321
323
|
end
|
322
324
|
|
323
|
-
def import(options
|
325
|
+
def import(**options)
|
324
326
|
super
|
325
327
|
|
326
328
|
Dir.glob(File.join(srcdir, "*.pc.in")) do |file|
|
@@ -410,7 +412,7 @@ module Autobuild
|
|
410
412
|
in_dir(builddir) do
|
411
413
|
unless File.file?(File.join(srcdir, 'CMakeLists.txt'))
|
412
414
|
raise ConfigException.new(self, 'configure'),
|
413
|
-
|
415
|
+
"#{srcdir} contains no CMakeLists.txt file"
|
414
416
|
end
|
415
417
|
|
416
418
|
command = ["cmake"]
|
@@ -438,7 +440,8 @@ module Autobuild
|
|
438
440
|
def show_make_messages?
|
439
441
|
if !@show_make_messages.nil?
|
440
442
|
@show_make_messages
|
441
|
-
else
|
443
|
+
else
|
444
|
+
CMake.show_make_messages?
|
442
445
|
end
|
443
446
|
end
|
444
447
|
|
@@ -545,7 +548,8 @@ module Autobuild
|
|
545
548
|
|
546
549
|
def self_fingerprint
|
547
550
|
return unless (base = super)
|
548
|
-
|
551
|
+
|
552
|
+
all_defines = self.class.defines.merge(defines).sort_by(&:first)
|
549
553
|
Digest::SHA1.hexdigest(base + all_defines.join(""))
|
550
554
|
end
|
551
555
|
end
|
@@ -95,7 +95,7 @@ module Autobuild
|
|
95
95
|
def self.make_subcommand(pkg, phase, *options, &block)
|
96
96
|
invoke_make_parallel(pkg, Autobuild.tool(:make)) do |*make_parallel_options|
|
97
97
|
pkg.run(phase, Autobuild.tool(:make),
|
98
|
-
|
98
|
+
*make_parallel_options, *options, &block)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
@@ -97,19 +97,19 @@ module Autobuild
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
-
attr_writer :corba
|
100
|
+
attr_writer :corba, :orogen_file
|
101
|
+
|
101
102
|
def corba
|
102
103
|
@corba || (@corba.nil? && Orogen.corba)
|
103
104
|
end
|
104
105
|
|
105
106
|
# Overrides the global Orocos.extended_states for this particular package
|
106
107
|
attr_writer :extended_states
|
108
|
+
|
107
109
|
def extended_states
|
108
110
|
@extended_states || (@extended_states.nil? && Orogen.extended_states)
|
109
111
|
end
|
110
112
|
|
111
|
-
attr_writer :orogen_file
|
112
|
-
|
113
113
|
# Path to the orogen file used for this package
|
114
114
|
#
|
115
115
|
# If not set, the class will look for a .orogen file in the package
|
@@ -128,7 +128,7 @@ module Autobuild
|
|
128
128
|
return File.basename(path)
|
129
129
|
end
|
130
130
|
raise ArgumentError,
|
131
|
-
|
131
|
+
"cannot find an oroGen specification file in #{srcdir}"
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
@@ -235,6 +235,13 @@ module Autobuild
|
|
235
235
|
cmdline << "--type-export-policy=#{Orogen.default_type_export_policy}"
|
236
236
|
cmdline << "--transports=#{Orogen.transports.sort.uniq.join(',')}"
|
237
237
|
end
|
238
|
+
if version >= "1.2"
|
239
|
+
cmdline << "--parallel-codegen=#{parallel_build_level}"
|
240
|
+
if (job_server = Autobuild.parallel_task_manager&.job_server)
|
241
|
+
fds = "#{job_server.rio.fileno},#{job_server.wio.fileno}"
|
242
|
+
cmdline << "--jobserver-auth=#{fds}"
|
243
|
+
end
|
244
|
+
end
|
238
245
|
|
239
246
|
# Now, add raw options
|
240
247
|
#
|
@@ -2,8 +2,7 @@ require 'autobuild/pkgconfig'
|
|
2
2
|
|
3
3
|
module Autobuild
|
4
4
|
class InstalledPkgConfig < Package
|
5
|
-
attr_reader :pkgconfig
|
6
|
-
attr_reader :prefix
|
5
|
+
attr_reader :pkgconfig, :prefix
|
7
6
|
|
8
7
|
def initialize(name)
|
9
8
|
@pkgconfig = PkgConfig.new(name)
|
@@ -23,6 +22,7 @@ module Autobuild
|
|
23
22
|
pcfile
|
24
23
|
end
|
25
24
|
end
|
25
|
+
|
26
26
|
def self.installed_pkgconfig(name, &block)
|
27
27
|
InstalledPkgConfig.new(name, &block)
|
28
28
|
end
|
@@ -9,8 +9,7 @@ module Autobuild
|
|
9
9
|
|
10
10
|
# Handler class to build python-based packages
|
11
11
|
class Python < Configurable
|
12
|
-
attr_accessor
|
13
|
-
attr_accessor :installflags
|
12
|
+
attr_accessor :buildflags, :installflags
|
14
13
|
|
15
14
|
def configurestamp
|
16
15
|
"#{builddir}/configure-autobuild-stamp"
|
@@ -28,12 +27,14 @@ module Autobuild
|
|
28
27
|
|
29
28
|
def prepare_for_forced_build
|
30
29
|
super
|
31
|
-
FileUtils.rm_f configurestamp
|
32
30
|
@forced = true
|
33
31
|
end
|
34
32
|
|
35
33
|
def generate_build_command
|
36
|
-
command = [
|
34
|
+
command = %w[python setup.py]
|
35
|
+
command << "egg_info"
|
36
|
+
command << "--egg-base=#{builddir}"
|
37
|
+
command << "build"
|
37
38
|
command << "--build-base=#{builddir}"
|
38
39
|
command += buildflags.flatten
|
39
40
|
command
|
@@ -43,25 +44,35 @@ module Autobuild
|
|
43
44
|
command = generate_build_command
|
44
45
|
command << 'install'
|
45
46
|
command << "--prefix=#{prefix}"
|
47
|
+
command << "--record=#{builddir}/install.log"
|
48
|
+
command << "--single-version-externally-managed"
|
46
49
|
command += installflags.flatten
|
47
50
|
command
|
48
51
|
end
|
49
52
|
|
50
|
-
def
|
53
|
+
def self.user_site(prefix)
|
54
|
+
return File.join(prefix, @user_site) if @user_site
|
55
|
+
|
51
56
|
begin
|
52
|
-
|
53
|
-
|
57
|
+
env = Autobuild.env.resolved_env.merge({ 'PYTHONUSERBASE' => "/" })
|
58
|
+
_, output, _, ret = Open3.popen3(env, 'python -m site --user-site')
|
54
59
|
rescue Exception => e
|
55
60
|
raise "Unable to set PYTHONPATH: #{e.message}"
|
56
61
|
end
|
57
62
|
|
58
63
|
if ret.value.success?
|
59
|
-
output.read.chomp
|
64
|
+
@user_site = Pathname.new(output.read.chomp)
|
65
|
+
.relative_path_from(Pathname.new("/"))
|
66
|
+
File.join(prefix, @user_site)
|
60
67
|
else
|
61
68
|
raise 'Unable to set PYTHONPATH: user site directory disabled?'
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
72
|
+
def python_path
|
73
|
+
self.class.user_site(prefix)
|
74
|
+
end
|
75
|
+
|
65
76
|
# Do the build in builddir
|
66
77
|
def build
|
67
78
|
return unless install_mode?
|
@@ -40,7 +40,7 @@ module Autobuild
|
|
40
40
|
done_message: 'generated documentation for %s' do
|
41
41
|
run 'doc',
|
42
42
|
Autobuild.tool_in_path('ruby'), '-S',
|
43
|
-
|
43
|
+
Autobuild.tool('rake'), rake_doc_task,
|
44
44
|
working_directory: srcdir
|
45
45
|
end
|
46
46
|
end
|
@@ -52,7 +52,7 @@ module Autobuild
|
|
52
52
|
done_message: 'tests passed for %s' do
|
53
53
|
run 'test',
|
54
54
|
Autobuild.tool_in_path('ruby'), '-S',
|
55
|
-
|
55
|
+
Autobuild.tool('rake'), rake_test_task, *rake_test_options,
|
56
56
|
working_directory: srcdir
|
57
57
|
end
|
58
58
|
end
|
@@ -62,7 +62,7 @@ module Autobuild
|
|
62
62
|
if setup_task && File.file?(File.join(srcdir, 'Rakefile'))
|
63
63
|
run 'post-install',
|
64
64
|
Autobuild.tool_in_path('ruby'), '-S',
|
65
|
-
|
65
|
+
Autobuild.tool('rake'), setup_task,
|
66
66
|
working_directory: srcdir
|
67
67
|
end
|
68
68
|
end
|
@@ -80,7 +80,7 @@ module Autobuild
|
|
80
80
|
%w[ext tmp].each do |extdir|
|
81
81
|
if File.directory?(extdir)
|
82
82
|
Find.find(extdir) do |file|
|
83
|
-
next if file !~
|
83
|
+
next if file !~ /<Makefile>|<CMakeCache.txt>$/
|
84
84
|
|
85
85
|
FileUtils.rm_rf file
|
86
86
|
end
|
@@ -94,7 +94,7 @@ module Autobuild
|
|
94
94
|
begin
|
95
95
|
run 'clean',
|
96
96
|
Autobuild.tool_in_path('ruby'), '-S',
|
97
|
-
|
97
|
+
Autobuild.tool('rake'), rake_clean_task,
|
98
98
|
working_directory: srcdir
|
99
99
|
rescue Autobuild::SubcommandFailed => e
|
100
100
|
warn "%s: clean failed. If this package does not need a clean target,"
|