autobuild 1.20.0 → 1.23.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6431400922a5accc7c11c921745648a3a7fa65e92023bc700b26e6d975bd2d6a
|
4
|
+
data.tar.gz: bd29297ec7e7902e067a08ecb9ea4837a051be82b7db7c6ca40c207657d587bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 726b002c5f1e6a51efe77397546762ce1aa50e546bddecaec4a379a69943646e414e6c0d7ae8a470d29be982a2a50541be800ae40d30a6206723185d1937e30a
|
7
|
+
data.tar.gz: 95088358f807bb6edfd52746e8c30ed85b52b05f2318c09be17fe05b45484f554205d48d280094dc378e322b26ae468a2b5ad72468c34b9b369e4d0aa085a5fa
|
@@ -0,0 +1,25 @@
|
|
1
|
+
name: Rubocop
|
2
|
+
|
3
|
+
on: [pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
|
9
|
+
strategy:
|
10
|
+
matrix:
|
11
|
+
ruby-version: ["2.7", "2.6", "2.5"]
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v2
|
15
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
16
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
17
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
18
|
+
# uses: ruby/setup-ruby@v1
|
19
|
+
uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
- name: Install dependencies
|
23
|
+
run: bundle install
|
24
|
+
- name: Run rubocop
|
25
|
+
run: bundle exec rubocop
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Unit Tests
|
2
|
+
|
3
|
+
on: [pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
|
9
|
+
strategy:
|
10
|
+
matrix:
|
11
|
+
ruby-version: ["2.7", "2.6", "2.5"]
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v2
|
15
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
16
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
17
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
18
|
+
# uses: ruby/setup-ruby@v1
|
19
|
+
uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
- name: Install dependencies
|
23
|
+
run: bundle install
|
24
|
+
- name: Run tests
|
25
|
+
run: bundle exec rake test
|
26
|
+
env:
|
27
|
+
GIT_AUTHOR_NAME: autobuild CI Git Identity
|
28
|
+
GIT_AUTHOR_EMAIL: autobuild@github.actions
|
29
|
+
GIT_COMMITTER_NAME: autobuild CI Git Identity
|
30
|
+
GIT_COMMITTER_EMAIL: autobuild@github.actions
|
data/.rubocop.yml
CHANGED
@@ -2,7 +2,7 @@ inherit_gem:
|
|
2
2
|
rubocop-rock: defaults.yml
|
3
3
|
|
4
4
|
AllCops:
|
5
|
-
TargetRubyVersion: "2.
|
5
|
+
TargetRubyVersion: "2.5"
|
6
6
|
Exclude:
|
7
7
|
- lib/autobuild/packages/genom.rb
|
8
8
|
- vendor/**/*
|
@@ -17,9 +17,6 @@ Style/TrivialAccessors:
|
|
17
17
|
Naming/PredicateName:
|
18
18
|
Enabled: false
|
19
19
|
|
20
|
-
Lint/SplatKeywordArguments:
|
21
|
-
Enabled: false
|
22
|
-
|
23
20
|
Style/FrozenStringLiteralComment:
|
24
21
|
Enabled: false
|
25
22
|
|
@@ -33,7 +30,7 @@ Naming/FileName:
|
|
33
30
|
|
34
31
|
|
35
32
|
|
36
|
-
Layout/
|
33
|
+
Layout/ParameterAlignment:
|
37
34
|
Enabled: false
|
38
35
|
|
39
36
|
Layout/DotPosition:
|
@@ -42,7 +39,7 @@ Layout/DotPosition:
|
|
42
39
|
Layout/FirstParameterIndentation:
|
43
40
|
Enabled: false
|
44
41
|
|
45
|
-
Layout/
|
42
|
+
Layout/AssignmentIndentation:
|
46
43
|
Enabled: false
|
47
44
|
|
48
45
|
Layout/IndentationWidth:
|
@@ -96,7 +93,7 @@ Style/PerlBackrefs:
|
|
96
93
|
Style/StringLiterals:
|
97
94
|
Enabled: false
|
98
95
|
|
99
|
-
Layout/
|
96
|
+
Layout/HeredocIndentation:
|
100
97
|
Enabled: false
|
101
98
|
|
102
99
|
Metrics/LineLength:
|
@@ -104,4 +101,14 @@ Metrics/LineLength:
|
|
104
101
|
Exclude:
|
105
102
|
- test/**/*
|
106
103
|
|
104
|
+
Style/StringConcatenation:
|
105
|
+
Enabled: false
|
106
|
+
|
107
|
+
Style/StderrPuts:
|
108
|
+
Enabled: false
|
109
|
+
|
110
|
+
Style/GlobalStdStream:
|
111
|
+
Enabled: false
|
107
112
|
|
113
|
+
Style/OptionalBooleanParameter:
|
114
|
+
Enabled: false
|
data/autobuild.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'autobuild/version'
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "autobuild"
|
7
7
|
s.version = Autobuild::VERSION
|
8
|
-
s.required_ruby_version = '>= 2.
|
8
|
+
s.required_ruby_version = '>= 2.5.0'
|
9
9
|
s.authors = ["Sylvain Joyeux"]
|
10
10
|
s.email = "sylvain.joyeux@m4x.org"
|
11
11
|
s.summary = "Library to handle build systems and import mechanisms"
|
@@ -23,11 +23,12 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.files = `git ls-files -z`.split("\x0")
|
24
24
|
.reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
25
|
|
26
|
-
s.add_runtime_dependency
|
27
|
-
s.add_runtime_dependency "
|
28
|
-
s.add_runtime_dependency
|
29
|
-
s.add_runtime_dependency 'tty-
|
30
|
-
s.add_runtime_dependency 'tty-
|
26
|
+
s.add_runtime_dependency "concurrent-ruby", "~> 1.1"
|
27
|
+
s.add_runtime_dependency "pastel", "~> 0.7.0"
|
28
|
+
s.add_runtime_dependency "rake", "~> 13.0"
|
29
|
+
s.add_runtime_dependency 'tty-cursor', '~> 0.7.0'
|
30
|
+
s.add_runtime_dependency 'tty-prompt', '~> 0.21.0'
|
31
|
+
s.add_runtime_dependency 'tty-screen', '~> 0.8.0'
|
31
32
|
s.add_runtime_dependency "utilrb", "~> 3.0", ">= 3.0"
|
32
33
|
s.add_development_dependency "fakefs"
|
33
34
|
s.add_development_dependency "flexmock", '~> 2.0', ">= 2.0.0"
|
data/bin/autobuild
CHANGED
data/lib/autobuild/config.rb
CHANGED
@@ -198,7 +198,7 @@ module Autobuild
|
|
198
198
|
opts.separator ""
|
199
199
|
opts.separator "General behaviour"
|
200
200
|
opts.on('--nice NICE', Integer,
|
201
|
-
|
201
|
+
'nice the subprocesses to the given value') do |v|
|
202
202
|
Autobuild.nice = v
|
203
203
|
end
|
204
204
|
opts.on("-h", "--help", "Show this message") do
|
@@ -253,7 +253,7 @@ module Autobuild
|
|
253
253
|
opts.separator ""
|
254
254
|
opts.separator "Mail reports"
|
255
255
|
opts.on("--mail-from EMAIL", String,
|
256
|
-
|
256
|
+
"From: field of the sent mails") do |from_email|
|
257
257
|
mail[:from] = from_email
|
258
258
|
end
|
259
259
|
opts.on("--mail-to EMAILS", String, "comma-separated list of emails "\
|
@@ -262,7 +262,7 @@ module Autobuild
|
|
262
262
|
mail[:to] += emails.split(',')
|
263
263
|
end
|
264
264
|
opts.on("--mail-subject SUBJECT", String,
|
265
|
-
|
265
|
+
"Subject: field of the sent mails") do |subject_email|
|
266
266
|
mail[:subject] = subject_email
|
267
267
|
end
|
268
268
|
opts.on("--mail-smtp HOSTNAME", String, "address of the mail server "\
|
@@ -301,7 +301,7 @@ module Autobuild
|
|
301
301
|
|
302
302
|
def self.apply(packages, buildname = "autobuild", phases = [], options = Hash.new)
|
303
303
|
options = Kernel.validate_options options,
|
304
|
-
|
304
|
+
parallel: Autobuild.parallel_build_level
|
305
305
|
|
306
306
|
if Autobuild.mail[:to]
|
307
307
|
if !Autobuild::HAS_RMAIL
|
@@ -361,7 +361,7 @@ module Autobuild
|
|
361
361
|
yield(task.package, phase) if package_tasks[task.name]
|
362
362
|
end
|
363
363
|
else
|
364
|
-
proc {
|
364
|
+
proc {}
|
365
365
|
end
|
366
366
|
|
367
367
|
invoker.invoke_parallel([Rake::Task["#{buildname}-#{phase}"]],
|
@@ -29,37 +29,44 @@ module Autobuild
|
|
29
29
|
|
30
30
|
SHELL_VAR_EXPANSION =
|
31
31
|
if windows? then "%%%s%%".freeze
|
32
|
-
else
|
32
|
+
else
|
33
|
+
"$%s".freeze
|
33
34
|
end
|
34
35
|
SHELL_SET_COMMAND =
|
35
36
|
if windows? then "set %s=%s".freeze
|
36
|
-
else
|
37
|
+
else
|
38
|
+
"%s=\"%s\"".freeze
|
37
39
|
end
|
38
40
|
SHELL_CONDITIONAL_SET_COMMAND =
|
39
41
|
if windows? then "set %s=%s".freeze
|
40
|
-
else
|
42
|
+
else
|
43
|
+
"if test -z \"$%1$s\"; then\n %1$s=\"%3$s\"\n"\
|
41
44
|
"else\n %1$s=\"%2$s\"\nfi".freeze
|
42
45
|
end
|
43
46
|
SHELL_UNSET_COMMAND = "unset %s".freeze
|
44
47
|
SHELL_EXPORT_COMMAND =
|
45
48
|
if windows? then "set %s".freeze
|
46
|
-
else
|
49
|
+
else
|
50
|
+
"export %s".freeze
|
47
51
|
end
|
48
52
|
SHELL_SOURCE_SCRIPT =
|
49
53
|
if windows? then "%s".freeze
|
50
|
-
else
|
54
|
+
else
|
55
|
+
'. "%s"'.freeze
|
51
56
|
end
|
52
57
|
|
53
58
|
LIBRARY_PATH =
|
54
59
|
if macos? then 'DYLD_LIBRARY_PATH'.freeze
|
55
60
|
elsif windows? then 'PATH'.freeze
|
56
|
-
else
|
61
|
+
else
|
62
|
+
'LD_LIBRARY_PATH'.freeze
|
57
63
|
end
|
58
64
|
|
59
65
|
LIBRARY_SUFFIX =
|
60
66
|
if macos? then 'dylib'
|
61
67
|
elsif windows? then 'dll'
|
62
|
-
else
|
68
|
+
else
|
69
|
+
'so'
|
63
70
|
end
|
64
71
|
|
65
72
|
ORIGINAL_ENV = Hash.new
|
@@ -89,10 +96,7 @@ module Autobuild
|
|
89
96
|
# path separator (File::PATH_SEPARATOR)
|
90
97
|
attr_reader :environment
|
91
98
|
|
92
|
-
attr_reader :inherited_variables
|
93
|
-
|
94
|
-
attr_reader :system_env
|
95
|
-
attr_reader :original_env
|
99
|
+
attr_reader :inherited_variables, :system_env, :original_env, :target_arch
|
96
100
|
|
97
101
|
# The set of environment variables that are known to hold paths on the
|
98
102
|
# filesystem
|
@@ -162,7 +166,8 @@ module Autobuild
|
|
162
166
|
inherited_environment.delete(name)
|
163
167
|
init_from_env(name)
|
164
168
|
else
|
165
|
-
environment.keys
|
169
|
+
keys = environment.keys # get keys first to avoid delete-while-iterating
|
170
|
+
keys.each do |env_key|
|
166
171
|
reset(env_key)
|
167
172
|
end
|
168
173
|
end
|
@@ -180,7 +185,8 @@ module Autobuild
|
|
180
185
|
environment[name] = nil
|
181
186
|
inherited_environment[name] = nil
|
182
187
|
else
|
183
|
-
environment.keys
|
188
|
+
keys = environment.keys # get keys first to avoid delete-while-iterating
|
189
|
+
keys.each do |env_key|
|
184
190
|
clear(env_key)
|
185
191
|
end
|
186
192
|
end
|
@@ -212,7 +218,8 @@ module Autobuild
|
|
212
218
|
if @inherit
|
213
219
|
if name
|
214
220
|
@inherited_variables.include?(name)
|
215
|
-
else
|
221
|
+
else
|
222
|
+
true
|
216
223
|
end
|
217
224
|
end
|
218
225
|
end
|
@@ -228,7 +235,9 @@ module Autobuild
|
|
228
235
|
# @see inherit? inherit
|
229
236
|
def inherit=(value)
|
230
237
|
@inherit = value
|
231
|
-
|
238
|
+
# get keys first to avoid modify-while-iterating
|
239
|
+
keys = inherited_environment.keys
|
240
|
+
keys.each do |env_name|
|
232
241
|
init_from_env(env_name)
|
233
242
|
end
|
234
243
|
end
|
@@ -244,7 +253,8 @@ module Autobuild
|
|
244
253
|
flag =
|
245
254
|
if !names.last.respond_to?(:to_str)
|
246
255
|
names.pop
|
247
|
-
else
|
256
|
+
else
|
257
|
+
true
|
248
258
|
end
|
249
259
|
|
250
260
|
if flag
|
@@ -328,7 +338,7 @@ module Autobuild
|
|
328
338
|
end
|
329
339
|
end
|
330
340
|
options = Kernel.validate_options options,
|
331
|
-
|
341
|
+
inheritance_mode: :expand
|
332
342
|
inheritance_mode = options[:inheritance_mode]
|
333
343
|
|
334
344
|
if !include?(name)
|
@@ -341,7 +351,8 @@ module Autobuild
|
|
341
351
|
inherited_environment[name] || []
|
342
352
|
elsif inheritance_mode == :keep && inherit?(name)
|
343
353
|
["$#{name}"]
|
344
|
-
else
|
354
|
+
else
|
355
|
+
[]
|
345
356
|
end
|
346
357
|
|
347
358
|
value = []
|
@@ -438,7 +449,8 @@ module Autobuild
|
|
438
449
|
if file
|
439
450
|
@source_before << { file: file, shell: shell }
|
440
451
|
source_before(shell: shell) # for backwards compatibility
|
441
|
-
else
|
452
|
+
else
|
453
|
+
@source_before.select { |pair| pair[:shell] == shell }
|
442
454
|
.map { |item| item[:file] }
|
443
455
|
end
|
444
456
|
end
|
@@ -456,7 +468,8 @@ module Autobuild
|
|
456
468
|
if file
|
457
469
|
@source_after << { file: file, shell: shell }
|
458
470
|
source_after(shell: shell) # for backwards compatibility
|
459
|
-
else
|
471
|
+
else
|
472
|
+
@source_after.select { |pair| pair[:shell] == shell }
|
460
473
|
.map { |item| item[:file] }
|
461
474
|
end
|
462
475
|
end
|
@@ -511,8 +524,8 @@ module Autobuild
|
|
511
524
|
end
|
512
525
|
export.update.each do |name, (with_inheritance, without_inheritance)|
|
513
526
|
io.puts format(SHELL_CONDITIONAL_SET_COMMAND, name,
|
514
|
-
|
515
|
-
|
527
|
+
with_inheritance.join(File::PATH_SEPARATOR),
|
528
|
+
without_inheritance.join(File::PATH_SEPARATOR))
|
516
529
|
io.puts format(SHELL_EXPORT_COMMAND, name)
|
517
530
|
end
|
518
531
|
source_after(shell: shell).each do |path|
|
@@ -541,7 +554,8 @@ module Autobuild
|
|
541
554
|
with_inheritance = with_inheritance.map do |value|
|
542
555
|
if value == variable_expansion
|
543
556
|
base_env[name]
|
544
|
-
else
|
557
|
+
else
|
558
|
+
value
|
545
559
|
end
|
546
560
|
end
|
547
561
|
result[name] = with_inheritance.join(File::PATH_SEPARATOR)
|
@@ -555,9 +569,8 @@ module Autobuild
|
|
555
569
|
# DEPRECATED: use add_path instead
|
556
570
|
def self.pathvar(path, varname)
|
557
571
|
if File.directory?(path)
|
558
|
-
if block_given?
|
559
|
-
|
560
|
-
end
|
572
|
+
return if block_given? && !yield(path)
|
573
|
+
|
561
574
|
add_path(varname, path)
|
562
575
|
end
|
563
576
|
end
|
@@ -604,7 +617,8 @@ module Autobuild
|
|
604
617
|
@arch_size ||=
|
605
618
|
if RbConfig::CONFIG['host_cpu'] =~ /64/
|
606
619
|
64
|
607
|
-
else
|
620
|
+
else
|
621
|
+
32
|
608
622
|
end
|
609
623
|
@arch_size
|
610
624
|
end
|
@@ -614,8 +628,6 @@ module Autobuild
|
|
614
628
|
@arch_size, @arch_names = nil
|
615
629
|
end
|
616
630
|
|
617
|
-
attr_reader :target_arch
|
618
|
-
|
619
631
|
def arch_names
|
620
632
|
return @arch_names if @arch_names
|
621
633
|
|
@@ -635,38 +647,85 @@ module Autobuild
|
|
635
647
|
add_prefix(newprefix, includes)
|
636
648
|
end
|
637
649
|
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
650
|
+
def default_cmake_search_globs(prefix, *file_globs)
|
651
|
+
lib_globs = %w[lib]
|
652
|
+
|
653
|
+
case arch_size
|
654
|
+
when 32
|
655
|
+
lib_globs << "lib32"
|
656
|
+
lib_globs << "libx32"
|
657
|
+
when 64
|
658
|
+
lib_globs << "lib64"
|
659
|
+
end
|
660
|
+
|
661
|
+
unless arch_names.empty?
|
662
|
+
arch_names.each do |arch_name|
|
663
|
+
lib_globs << File.join("lib", arch_name)
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
lib_share_glob = "{#{lib_globs.join(',')},share}"
|
668
|
+
file_glob = "{#{file_globs.join(',')}}"
|
669
|
+
|
670
|
+
# Reference: https://cmake.org/cmake/help/latest/command/find_package.html
|
671
|
+
#
|
672
|
+
# <prefix>/ (W)
|
673
|
+
# <prefix>/(cmake|CMake)/ (W)
|
674
|
+
# <prefix>/<name>*/ (W)
|
675
|
+
# <prefix>/<name>*/(cmake|CMake)/ (W)
|
676
|
+
# <prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/ (U)
|
677
|
+
# <prefix>/(lib/<arch>|lib*|share)/<name>*/ (U)
|
678
|
+
# <prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (U)
|
679
|
+
# <prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/ (W/U)
|
680
|
+
# <prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/ (W/U)
|
681
|
+
# <prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (W/U)
|
682
|
+
[
|
683
|
+
File.join(prefix, file_glob),
|
684
|
+
File.join(prefix, "{cmake,CMake}", file_glob),
|
685
|
+
File.join(prefix, "*", file_glob),
|
686
|
+
File.join(prefix, "*", "{cmake/CMake}", file_glob),
|
687
|
+
File.join(prefix, lib_share_glob, "cmake", "*", file_glob),
|
688
|
+
File.join(prefix, lib_share_glob, "*", file_glob),
|
689
|
+
File.join(prefix, lib_share_glob, "*", "{cmake,CMake}", file_glob),
|
690
|
+
File.join(prefix, "*", lib_share_glob, "cmake", "*", file_glob),
|
691
|
+
File.join(prefix, "*", lib_share_glob, "*", file_glob),
|
692
|
+
File.join(prefix, "*", lib_share_glob, "*", "{cmake,CMake}", file_glob)
|
693
|
+
]
|
694
|
+
end
|
695
|
+
|
696
|
+
def has_cmake_files?(prefix, *file_globs)
|
697
|
+
default_cmake_search_globs(prefix, *file_globs).each do |glob_path|
|
698
|
+
return true unless Dir[glob_path].empty?
|
699
|
+
end
|
700
|
+
false
|
701
|
+
end
|
702
|
+
|
703
|
+
PKGCONFIG_PATH_RX = %r{.*/((?:lib|lib64|share)/.*)}.freeze
|
704
|
+
|
705
|
+
def pkgconfig_tool_path
|
706
|
+
@pkgconfig_tool_path ||= Autobuild.tool_in_path("pkg-config", env: self)
|
707
|
+
rescue ArgumentError
|
708
|
+
nil
|
709
|
+
end
|
644
710
|
|
645
711
|
# Returns the system-wide search path that is embedded in pkg-config
|
646
712
|
def default_pkgconfig_search_suffixes
|
647
|
-
|
648
|
-
nonexistent_path_rx = PKGCONFIG_INFO[1]
|
713
|
+
return [] unless pkgconfig_tool_path
|
649
714
|
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
map { |l| l.gsub(nonexistent_path_rx, '\1') }.
|
658
|
-
to_set
|
659
|
-
@default_pkgconfig_search_suffixes = found_paths | not_found
|
660
|
-
end
|
661
|
-
@default_pkgconfig_search_suffixes
|
715
|
+
@default_pkgconfig_search_suffixes ||=
|
716
|
+
`LANG=C #{pkgconfig_tool_path} --variable pc_path pkg-config`
|
717
|
+
.strip
|
718
|
+
.split(":")
|
719
|
+
.grep(PKGCONFIG_PATH_RX)
|
720
|
+
.map { |l| l.gsub(PKGCONFIG_PATH_RX, '\1') }
|
721
|
+
.to_set
|
662
722
|
end
|
663
723
|
|
664
724
|
# Updates the environment when a new prefix has been added
|
665
725
|
def add_prefix(newprefix, includes = nil)
|
666
|
-
if !includes || includes.include?('PATH')
|
667
|
-
|
668
|
-
|
669
|
-
end
|
726
|
+
if (!includes || includes.include?('PATH')) &&
|
727
|
+
File.directory?("#{newprefix}/bin")
|
728
|
+
add_path('PATH', "#{newprefix}/bin")
|
670
729
|
end
|
671
730
|
|
672
731
|
if !includes || includes.include?('PKG_CONFIG_PATH')
|
@@ -686,6 +745,16 @@ module Autobuild
|
|
686
745
|
end
|
687
746
|
end
|
688
747
|
|
748
|
+
cmake_pairs = []
|
749
|
+
cmake_pairs << ["CMAKE_PREFIX_PATH", ["*-config.cmake", "*Config.cmake"]]
|
750
|
+
cmake_pairs << ["CMAKE_MODULE_PATH", ["Find*.cmake"]]
|
751
|
+
cmake_pairs.each do |cmake_var, cmake_file_globs|
|
752
|
+
if !includes || includes.include?(cmake_var)
|
753
|
+
has_cmake = has_cmake_files?(newprefix, *cmake_file_globs)
|
754
|
+
add_path(cmake_var, newprefix) if has_cmake
|
755
|
+
end
|
756
|
+
end
|
757
|
+
|
689
758
|
# Validate the new rubylib path
|
690
759
|
if !includes || includes.include?('RUBYLIB')
|
691
760
|
new_rubylib = "#{newprefix}/lib"
|
@@ -717,7 +786,7 @@ module Autobuild
|
|
717
786
|
begin
|
718
787
|
stat = File.stat(full)
|
719
788
|
return full if stat.file? && stat.executable?
|
720
|
-
rescue ::Exception # rubocop:disable Lint/
|
789
|
+
rescue ::Exception # rubocop:disable Lint/SuppressedException
|
721
790
|
end
|
722
791
|
end
|
723
792
|
nil
|
@@ -743,7 +812,7 @@ module Autobuild
|
|
743
812
|
def prepare
|
744
813
|
# Set up some important autobuild parameters
|
745
814
|
inherit 'PATH', 'PKG_CONFIG_PATH', 'RUBYLIB', \
|
746
|
-
|
815
|
+
LIBRARY_PATH, 'CMAKE_PREFIX_PATH', 'PYTHONPATH'
|
747
816
|
end
|
748
817
|
|
749
818
|
# Method called to filter the environment variables before they are set,
|
@@ -868,9 +937,8 @@ module Autobuild
|
|
868
937
|
# @deprecated use {Env#add_path} on {.env} instead
|
869
938
|
def self.pathvar(path, varname)
|
870
939
|
if File.directory?(path)
|
871
|
-
if block_given?
|
872
|
-
|
873
|
-
end
|
940
|
+
return if block_given? && !yield(path)
|
941
|
+
|
874
942
|
env.add_path(varname, path)
|
875
943
|
end
|
876
944
|
end
|
data/lib/autobuild/exceptions.rb
CHANGED
@@ -24,6 +24,7 @@ module Autobuild
|
|
24
24
|
@target = target
|
25
25
|
@phase = phase
|
26
26
|
@retry = options[:retry]
|
27
|
+
super()
|
27
28
|
end
|
28
29
|
|
29
30
|
alias exception_message to_s
|
@@ -32,7 +33,8 @@ module Autobuild
|
|
32
33
|
target_name =
|
33
34
|
if target.respond_to?(:name)
|
34
35
|
target.name
|
35
|
-
else
|
36
|
+
else
|
37
|
+
target.to_str
|
36
38
|
end
|
37
39
|
|
38
40
|
if target && phase
|
@@ -52,10 +54,11 @@ module Autobuild
|
|
52
54
|
class ConfigException < PhaseException
|
53
55
|
def initialize(target = nil, phase = nil, options = Hash.new)
|
54
56
|
options, other_options = Kernel.filter_options options,
|
55
|
-
|
57
|
+
retry: false
|
56
58
|
super(target, phase, options.merge(other_options))
|
57
59
|
end
|
58
60
|
end
|
61
|
+
|
59
62
|
## An error occured in a package
|
60
63
|
class PackageException < PhaseException
|
61
64
|
def mail?
|
@@ -64,7 +67,7 @@ module Autobuild
|
|
64
67
|
|
65
68
|
def initialize(target = nil, phase = nil, options = Hash.new)
|
66
69
|
options, other_options = Kernel.filter_options options,
|
67
|
-
|
70
|
+
retry: false
|
68
71
|
super(target, phase, options.merge(other_options))
|
69
72
|
end
|
70
73
|
end
|
@@ -76,6 +79,7 @@ module Autobuild
|
|
76
79
|
|
77
80
|
# The subcommand is not found
|
78
81
|
class CommandNotFound < PhaseException; end
|
82
|
+
|
79
83
|
# An error occured while running a subcommand
|
80
84
|
class SubcommandFailed < PhaseException
|
81
85
|
def mail?
|
@@ -84,8 +88,10 @@ module Autobuild
|
|
84
88
|
|
85
89
|
attr_writer :retry
|
86
90
|
attr_reader :command, :logfile, :status, :output
|
91
|
+
|
87
92
|
def initialize(*args)
|
88
|
-
|
93
|
+
case args.size
|
94
|
+
when 1
|
89
95
|
sc = args[0]
|
90
96
|
target = sc.target
|
91
97
|
command = sc.command
|
@@ -93,7 +99,7 @@ module Autobuild
|
|
93
99
|
status = sc.status
|
94
100
|
output = sc.output
|
95
101
|
@orig_message = sc.exception_message
|
96
|
-
|
102
|
+
when 4, 5
|
97
103
|
target, command, logfile, status, output = *args
|
98
104
|
else
|
99
105
|
raise ArgumentError, "wrong number of arguments, should be 1 or 4..5"
|
@@ -140,13 +146,14 @@ module Autobuild
|
|
140
146
|
|
141
147
|
# The exception type that is used to report multiple errors that occured
|
142
148
|
# when ignore_errors is set
|
143
|
-
class CompositeException <
|
149
|
+
class CompositeException < PhaseException
|
144
150
|
# The array of exception objects representing all the errors that
|
145
151
|
# occured during the build
|
146
152
|
attr_reader :original_errors
|
147
153
|
|
148
154
|
def initialize(original_errors)
|
149
155
|
@original_errors = original_errors
|
156
|
+
super()
|
150
157
|
end
|
151
158
|
|
152
159
|
def mail?
|