autobuild 1.17.0 → 1.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +107 -0
- data/Gemfile +2 -1
- data/Rakefile +1 -4
- data/autobuild.gemspec +14 -11
- data/bin/autobuild +4 -3
- data/lib/autobuild.rb +4 -5
- data/lib/autobuild/build_logfile.rb +6 -4
- data/lib/autobuild/config.rb +90 -40
- data/lib/autobuild/configurable.rb +30 -18
- data/lib/autobuild/environment.rb +126 -120
- data/lib/autobuild/exceptions.rb +48 -31
- data/lib/autobuild/import/archive.rb +134 -82
- data/lib/autobuild/import/cvs.rb +28 -24
- data/lib/autobuild/import/darcs.rb +13 -16
- data/lib/autobuild/import/git-lfs.rb +37 -30
- data/lib/autobuild/import/git.rb +231 -179
- data/lib/autobuild/import/hg.rb +23 -18
- data/lib/autobuild/import/svn.rb +48 -29
- data/lib/autobuild/importer.rb +530 -499
- data/lib/autobuild/mail_reporter.rb +77 -77
- data/lib/autobuild/package.rb +171 -101
- data/lib/autobuild/packages/autotools.rb +47 -42
- data/lib/autobuild/packages/cmake.rb +71 -65
- data/lib/autobuild/packages/dummy.rb +9 -8
- data/lib/autobuild/packages/genom.rb +1 -1
- data/lib/autobuild/packages/gnumake.rb +19 -13
- data/lib/autobuild/packages/import.rb +2 -6
- data/lib/autobuild/packages/orogen.rb +32 -31
- data/lib/autobuild/packages/pkgconfig.rb +2 -2
- data/lib/autobuild/packages/python.rb +7 -2
- data/lib/autobuild/packages/ruby.rb +22 -17
- data/lib/autobuild/parallel.rb +35 -39
- data/lib/autobuild/pkgconfig.rb +25 -13
- data/lib/autobuild/progress_display.rb +23 -23
- data/lib/autobuild/rake_task_extension.rb +6 -6
- data/lib/autobuild/reporting.rb +38 -26
- data/lib/autobuild/subcommand.rb +72 -65
- data/lib/autobuild/test.rb +8 -7
- data/lib/autobuild/test_utility.rb +10 -9
- data/lib/autobuild/timestamps.rb +28 -23
- data/lib/autobuild/tools.rb +17 -16
- data/lib/autobuild/utility.rb +16 -18
- data/lib/autobuild/version.rb +1 -1
- metadata +39 -38
@@ -10,18 +10,17 @@ module Autobuild
|
|
10
10
|
def self.autotools(opts, &proc)
|
11
11
|
Autotools.new(opts, &proc)
|
12
12
|
end
|
13
|
-
|
14
|
-
if Autobuild.macos?
|
15
|
-
Autobuild.programs['libtoolize'] = "glibtoolize"
|
16
|
-
end
|
17
13
|
|
18
|
-
|
14
|
+
Autobuild.programs['libtoolize'] = "glibtoolize" if Autobuild.macos?
|
15
|
+
|
16
|
+
#
|
19
17
|
# ==== Handles autotools-based packages
|
20
18
|
#
|
21
19
|
# == Used programs (see <tt>Autobuild.programs</tt>)
|
22
|
-
# Autotools will use the 'aclocal', 'autoheader', 'autoconf', 'automake'
|
23
|
-
# programs defined on Autobuild.programs. autoheader and bear
|
24
|
-
# aclocal, autoconf and automake use are
|
20
|
+
# Autotools will use the 'aclocal', 'autoheader', 'autoconf', 'automake'
|
21
|
+
# and 'bear' programs defined on Autobuild.programs. autoheader and bear
|
22
|
+
# are disabled by default, aclocal, autoconf and automake use are
|
23
|
+
# autodetected.
|
25
24
|
#
|
26
25
|
# To override this default behaviour on a per-package basis, use Autotools#use
|
27
26
|
#
|
@@ -47,10 +46,13 @@ def self.enable_bear_globally=(flag)
|
|
47
46
|
|
48
47
|
def using_bear?
|
49
48
|
return Autotools.enable_bear_globally? if using[:bear].nil?
|
49
|
+
|
50
50
|
using[:bear]
|
51
51
|
end
|
52
52
|
|
53
|
-
def configurestamp
|
53
|
+
def configurestamp
|
54
|
+
"#{builddir}/config.status"
|
55
|
+
end
|
54
56
|
|
55
57
|
def initialize(options)
|
56
58
|
@using = Hash.new
|
@@ -66,11 +68,14 @@ def initialize(options)
|
|
66
68
|
|
67
69
|
def common_utility_handling(utility, target)
|
68
70
|
utility.task do
|
69
|
-
progress_start "generating documentation for %s",
|
71
|
+
progress_start "generating documentation for %s",
|
72
|
+
done_message: 'generated documentation for %s' do
|
70
73
|
if internal_doxygen_mode?
|
71
74
|
run_doxygen
|
72
75
|
else
|
73
|
-
run(utility.name,
|
76
|
+
run(utility.name,
|
77
|
+
Autobuild.tool(:make), "-j#{parallel_build_level}",
|
78
|
+
target, working_directory: builddir)
|
74
79
|
end
|
75
80
|
yield if block_given?
|
76
81
|
end
|
@@ -117,10 +122,9 @@ def use(*programs)
|
|
117
122
|
programs
|
118
123
|
end
|
119
124
|
|
120
|
-
|
121
|
-
programs = Array[*programs].
|
125
|
+
unless programs.kind_of?(Hash)
|
126
|
+
programs = Array[*programs].each_with_object({}) do |spec, progs|
|
122
127
|
progs[spec.first] = spec.last
|
123
|
-
progs
|
124
128
|
end
|
125
129
|
end
|
126
130
|
programs.each do |name, opt|
|
@@ -140,9 +144,7 @@ def prepare_for_forced_build
|
|
140
144
|
|
141
145
|
if using[:automake]
|
142
146
|
Find.find(srcdir) do |path|
|
143
|
-
if File.basename(path) == "Makefile.in"
|
144
|
-
FileUtils.rm_f path
|
145
|
-
end
|
147
|
+
FileUtils.rm_f(path) if File.basename(path) == "Makefile.in"
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
@@ -161,7 +163,6 @@ def import(options = Hash.new)
|
|
161
163
|
is_checking_out = !File.directory?(srcdir)
|
162
164
|
|
163
165
|
super
|
164
|
-
|
165
166
|
ensure
|
166
167
|
if is_checking_out && File.directory?(srcdir)
|
167
168
|
FileUtils.touch File.join(srcdir, ".fresh_checkout")
|
@@ -190,7 +191,9 @@ def prepare
|
|
190
191
|
if output && (match = /with options "(.*)"/.match(output))
|
191
192
|
options = Shellwords.shellwords(match[1])
|
192
193
|
else
|
193
|
-
raise UnexpectedConfigStatusOutput, "invalid output of
|
194
|
+
raise UnexpectedConfigStatusOutput, "invalid output of "\
|
195
|
+
"config.status --version, expected a line with "\
|
196
|
+
"`with options \"OPTIONS\"`"
|
194
197
|
end
|
195
198
|
|
196
199
|
# Add the --prefix option to the configureflags array
|
@@ -205,8 +208,8 @@ def prepare
|
|
205
208
|
else
|
206
209
|
# This is an envvar entry. Ignore it if it is not
|
207
210
|
# explicitely given in configureflags
|
208
|
-
varname,
|
209
|
-
if current_flag = testflags.find { |fl| fl =~ /^#{varname}=/ }
|
211
|
+
varname, = o.split("=").first
|
212
|
+
if (current_flag = testflags.find { |fl| fl =~ /^#{varname}=/ })
|
210
213
|
current_flag != o
|
211
214
|
else false
|
212
215
|
end
|
@@ -215,7 +218,8 @@ def prepare
|
|
215
218
|
new_opt = testflags.find { |o| !options.include?(o) }
|
216
219
|
if old_opt || new_opt
|
217
220
|
if Autobuild.verbose
|
218
|
-
Autobuild.message "forcing reconfiguration of #{name}
|
221
|
+
Autobuild.message "forcing reconfiguration of #{name} "\
|
222
|
+
"(#{old_opt} != #{new_opt})"
|
219
223
|
end
|
220
224
|
FileUtils.rm_f configurestamp # to force reconfiguration
|
221
225
|
end
|
@@ -240,16 +244,15 @@ def tool_program(tool)
|
|
240
244
|
# In general, you should not need that.
|
241
245
|
attr_accessor :force_config_status
|
242
246
|
|
243
|
-
|
244
|
-
def autodetect_needed_stages
|
247
|
+
private def autodetect_needed_stages
|
245
248
|
# Autodetect autoconf/aclocal/automake
|
246
249
|
#
|
247
250
|
# Let the user disable the use of autoconf explicitely by using 'false'.
|
248
251
|
# 'nil' means autodetection
|
249
252
|
if using[:autoconf].nil?
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
+
has_configure_in = %w[configure.in configure.ac].
|
254
|
+
any? { |p| File.file?(File.join(srcdir, p)) }
|
255
|
+
using[:autoconf] = true if has_configure_in
|
253
256
|
end
|
254
257
|
using[:aclocal] = using[:autoconf] if using[:aclocal].nil?
|
255
258
|
if using[:automake].nil?
|
@@ -261,7 +264,8 @@ def autodetect_needed_stages
|
|
261
264
|
end
|
262
265
|
|
263
266
|
if using[:autogen].nil?
|
264
|
-
using[:autogen] = %w
|
267
|
+
using[:autogen] = %w[autogen autogen.sh]
|
268
|
+
.find { |f| File.exist?(File.join(srcdir, f)) }
|
265
269
|
end
|
266
270
|
end
|
267
271
|
|
@@ -270,21 +274,23 @@ def create_regen_target(confsource = nil)
|
|
270
274
|
conffile = "#{srcdir}/configure"
|
271
275
|
if confsource
|
272
276
|
file conffile => confsource
|
273
|
-
elsif confext = %w
|
277
|
+
elsif (confext = %w[.ac .in].find { |ext| File.exist?("#{conffile}#{ext}") })
|
274
278
|
file conffile => "#{conffile}#{confext}"
|
275
279
|
elsif using[:autoconf]
|
276
|
-
raise PackageException.new(self, 'prepare'),
|
280
|
+
raise PackageException.new(self, 'prepare'),
|
281
|
+
"neither configure.ac nor configure.in present in #{srcdir}"
|
277
282
|
end
|
278
283
|
|
279
284
|
file conffile do
|
280
285
|
isolate_errors do
|
281
|
-
progress_start "generating autotools for %s",
|
286
|
+
progress_start "generating autotools for %s",
|
287
|
+
done_message: 'generated autotools for %s' do
|
282
288
|
regen
|
283
289
|
end
|
284
290
|
end
|
285
291
|
end
|
286
292
|
|
287
|
-
|
293
|
+
conffile
|
288
294
|
end
|
289
295
|
|
290
296
|
def regen
|
@@ -296,8 +302,9 @@ def regen
|
|
296
302
|
run 'configure', File.expand_path(using[:autogen], srcdir),
|
297
303
|
working_directory: srcdir
|
298
304
|
else
|
299
|
-
[
|
305
|
+
%i[aclocal autoconf autoheader automake].each do |tool|
|
300
306
|
next unless using[tool]
|
307
|
+
|
301
308
|
run 'configure', tool_program(tool), *send("#{tool}_flags"),
|
302
309
|
working_directory: srcdir
|
303
310
|
end
|
@@ -307,14 +314,13 @@ def regen
|
|
307
314
|
# Configure the builddir directory before starting make
|
308
315
|
def configure
|
309
316
|
super do
|
310
|
-
command = [
|
311
|
-
if force_config_status
|
312
|
-
command << "--no-create"
|
313
|
-
end
|
317
|
+
command = ["#{srcdir}/configure"]
|
318
|
+
command << "--no-create" if force_config_status
|
314
319
|
command << "--prefix=#{prefix}"
|
315
320
|
command += configureflags.flatten
|
316
321
|
|
317
|
-
progress_start "configuring autotools for %s",
|
322
|
+
progress_start "configuring autotools for %s",
|
323
|
+
done_message: 'configured autotools for %s' do
|
318
324
|
run('configure', *command, working_directory: builddir)
|
319
325
|
end
|
320
326
|
end
|
@@ -323,10 +329,9 @@ def configure
|
|
323
329
|
# Do the build in builddir
|
324
330
|
def build
|
325
331
|
in_dir(builddir) do
|
326
|
-
progress_start "building %s [progress not available]",
|
327
|
-
|
328
|
-
|
329
|
-
end
|
332
|
+
progress_start "building %s [progress not available]",
|
333
|
+
done_message: 'built %s' do
|
334
|
+
run('build', './config.status') if force_config_status
|
330
335
|
|
331
336
|
build_options = []
|
332
337
|
if using_bear?
|
@@ -9,10 +9,18 @@ def self.cmake(options, &block)
|
|
9
9
|
# Handler class to build CMake-based packages
|
10
10
|
class CMake < Configurable
|
11
11
|
class << self
|
12
|
-
def builddir
|
12
|
+
def builddir
|
13
|
+
@builddir || Configurable.builddir
|
14
|
+
end
|
15
|
+
|
13
16
|
def builddir=(new)
|
14
|
-
|
15
|
-
|
17
|
+
if Pathname.new(new).absolute?
|
18
|
+
raise ConfigException, "absolute builddirs are not supported"
|
19
|
+
end
|
20
|
+
if new.nil? || new.empty?
|
21
|
+
raise ConfigException, "builddir must be non-nil and non-empty"
|
22
|
+
end
|
23
|
+
|
16
24
|
@builddir = new
|
17
25
|
end
|
18
26
|
|
@@ -67,7 +75,7 @@ def all_defines
|
|
67
75
|
# If true, always run cmake before make during the build
|
68
76
|
attr_accessor :always_reconfigure
|
69
77
|
# If true, we always remove the CMake cache before reconfiguring.
|
70
|
-
#
|
78
|
+
#
|
71
79
|
# See #full_reconfigures? for more details
|
72
80
|
attr_writer :full_reconfigures
|
73
81
|
# Sets a generator explicitely for this component. See #generator and
|
@@ -77,9 +85,7 @@ def all_defines
|
|
77
85
|
# Makefiles. If not set for this package explicitely, it is using the
|
78
86
|
# global value CMake.generator.
|
79
87
|
def generator
|
80
|
-
|
81
|
-
else CMake.generator
|
82
|
-
end
|
88
|
+
@generator || CMake.generator
|
83
89
|
end
|
84
90
|
|
85
91
|
# If true, we always remove the CMake cache before reconfiguring. This
|
@@ -96,13 +102,19 @@ def full_reconfigures?
|
|
96
102
|
end
|
97
103
|
end
|
98
104
|
|
99
|
-
def cmake_cache
|
100
|
-
|
105
|
+
def cmake_cache
|
106
|
+
File.join(builddir, "CMakeCache.txt")
|
107
|
+
end
|
108
|
+
|
109
|
+
def configurestamp
|
110
|
+
cmake_cache
|
111
|
+
end
|
101
112
|
|
102
113
|
def initialize(options)
|
103
114
|
@defines = Hash.new
|
104
115
|
super
|
105
|
-
@delete_obsolete_files_in_prefix = self.class.
|
116
|
+
@delete_obsolete_files_in_prefix = self.class.
|
117
|
+
delete_obsolete_files_in_prefix?
|
106
118
|
end
|
107
119
|
|
108
120
|
# (see CMake.delete_obsolete_files_in_prefix?)
|
@@ -111,9 +123,7 @@ def delete_obsolete_files_in_prefix?
|
|
111
123
|
end
|
112
124
|
|
113
125
|
# (see CMake.delete_obsolete_files_in_prefix=)
|
114
|
-
|
115
|
-
@delete_obsolete_files_in_prefix = flag
|
116
|
-
end
|
126
|
+
attr_writer :delete_obsolete_files_in_prefix
|
117
127
|
|
118
128
|
@@defines = Hash.new
|
119
129
|
|
@@ -132,7 +142,6 @@ def self.define(name, value)
|
|
132
142
|
end
|
133
143
|
end
|
134
144
|
|
135
|
-
|
136
145
|
def define(name, value)
|
137
146
|
@defines[name] =
|
138
147
|
if value.respond_to?(:to_str)
|
@@ -145,12 +154,12 @@ def define(name, value)
|
|
145
154
|
end
|
146
155
|
|
147
156
|
DOXYGEN_ACCEPTED_VARIABLES = {
|
148
|
-
'@CMAKE_SOURCE_DIR@' =>
|
149
|
-
'@PROJECT_SOURCE_DIR@' =>
|
150
|
-
'@CMAKE_BINARY_DIR@' =>
|
151
|
-
'@PROJECT_BINARY_DIR@' =>
|
152
|
-
'@PROJECT_NAME@' =>
|
153
|
-
}
|
157
|
+
'@CMAKE_SOURCE_DIR@' => ->(pkg) { pkg.srcdir },
|
158
|
+
'@PROJECT_SOURCE_DIR@' => ->(pkg) { pkg.srcdir },
|
159
|
+
'@CMAKE_BINARY_DIR@' => ->(pkg) { pkg.builddir },
|
160
|
+
'@PROJECT_BINARY_DIR@' => ->(pkg) { pkg.builddir },
|
161
|
+
'@PROJECT_NAME@' => ->(pkg) { pkg.name }
|
162
|
+
}.freeze
|
154
163
|
|
155
164
|
class << self
|
156
165
|
# Flag controlling whether autobuild should run doxygen itself or
|
@@ -197,7 +206,7 @@ def always_use_doc_target?
|
|
197
206
|
# for a global control of that feature
|
198
207
|
def always_use_doc_target?
|
199
208
|
if @always_use_doc_target.nil?
|
200
|
-
|
209
|
+
CMake.always_use_doc_target?
|
201
210
|
else
|
202
211
|
@always_use_doc_target
|
203
212
|
end
|
@@ -215,17 +224,14 @@ def always_use_doc_target?
|
|
215
224
|
# This method returns true if the package can use the internal doxygen
|
216
225
|
# mode and false otherwise
|
217
226
|
def internal_doxygen_mode?
|
218
|
-
if always_use_doc_target?
|
219
|
-
return false
|
220
|
-
end
|
227
|
+
return false if always_use_doc_target?
|
221
228
|
|
222
229
|
doxyfile_in = File.join(srcdir, "Doxyfile.in")
|
223
|
-
|
224
|
-
|
225
|
-
end
|
230
|
+
return false unless File.file?(doxyfile_in)
|
231
|
+
|
226
232
|
File.readlines(doxyfile_in).each do |line|
|
227
233
|
matches = line.scan(/@[^@]+@/)
|
228
|
-
if matches.any? { |str| !DOXYGEN_ACCEPTED_VARIABLES.
|
234
|
+
if matches.any? { |str| !DOXYGEN_ACCEPTED_VARIABLES.key?(str) }
|
229
235
|
return false
|
230
236
|
end
|
231
237
|
end
|
@@ -245,11 +251,14 @@ def internal_doxygen_mode?
|
|
245
251
|
# support cannot be used on this package
|
246
252
|
def run_doxygen
|
247
253
|
doxyfile_in = File.join(srcdir, "Doxyfile.in")
|
248
|
-
|
249
|
-
raise
|
254
|
+
unless File.file?(doxyfile_in)
|
255
|
+
raise "no Doxyfile.in in this package, "\
|
256
|
+
"cannot use the internal doxygen support"
|
250
257
|
end
|
251
258
|
doxyfile_data = File.readlines(doxyfile_in).map do |line|
|
252
|
-
line.gsub(/@[^@]+@/)
|
259
|
+
line.gsub(/@[^@]+@/) do |match|
|
260
|
+
DOXYGEN_ACCEPTED_VARIABLES[match].call(self)
|
261
|
+
end
|
253
262
|
end
|
254
263
|
doxyfile = File.join(builddir, "Doxyfile")
|
255
264
|
File.open(doxyfile, 'w') do |io|
|
@@ -296,7 +305,7 @@ def with_tests(target = 'test', &block)
|
|
296
305
|
'YES' => 'ON',
|
297
306
|
'OFF' => 'OFF',
|
298
307
|
'NO' => 'OFF'
|
299
|
-
}
|
308
|
+
}.freeze
|
300
309
|
def equivalent_option_value?(old, new)
|
301
310
|
if old == new
|
302
311
|
true
|
@@ -331,7 +340,7 @@ def prefix_path
|
|
331
340
|
raw = (dependencies.map { |pkg_name| Autobuild::Package[pkg_name].prefix } +
|
332
341
|
CMake.prefix_path)
|
333
342
|
raw.each do |path|
|
334
|
-
|
343
|
+
unless seen.include?(path)
|
335
344
|
seen << path
|
336
345
|
result << path
|
337
346
|
end
|
@@ -348,17 +357,20 @@ def update_environment
|
|
348
357
|
|
349
358
|
def defines_changed?(all_defines, cache_data)
|
350
359
|
all_defines.any? do |name, value|
|
351
|
-
if match = /^#{name}:\w+=(.*)$/.match(cache_data)
|
360
|
+
if (match = /^#{name}:\w+=(.*)$/.match(cache_data))
|
352
361
|
old_value = match[1]
|
353
362
|
end
|
354
363
|
|
355
364
|
value = value.to_s
|
356
365
|
if !old_value || !equivalent_option_value?(old_value, value)
|
357
366
|
if Autobuild.debug
|
358
|
-
message "%s: option '#{name}' changed value:
|
367
|
+
message "%s: option '#{name}' changed value: "\
|
368
|
+
"'#{old_value}' => '#{value}'"
|
359
369
|
end
|
370
|
+
|
360
371
|
if old_value
|
361
|
-
message "%s: changed value of #{name}
|
372
|
+
message "%s: changed value of #{name} "\
|
373
|
+
"from #{old_value} to #{value}"
|
362
374
|
else
|
363
375
|
message "%s: setting value of #{name} to #{value}"
|
364
376
|
end
|
@@ -373,8 +385,8 @@ def prepare
|
|
373
385
|
# but no Makefile.
|
374
386
|
#
|
375
387
|
# Delete the CMakeCache to force reconfiguration
|
376
|
-
|
377
|
-
FileUtils.rm_f
|
388
|
+
unless File.exist?(File.join(builddir, 'Makefile'))
|
389
|
+
FileUtils.rm_f(cmake_cache)
|
378
390
|
end
|
379
391
|
|
380
392
|
doc_utility.source_ref_dir = builddir
|
@@ -396,29 +408,27 @@ def prepare
|
|
396
408
|
def configure
|
397
409
|
super do
|
398
410
|
in_dir(builddir) do
|
399
|
-
|
400
|
-
raise ConfigException.new(self, 'configure'),
|
411
|
+
unless File.file?(File.join(srcdir, 'CMakeLists.txt'))
|
412
|
+
raise ConfigException.new(self, 'configure'),
|
413
|
+
"#{srcdir} contains no CMakeLists.txt file"
|
401
414
|
end
|
402
415
|
|
403
|
-
command = [
|
416
|
+
command = ["cmake"]
|
404
417
|
|
405
418
|
if Autobuild.windows?
|
406
|
-
command << '-G'
|
419
|
+
command << '-G'
|
407
420
|
command << "MSYS Makefiles"
|
408
421
|
end
|
409
422
|
|
410
423
|
all_defines.each do |name, value|
|
411
424
|
command << "-D#{name}=#{value}"
|
412
425
|
end
|
413
|
-
if generator
|
414
|
-
command << Array(generator).map { |g| "-G#{g}" }
|
415
|
-
end
|
426
|
+
command << Array(generator).map { |g| "-G#{g}" } if generator
|
416
427
|
command << srcdir
|
417
|
-
|
418
|
-
progress_start "configuring CMake for %s",
|
419
|
-
|
420
|
-
|
421
|
-
end
|
428
|
+
|
429
|
+
progress_start "configuring CMake for %s",
|
430
|
+
done_message: "configured CMake for %s" do
|
431
|
+
FileUtils.rm_f cmake_cache if full_reconfigures?
|
422
432
|
run('configure', *command)
|
423
433
|
end
|
424
434
|
end
|
@@ -432,9 +442,7 @@ def show_make_messages?
|
|
432
442
|
end
|
433
443
|
end
|
434
444
|
|
435
|
-
|
436
|
-
@show_make_messages = value
|
437
|
-
end
|
445
|
+
attr_writer :show_make_messages
|
438
446
|
|
439
447
|
def self.show_make_messages?
|
440
448
|
@show_make_messages
|
@@ -446,7 +454,7 @@ def self.show_make_messages=(value)
|
|
446
454
|
|
447
455
|
# Do the build in builddir
|
448
456
|
def build
|
449
|
-
current_message =
|
457
|
+
current_message = +""
|
450
458
|
in_dir(builddir) do
|
451
459
|
progress_start "building %s" do
|
452
460
|
if always_reconfigure || !File.file?('Makefile')
|
@@ -459,9 +467,7 @@ def build
|
|
459
467
|
if line =~ /\[\s*(\d+)%\]/
|
460
468
|
progress "building %s (#{Integer($1)}%)"
|
461
469
|
elsif line !~ /^(?:Generating|Linking|Scanning|Building|Built)/
|
462
|
-
if line =~ /warning/
|
463
|
-
warning_count += 1
|
464
|
-
end
|
470
|
+
warning_count += 1 if line =~ /warning/
|
465
471
|
if show_make_messages?
|
466
472
|
current_message += line + "\n"
|
467
473
|
needs_display = true
|
@@ -478,7 +484,8 @@ def build
|
|
478
484
|
message "%s: #{l}", :magenta
|
479
485
|
end
|
480
486
|
if warning_count > 0
|
481
|
-
|
487
|
+
msg_warning = Autoproj.color("(#{warning_count} warnings)", :bold)
|
488
|
+
progress_done "built %s #{msg_warning}"
|
482
489
|
else
|
483
490
|
progress_done "built %s"
|
484
491
|
end
|
@@ -498,13 +505,12 @@ def build
|
|
498
505
|
# in the prefix but not in CMake's install manifest will be removed.
|
499
506
|
def install
|
500
507
|
in_dir(builddir) do
|
501
|
-
progress_start "installing %s", :
|
502
|
-
run('install', Autobuild.tool(:make),
|
508
|
+
progress_start "installing %s", done_message: 'installed %s' do
|
509
|
+
run('install', Autobuild.tool(:make),
|
510
|
+
"-j#{parallel_build_level}", 'install')
|
503
511
|
end
|
504
512
|
|
505
|
-
if delete_obsolete_files_in_prefix?
|
506
|
-
delete_obsolete_files
|
507
|
-
end
|
513
|
+
delete_obsolete_files if delete_obsolete_files_in_prefix?
|
508
514
|
end
|
509
515
|
super
|
510
516
|
end
|
@@ -520,7 +526,8 @@ def install
|
|
520
526
|
def delete_obsolete_files
|
521
527
|
# The expand_path is required to sanitize the paths, which can
|
522
528
|
# contain e.g. double //
|
523
|
-
|
529
|
+
cmake_install_manifest = File.join(builddir, 'install_manifest.txt')
|
530
|
+
manifest_contents = File.readlines(cmake_install_manifest).
|
524
531
|
map { |p| File.expand_path(p.chomp) }.to_set
|
525
532
|
logdir = self.logdir
|
526
533
|
counter = 0
|
@@ -537,4 +544,3 @@ def delete_obsolete_files
|
|
537
544
|
end
|
538
545
|
end
|
539
546
|
end
|
540
|
-
|