autobuild 1.5.34 → 1.5.35
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.
- data/Changes.txt +7 -0
- data/README.txt +2 -4
- data/lib/autobuild/config.rb +13 -7
- data/lib/autobuild/import/git.rb +25 -12
- data/lib/autobuild/importer.rb +6 -1
- data/lib/autobuild/package.rb +19 -3
- data/lib/autobuild/packages/orogen.rb +92 -157
- data/lib/autobuild/version.rb +1 -1
- metadata +7 -7
data/Changes.txt
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
== Version 1.5.35
|
|
2
|
+
* fix some bad behaviour when using fallback importers
|
|
3
|
+
- git does not update the git configuration with the bad URLs anymore
|
|
4
|
+
* orogen: removed automatic dependency detection, it was half-broken anyway.
|
|
5
|
+
* orogen: avoid unnecessary regeneration (experimental, disabled by default).
|
|
6
|
+
It can be enabled by setting Autobuild::Orogen.always_regenerate = true
|
|
7
|
+
|
|
1
8
|
== Version 1.5.34
|
|
2
9
|
* make sure oroGen handlers will trigger a new generation
|
|
3
10
|
on force-build
|
data/README.txt
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
Copyright (c) 2006-
|
|
1
|
+
Copyright (c) 2006-2011 Sylvain Joyeux <sylvain.joyeux@m4x.org> and contributors
|
|
2
2
|
|
|
3
|
-
* http://
|
|
4
|
-
* http://github.com/doudou/autobuild
|
|
5
|
-
* http://doudou.github.com/autoproj
|
|
3
|
+
* http://rock-robotics.org
|
|
6
4
|
|
|
7
5
|
This work is licensed under the GPLv2 license. See License.txt for details
|
|
8
6
|
|
data/lib/autobuild/config.rb
CHANGED
|
@@ -71,28 +71,34 @@ module Autobuild
|
|
|
71
71
|
send("#{name}=", value)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
@post_install_handlers = Array.new
|
|
74
75
|
def self.post_install(*args, &block)
|
|
75
76
|
if args.empty?
|
|
76
|
-
@
|
|
77
|
+
@post_install_handlers << block
|
|
77
78
|
elsif !block
|
|
78
|
-
@
|
|
79
|
+
@post_install_handlers << args
|
|
79
80
|
else
|
|
80
81
|
raise ArgumentError, "cannot set both arguments and block"
|
|
81
82
|
end
|
|
82
83
|
end
|
|
83
|
-
|
|
84
|
+
class << self
|
|
85
|
+
attr_reader :post_install_handlers
|
|
86
|
+
end
|
|
84
87
|
|
|
85
|
-
def self.apply_post_install(
|
|
88
|
+
def self.apply_post_install(pkg, info)
|
|
86
89
|
return unless info
|
|
87
90
|
|
|
88
91
|
case info
|
|
89
92
|
when Array
|
|
90
93
|
args = info.dup
|
|
91
94
|
tool = Autobuild.tool(args.shift)
|
|
92
|
-
|
|
93
|
-
Autobuild::Subprocess.run name, 'post-install', tool, *args
|
|
95
|
+
pkg.run 'post-install', tool, *args
|
|
94
96
|
when Proc
|
|
95
|
-
|
|
97
|
+
if info.arity == 1
|
|
98
|
+
info.call(pkg)
|
|
99
|
+
else
|
|
100
|
+
info.call
|
|
101
|
+
end
|
|
96
102
|
end
|
|
97
103
|
end
|
|
98
104
|
|
data/lib/autobuild/import/git.rb
CHANGED
|
@@ -23,9 +23,9 @@ module Autobuild
|
|
|
23
23
|
if branch
|
|
24
24
|
STDERR.puts "WARN: the git importer now expects you to provide the branch as a named option"
|
|
25
25
|
STDERR.puts "WARN: this form is deprecated:"
|
|
26
|
-
STDERR.puts "WARN: Autobuild.git 'git://
|
|
26
|
+
STDERR.puts "WARN: Autobuild.git 'git://gitorious.org/rock/buildconf.git', 'master'"
|
|
27
27
|
STDERR.puts "WARN: and should be replaced by"
|
|
28
|
-
STDERR.puts "WARN: Autobuild.git 'git://
|
|
28
|
+
STDERR.puts "WARN: Autobuild.git 'git://gitorious.org/rock/buildconf.git', :branch => 'master'"
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
gitopts, common = Kernel.filter_options options, :push_to => nil, :branch => nil, :tag => nil, :commit => nil
|
|
@@ -121,7 +121,20 @@ module Autobuild
|
|
|
121
121
|
def fetch_remote(package)
|
|
122
122
|
validate_srcdir(package)
|
|
123
123
|
Dir.chdir(package.srcdir) do
|
|
124
|
-
#
|
|
124
|
+
# If we are checking out a specific commit, we don't know which
|
|
125
|
+
# branch to refer to in git fetch. So, we have to set up the
|
|
126
|
+
# remotes and call git fetch directly (so that all branches get
|
|
127
|
+
# fetch)
|
|
128
|
+
#
|
|
129
|
+
# Otherwise, do git fetch now
|
|
130
|
+
#
|
|
131
|
+
# Doing it now is better as it makes sure that we replace the
|
|
132
|
+
# configuration parameters only if the repository and branch are
|
|
133
|
+
# OK (i.e. we keep old working configuration instead)
|
|
134
|
+
if !commit
|
|
135
|
+
Subprocess.run(package, :import, Autobuild.tool('git'), 'fetch', repository, branch || tag)
|
|
136
|
+
end
|
|
137
|
+
|
|
125
138
|
Subprocess.run(package, :import, Autobuild.tool('git'), 'config',
|
|
126
139
|
"--replace-all", "remote.autobuild.url", repository)
|
|
127
140
|
if push_to
|
|
@@ -146,11 +159,8 @@ module Autobuild
|
|
|
146
159
|
"--replace-all", "branch.#{local_branch}.merge", "refs/heads/#{branch}")
|
|
147
160
|
end
|
|
148
161
|
|
|
149
|
-
|
|
150
|
-
if commit
|
|
162
|
+
if commit
|
|
151
163
|
Subprocess.run(package, :import, Autobuild.tool('git'), 'fetch', 'autobuild')
|
|
152
|
-
else
|
|
153
|
-
Subprocess.run(package, :import, Autobuild.tool('git'), 'fetch', repository, branch || tag)
|
|
154
164
|
end
|
|
155
165
|
|
|
156
166
|
# Now get the actual commit ID from the FETCH_HEAD file, and
|
|
@@ -180,14 +190,12 @@ module Autobuild
|
|
|
180
190
|
validate_srcdir(package)
|
|
181
191
|
remote_commit = nil
|
|
182
192
|
if only_local
|
|
183
|
-
|
|
184
|
-
remote_commit = `git show-ref -s refs/heads/#{local_branch}`.chomp
|
|
185
|
-
end
|
|
193
|
+
remote_commit = `git show-ref -s refs/heads/#{local_branch}`.chomp
|
|
186
194
|
else
|
|
187
195
|
remote_commit =
|
|
188
196
|
begin fetch_remote(package)
|
|
189
197
|
rescue Exception => e
|
|
190
|
-
fallback(e, package, :status, package, only_local)
|
|
198
|
+
return fallback(e, package, :status, package, only_local)
|
|
191
199
|
end
|
|
192
200
|
|
|
193
201
|
if !remote_commit
|
|
@@ -205,6 +213,11 @@ module Autobuild
|
|
|
205
213
|
|
|
206
214
|
end
|
|
207
215
|
|
|
216
|
+
def has_local_branch?
|
|
217
|
+
`git show-ref -q --verify refs/heads/#{local_branch}`
|
|
218
|
+
$?.exitstatus == 0
|
|
219
|
+
end
|
|
220
|
+
|
|
208
221
|
# Checks if the current branch is the target branch. Expects that the
|
|
209
222
|
# current directory is the package's directory
|
|
210
223
|
def on_target_branch?
|
|
@@ -258,7 +271,7 @@ module Autobuild
|
|
|
258
271
|
|
|
259
272
|
def merge_status(fetch_commit)
|
|
260
273
|
common_commit = `git merge-base HEAD #{fetch_commit}`.chomp
|
|
261
|
-
head_commit = `git rev-parse
|
|
274
|
+
head_commit = `git rev-parse HEAD`.chomp
|
|
262
275
|
|
|
263
276
|
status = if common_commit != fetch_commit
|
|
264
277
|
if common_commit == head_commit
|
data/lib/autobuild/importer.rb
CHANGED
|
@@ -88,6 +88,8 @@ class Importer
|
|
|
88
88
|
update(package)
|
|
89
89
|
patch(package)
|
|
90
90
|
package.updated = true
|
|
91
|
+
rescue Interrupt
|
|
92
|
+
raise
|
|
91
93
|
rescue ::Exception => e
|
|
92
94
|
fallback(e, package, :import, package)
|
|
93
95
|
end
|
|
@@ -124,7 +126,10 @@ class Importer
|
|
|
124
126
|
Importer.fallback_handlers.each do |handler|
|
|
125
127
|
fallback_importer = handler.call(package, self)
|
|
126
128
|
if fallback_importer.kind_of?(Importer)
|
|
127
|
-
|
|
129
|
+
begin fallback_importer.send(*args, &block)
|
|
130
|
+
rescue Exception
|
|
131
|
+
raise error
|
|
132
|
+
end
|
|
128
133
|
end
|
|
129
134
|
end
|
|
130
135
|
raise error
|
data/lib/autobuild/package.rb
CHANGED
|
@@ -195,15 +195,26 @@ module Autobuild
|
|
|
195
195
|
# Don't do anything if we already have failed
|
|
196
196
|
return if failed?
|
|
197
197
|
|
|
198
|
-
begin
|
|
198
|
+
begin
|
|
199
|
+
do_isolate = Autobuild.ignore_errors
|
|
200
|
+
Autobuild.ignore_errors = false
|
|
201
|
+
yield
|
|
202
|
+
rescue Interrupt
|
|
203
|
+
raise
|
|
199
204
|
rescue ::Exception => e
|
|
200
205
|
@failures << e
|
|
201
206
|
if mark_as_failed
|
|
202
207
|
@failed = true
|
|
203
208
|
end
|
|
204
209
|
|
|
205
|
-
if
|
|
210
|
+
if do_isolate
|
|
206
211
|
lines = e.to_s.split("\n")
|
|
212
|
+
if lines.empty?
|
|
213
|
+
lines = e.message.split("\n")
|
|
214
|
+
end
|
|
215
|
+
if lines.empty?
|
|
216
|
+
lines = ["unknown error"]
|
|
217
|
+
end
|
|
207
218
|
progress(lines.shift, :red, :bold)
|
|
208
219
|
lines.each do |line|
|
|
209
220
|
progress(line)
|
|
@@ -212,6 +223,8 @@ module Autobuild
|
|
|
212
223
|
else
|
|
213
224
|
raise
|
|
214
225
|
end
|
|
226
|
+
ensure
|
|
227
|
+
Autobuild.ignore_errors = do_isolate
|
|
215
228
|
end
|
|
216
229
|
end
|
|
217
230
|
|
|
@@ -282,8 +295,11 @@ module Autobuild
|
|
|
282
295
|
# Install the result in prefix
|
|
283
296
|
def install
|
|
284
297
|
Dir.chdir(srcdir) do
|
|
298
|
+
Autobuild.post_install_handlers.each do |b|
|
|
299
|
+
Autobuild.apply_post_install(self, b)
|
|
300
|
+
end
|
|
285
301
|
@post_install_blocks.each do |b|
|
|
286
|
-
Autobuild.apply_post_install(
|
|
302
|
+
Autobuild.apply_post_install(self, b)
|
|
287
303
|
end
|
|
288
304
|
end
|
|
289
305
|
Autobuild.touch_stamp(installstamp)
|
|
@@ -3,136 +3,9 @@ module Autobuild
|
|
|
3
3
|
Orogen.new(opts, &proc)
|
|
4
4
|
end
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
# This discards everything but the calls to import_types_from,
|
|
8
|
-
# using_task_library and using_toolkit. This is used to automatically
|
|
9
|
-
# discover the dependencies without resorting to an actual build
|
|
10
|
-
class FakeOrogenEnvironment
|
|
11
|
-
class BlackHole
|
|
12
|
-
def initialize(*args)
|
|
13
|
-
end
|
|
14
|
-
def method_missing(*args)
|
|
15
|
-
self
|
|
16
|
-
end
|
|
17
|
-
def self.method_missing(*args)
|
|
18
|
-
self
|
|
19
|
-
end
|
|
20
|
-
def self.const_missing(*args)
|
|
21
|
-
self
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
StaticDeployment = BlackHole
|
|
25
|
-
StaticDeployment::Logger = BlackHole
|
|
26
|
-
TaskContext = BlackHole
|
|
27
|
-
|
|
28
|
-
class FakeDeployment
|
|
29
|
-
attr_reader :env
|
|
30
|
-
def initialize(env, name)
|
|
31
|
-
@env = env
|
|
32
|
-
env.provides << "pkgconfig/orogen-#{name}"
|
|
33
|
-
end
|
|
34
|
-
def add_default_logger
|
|
35
|
-
env.using_task_library 'logger'
|
|
36
|
-
BlackHole
|
|
37
|
-
end
|
|
38
|
-
def task(*args)
|
|
39
|
-
method_missing(*args)
|
|
40
|
-
end
|
|
41
|
-
def const_missing(*args)
|
|
42
|
-
BlackHole
|
|
43
|
-
end
|
|
44
|
-
def method_missing(*args)
|
|
45
|
-
BlackHole
|
|
46
|
-
end
|
|
47
|
-
def self.const_missing(*args)
|
|
48
|
-
BlackHole
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
attr_reader :orogen_file
|
|
53
|
-
attr_reader :base_dir
|
|
54
|
-
attr_reader :project_name, :dependencies, :provides
|
|
55
|
-
def self.load(pkg, file)
|
|
56
|
-
FakeOrogenEnvironment.new(pkg).load(file)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# The Autobuild::Orogen instance we are working for
|
|
60
|
-
attr_reader :pkg
|
|
61
|
-
|
|
62
|
-
def initialize(pkg)
|
|
63
|
-
@pkg = pkg
|
|
64
|
-
@dependencies = Array.new
|
|
65
|
-
@provides = Array.new
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def load(file)
|
|
69
|
-
@orogen_file = file
|
|
70
|
-
@base_dir = File.dirname(file)
|
|
71
|
-
|
|
72
|
-
begin
|
|
73
|
-
Kernel.eval(File.read(file), binding, file, 0)
|
|
74
|
-
rescue ::Exception => e
|
|
75
|
-
backtrace = e.backtrace.dup
|
|
76
|
-
message = e.message.dup
|
|
77
|
-
|
|
78
|
-
backtrace.delete_if { |line| line !~ /(\s|^)#{Regexp.quote(file)}:/ }
|
|
79
|
-
if message =~ /^(#{Regexp.quote(file)}:\d+): (.*)/m
|
|
80
|
-
backtrace.unshift $1
|
|
81
|
-
message = $2
|
|
82
|
-
end
|
|
83
|
-
raise e, message, backtrace
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
self
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def name(name)
|
|
90
|
-
@project_name = name
|
|
91
|
-
nil
|
|
92
|
-
end
|
|
93
|
-
def using_library(*names)
|
|
94
|
-
@dependencies.concat(names)
|
|
95
|
-
nil
|
|
96
|
-
end
|
|
97
|
-
def import_types_from(name, *args)
|
|
98
|
-
if !File.file?(File.join(base_dir, name)) && name.downcase !~ /\.(hh|hpp|h)/
|
|
99
|
-
using_toolkit name
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
def using_toolkit(*names)
|
|
103
|
-
names = names.map { |n| "#{n}-toolkit-#{pkg.orocos_target}" }
|
|
104
|
-
@dependencies.concat(names)
|
|
105
|
-
nil
|
|
106
|
-
end
|
|
107
|
-
def using_task_library(*names)
|
|
108
|
-
names = names.map { |n| "#{n}-tasks-#{pkg.orocos_target}" }
|
|
109
|
-
@dependencies.concat(names)
|
|
110
|
-
nil
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def static_deployment(name = nil, &block)
|
|
114
|
-
deployment("test_#{project_name}", &block)
|
|
115
|
-
end
|
|
116
|
-
def deployment(name, &block)
|
|
117
|
-
deployment = FakeDeployment.new(self, name)
|
|
118
|
-
deployment.instance_eval(&block) if block
|
|
119
|
-
deployment
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
def self.const_missing(*args)
|
|
123
|
-
BlackHole
|
|
124
|
-
end
|
|
125
|
-
def const_missing(*args)
|
|
126
|
-
BlackHole
|
|
127
|
-
end
|
|
128
|
-
def method_missing(*args)
|
|
129
|
-
BlackHole
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
6
|
# This class represents packages generated by orogen. oroGen is a
|
|
134
7
|
# specification and code generation tool for the Orocos/RTT integration
|
|
135
|
-
# framework. See http://
|
|
8
|
+
# framework. See http://rock-robotics.org for more information.
|
|
136
9
|
#
|
|
137
10
|
# This class extends the CMake package class to handle the code generation
|
|
138
11
|
# step. Moreover, it will load the orogen specification and automatically
|
|
@@ -150,10 +23,33 @@ module Autobuild
|
|
|
150
23
|
class Orogen < CMake
|
|
151
24
|
class << self
|
|
152
25
|
attr_accessor :corba
|
|
26
|
+
|
|
27
|
+
# If set to true, all components are generated with the
|
|
28
|
+
# --extended-states option
|
|
29
|
+
#
|
|
30
|
+
# The default is false
|
|
153
31
|
attr_accessor :extended_states
|
|
32
|
+
|
|
33
|
+
# See #always_regenerate?
|
|
34
|
+
attr_reader :always_regenerate
|
|
35
|
+
|
|
36
|
+
# If true (the default), the oroGen component will be regenerated
|
|
37
|
+
# every time a dependency is newer than the package itself.
|
|
38
|
+
#
|
|
39
|
+
# Otherwise, autobuild tries to regenerate it only when needed
|
|
40
|
+
#
|
|
41
|
+
# This is still considered experimental. Use
|
|
42
|
+
# Orogen.always_regenerate= to set it
|
|
43
|
+
def always_regenerate?
|
|
44
|
+
!!@always_regenerate
|
|
45
|
+
end
|
|
154
46
|
end
|
|
155
47
|
|
|
48
|
+
@always_regenerate = true
|
|
49
|
+
|
|
156
50
|
@orocos_target = nil
|
|
51
|
+
|
|
52
|
+
# The target that should be used to generate and build orogen components
|
|
157
53
|
def self.orocos_target
|
|
158
54
|
user_target = ENV['OROCOS_TARGET']
|
|
159
55
|
if @orocos_target
|
|
@@ -173,6 +69,7 @@ module Autobuild
|
|
|
173
69
|
@default_type_export_policy = :used
|
|
174
70
|
@transports = %w{corba typelib}
|
|
175
71
|
|
|
72
|
+
# Path to the orogen tool
|
|
176
73
|
def self.orogen_bin
|
|
177
74
|
if @orogen_bin
|
|
178
75
|
@orogen_bin
|
|
@@ -186,6 +83,7 @@ module Autobuild
|
|
|
186
83
|
end
|
|
187
84
|
end
|
|
188
85
|
|
|
86
|
+
# Path to the root of the orogen package
|
|
189
87
|
def self.orogen_root
|
|
190
88
|
if @orogen_root
|
|
191
89
|
@orogen_root
|
|
@@ -194,6 +92,10 @@ module Autobuild
|
|
|
194
92
|
end
|
|
195
93
|
end
|
|
196
94
|
|
|
95
|
+
# The version of orogen, given as a string
|
|
96
|
+
#
|
|
97
|
+
# It is used to enable/disable some configuration features based on the
|
|
98
|
+
# orogen version string
|
|
197
99
|
def self.orogen_version
|
|
198
100
|
if !@orogen_version && root = orogen_root
|
|
199
101
|
version_file = File.join(root, 'orogen', 'version.rb')
|
|
@@ -205,7 +107,16 @@ module Autobuild
|
|
|
205
107
|
@orogen_version
|
|
206
108
|
end
|
|
207
109
|
|
|
110
|
+
# Overrides the global Orocos.orocos_target for this particular package
|
|
208
111
|
attr_writer :orocos_target
|
|
112
|
+
|
|
113
|
+
# The orocos target that should be used for this particular orogen
|
|
114
|
+
# package
|
|
115
|
+
#
|
|
116
|
+
# By default, it is the same than Orogen.orocos_target. It can be set by
|
|
117
|
+
# doing
|
|
118
|
+
#
|
|
119
|
+
# package.orocos_target = 'target_name'
|
|
209
120
|
def orocos_target
|
|
210
121
|
if @orocos_target.nil?
|
|
211
122
|
Orogen.orocos_target
|
|
@@ -214,19 +125,22 @@ module Autobuild
|
|
|
214
125
|
end
|
|
215
126
|
end
|
|
216
127
|
|
|
217
|
-
attr_reader :orogen_spec
|
|
218
|
-
|
|
219
128
|
attr_writer :corba
|
|
220
129
|
def corba
|
|
221
130
|
@corba || (@corba.nil? && Orogen.corba)
|
|
222
131
|
end
|
|
223
132
|
|
|
133
|
+
# Overrides the global Orocos.extended_states for this particular package
|
|
224
134
|
attr_writer :extended_states
|
|
225
135
|
def extended_states
|
|
226
136
|
@extended_states || (@extended_states.nil? && Orogen.extended_states)
|
|
227
137
|
end
|
|
228
138
|
|
|
139
|
+
# Path to the orogen file used for this package
|
|
140
|
+
#
|
|
141
|
+
# If present, it defaults to the package name with '.orogen' appended
|
|
229
142
|
attr_accessor :orogen_file
|
|
143
|
+
|
|
230
144
|
def initialize(*args, &config)
|
|
231
145
|
super
|
|
232
146
|
|
|
@@ -241,13 +155,6 @@ module Autobuild
|
|
|
241
155
|
|
|
242
156
|
def import
|
|
243
157
|
super
|
|
244
|
-
|
|
245
|
-
@orogen_spec = FakeOrogenEnvironment.load(self, File.join(srcdir, orogen_file))
|
|
246
|
-
provides "pkgconfig/#{orogen_spec.project_name}-toolkit-#{orocos_target}"
|
|
247
|
-
provides "pkgconfig/#{orogen_spec.project_name}-tasks-#{orocos_target}"
|
|
248
|
-
orogen_spec.provides.each do |name|
|
|
249
|
-
provides name
|
|
250
|
-
end
|
|
251
158
|
end
|
|
252
159
|
|
|
253
160
|
def update_environment
|
|
@@ -272,26 +179,18 @@ module Autobuild
|
|
|
272
179
|
depends_on rtt.name
|
|
273
180
|
end
|
|
274
181
|
|
|
275
|
-
#
|
|
276
|
-
#
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if Autobuild::Package[target]
|
|
280
|
-
depends_on target
|
|
281
|
-
end
|
|
182
|
+
# Find out where orogen is, and make sure the configurestamp depend
|
|
183
|
+
# on it. Ignore if orogen is too old to have a --base-dir option
|
|
184
|
+
if orogen_root = self.class.orogen_root
|
|
185
|
+
orogen_tree = Autobuild.source_tree(orogen_root)
|
|
282
186
|
end
|
|
283
187
|
|
|
284
188
|
# Check if there is an orogen package registered. If it is the case,
|
|
285
189
|
# simply depend on it. Otherwise, look out for orogen --base-dir
|
|
286
190
|
if Autobuild::Package['orogen']
|
|
287
191
|
depends_on "orogen"
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
# on it. Ignore if orogen is too old to have a --base-dir option
|
|
291
|
-
if orogen_root = self.class.orogen_root
|
|
292
|
-
orogen_root = File.join(orogen_root, 'orogen')
|
|
293
|
-
file genstamp => Autobuild.source_tree(orogen_root)
|
|
294
|
-
end
|
|
192
|
+
elsif orogen_tree
|
|
193
|
+
file genstamp => orogen_tree
|
|
295
194
|
end
|
|
296
195
|
|
|
297
196
|
file configurestamp => genstamp
|
|
@@ -319,7 +218,7 @@ module Autobuild
|
|
|
319
218
|
end
|
|
320
219
|
|
|
321
220
|
def regen
|
|
322
|
-
cmdline = [
|
|
221
|
+
cmdline = []
|
|
323
222
|
cmdline << '--corba' if corba
|
|
324
223
|
|
|
325
224
|
ext_states = extended_states
|
|
@@ -330,7 +229,6 @@ module Autobuild
|
|
|
330
229
|
cmdline << '--no-extended-states'
|
|
331
230
|
end
|
|
332
231
|
end
|
|
333
|
-
cmdline << orogen_file
|
|
334
232
|
|
|
335
233
|
if (version = Orogen.orogen_version)
|
|
336
234
|
if version >= "1.0"
|
|
@@ -338,13 +236,50 @@ module Autobuild
|
|
|
338
236
|
end
|
|
339
237
|
if version >= "1.1"
|
|
340
238
|
cmdline << "--type-export-policy=#{Orogen.default_type_export_policy}"
|
|
341
|
-
cmdline << "--transports=#{Orogen.transports.join(",")}"
|
|
239
|
+
cmdline << "--transports=#{Orogen.transports.sort.uniq.join(",")}"
|
|
342
240
|
end
|
|
343
241
|
end
|
|
242
|
+
cmdline = cmdline.sort
|
|
243
|
+
cmdline << orogen_file
|
|
244
|
+
|
|
245
|
+
needs_regen = Autobuild::Orogen.always_regenerate?
|
|
246
|
+
|
|
247
|
+
# Try to avoid unnecessary regeneration as generation can be pretty
|
|
248
|
+
# long
|
|
249
|
+
#
|
|
250
|
+
# First, check if the command line changed
|
|
251
|
+
needs_regen ||=
|
|
252
|
+
if File.exists?(genstamp)
|
|
253
|
+
last_cmdline = File.read(genstamp).split("\n")
|
|
254
|
+
last_cmdline != cmdline
|
|
255
|
+
else
|
|
256
|
+
true
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Then, if it has already been built, check what the check-uptodate
|
|
260
|
+
# target says
|
|
261
|
+
needs_regen ||=
|
|
262
|
+
if File.directory?(builddir)
|
|
263
|
+
Dir.chdir(builddir) do
|
|
264
|
+
!system("#{Autobuild.tool('make')} check-uptodate > /dev/null 2>&1")
|
|
265
|
+
end
|
|
266
|
+
else
|
|
267
|
+
true
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Finally, verify that orogen itself did not change
|
|
271
|
+
needs_regen ||= (Rake::Task[Orogen.orogen_root].timestamp > Rake::Task[genstamp].timestamp)
|
|
344
272
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
273
|
+
if needs_regen
|
|
274
|
+
progress "generating oroGen project %s"
|
|
275
|
+
Dir.chdir(srcdir) do
|
|
276
|
+
Subprocess.run self, 'orogen', guess_ruby_name, self.class.orogen_bin, *cmdline
|
|
277
|
+
File.open(genstamp, 'w') do |io|
|
|
278
|
+
io.print cmdline.join("\n")
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
else
|
|
282
|
+
progress "no need to regenerate the oroGen project %s"
|
|
348
283
|
Autobuild.touch_stamp genstamp
|
|
349
284
|
end
|
|
350
285
|
end
|
data/lib/autobuild/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: autobuild
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
5
|
-
prerelease:
|
|
4
|
+
hash: 69
|
|
5
|
+
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 1
|
|
8
8
|
- 5
|
|
9
|
-
-
|
|
10
|
-
version: 1.5.
|
|
9
|
+
- 35
|
|
10
|
+
version: 1.5.35
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Sylvain Joyeux
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-
|
|
18
|
+
date: 2011-05-02 00:00:00 +02:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -166,7 +166,7 @@ files:
|
|
|
166
166
|
- test/test_subcommand.rb
|
|
167
167
|
- test/tools.rb
|
|
168
168
|
has_rdoc: true
|
|
169
|
-
homepage:
|
|
169
|
+
homepage:
|
|
170
170
|
licenses: []
|
|
171
171
|
|
|
172
172
|
post_install_message:
|
|
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
196
196
|
requirements: []
|
|
197
197
|
|
|
198
198
|
rubyforge_project: autobuild
|
|
199
|
-
rubygems_version: 1.
|
|
199
|
+
rubygems_version: 1.6.2
|
|
200
200
|
signing_key:
|
|
201
201
|
specification_version: 3
|
|
202
202
|
summary: Rake-based utility to build and install multiple packages with dependencies
|