autobuild 1.12.3 → 1.13.0.pre1
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/autobuild.gemspec +2 -2
- data/lib/autobuild/config.rb +51 -51
- data/lib/autobuild/environment.rb +77 -25
- data/lib/autobuild/exceptions.rb +22 -1
- data/lib/autobuild/import/archive.rb +31 -31
- data/lib/autobuild/import/cvs.rb +13 -13
- data/lib/autobuild/import/darcs.rb +21 -21
- data/lib/autobuild/import/git.rb +55 -43
- data/lib/autobuild/import/hg.rb +1 -1
- data/lib/autobuild/import/svn.rb +8 -8
- data/lib/autobuild/importer.rb +4 -2
- data/lib/autobuild/mail_reporter.rb +9 -9
- data/lib/autobuild/package.rb +120 -119
- data/lib/autobuild/packages/autotools.rb +88 -86
- data/lib/autobuild/packages/cmake.rb +1 -1
- data/lib/autobuild/packages/dummy.rb +1 -1
- data/lib/autobuild/packages/genom.rb +43 -43
- data/lib/autobuild/packages/import.rb +6 -6
- data/lib/autobuild/packages/orogen.rb +7 -7
- data/lib/autobuild/packages/pkgconfig.rb +16 -16
- data/lib/autobuild/pkgconfig.rb +20 -20
- data/lib/autobuild/reporting.rb +0 -22
- data/lib/autobuild/subcommand.rb +6 -6
- data/lib/autobuild/timestamps.rb +5 -5
- data/lib/autobuild/tools.rb +7 -7
- data/lib/autobuild/version.rb +1 -1
- metadata +8 -20
@@ -39,7 +39,7 @@ def configurestamp; "#{builddir}/config.status" end
|
|
39
39
|
|
40
40
|
def initialize(options)
|
41
41
|
@using = Hash.new
|
42
|
-
|
42
|
+
@configureflags = []
|
43
43
|
@aclocal_flags = Array.new
|
44
44
|
@autoheader_flags = Array.new
|
45
45
|
@autoconf_flags = Array.new
|
@@ -70,29 +70,29 @@ def with_tests(target = 'test', &block)
|
|
70
70
|
common_utility_handling(test_utility, target, &block)
|
71
71
|
end
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
73
|
+
# Overrides the default behaviour w.r.t. autotools script generation
|
74
|
+
#
|
75
|
+
# Use it like that:
|
76
|
+
# * to force a generation step (skipping autodetection), do
|
77
|
+
# pkg.use <program> => true
|
78
|
+
# For instance, for aclocal
|
79
|
+
# pkg.use :aclocal => true
|
80
|
+
#
|
81
|
+
# * to force a generation step, overriding the program defined on Autobuild
|
82
|
+
# pkg.use <program> => true
|
83
|
+
# For instance, for autoconf
|
84
|
+
# pkg.use :autoconf => 'my_autoconf_program'
|
85
|
+
#
|
86
|
+
# * to disable a generation step, do
|
87
|
+
# pkg.use <program> => false
|
88
|
+
# For instance, for automake
|
89
|
+
# pkg.use :automake => false
|
90
|
+
#
|
91
|
+
# * to restore autodetection, do
|
92
|
+
# pkg.use <program> => nil
|
93
|
+
# For instance, for automake
|
94
|
+
# pkg.use :automake => nil
|
95
|
+
#
|
96
96
|
def use(*programs)
|
97
97
|
programs =
|
98
98
|
if programs.size == 1
|
@@ -152,6 +152,8 @@ def import(options = Hash.new)
|
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
|
+
class UnexpectedConfigStatusOutput < RuntimeError; end
|
156
|
+
|
155
157
|
def prepare
|
156
158
|
super
|
157
159
|
autodetect_needed_stages
|
@@ -162,22 +164,22 @@ def prepare
|
|
162
164
|
FileUtils.rm_f fresh_checkout_mark
|
163
165
|
end
|
164
166
|
|
165
|
-
|
166
|
-
|
167
|
+
# Check if config.status has been generated with the
|
168
|
+
# same options than the ones in configureflags
|
167
169
|
#
|
168
170
|
# If it is not the case, remove it to force reconfiguration
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
171
|
+
if File.exist?(configurestamp)
|
172
|
+
output = run('prepare', configurestamp, '--version').
|
173
|
+
grep(/with options/).first
|
174
|
+
if output && (match = /with options "(.*)"/.match(output))
|
175
|
+
options = Shellwords.shellwords(match[1])
|
176
|
+
else
|
177
|
+
raise UnexpectedConfigStatusOutput, "invalid output of config.status --version, expected a line with `with options \"OPTIONS\"`"
|
175
178
|
end
|
176
|
-
options = Shellwords.shellwords(output.scan(/with options "(.*)"$/).join(" "))
|
177
179
|
|
178
|
-
|
179
|
-
|
180
|
-
|
180
|
+
# Add the --prefix option to the configureflags array
|
181
|
+
testflags = ["--prefix=#{prefix}"] + configureflags.flatten
|
182
|
+
old_opt = options.find do |o|
|
181
183
|
if testflags.include?(o)
|
182
184
|
false
|
183
185
|
elsif o =~ /^-/
|
@@ -189,19 +191,19 @@ def prepare
|
|
189
191
|
# explicitely given in configureflags
|
190
192
|
varname, value = o.split("=").first
|
191
193
|
if current_flag = testflags.find { |fl| fl =~ /^#{varname}=/ }
|
192
|
-
current_flag !=
|
194
|
+
current_flag != o
|
193
195
|
else false
|
194
196
|
end
|
195
197
|
end
|
196
198
|
end
|
197
|
-
|
198
|
-
|
199
|
+
new_opt = testflags.find { |o| !options.include?(o) }
|
200
|
+
if old_opt || new_opt
|
199
201
|
if Autobuild.verbose
|
200
202
|
Autobuild.message "forcing reconfiguration of #{name} (#{old_opt} != #{new_opt})"
|
201
203
|
end
|
202
|
-
|
203
|
-
|
204
|
-
|
204
|
+
FileUtils.rm_f configurestamp # to force reconfiguration
|
205
|
+
end
|
206
|
+
end
|
205
207
|
|
206
208
|
regen_target = create_regen_target
|
207
209
|
file configurestamp => regen_target
|
@@ -232,68 +234,69 @@ def autodetect_needed_stages
|
|
232
234
|
if using[:libtool].nil?
|
233
235
|
using[:libtool] = File.exist?(File.join(srcdir, 'ltmain.sh'))
|
234
236
|
end
|
237
|
+
|
238
|
+
if using[:autogen].nil?
|
239
|
+
using[:autogen] = %w{autogen autogen.sh}.find { |f| File.exist?(File.join(srcdir, f)) }
|
240
|
+
end
|
235
241
|
end
|
236
242
|
|
237
243
|
# Adds a target to rebuild the autotools environment
|
238
244
|
def create_regen_target(confsource = nil)
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
245
|
+
conffile = "#{srcdir}/configure"
|
246
|
+
if confsource
|
247
|
+
file conffile => confsource
|
248
|
+
elsif confext = %w{.ac .in}.find { |ext| File.exist?("#{conffile}#{ext}") }
|
249
|
+
file conffile => "#{conffile}#{confext}"
|
250
|
+
elsif using[:autoconf]
|
251
|
+
raise PackageException.new(self, 'prepare'), "neither configure.ac nor configure.in present in #{srcdir}"
|
252
|
+
end
|
247
253
|
|
248
254
|
file conffile do
|
249
255
|
isolate_errors do
|
250
|
-
in_dir(srcdir) do
|
251
|
-
if using[:autogen].nil?
|
252
|
-
using[:autogen] = %w{autogen autogen.sh}.find { |f| File.exist?(File.join(srcdir, f)) }
|
253
|
-
end
|
254
|
-
|
255
|
-
autodetect_needed_stages
|
256
|
-
|
257
256
|
progress_start "generating autotools for %s", :done_message => 'generated autotools for %s' do
|
258
|
-
|
259
|
-
run('configure', Autobuild.tool('libtoolize'), '--copy')
|
260
|
-
end
|
261
|
-
if using[:autogen]
|
262
|
-
run('configure', File.expand_path(using[:autogen], srcdir))
|
263
|
-
else
|
264
|
-
[ :aclocal, :autoconf, :autoheader, :automake ].each do |tool|
|
265
|
-
if tool_flag = using[tool]
|
266
|
-
tool_program = if tool_flag.respond_to?(:to_str)
|
267
|
-
tool_flag.to_str
|
268
|
-
else; Autobuild.tool(tool)
|
269
|
-
end
|
270
|
-
|
271
|
-
run('configure', tool_program, *send("#{tool}_flags"))
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
257
|
+
regen
|
275
258
|
end
|
276
259
|
end
|
277
|
-
end
|
278
260
|
end
|
279
261
|
|
280
262
|
return conffile
|
281
263
|
end
|
282
264
|
|
265
|
+
def regen
|
266
|
+
if using[:libtool]
|
267
|
+
run 'configure', Autobuild.tool('libtoolize'), '--copy',
|
268
|
+
working_directory: srcdir
|
269
|
+
end
|
270
|
+
if using[:autogen]
|
271
|
+
run 'configure', File.expand_path(using[:autogen], srcdir),
|
272
|
+
working_directory: srcdir
|
273
|
+
else
|
274
|
+
[ :aclocal, :autoconf, :autoheader, :automake ].each do |tool|
|
275
|
+
if tool_flag = using[tool]
|
276
|
+
tool_program = if tool_flag.respond_to?(:to_str)
|
277
|
+
tool_flag.to_str
|
278
|
+
else; Autobuild.tool(tool)
|
279
|
+
end
|
280
|
+
|
281
|
+
run 'configure', tool_program, *send("#{tool}_flags"),
|
282
|
+
working_directory: srcdir
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
283
288
|
# Configure the builddir directory before starting make
|
284
289
|
def configure
|
285
290
|
super do
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
command += Array[*configureflags]
|
291
|
+
command = [ "#{srcdir}/configure"]
|
292
|
+
if force_config_status
|
293
|
+
command << "--no-create"
|
294
|
+
end
|
295
|
+
command << "--prefix=#{prefix}"
|
296
|
+
command += configureflags.flatten
|
293
297
|
|
294
|
-
|
295
|
-
|
296
|
-
end
|
298
|
+
progress_start "configuring autotools for %s", done_message: 'configured autotools for %s' do
|
299
|
+
run('configure', *command, working_directory: builddir)
|
297
300
|
end
|
298
301
|
end
|
299
302
|
end
|
@@ -323,4 +326,3 @@ def install
|
|
323
326
|
end
|
324
327
|
end
|
325
328
|
end
|
326
|
-
|
@@ -100,7 +100,7 @@ def cmake_cache; File.join(builddir, "CMakeCache.txt") end
|
|
100
100
|
def configurestamp; cmake_cache end
|
101
101
|
|
102
102
|
def initialize(options)
|
103
|
-
|
103
|
+
@defines = Hash.new
|
104
104
|
super
|
105
105
|
@delete_obsolete_files_in_prefix = self.class.delete_obsolete_files_in_prefix?
|
106
106
|
end
|
@@ -14,27 +14,27 @@ def initialize(*args, &config)
|
|
14
14
|
@genomflags = []
|
15
15
|
super
|
16
16
|
|
17
|
-
|
17
|
+
use :autogen => 'autogen'
|
18
18
|
end
|
19
19
|
|
20
20
|
def import(options = Hash.new)
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
super
|
22
|
+
get_provides
|
23
|
+
end
|
24
24
|
|
25
25
|
# Called before running the rake tasks and
|
26
26
|
# after all imports have been made
|
27
27
|
def prepare
|
28
|
-
|
29
|
-
|
28
|
+
genomflags.flatten!
|
29
|
+
get_requires
|
30
30
|
|
31
31
|
super
|
32
32
|
|
33
|
-
|
33
|
+
file genomstamp => dependencies.map { |p| Package[p].installstamp }
|
34
34
|
end
|
35
35
|
|
36
36
|
# The file touched by genom on successful generation
|
37
|
-
|
37
|
+
def genomstamp; File.join(srcdir, '.genom', 'genom-stamp') end
|
38
38
|
|
39
39
|
# Extract the cpp options from the genom options
|
40
40
|
def cpp_options
|
@@ -43,7 +43,7 @@ def cpp_options
|
|
43
43
|
|
44
44
|
# Extracts dependencies using the requires: field in the .gen file
|
45
45
|
def get_requires
|
46
|
-
|
46
|
+
apionly = genomflags.find { |f| f == '-a' }
|
47
47
|
cpp = Autobuild.tool(:cpp)
|
48
48
|
currentBuffer = nil
|
49
49
|
Open3.popen3("#{cpp} #{cpp_options.join(" ")} #{srcdir}/#{name}.gen") do |cin, out, err|
|
@@ -77,8 +77,8 @@ def get_requires
|
|
77
77
|
# Alias this package to the ones defined in the EXTRA_PKGCONFIG
|
78
78
|
# flag in configure.ac.user
|
79
79
|
def get_provides
|
80
|
-
|
81
|
-
|
80
|
+
configure_ac_user = File.join(srcdir, 'configure.ac.user')
|
81
|
+
return unless File.readable?(configure_ac_user)
|
82
82
|
File.open(configure_ac_user) do |f|
|
83
83
|
f.each_line { |line|
|
84
84
|
if line =~ /^\s*EXTRA_PKGCONFIG\s*=\s*"?([\w\-]+(?:\s+[\w\-]+)*)"?/
|
@@ -88,48 +88,48 @@ def get_provides
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
91
|
+
# Make the genom-stamp file depend on
|
92
|
+
# * genom includes
|
93
|
+
# * genom canvas
|
94
|
+
# * the genom binary itself
|
95
|
+
def genom_dependencies
|
96
|
+
# Get the genom pkg-config
|
97
|
+
if Package['genom']
|
98
|
+
'genom'
|
99
|
+
else
|
100
|
+
genom_pkg = PkgConfig.new('genom')
|
101
101
|
|
102
|
-
|
103
|
-
|
102
|
+
includedir = File.join(genom_pkg.includedir, 'genom')
|
103
|
+
source_tree includedir
|
104
104
|
|
105
|
-
|
106
|
-
|
105
|
+
canvasdir = File.join(genom_pkg.prefix, "share", "genom", genom_pkg.version);;
|
106
|
+
source_tree canvasdir
|
107
107
|
|
108
|
-
|
109
|
-
|
108
|
+
binary = File.join(genom_pkg.exec_prefix, "bin", "genom")
|
109
|
+
file binary
|
110
110
|
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
[binary, includedir, canvasdir]
|
112
|
+
end
|
113
|
+
end
|
114
114
|
|
115
115
|
def regen
|
116
116
|
cmdline = [ 'genom', "#{name}.gen", *genomflags ]
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
118
|
+
# Check that the module has been generated with the same flags
|
119
|
+
genom_mk = "#{srcdir}/autoconf/genom.mk"
|
120
|
+
if File.exist?(genom_mk)
|
121
|
+
contents = File.open(genom_mk).readlines
|
122
|
+
old_file = contents.find { |l| l =~ /^GENFILE/ }.gsub('GENFILE=', '').strip
|
123
|
+
old_flags = Shellwords.shellwords(
|
124
|
+
contents.find { |l| l =~ /^GENFLAGS/ }.gsub('GENFLAGS=', ''))
|
125
125
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
126
|
+
if old_file != "#{name}.gen" || !(old_flags - genomflags).empty? || !(genomflags - old_flags).empty?
|
127
|
+
FileUtils.rm_f genomstamp
|
128
|
+
end
|
129
|
+
end
|
130
130
|
|
131
131
|
file buildstamp => genomstamp
|
132
|
-
|
132
|
+
file genomstamp => genom_dependencies
|
133
133
|
file genomstamp => srcdir do
|
134
134
|
isolate_errors do
|
135
135
|
in_dir(srcdir) do
|
@@ -152,7 +152,7 @@ def regen
|
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
155
|
-
|
155
|
+
super("#{srcdir}/autoconf/configure.ac")
|
156
156
|
end
|
157
157
|
end
|
158
158
|
end
|
@@ -7,10 +7,10 @@ def self.import(spec, &proc)
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class ImporterPackage < Package
|
10
|
-
|
10
|
+
attr_reader :exclude
|
11
11
|
|
12
12
|
def initialize(*args)
|
13
|
-
|
13
|
+
@exclude = []
|
14
14
|
super
|
15
15
|
end
|
16
16
|
|
@@ -18,15 +18,15 @@ def prepare
|
|
18
18
|
super
|
19
19
|
|
20
20
|
exclude = self.exclude.dup
|
21
|
-
|
21
|
+
exclude << Regexp.new("^#{Regexp.quote(installstamp)}")
|
22
22
|
if doc_dir
|
23
23
|
exclude << Regexp.new("^#{Regexp.quote(doc_dir)}")
|
24
24
|
end
|
25
25
|
|
26
26
|
source_tree(srcdir) do |pkg|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
pkg.exclude.concat exclude
|
28
|
+
exclude.freeze
|
29
|
+
end
|
30
30
|
|
31
31
|
file installstamp => srcdir
|
32
32
|
end
|
@@ -282,14 +282,14 @@ def regen
|
|
282
282
|
end
|
283
283
|
end
|
284
284
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
285
|
+
def generation_uptodate?
|
286
|
+
if !File.file?(genstamp)
|
287
|
+
true
|
288
|
+
elsif File.file?(File.join(builddir, 'Makefile'))
|
289
289
|
system("#{Autobuild.tool('make')} -C #{builddir} check-uptodate > /dev/null 2>&1")
|
290
|
-
|
291
|
-
|
292
|
-
|
290
|
+
else
|
291
|
+
true
|
292
|
+
end
|
293
293
|
end
|
294
294
|
end
|
295
295
|
end
|