autobuild 1.22.1 → 1.24.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/autobuild/environment.rb +105 -15
- data/lib/autobuild/exceptions.rb +2 -1
- data/lib/autobuild/import/archive.rb +2 -1
- data/lib/autobuild/import/git.rb +113 -22
- data/lib/autobuild/import/svn.rb +2 -1
- data/lib/autobuild/importer.rb +4 -2
- data/lib/autobuild/package.rb +14 -3
- data/lib/autobuild/packages/autotools.rb +2 -1
- data/lib/autobuild/packages/cmake.rb +30 -3
- data/lib/autobuild/packages/python.rb +18 -6
- data/lib/autobuild/parallel.rb +2 -1
- data/lib/autobuild/progress_display.rb +2 -1
- data/lib/autobuild/reporting.rb +4 -2
- data/lib/autobuild/subcommand.rb +6 -3
- data/lib/autobuild/test_utility.rb +4 -2
- data/lib/autobuild/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56a551f16208e61f38188d81b0b944ef6ba663fbc3155ae7e55b009f2adda2e6
|
4
|
+
data.tar.gz: 60e5b9d1b8ffe8ff4e35d006960a251ef82467ee5d17adcb9d9d21e2e7f47b15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30af86ba246a653daac4299675fe4b248b36b2d30750feefd567dc32c6768b9f4b60f877021253699336c5d01c54b69f1d7db6808a6d49ea12ff612f425ca01c
|
7
|
+
data.tar.gz: 16e7849423378e7e5e89f0e40e7cc77173e87290954734aa86195cf15547388bce6a7b234aaf8857593e2d513b9daf4634759026706a6f2e54eb2044b7ee8b96
|
@@ -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
|
@@ -211,7 +218,8 @@ module Autobuild
|
|
211
218
|
if @inherit
|
212
219
|
if name
|
213
220
|
@inherited_variables.include?(name)
|
214
|
-
else
|
221
|
+
else
|
222
|
+
true
|
215
223
|
end
|
216
224
|
end
|
217
225
|
end
|
@@ -245,7 +253,8 @@ module Autobuild
|
|
245
253
|
flag =
|
246
254
|
if !names.last.respond_to?(:to_str)
|
247
255
|
names.pop
|
248
|
-
else
|
256
|
+
else
|
257
|
+
true
|
249
258
|
end
|
250
259
|
|
251
260
|
if flag
|
@@ -342,7 +351,8 @@ module Autobuild
|
|
342
351
|
inherited_environment[name] || []
|
343
352
|
elsif inheritance_mode == :keep && inherit?(name)
|
344
353
|
["$#{name}"]
|
345
|
-
else
|
354
|
+
else
|
355
|
+
[]
|
346
356
|
end
|
347
357
|
|
348
358
|
value = []
|
@@ -439,7 +449,8 @@ module Autobuild
|
|
439
449
|
if file
|
440
450
|
@source_before << { file: file, shell: shell }
|
441
451
|
source_before(shell: shell) # for backwards compatibility
|
442
|
-
else
|
452
|
+
else
|
453
|
+
@source_before.select { |pair| pair[:shell] == shell }
|
443
454
|
.map { |item| item[:file] }
|
444
455
|
end
|
445
456
|
end
|
@@ -457,7 +468,8 @@ module Autobuild
|
|
457
468
|
if file
|
458
469
|
@source_after << { file: file, shell: shell }
|
459
470
|
source_after(shell: shell) # for backwards compatibility
|
460
|
-
else
|
471
|
+
else
|
472
|
+
@source_after.select { |pair| pair[:shell] == shell }
|
461
473
|
.map { |item| item[:file] }
|
462
474
|
end
|
463
475
|
end
|
@@ -542,7 +554,8 @@ module Autobuild
|
|
542
554
|
with_inheritance = with_inheritance.map do |value|
|
543
555
|
if value == variable_expansion
|
544
556
|
base_env[name]
|
545
|
-
else
|
557
|
+
else
|
558
|
+
value
|
546
559
|
end
|
547
560
|
end
|
548
561
|
result[name] = with_inheritance.join(File::PATH_SEPARATOR)
|
@@ -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
|
@@ -633,17 +647,83 @@ module Autobuild
|
|
633
647
|
add_prefix(newprefix, includes)
|
634
648
|
end
|
635
649
|
|
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
|
+
|
636
703
|
PKGCONFIG_PATH_RX = %r{.*/((?:lib|lib64|share)/.*)}.freeze
|
637
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
|
710
|
+
|
638
711
|
# Returns the system-wide search path that is embedded in pkg-config
|
639
712
|
def default_pkgconfig_search_suffixes
|
713
|
+
return [] unless pkgconfig_tool_path
|
714
|
+
|
640
715
|
@default_pkgconfig_search_suffixes ||=
|
641
|
-
`LANG=C #{
|
716
|
+
`LANG=C #{pkgconfig_tool_path} --variable pc_path pkg-config`
|
642
717
|
.strip
|
643
718
|
.split(":")
|
644
719
|
.grep(PKGCONFIG_PATH_RX)
|
645
720
|
.map { |l| l.gsub(PKGCONFIG_PATH_RX, '\1') }
|
646
721
|
.to_set
|
722
|
+
.add("/lib/pkgconfig")
|
723
|
+
# /lib/pkgconfig is added for packages that always install their
|
724
|
+
# libraries in /lib/ instead of the system mandated directory
|
725
|
+
# (/lib/x86_64-linux-gnu/ for 64bit x86 ubuntu multiarch,
|
726
|
+
# /lib64/ for some other 64bit systems)
|
647
727
|
end
|
648
728
|
|
649
729
|
# Updates the environment when a new prefix has been added
|
@@ -670,6 +750,16 @@ module Autobuild
|
|
670
750
|
end
|
671
751
|
end
|
672
752
|
|
753
|
+
cmake_pairs = []
|
754
|
+
cmake_pairs << ["CMAKE_PREFIX_PATH", ["*-config.cmake", "*Config.cmake"]]
|
755
|
+
cmake_pairs << ["CMAKE_MODULE_PATH", ["Find*.cmake"]]
|
756
|
+
cmake_pairs.each do |cmake_var, cmake_file_globs|
|
757
|
+
if !includes || includes.include?(cmake_var)
|
758
|
+
has_cmake = has_cmake_files?(newprefix, *cmake_file_globs)
|
759
|
+
add_path(cmake_var, newprefix) if has_cmake
|
760
|
+
end
|
761
|
+
end
|
762
|
+
|
673
763
|
# Validate the new rubylib path
|
674
764
|
if !includes || includes.include?('RUBYLIB')
|
675
765
|
new_rubylib = "#{newprefix}/lib"
|
data/lib/autobuild/exceptions.rb
CHANGED
data/lib/autobuild/import/git.rb
CHANGED
@@ -10,7 +10,26 @@ module Autobuild
|
|
10
10
|
# Exception raised when a network access is needed while only_local is true
|
11
11
|
class NetworkAccessNeeded < RuntimeError; end
|
12
12
|
|
13
|
+
@default_fingerprint_mode = "commit"
|
14
|
+
|
13
15
|
class << self
|
16
|
+
# Sets the single_branch option globally for all Git importers
|
17
|
+
# This can can be overriden in the oporter options
|
18
|
+
attr_writer :single_branch
|
19
|
+
|
20
|
+
# Whether single_branch is enabled globally
|
21
|
+
def single_branch?
|
22
|
+
!!@single_branch
|
23
|
+
end
|
24
|
+
|
25
|
+
# Sets shallow clones globally (applies to submodules as well)
|
26
|
+
attr_writer :shallow
|
27
|
+
|
28
|
+
# Whether shallow clones is enabled globally
|
29
|
+
def shallow?
|
30
|
+
!!@shallow
|
31
|
+
end
|
32
|
+
|
14
33
|
# Sets the default alternates path used by all Git importers
|
15
34
|
#
|
16
35
|
# Setting it explicitly overrides any value we get from the
|
@@ -40,9 +59,22 @@ module Autobuild
|
|
40
59
|
@default_alternates = cache_dirs.map do |path|
|
41
60
|
File.join(File.expand_path(path), '%s')
|
42
61
|
end
|
43
|
-
else
|
62
|
+
else
|
63
|
+
Array.new
|
44
64
|
end
|
45
65
|
end
|
66
|
+
|
67
|
+
# What git repository fingerprinting uses as reference
|
68
|
+
#
|
69
|
+
# Can either be
|
70
|
+
# - "commit" (the default). Use the commit hash of HEAD
|
71
|
+
# - "tree". Use the tree hash. This will return the same fingerprint
|
72
|
+
# for new commits that do not change the source code. However, it
|
73
|
+
# will fail to detect changes to the working copy that are due
|
74
|
+
# to git checkout filters.
|
75
|
+
#
|
76
|
+
# @return [String]
|
77
|
+
attr_accessor :default_fingerprint_mode
|
46
78
|
end
|
47
79
|
|
48
80
|
def self.default_config
|
@@ -141,17 +173,22 @@ module Autobuild
|
|
141
173
|
Autobuild.warn " branch: 'master'"
|
142
174
|
end
|
143
175
|
|
144
|
-
gitopts, common = Kernel.filter_options
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
176
|
+
gitopts, common = Kernel.filter_options(
|
177
|
+
options,
|
178
|
+
push_to: nil,
|
179
|
+
branch: nil,
|
180
|
+
local_branch: nil,
|
181
|
+
remote_branch: nil,
|
182
|
+
tag: nil,
|
183
|
+
commit: nil,
|
184
|
+
repository_id: nil,
|
185
|
+
source_id: nil,
|
186
|
+
with_submodules: false,
|
187
|
+
fingerprint_mode: Git.default_fingerprint_mode,
|
188
|
+
single_branch: Git.single_branch?,
|
189
|
+
shallow: Git.shallow?
|
190
|
+
)
|
191
|
+
|
155
192
|
if gitopts[:branch] && branch
|
156
193
|
raise ConfigException, "git branch specified with both the option hash "\
|
157
194
|
"and the explicit parameter"
|
@@ -161,6 +198,7 @@ module Autobuild
|
|
161
198
|
super(common)
|
162
199
|
|
163
200
|
@single_branch = gitopts[:single_branch]
|
201
|
+
@shallow = gitopts[:shallow]
|
164
202
|
@with_submodules = gitopts.delete(:with_submodules)
|
165
203
|
@alternates =
|
166
204
|
if @with_submodules
|
@@ -171,12 +209,13 @@ module Autobuild
|
|
171
209
|
|
172
210
|
@remote_name = 'autobuild'
|
173
211
|
@push_to = nil
|
212
|
+
@fingerprint_mode = gitopts[:fingerprint_mode]
|
174
213
|
relocate(repository, gitopts)
|
175
214
|
@additional_remotes = Array.new
|
176
215
|
end
|
177
216
|
|
178
217
|
def vcs_fingerprint(package)
|
179
|
-
rev_parse(package,
|
218
|
+
rev_parse(package, "HEAD", @fingerprint_mode)
|
180
219
|
end
|
181
220
|
|
182
221
|
# The name of the remote that should be set up by the importer
|
@@ -285,9 +324,17 @@ module Autobuild
|
|
285
324
|
@single_branch
|
286
325
|
end
|
287
326
|
|
327
|
+
# Whether clones should be shallow
|
328
|
+
def shallow?
|
329
|
+
@shallow
|
330
|
+
end
|
331
|
+
|
288
332
|
# Set the {#single_branch?} predicate
|
289
333
|
attr_writer :single_branch
|
290
334
|
|
335
|
+
# Set the {#shallow?} predicate
|
336
|
+
attr_writer :shallow
|
337
|
+
|
291
338
|
# @api private
|
292
339
|
#
|
293
340
|
# Verifies that the package's {Package#importdir} points to a git
|
@@ -764,7 +811,8 @@ module Autobuild
|
|
764
811
|
rescue SubcommandFailed => e
|
765
812
|
if e.status == 1
|
766
813
|
false
|
767
|
-
else
|
814
|
+
else
|
815
|
+
raise
|
768
816
|
end
|
769
817
|
end
|
770
818
|
|
@@ -775,7 +823,8 @@ module Autobuild
|
|
775
823
|
rescue SubcommandFailed => e
|
776
824
|
if e.status == 1
|
777
825
|
false
|
778
|
-
else
|
826
|
+
else
|
827
|
+
raise
|
779
828
|
end
|
780
829
|
end
|
781
830
|
|
@@ -1020,7 +1069,8 @@ module Autobuild
|
|
1020
1069
|
File.readlines(alternates_path)
|
1021
1070
|
.map(&:strip)
|
1022
1071
|
.find_all { |l| !l.empty? }
|
1023
|
-
else
|
1072
|
+
else
|
1073
|
+
Array.new
|
1024
1074
|
end
|
1025
1075
|
|
1026
1076
|
alternates = each_alternate_path(package).map do |path|
|
@@ -1251,19 +1301,60 @@ module Autobuild
|
|
1251
1301
|
@lfs_installed = status.success?
|
1252
1302
|
end
|
1253
1303
|
|
1304
|
+
def validate_shallow(package)
|
1305
|
+
return false unless shallow?
|
1306
|
+
|
1307
|
+
if commit
|
1308
|
+
Autoproj.warn "#{package.name}: "\
|
1309
|
+
"Cannot pin a commit while doing a shallow clone"
|
1310
|
+
return false
|
1311
|
+
end
|
1312
|
+
if tag && !single_branch?
|
1313
|
+
Autoproj.warn "#{package.name}: "\
|
1314
|
+
"Cannot pin a tag while doing a shallow clone"
|
1315
|
+
return false
|
1316
|
+
end
|
1317
|
+
if @remote_branch
|
1318
|
+
Autoproj.warn "#{package.name}: "\
|
1319
|
+
"Cannot use remote_branch while doing a shallow clone"
|
1320
|
+
return false
|
1321
|
+
end
|
1322
|
+
true
|
1323
|
+
end
|
1324
|
+
|
1254
1325
|
def checkout(package, _options = Hash.new)
|
1326
|
+
shallow_clone = validate_shallow(package)
|
1327
|
+
|
1255
1328
|
base_dir = File.expand_path('..', package.importdir)
|
1256
1329
|
FileUtils.mkdir_p(base_dir) unless File.directory?(base_dir)
|
1257
1330
|
|
1258
1331
|
clone_options = Array.new
|
1259
|
-
|
1332
|
+
if with_submodules?
|
1333
|
+
clone_options << '--recurse-submodules'
|
1334
|
+
clone_options << '--shallow-submodules' if shallow_clone
|
1335
|
+
end
|
1336
|
+
|
1337
|
+
clone_options << '--depth' << '1' if shallow_clone
|
1338
|
+
|
1260
1339
|
if single_branch?
|
1261
|
-
if
|
1262
|
-
|
1263
|
-
|
1340
|
+
if tag
|
1341
|
+
if tag.start_with?("refs/")
|
1342
|
+
raise ArgumentError, "you cannot provide a full ref for"\
|
1343
|
+
" the tag while cloning a single branch"
|
1344
|
+
end
|
1345
|
+
clone_options << "--branch=#{tag}"
|
1346
|
+
elsif remote_branch
|
1347
|
+
if remote_branch.start_with?("refs/")
|
1348
|
+
raise ArgumentError, "you cannot provide a full ref for"\
|
1349
|
+
" the remote branch while cloning a single branch"
|
1350
|
+
end
|
1351
|
+
clone_options << "--branch=#{remote_branch}"
|
1264
1352
|
end
|
1265
|
-
clone_options << "--
|
1353
|
+
clone_options << "--single-branch"
|
1354
|
+
elsif shallow_clone
|
1355
|
+
clone_options << "--no-single-branch"
|
1266
1356
|
end
|
1357
|
+
|
1267
1358
|
each_alternate_path(package) do |path|
|
1268
1359
|
clone_options << '--reference' << path
|
1269
1360
|
end
|
@@ -1274,7 +1365,7 @@ module Autobuild
|
|
1274
1365
|
Autobuild.tool('git'), 'clone', '-o', remote_name, *clone_options,
|
1275
1366
|
repository, package.importdir, retry: true)
|
1276
1367
|
|
1277
|
-
update_remotes_configuration(package)
|
1368
|
+
update_remotes_configuration(package, only_local: false)
|
1278
1369
|
update(package, only_local: !remote_branch.start_with?("refs/"),
|
1279
1370
|
reset: :force)
|
1280
1371
|
if with_submodules?
|
data/lib/autobuild/import/svn.rb
CHANGED
data/lib/autobuild/importer.rb
CHANGED
@@ -357,7 +357,8 @@ module Autobuild
|
|
357
357
|
message = Autobuild.color('interrupted', :red)
|
358
358
|
if last_error
|
359
359
|
raise last_error
|
360
|
-
else
|
360
|
+
else
|
361
|
+
raise
|
361
362
|
end
|
362
363
|
rescue ::Exception => e
|
363
364
|
message = Autobuild.color('update failed', :red)
|
@@ -410,7 +411,8 @@ module Autobuild
|
|
410
411
|
execute_post_hooks(package)
|
411
412
|
rescue Interrupt
|
412
413
|
if last_error then raise last_error
|
413
|
-
else
|
414
|
+
else
|
415
|
+
raise
|
414
416
|
end
|
415
417
|
rescue ::Exception => e
|
416
418
|
last_error = e
|
data/lib/autobuild/package.rb
CHANGED
@@ -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
|
|
@@ -287,6 +288,11 @@ module Autobuild
|
|
287
288
|
add_env_op EnvOp.new(:add_prefix, prefix, [includes])
|
288
289
|
end
|
289
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
|
+
|
290
296
|
# Hook called by autoproj to set up the default environment for this
|
291
297
|
# package
|
292
298
|
#
|
@@ -327,7 +333,11 @@ module Autobuild
|
|
327
333
|
set[env_op.name] = [self, env_op.values]
|
328
334
|
end
|
329
335
|
end
|
330
|
-
|
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
|
331
341
|
ops << env_op
|
332
342
|
end
|
333
343
|
ops
|
@@ -492,7 +502,8 @@ module Autobuild
|
|
492
502
|
suffix << token.gsub(/%s/, name)
|
493
503
|
elsif suffix.empty?
|
494
504
|
prefix << token
|
495
|
-
else
|
505
|
+
else
|
506
|
+
suffix << token
|
496
507
|
end
|
497
508
|
end
|
498
509
|
if suffix.empty?
|
@@ -269,7 +269,14 @@ module Autobuild
|
|
269
269
|
run('doc', Autobuild.tool(:doxygen), doxyfile)
|
270
270
|
end
|
271
271
|
|
272
|
-
def common_utility_handling(
|
272
|
+
def common_utility_handling( # rubocop:disable Metrics/ParameterLists
|
273
|
+
utility,
|
274
|
+
target,
|
275
|
+
*args,
|
276
|
+
start_msg,
|
277
|
+
done_msg,
|
278
|
+
post_process: nil
|
279
|
+
)
|
273
280
|
utility.source_ref_dir = builddir
|
274
281
|
utility.task do
|
275
282
|
progress_start start_msg, :done_message => done_msg do
|
@@ -284,6 +291,24 @@ module Autobuild
|
|
284
291
|
end
|
285
292
|
yield if block_given?
|
286
293
|
end
|
294
|
+
|
295
|
+
post_process&.call
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
def with_coverage(&block)
|
300
|
+
@with_coverage ||= block
|
301
|
+
end
|
302
|
+
|
303
|
+
def coverage_block
|
304
|
+
proc do
|
305
|
+
next unless test_utility.coverage_enabled?
|
306
|
+
next unless @with_coverage
|
307
|
+
|
308
|
+
progress_start "generating coverage report for %s",
|
309
|
+
done_message: "generated coverage report for %s" do
|
310
|
+
@with_coverage.call
|
311
|
+
end
|
287
312
|
end
|
288
313
|
end
|
289
314
|
|
@@ -299,7 +324,8 @@ module Autobuild
|
|
299
324
|
common_utility_handling(
|
300
325
|
test_utility, target, "ARGS=-V",
|
301
326
|
"running tests for %s",
|
302
|
-
"successfully ran tests for %s",
|
327
|
+
"successfully ran tests for %s",
|
328
|
+
post_process: coverage_block, &block)
|
303
329
|
end
|
304
330
|
|
305
331
|
CMAKE_EQVS = {
|
@@ -440,7 +466,8 @@ module Autobuild
|
|
440
466
|
def show_make_messages?
|
441
467
|
if !@show_make_messages.nil?
|
442
468
|
@show_make_messages
|
443
|
-
else
|
469
|
+
else
|
470
|
+
CMake.show_make_messages?
|
444
471
|
end
|
445
472
|
end
|
446
473
|
|
@@ -27,12 +27,14 @@ module Autobuild
|
|
27
27
|
|
28
28
|
def prepare_for_forced_build
|
29
29
|
super
|
30
|
-
FileUtils.rm_f configurestamp
|
31
30
|
@forced = true
|
32
31
|
end
|
33
32
|
|
34
33
|
def generate_build_command
|
35
|
-
command = [
|
34
|
+
command = %w[python setup.py]
|
35
|
+
command << "egg_info"
|
36
|
+
command << "--egg-base=#{builddir}"
|
37
|
+
command << "build"
|
36
38
|
command << "--build-base=#{builddir}"
|
37
39
|
command += buildflags.flatten
|
38
40
|
command
|
@@ -42,25 +44,35 @@ module Autobuild
|
|
42
44
|
command = generate_build_command
|
43
45
|
command << 'install'
|
44
46
|
command << "--prefix=#{prefix}"
|
47
|
+
command << "--record=#{builddir}/install.log"
|
48
|
+
command << "--single-version-externally-managed"
|
45
49
|
command += installflags.flatten
|
46
50
|
command
|
47
51
|
end
|
48
52
|
|
49
|
-
def
|
53
|
+
def self.user_site(prefix)
|
54
|
+
return File.join(prefix, @user_site) if @user_site
|
55
|
+
|
50
56
|
begin
|
51
|
-
|
52
|
-
|
57
|
+
env = Autobuild.env.resolved_env.merge({ 'PYTHONUSERBASE' => "/" })
|
58
|
+
_, output, _, ret = Open3.popen3(env, 'python -m site --user-site')
|
53
59
|
rescue Exception => e
|
54
60
|
raise "Unable to set PYTHONPATH: #{e.message}"
|
55
61
|
end
|
56
62
|
|
57
63
|
if ret.value.success?
|
58
|
-
output.read.chomp
|
64
|
+
@user_site = Pathname.new(output.read.chomp)
|
65
|
+
.relative_path_from(Pathname.new("/"))
|
66
|
+
File.join(prefix, @user_site)
|
59
67
|
else
|
60
68
|
raise 'Unable to set PYTHONPATH: user site directory disabled?'
|
61
69
|
end
|
62
70
|
end
|
63
71
|
|
72
|
+
def python_path
|
73
|
+
self.class.user_site(prefix)
|
74
|
+
end
|
75
|
+
|
64
76
|
# Do the build in builddir
|
65
77
|
def build
|
66
78
|
return unless install_mode?
|
data/lib/autobuild/parallel.rb
CHANGED
data/lib/autobuild/reporting.rb
CHANGED
@@ -130,7 +130,8 @@ module Autobuild
|
|
130
130
|
# :exit if debug is false, or :raise if it is true
|
131
131
|
def self.default_report_on_package_failures
|
132
132
|
if Autobuild.debug then :raise
|
133
|
-
else
|
133
|
+
else
|
134
|
+
:exit
|
134
135
|
end
|
135
136
|
end
|
136
137
|
|
@@ -163,7 +164,8 @@ module Autobuild
|
|
163
164
|
raise interrupted_by if interrupted_by
|
164
165
|
|
165
166
|
e = if errors.size == 1 then errors.first
|
166
|
-
else
|
167
|
+
else
|
168
|
+
CompositeException.new(errors)
|
167
169
|
end
|
168
170
|
raise e
|
169
171
|
elsif %i[report_silent report].include?(on_package_failures)
|
data/lib/autobuild/subcommand.rb
CHANGED
@@ -251,7 +251,8 @@ module Autobuild::Subprocess # rubocop:disable Style/ClassAndModuleChildren
|
|
251
251
|
end
|
252
252
|
logdir = if target.respond_to?(:logdir)
|
253
253
|
target.logdir
|
254
|
-
else
|
254
|
+
else
|
255
|
+
Autobuild.logdir
|
255
256
|
end
|
256
257
|
|
257
258
|
if target.respond_to?(:working_directory)
|
@@ -271,7 +272,8 @@ module Autobuild::Subprocess # rubocop:disable Style/ClassAndModuleChildren
|
|
271
272
|
|
272
273
|
open_flag = if Autobuild.keep_oldlogs then 'a'
|
273
274
|
elsif Autobuild.registered_logfile?(logname) then 'a'
|
274
|
-
else
|
275
|
+
else
|
276
|
+
'w'
|
275
277
|
end
|
276
278
|
open_flag << ":BINARY"
|
277
279
|
|
@@ -461,7 +463,8 @@ module Autobuild::Subprocess # rubocop:disable Style/ClassAndModuleChildren
|
|
461
463
|
error = Autobuild::SubcommandFailed.new(target, command.join(" "),
|
462
464
|
logname, e.status, subcommand_output)
|
463
465
|
error.retry = if e.retry?.nil? then options[:retry]
|
464
|
-
else
|
466
|
+
else
|
467
|
+
e.retry?
|
465
468
|
end
|
466
469
|
error.phase = phase
|
467
470
|
raise error, e.message
|
@@ -24,7 +24,8 @@ module Autobuild
|
|
24
24
|
def coverage_enabled?
|
25
25
|
if @coverage_enabled.nil?
|
26
26
|
TestUtility.coverage_enabled?
|
27
|
-
else
|
27
|
+
else
|
28
|
+
@coverage_enabled
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
@@ -53,7 +54,8 @@ module Autobuild
|
|
53
54
|
if @coverage_source_dir
|
54
55
|
relative = if package.respond_to?(:builddir)
|
55
56
|
package.builddir
|
56
|
-
else
|
57
|
+
else
|
58
|
+
package.srcdir
|
57
59
|
end
|
58
60
|
File.expand_path(@coverage_source_dir, relative)
|
59
61
|
end
|
data/lib/autobuild/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autobuild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.24.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Joyeux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -277,7 +277,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
277
|
- !ruby/object:Gem::Version
|
278
278
|
version: '0'
|
279
279
|
requirements: []
|
280
|
-
rubygems_version: 3.1.
|
280
|
+
rubygems_version: 3.1.6
|
281
281
|
signing_key:
|
282
282
|
specification_version: 4
|
283
283
|
summary: Library to handle build systems and import mechanisms
|