autoproj 1.1.3 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/Manifest.txt +5 -1
- data/Rakefile +1 -1
- data/bin/autoproj +56 -26
- data/doc/guide/src/customization.page +168 -0
- data/doc/guide/src/structure.page +33 -61
- data/lib/autoproj/autobuild.rb +24 -2
- data/lib/autoproj/manifest.rb +109 -31
- data/lib/autoproj/system.rb +14 -1
- data/lib/autoproj/version.rb +1 -1
- data/samples/autoproj/init.rb +23 -0
- data/samples/autoproj/manifest +52 -0
- data/samples/autoproj/overrides.rb +4 -0
- data/samples/autoproj/overrides.yml +8 -0
- metadata +8 -4
- data/samples/manifest +0 -18
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
= Version 1.2.0
|
2
|
+
* added the rebuild and force-build modes
|
3
|
+
* added a local source that allows to override imported package sets and so on.
|
4
|
+
* improved documentation on the subject of customizing the installation
|
5
|
+
|
1
6
|
= Version 1.1.3
|
2
7
|
* fix --reconfigure on installations where the main configuration is managed by
|
3
8
|
a VCS
|
data/Manifest.txt
CHANGED
@@ -9,6 +9,7 @@ doc/guide/ext/previous_next.rb
|
|
9
9
|
doc/guide/ext/rdoc_links.rb
|
10
10
|
doc/guide/src/autobuild.page
|
11
11
|
doc/guide/src/autoproj_bootstrap
|
12
|
+
doc/guide/src/customization.page
|
12
13
|
doc/guide/src/default.css
|
13
14
|
doc/guide/src/default.template
|
14
15
|
doc/guide/src/htmldoc.metainfo
|
@@ -28,7 +29,10 @@ lib/autoproj/options.rb
|
|
28
29
|
lib/autoproj/osdeps.rb
|
29
30
|
lib/autoproj/system.rb
|
30
31
|
lib/autoproj/version.rb
|
31
|
-
samples/
|
32
|
+
samples/autoproj/init.rb
|
33
|
+
samples/autoproj/manifest
|
34
|
+
samples/autoproj/overrides.rb
|
35
|
+
samples/autoproj/overrides.yml
|
32
36
|
samples/manifest.xml
|
33
37
|
samples/osdeps.yml
|
34
38
|
test/data/test_manifest/autoproj/local/local.autobuild
|
data/Rakefile
CHANGED
data/bin/autoproj
CHANGED
@@ -31,6 +31,8 @@ parser = OptionParser.new do |opts|
|
|
31
31
|
autoproj mode [options]
|
32
32
|
where 'mode' is one of:
|
33
33
|
build: import, build and install all selected packages
|
34
|
+
force-build: triggers all build commands, i.e. don't be lazy like in "build"
|
35
|
+
rebuild: remove all build products, thus triggering a full rebuild
|
34
36
|
doc: generate and install documentation for packages that have some
|
35
37
|
update: only import/update packages, do not build them
|
36
38
|
status: displays the state of the packages w.r.t. their source VCS
|
@@ -184,15 +186,25 @@ def do_bootstrap(*args)
|
|
184
186
|
end
|
185
187
|
Autobuild.logdir = File.join('build', 'log')
|
186
188
|
|
187
|
-
if args.
|
189
|
+
if args.size > 2
|
190
|
+
raise ConfigError, "usage: autoproj bootstrap [manifest_url | vcs_type vcs_url]"
|
191
|
+
end
|
192
|
+
|
193
|
+
# Check if we are being called from another GEM_HOME. If it is the case,
|
194
|
+
# assume that we are bootstrapping from another installation directory and
|
195
|
+
# start by copying the .gems directory
|
196
|
+
if ENV['GEM_HOME'] && ENV['GEM_HOME'] != File.join(Dir.pwd, ".gems")
|
197
|
+
FileUtils.cp_r ENV['GEM_HOME'], ".gems"
|
198
|
+
end
|
199
|
+
|
200
|
+
# If we are not getting the installation setup from a VCS, copy the template
|
201
|
+
# files
|
202
|
+
if args.empty? || args.size == 1
|
188
203
|
sample_dir = File.expand_path(File.join("..", "samples"), File.dirname(__FILE__))
|
189
|
-
|
190
|
-
|
191
|
-
File.open(File.join(Autoproj.config_dir, "manifest"), "w") do |io|
|
192
|
-
io.write(manifest_data)
|
193
|
-
end
|
204
|
+
FileUtils.cp_r File.join(sample_dir, "autoproj"), "autoproj"
|
205
|
+
end
|
194
206
|
|
195
|
-
|
207
|
+
if args.size == 1 # the user asks us to download a manifest
|
196
208
|
manifest_url = args.first
|
197
209
|
STDERR.puts color("autoproj: downloading manifest file #{manifest_url}", :bold)
|
198
210
|
manifest_data =
|
@@ -201,12 +213,11 @@ def do_bootstrap(*args)
|
|
201
213
|
raise ConfigError, "cannot read #{manifest_url}, did you mean 'autoproj bootstrap VCSTYPE #{manifest_url}' ?"
|
202
214
|
end
|
203
215
|
|
204
|
-
FileUtils.mkdir_p "autoproj"
|
205
216
|
File.open(File.join(Autoproj.config_dir, "manifest"), "w") do |io|
|
206
217
|
io.write(manifest_data)
|
207
218
|
end
|
208
219
|
|
209
|
-
|
220
|
+
elsif args.size == 2 # is a VCS definition for the manifest itself ...
|
210
221
|
vcs_def = Hash.new
|
211
222
|
vcs_def[:type] = args.shift
|
212
223
|
vcs_def[:url] = args.shift
|
@@ -234,6 +245,27 @@ manifest_source:
|
|
234
245
|
EOTEXT
|
235
246
|
end
|
236
247
|
end
|
248
|
+
|
249
|
+
# Finally, generate an env.sh script
|
250
|
+
File.open('env.sh', 'w') do |io|
|
251
|
+
io.write <<-EOSHELL
|
252
|
+
export RUBYOPT=-rubygems
|
253
|
+
export GEM_HOME=#{Dir.pwd}/.gems
|
254
|
+
export PATH=$GEM_HOME/bin:$PATH
|
255
|
+
EOSHELL
|
256
|
+
end
|
257
|
+
|
258
|
+
STDERR.puts <<EOTEXT
|
259
|
+
|
260
|
+
add the following line at the bottom of your .bashrc:
|
261
|
+
source #{Dir.pwd}/env.sh
|
262
|
+
|
263
|
+
WARNING: autoproj will not work until your restart all
|
264
|
+
your consoles, or run the following in them:
|
265
|
+
$ source #{Dir.pwd}/env.sh
|
266
|
+
|
267
|
+
EOTEXT
|
268
|
+
|
237
269
|
end
|
238
270
|
|
239
271
|
# Find the autoproj root dir
|
@@ -254,6 +286,10 @@ begin
|
|
254
286
|
only_update_sources = true
|
255
287
|
|
256
288
|
when "build"
|
289
|
+
when "force-build"
|
290
|
+
Autobuild.do_forced_build = true
|
291
|
+
when "rebuild"
|
292
|
+
Autobuild.do_rebuild = true
|
257
293
|
when "update"
|
258
294
|
Autobuild.do_build = false
|
259
295
|
when "status"
|
@@ -286,9 +322,9 @@ begin
|
|
286
322
|
raise ConfigError, "RubyGems is already loaded with a different GEM_HOME, make sure you are loading the right env.sh script !"
|
287
323
|
end
|
288
324
|
end
|
289
|
-
# Set the initial environment
|
290
|
-
Autoproj.set_initial_env
|
291
325
|
# Set up some important autobuild parameters
|
326
|
+
Autoproj.env_inherit 'PATH', 'PKG_CONFIG_PATH', 'RUBYLIB'
|
327
|
+
Autoproj.env_set 'GEM_HOME', Autoproj.gem_home
|
292
328
|
Autobuild.prefix = Autoproj.build_dir
|
293
329
|
Autobuild.srcdir = root_dir
|
294
330
|
Autobuild.logdir = File.join(Autobuild.prefix, 'log')
|
@@ -344,14 +380,7 @@ begin
|
|
344
380
|
# Load init.rb files. each_source must not load the source.yml file, as
|
345
381
|
# init.rb may define configuration options that are used there
|
346
382
|
manifest.each_source(false) do |source|
|
347
|
-
|
348
|
-
if File.exists?(init_rb)
|
349
|
-
begin
|
350
|
-
load init_rb
|
351
|
-
rescue Exception => e
|
352
|
-
Autoproj.filter_load_exception(e, source, init_rb)
|
353
|
-
end
|
354
|
-
end
|
383
|
+
Autoproj.load_if_present(source, source.local_dir, "init.rb")
|
355
384
|
end
|
356
385
|
|
357
386
|
# Load the required autobuild definitions
|
@@ -363,6 +392,13 @@ begin
|
|
363
392
|
Autoproj.import_autobuild_file source, name
|
364
393
|
end
|
365
394
|
|
395
|
+
# Load the package's override files. each_source must not load the
|
396
|
+
# source.yml file, as init.rb may define configuration options that are used
|
397
|
+
# there
|
398
|
+
manifest.each_source(false).to_a.reverse.each do |source|
|
399
|
+
Autoproj.load_if_present(source, source.local_dir, "overrides.rb")
|
400
|
+
end
|
401
|
+
|
366
402
|
# The user is asked for configuration values both during the manifest
|
367
403
|
# loading and the loading of autobuild files. Save it now.
|
368
404
|
Autoproj.save_config
|
@@ -519,12 +555,6 @@ begin
|
|
519
555
|
manifest.install_os_dependencies(all_enabled_packages)
|
520
556
|
end
|
521
557
|
|
522
|
-
# Call the prepare target now, after we did the import *and* loaded
|
523
|
-
# the manifests
|
524
|
-
prepare_targets = all_enabled_packages.map { |pkg| "#{pkg}-prepare" }
|
525
|
-
task "autoproj-#{name}-prepare" => prepare_targets
|
526
|
-
Rake::Task["autoproj-#{name}-prepare"].invoke
|
527
|
-
|
528
558
|
# And now build
|
529
559
|
if Autobuild.only_doc
|
530
560
|
STDERR.puts color(" building and installing documentation", :bold)
|
@@ -532,7 +562,7 @@ begin
|
|
532
562
|
STDERR.puts color(" building and installing packages", :bold)
|
533
563
|
end
|
534
564
|
|
535
|
-
Autobuild.apply(
|
565
|
+
Autobuild.apply(all_enabled_packages, "autoproj-#{name}")
|
536
566
|
Autobuild::Reporting.success
|
537
567
|
end
|
538
568
|
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
---
|
2
|
+
title: Customizing the installation
|
3
|
+
sort_info: 75
|
4
|
+
---
|
5
|
+
|
6
|
+
Changing the installation's layout
|
7
|
+
----------------------------------
|
8
|
+
|
9
|
+
The <tt>layout</tt> section of <tt>autoproj/manifest</tt> offers two things:
|
10
|
+
* select which packages/package sets to build and
|
11
|
+
* build packages in specific subdirectories
|
12
|
+
|
13
|
+
This section lists packages or package sets that ought to be built by autoproj.
|
14
|
+
For instance, in the following example, only the <tt>orocos/rtt</tt> and
|
15
|
+
<tt>orocos/ocl</tt>
|
16
|
+
packages of the rubim.orocos source will be built. The other will be excluded
|
17
|
+
from the build.
|
18
|
+
|
19
|
+
{coderay:: yaml}
|
20
|
+
package_sets:
|
21
|
+
- type: git
|
22
|
+
url: git://github.com/doudou/rubim.orocos.git
|
23
|
+
|
24
|
+
layout:
|
25
|
+
- orocos/rtt
|
26
|
+
- orocos/ocl
|
27
|
+
{coderay}
|
28
|
+
|
29
|
+
Instead of giving a package name, the name of a package set can be provided,
|
30
|
+
which translates into "all the packages of that set".
|
31
|
+
|
32
|
+
As we mentionned before, the layout mechanism also allows you to place packages
|
33
|
+
in subdirectories of the main installation. For instance, the following snippet
|
34
|
+
will build the <tt>typelib</tt>, <tt>utilmm</tt> and <tt>utilrb</tt> libraries of rubim.orocos into
|
35
|
+
the <tt>lib/</tt> subdirectory and all the <tt>orocos/</tt> packages in the root.
|
36
|
+
|
37
|
+
{coderay:: yaml}
|
38
|
+
layout:
|
39
|
+
- lib:
|
40
|
+
- typelib
|
41
|
+
- utilmm
|
42
|
+
- utilrb
|
43
|
+
- orocos/
|
44
|
+
{coderay}
|
45
|
+
|
46
|
+
Finally, names of sublayouts can be used as arguments in the autoproj command
|
47
|
+
line, instead of package names:
|
48
|
+
|
49
|
+
autoproj build lib
|
50
|
+
{.commandline}
|
51
|
+
|
52
|
+
Removing packages from the build
|
53
|
+
--------------------------------
|
54
|
+
Instead of having to list all packages that you do want to build, it is possible
|
55
|
+
to list the packages that you don't want to build. Simply list them in the
|
56
|
+
<tt>exclude\_packages</tt> section of the manifest file. In the following example, all
|
57
|
+
of the rubim.orocos package set will be built *but* the pocosim-log package.
|
58
|
+
|
59
|
+
{coderay:: yaml}
|
60
|
+
layout:
|
61
|
+
- rubim.orocos
|
62
|
+
|
63
|
+
exclude_packages:
|
64
|
+
- pocosim-log
|
65
|
+
{coderay}
|
66
|
+
|
67
|
+
Using packages that are already installed
|
68
|
+
-----------------------------------------
|
69
|
+
|
70
|
+
If some packages are already installed elsewhere, and you want to use that
|
71
|
+
version instead of the one listed in the package sets, list them in the
|
72
|
+
<tt>ignore\_packages</tt> section of the manifest. In the following example, the
|
73
|
+
<tt>orocos/rtt</tt> package will *not* be built by autoproj.
|
74
|
+
|
75
|
+
{coderay:: yaml}
|
76
|
+
layout:
|
77
|
+
- rubim.orocos
|
78
|
+
|
79
|
+
exclude_packages:
|
80
|
+
- pocosim-log
|
81
|
+
|
82
|
+
ignore_packages:
|
83
|
+
- orocos/rtt
|
84
|
+
{coderay}
|
85
|
+
|
86
|
+
This differs from the <tt>exclude\_packages</tt> mechanism: packages listed in
|
87
|
+
<tt>ignore\_packages</tt> are assumed to be present even though autoproj does not manage
|
88
|
+
them, while packages in <tt>exclude\_packages</tt> are assumed to be absent and therefore
|
89
|
+
issue an error if another package in the installation depend on them.
|
90
|
+
|
91
|
+
Local overrides of version control information
|
92
|
+
----------------------------------------------
|
93
|
+
|
94
|
+
The <tt>autoproj/overrides.yml</tt> allows you to override version control information
|
95
|
+
for specific packages. It has the same format than the source.yml file of
|
96
|
+
package sets, so [check that page out](source_yml.html) for more information.
|
97
|
+
|
98
|
+
This file can in particular be used to avoid further updates to a given software
|
99
|
+
package. Simply do:
|
100
|
+
|
101
|
+
{coderay:: yaml}
|
102
|
+
version_control:
|
103
|
+
- orocos/rtt:
|
104
|
+
type: none
|
105
|
+
{coderay}
|
106
|
+
|
107
|
+
Building local packages
|
108
|
+
-----------------------
|
109
|
+
|
110
|
+
You can list local packages that are not in an imported package set by placing
|
111
|
+
the definitions in autoproj/, in a file ending with <tt>.autobuild</tt>. See [this
|
112
|
+
page](source_yml.html) for information on how to write autobuild files.
|
113
|
+
|
114
|
+
Setting up the path to specific commands (make, parallel_builds)
|
115
|
+
----------------------------------------------------------------
|
116
|
+
|
117
|
+
The autobuild API allows to specify what specific installed command to use for
|
118
|
+
each tool needed during the build. These commands can be used in
|
119
|
+
<tt>autoproj/init.rb</tt> to tune the build system. Example:
|
120
|
+
|
121
|
+
{coderay:: ruby}
|
122
|
+
Autobuild.commands['make'] = '/path/to/ccmake'
|
123
|
+
Autobuild.parallel_build_level = 10 # build with -j10
|
124
|
+
{coderay}
|
125
|
+
|
126
|
+
More complex customization
|
127
|
+
--------------------------
|
128
|
+
|
129
|
+
More complex customization can be achieved by accessing the Autoproj and
|
130
|
+
Autobuild API directly in the <tt>autoproj/init.rb</tt> and
|
131
|
+
<tt>autoproj/overrides.rb</tt>
|
132
|
+
files. The former is loaded before all source files and the latter is loaded
|
133
|
+
after all source files.
|
134
|
+
|
135
|
+
Building packages selectively on the command line
|
136
|
+
-------------------------------------------------
|
137
|
+
|
138
|
+
The autoproj command line accepts subdirectories defined in the layout as well
|
139
|
+
as package names.
|
140
|
+
|
141
|
+
For instance, with the following layout:
|
142
|
+
|
143
|
+
{coderay:: yaml}
|
144
|
+
layout:
|
145
|
+
- typelib
|
146
|
+
- asguard:
|
147
|
+
- modules/base
|
148
|
+
- modules/logger
|
149
|
+
{coderay}
|
150
|
+
|
151
|
+
If the command line is
|
152
|
+
|
153
|
+
autoproj build modules/logger
|
154
|
+
{.cmdline}
|
155
|
+
|
156
|
+
then only modules/logger and modules/base will be built -- assuming
|
157
|
+
modules/logger depends on modules/base -- but typelib will be left alone
|
158
|
+
_regardless of its state_. It may speed up the build process tremendously, but
|
159
|
+
also may generate errors if other packages needed to be updated.
|
160
|
+
|
161
|
+
Idem, if the command line is:
|
162
|
+
|
163
|
+
autoproj build asguard
|
164
|
+
{.cmdline}
|
165
|
+
|
166
|
+
then all packages or asguard/ are built _but none of the dependencies that are
|
167
|
+
defined in other places in the layout_.
|
168
|
+
|
@@ -12,12 +12,14 @@ Structure
|
|
12
12
|
A autoproj installation is characterized by a autoproj/ directory in which all
|
13
13
|
autoproj-related configuration is saved. The contained files are as follows:
|
14
14
|
|
15
|
-
* autoproj/manifest: list of available package sets,
|
16
|
-
|
15
|
+
* autoproj/manifest: list of available package sets, customization options.
|
16
|
+
The first part is covered here, the second in the next page.
|
17
17
|
* .remotes/\*: package sets that are imported from a remote version
|
18
18
|
control system
|
19
19
|
* autoproj/\*/: local sets, i.e. sets that have not been imported from a remote
|
20
20
|
version control system.
|
21
|
+
* autoproj\/init.rb, autoproj\/overrides.rb and autoproj\/overrides.yml:
|
22
|
+
installation customization
|
21
23
|
|
22
24
|
The build is done in two steps:
|
23
25
|
|
@@ -30,38 +32,23 @@ Moreover, the <tt>build/log</tt> directory contains the output of all commands
|
|
30
32
|
that have been run during the build. Finally, a <tt>env.sh</tt> script is
|
31
33
|
generated to set up your shell for the use of the installed software.
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
looks like this:
|
35
|
+
Listing and adding package sets
|
36
|
+
-------------------------------
|
37
|
+
Package sets are listed in the <tt>package\_sets</tt> section of
|
38
|
+
<tt>autoproj/manifest</tt> file. This section looks like this:
|
38
39
|
|
39
40
|
{coderay:: yaml}
|
40
|
-
layout:
|
41
|
-
- autoproj.orocos
|
42
|
-
- asguard:
|
43
|
-
- dfki.imoby
|
44
|
-
|
45
41
|
package_sets:
|
46
42
|
- imoby
|
47
43
|
- type: git
|
48
44
|
url: git://github.com/doudou/autoproj-orocos.git
|
49
45
|
{coderay}
|
50
46
|
|
51
|
-
|
52
|
-
sets
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
Package sets are referred to by the name given in the [set's <tt>source.yml</tt>
|
57
|
-
file](source_yml.html), and are interpreted as "build all packages of the given
|
58
|
-
set".
|
59
|
-
|
60
|
-
The second section, the <tt>package_sets</tt> section, lists both local and remote
|
61
|
-
sets that are available to this installation. Local sets are
|
62
|
-
subdirectories of the <tt>autoproj/</tt> directory: for instance, in the above
|
63
|
-
example, autoproj will look at the <tt>autoproj/imoby/</tt> directory. Remote
|
64
|
-
sets are taken from remote version control systems. Its general format is:
|
47
|
+
It lists both local and remote sets that are available for this installation.
|
48
|
+
Local sets are subdirectories of the <tt>autoproj/</tt> directory: for instance,
|
49
|
+
in the above example, autoproj will look at the <tt>autoproj/imoby/</tt>
|
50
|
+
directory. Remote sets are taken from remote version control systems. Its
|
51
|
+
general format is:
|
65
52
|
|
66
53
|
{coderay:: yaml}
|
67
54
|
- type: version_control_type # git, svn, cvs, darcs
|
@@ -76,6 +63,9 @@ For the git importer, one of 'branch' or 'tag' options can be provided as well:
|
|
76
63
|
tag: tag_to_stick_to # it is branch OR tag
|
77
64
|
{coderay}
|
78
65
|
|
66
|
+
Imported package sets are saved in the <tt>.remotes</tt> directory of the
|
67
|
+
autoproj installation.
|
68
|
+
|
79
69
|
Management
|
80
70
|
----------
|
81
71
|
|
@@ -105,6 +95,18 @@ If, on the other hand, you only want to update the source code, do
|
|
105
95
|
autoproj update
|
106
96
|
{.commandline}
|
107
97
|
|
98
|
+
Finally, if you want to make sure that your build is fresh, then do
|
99
|
+
|
100
|
+
autoproj rebuild
|
101
|
+
{.commandline}
|
102
|
+
|
103
|
+
A less intrusive version of it only forces all tools to reconsider building. It
|
104
|
+
is mainly useful for CMake when the build environment changed -- cmake caches a
|
105
|
+
lot of values. To trigger this, do
|
106
|
+
|
107
|
+
autoproj force-build
|
108
|
+
{.commandline}
|
109
|
+
|
108
110
|
To add a new set, one edits the <tt>autoproj/manifest</tt> file and adds it
|
109
111
|
there. Then, simply starting the build will update everything and rebuild what
|
110
112
|
is needed.
|
@@ -114,40 +116,10 @@ Documentation is generated only when asked explicitely:
|
|
114
116
|
autoproj doc
|
115
117
|
{.commandline}
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
All the build-related commands given above (i.e. build, doc, and update) can be
|
121
|
-
given a package name or a name used as a subdirectory in the layout section of
|
122
|
-
the manifest.
|
123
|
-
|
124
|
-
In the first case, only the package and the dependencies _that are on the same
|
125
|
-
level on the installation layout_ are built. It means that with the following
|
126
|
-
layout:
|
119
|
+
All these commands (i.e. build, doc, and update) accept a package name as
|
120
|
+
argument, thus triggering build only for this package and its dependencies. For
|
121
|
+
instance:
|
127
122
|
|
128
|
-
|
129
|
-
|
130
|
-
- typelib
|
131
|
-
- asguard:
|
132
|
-
- modules/base
|
133
|
-
- modules/logger
|
134
|
-
{coderay}
|
135
|
-
|
136
|
-
If the command line is
|
137
|
-
|
138
|
-
autoproj build modules/logger
|
139
|
-
{.cmdline}
|
140
|
-
|
141
|
-
then only modules/logger and modules/base will be built -- assuming
|
142
|
-
modules/logger depends on modules/base -- but typelib will be left alone
|
143
|
-
_regardless of its state_. It may speed up the build process tremendously, but
|
144
|
-
also may generate errors if other packages needed to be updated.
|
145
|
-
|
146
|
-
Idem, if the command line is:
|
147
|
-
|
148
|
-
autoproj build asguard
|
149
|
-
{.cmdline}
|
150
|
-
|
151
|
-
then all packages or asguard/ are built _but none of the dependencies that are
|
152
|
-
defined in other places in the layout_.
|
123
|
+
autoproj build orocos/rtt
|
124
|
+
{.commandline}
|
153
125
|
|
data/lib/autoproj/autobuild.rb
CHANGED
@@ -61,7 +61,7 @@ module Autoproj
|
|
61
61
|
|
62
62
|
@file_stack.push([source, File.basename(path)])
|
63
63
|
begin
|
64
|
-
load path
|
64
|
+
Kernel.load path
|
65
65
|
rescue Exception => e
|
66
66
|
filter_load_exception(e, source, path)
|
67
67
|
end
|
@@ -86,10 +86,16 @@ def package_common(package_type, spec)
|
|
86
86
|
|
87
87
|
begin
|
88
88
|
Rake::Task[package_name]
|
89
|
-
Autoproj.warn "#{package_name}
|
89
|
+
Autoproj.warn "#{package_name} from #{Autoproj.current_file[0]} is overriden by the definition in #{Autoproj.definition_source(package_name)}"
|
90
|
+
return
|
90
91
|
rescue
|
91
92
|
end
|
92
93
|
|
94
|
+
# Check if this package is ignored
|
95
|
+
if Autoproj.manifest.ignored?(package_name)
|
96
|
+
return Autoproj.define(:dummy, spec)
|
97
|
+
end
|
98
|
+
|
93
99
|
Autoproj.define(package_type, spec) do |pkg|
|
94
100
|
pkg.srcdir = pkg.name
|
95
101
|
yield(pkg) if block_given?
|
@@ -129,6 +135,22 @@ def autotools_package(options, &block)
|
|
129
135
|
end
|
130
136
|
|
131
137
|
def ruby_common(pkg)
|
138
|
+
def pkg.prepare_for_forced_build
|
139
|
+
super
|
140
|
+
extdir = File.join(srcdir, 'ext')
|
141
|
+
if File.directory?(extdir)
|
142
|
+
FileUtils.rm_rf File.join(extdir, "build", "CMakeCache.txt")
|
143
|
+
FileUtils.rm_rf File.join(extdir, "Makefile")
|
144
|
+
end
|
145
|
+
end
|
146
|
+
def pkg.prepare_for_rebuild
|
147
|
+
super
|
148
|
+
extdir = File.join(srcdir, 'ext')
|
149
|
+
if File.directory?(extdir)
|
150
|
+
FileUtils.rm_rf File.join(extdir, "build")
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
132
154
|
def pkg.prepare
|
133
155
|
super
|
134
156
|
Autobuild.update_environment srcdir
|
data/lib/autoproj/manifest.rb
CHANGED
@@ -28,18 +28,19 @@ module Autoproj
|
|
28
28
|
# Perform constant expansion on the defined environment variables,
|
29
29
|
# including the option set
|
30
30
|
options = Autoproj.option_set
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
31
|
+
options.each_key do |k|
|
32
|
+
options[k] = options[k].to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
loop do
|
36
|
+
new_value = Autoproj.single_expansion(value, options)
|
37
|
+
if new_value == value
|
38
|
+
break
|
39
|
+
else
|
40
|
+
value = new_value
|
39
41
|
end
|
40
|
-
else
|
41
|
-
value
|
42
42
|
end
|
43
|
+
value
|
43
44
|
end
|
44
45
|
|
45
46
|
@env_inherit = Set.new
|
@@ -75,7 +76,7 @@ module Autoproj
|
|
75
76
|
|
76
77
|
def initialize(type, url, options)
|
77
78
|
@type, @url, @options = type, url, options
|
78
|
-
if type != "local" && !Autobuild.respond_to?(type)
|
79
|
+
if type != "none" && type != "local" && !Autobuild.respond_to?(type)
|
79
80
|
raise ConfigError, "version control #{type} is unknown to autoproj"
|
80
81
|
end
|
81
82
|
end
|
@@ -85,6 +86,8 @@ module Autoproj
|
|
85
86
|
end
|
86
87
|
|
87
88
|
def create_autobuild_importer
|
89
|
+
return if type == "none"
|
90
|
+
|
88
91
|
url = Autoproj.single_expansion(self.url, 'HOME' => ENV['HOME'])
|
89
92
|
if url && url !~ /^(\w+:\/)?\/|^\w+\@/
|
90
93
|
url = File.expand_path(url, Autoproj.root_dir)
|
@@ -202,7 +205,7 @@ module Autoproj
|
|
202
205
|
raise ConfigError, "error in #{source_file}: #{e.message}"
|
203
206
|
end
|
204
207
|
|
205
|
-
if !source_definition
|
208
|
+
if !source_definition || !source_definition['name']
|
206
209
|
raise ConfigError, "#{source_file} does not have a 'name' field"
|
207
210
|
end
|
208
211
|
|
@@ -212,6 +215,10 @@ module Autoproj
|
|
212
215
|
def load_name
|
213
216
|
definition = raw_description_file
|
214
217
|
@name = definition['name']
|
218
|
+
if @name == "local"
|
219
|
+
raise ConfigError, "source #{self} is named 'local', but this is a reserved name"
|
220
|
+
end
|
221
|
+
|
215
222
|
rescue InternalError
|
216
223
|
end
|
217
224
|
|
@@ -336,6 +343,33 @@ module Autoproj
|
|
336
343
|
end
|
337
344
|
end
|
338
345
|
|
346
|
+
class LocalSource < Source
|
347
|
+
def initialize
|
348
|
+
super(Autoproj.normalize_vcs_definition(:type => 'local', :url => Autoproj.config_dir))
|
349
|
+
end
|
350
|
+
|
351
|
+
def name
|
352
|
+
'local'
|
353
|
+
end
|
354
|
+
def load_name
|
355
|
+
end
|
356
|
+
|
357
|
+
def raw_description_file
|
358
|
+
path = File.join(Autoproj.config_dir, "overrides.yml")
|
359
|
+
if File.file?(path)
|
360
|
+
begin
|
361
|
+
data = YAML.load(File.read(path)) || Hash.new
|
362
|
+
rescue ArgumentError => e
|
363
|
+
raise ConfigError, "error in #{source_file}: #{e.message}"
|
364
|
+
end
|
365
|
+
data['name'] = 'local'
|
366
|
+
data
|
367
|
+
else
|
368
|
+
{ 'name' => 'local' }
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
339
373
|
class Manifest
|
340
374
|
FakePackage = Struct.new :name, :srcdir
|
341
375
|
def self.load(file)
|
@@ -372,6 +406,30 @@ module Autoproj
|
|
372
406
|
end
|
373
407
|
end
|
374
408
|
|
409
|
+
# True if the given package should not be built, with the packages that
|
410
|
+
# depend on him have this dependency met.
|
411
|
+
#
|
412
|
+
# This is useful if the packages are already installed on this system.
|
413
|
+
def ignored?(package_name)
|
414
|
+
if data['ignored_packages']
|
415
|
+
data['ignored_packages'].any? { |l| Regexp.new(l) =~ package_name }
|
416
|
+
else
|
417
|
+
false
|
418
|
+
end
|
419
|
+
end
|
420
|
+
# True if the given package should not be built and its dependencies
|
421
|
+
# should be considered as met.
|
422
|
+
#
|
423
|
+
# This is useful to avoid building packages that are of no use for the
|
424
|
+
# user.
|
425
|
+
def excluded?(package_name)
|
426
|
+
if data['excluded_packages']
|
427
|
+
data['excluded_packages'].any? { |l| Regexp.new(l) =~ package_name }
|
428
|
+
else
|
429
|
+
false
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
375
433
|
# Lists the autobuild files that are in the package sets we know of
|
376
434
|
def each_autobuild_file(source_name = nil, &block)
|
377
435
|
if !block_given?
|
@@ -427,6 +485,28 @@ module Autoproj
|
|
427
485
|
end
|
428
486
|
end
|
429
487
|
|
488
|
+
def source_from_spec(spec, load_description) # :nodoc:
|
489
|
+
# Look up for short notation (i.e. not an explicit hash). It is
|
490
|
+
# either vcs_type:url or just url. In the latter case, we expect
|
491
|
+
# 'url' to be a path to a local directory
|
492
|
+
vcs_def = begin
|
493
|
+
Autoproj.normalize_vcs_definition(spec)
|
494
|
+
rescue ConfigError => e
|
495
|
+
raise ConfigError, "in #{file}: #{e.message}"
|
496
|
+
end
|
497
|
+
|
498
|
+
source = Source.new(vcs_def)
|
499
|
+
if source.present? && load_description
|
500
|
+
source.load_description_file
|
501
|
+
else
|
502
|
+
# Try to load just the name from the source.yml file
|
503
|
+
source.load_name
|
504
|
+
end
|
505
|
+
|
506
|
+
source
|
507
|
+
end
|
508
|
+
|
509
|
+
|
430
510
|
# call-seq:
|
431
511
|
# each_source { |source_description| ... }
|
432
512
|
#
|
@@ -439,25 +519,17 @@ module Autoproj
|
|
439
519
|
|
440
520
|
return if !data['package_sets']
|
441
521
|
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
end
|
451
|
-
|
452
|
-
source = Source.new(vcs_def)
|
453
|
-
if source.present? && load_description
|
454
|
-
source.load_description_file
|
455
|
-
else
|
456
|
-
# Try to load just the name from the source.yml file
|
457
|
-
source.load_name
|
458
|
-
end
|
522
|
+
# Load the local source first ...
|
523
|
+
local = LocalSource.new
|
524
|
+
if load_description
|
525
|
+
local.load_description_file
|
526
|
+
else
|
527
|
+
local.load_name
|
528
|
+
end
|
529
|
+
yield(local)
|
459
530
|
|
460
|
-
|
531
|
+
data['package_sets'].each do |spec|
|
532
|
+
yield(source_from_spec(spec, load_description))
|
461
533
|
end
|
462
534
|
end
|
463
535
|
|
@@ -483,6 +555,7 @@ module Autoproj
|
|
483
555
|
|
484
556
|
def self.update_remote_source(source)
|
485
557
|
importer = source.vcs.create_autobuild_importer
|
558
|
+
return if !importer # updates have been disabled
|
486
559
|
fake_package = FakePackage.new(source.automatic_name, source.local_dir)
|
487
560
|
|
488
561
|
importer.import(fake_package)
|
@@ -493,6 +566,7 @@ module Autoproj
|
|
493
566
|
attr_reader :vcs
|
494
567
|
def self.import_whole_installation(vcs, into)
|
495
568
|
importer = vcs.create_autobuild_importer
|
569
|
+
return if !importer # updates have been disabled
|
496
570
|
fake_package = FakePackage.new('autoproj main configuration', into)
|
497
571
|
importer.import(fake_package)
|
498
572
|
rescue Autobuild::ConfigException => e
|
@@ -597,7 +671,7 @@ module Autoproj
|
|
597
671
|
# and sublayout in order
|
598
672
|
def each_package_set(selection, layout_name = '/', layout_def = data['layout'], &block)
|
599
673
|
if !layout_def
|
600
|
-
yield('', default_packages, default_packages)
|
674
|
+
yield('/', default_packages, default_packages)
|
601
675
|
return nil
|
602
676
|
end
|
603
677
|
|
@@ -605,6 +679,9 @@ module Autoproj
|
|
605
679
|
|
606
680
|
# First of all, do the packages at this level
|
607
681
|
packages = layout_packages(layout_def, false)
|
682
|
+
# Remove excluded packages
|
683
|
+
packages.delete_if { |pkg_name| excluded?(pkg_name) }
|
684
|
+
|
608
685
|
if selection && !selection.any? { |sel| layout_name =~ /^\/?#{Regexp.new(sel)}\/?/ }
|
609
686
|
selected_packages = packages.find_all { |pkg_name| selection.include?(pkg_name) }
|
610
687
|
else
|
@@ -629,6 +706,7 @@ module Autoproj
|
|
629
706
|
package.name
|
630
707
|
end
|
631
708
|
end
|
709
|
+
names = names.delete_if { |pkg_name| excluded?(pkg_name) }
|
632
710
|
names.to_set
|
633
711
|
end
|
634
712
|
|
data/lib/autoproj/system.rb
CHANGED
@@ -50,7 +50,6 @@ module Autoproj
|
|
50
50
|
Autoproj.env_set_path 'PATH', "#{Autoproj.gem_home}/bin", "/usr/local/bin", "/usr/bin", "/bin"
|
51
51
|
Autoproj.env_set 'PKG_CONFIG_PATH'
|
52
52
|
Autoproj.env_set 'RUBYLIB'
|
53
|
-
Autoproj.env_inherit 'PATH', 'PKG_CONFIG_PATH', 'RUBYLIB'
|
54
53
|
end
|
55
54
|
|
56
55
|
def self.export_env_sh(subdir)
|
@@ -68,5 +67,19 @@ module Autoproj
|
|
68
67
|
end
|
69
68
|
end
|
70
69
|
end
|
70
|
+
|
71
|
+
def self.load(source, *path)
|
72
|
+
path = File.join(*path)
|
73
|
+
Kernel.load path
|
74
|
+
rescue Exception => e
|
75
|
+
Autoproj.filter_load_exception(e, source, path)
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.load_if_present(source, *path)
|
79
|
+
path = File.join(*path)
|
80
|
+
if File.file?(path)
|
81
|
+
self.load(source, *path)
|
82
|
+
end
|
83
|
+
end
|
71
84
|
end
|
72
85
|
|
data/lib/autoproj/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Write in this file customization code that will get executed before all the
|
2
|
+
# soures are loaded.
|
3
|
+
|
4
|
+
# Set the path to 'make'
|
5
|
+
# Autobuild.commands['make'] = '/path/to/ccmake'
|
6
|
+
|
7
|
+
# Set the parallel build level (defaults to the number of CPUs)
|
8
|
+
# Autobuild.parallel_build_level = 10
|
9
|
+
|
10
|
+
# Uncomment to initialize the environment variables to default values. This is
|
11
|
+
# useful to ensure that the build is completely self-contained, but leads to
|
12
|
+
# miss external dependencies installed in non-standard locations.
|
13
|
+
#
|
14
|
+
# set_initial_env
|
15
|
+
#
|
16
|
+
# Additionally, you can set up your own custom environment with calls to env_add
|
17
|
+
# and env_set:
|
18
|
+
#
|
19
|
+
# env_add 'PATH', "/path/to/my/tool"
|
20
|
+
# env_set 'VAR', "value"
|
21
|
+
#
|
22
|
+
# Variables set like this are exported in the generated env.sh scripts.
|
23
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# List of VCS information or subdirectories of autoproj/ in which to find
|
2
|
+
# package set definitions.
|
3
|
+
package_sets:
|
4
|
+
# Example from the RubyInMotion orocos package set
|
5
|
+
# - type: git
|
6
|
+
# url: git://github.com/doudou/rubim.orocos.git
|
7
|
+
|
8
|
+
# The layout section specifies what to build, and where to build it (as a
|
9
|
+
# subdirectory of the root installation directory). In the example below, all
|
10
|
+
# the packages of the rubim.orocos package set will be built, in the tools/
|
11
|
+
# subdirectory: source in tools/typelib, tools/orocos/rtt, ... and installed
|
12
|
+
# files in build/tools/typelib, build/tools/orocos/rtt, ...
|
13
|
+
#
|
14
|
+
# layout:
|
15
|
+
# - tools:
|
16
|
+
# - rubim.orocos
|
17
|
+
#
|
18
|
+
# Single packages can also be selected instead of whole package sets. The
|
19
|
+
# package names are interpreted as a regular expression, so it is possible to
|
20
|
+
# do:
|
21
|
+
#
|
22
|
+
# layout:
|
23
|
+
# - tools:
|
24
|
+
# - typelib
|
25
|
+
# - utilmm
|
26
|
+
# - orocos/
|
27
|
+
#
|
28
|
+
# The first two match the typelib and utilmm packages, while the second one
|
29
|
+
# match all packages in which "orocos/" is found.
|
30
|
+
#
|
31
|
+
# Again, note that if a layout section is present, only the packages listed
|
32
|
+
# there will be built.
|
33
|
+
|
34
|
+
# Package exclusion: packages can be completely excluded from the build. This is
|
35
|
+
# an alternative way than using the layout, mainly useful if you want to enable
|
36
|
+
# all packages but a few ones. As with layout, the names are actually regular
|
37
|
+
# expressions.
|
38
|
+
#
|
39
|
+
# exclude_packages:
|
40
|
+
# - orocos/
|
41
|
+
|
42
|
+
# Ignoring packages: same principle than package exclusion, but this time the
|
43
|
+
# packages are considered to be installed and up-to-date. This is useful if you
|
44
|
+
# want to use an already installed software package.
|
45
|
+
#
|
46
|
+
# For instance, let's assume the orocos/rtt is already installed on your
|
47
|
+
# machine. You would then simply do:
|
48
|
+
#
|
49
|
+
# ignored_packages:
|
50
|
+
# - orocos/rtt
|
51
|
+
#
|
52
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autoproj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Joyeux
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-25 01:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
23
|
+
version: 1.4.0
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rmail
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- doc/guide/ext/rdoc_links.rb
|
140
140
|
- doc/guide/src/autobuild.page
|
141
141
|
- doc/guide/src/autoproj_bootstrap
|
142
|
+
- doc/guide/src/customization.page
|
142
143
|
- doc/guide/src/default.css
|
143
144
|
- doc/guide/src/default.template
|
144
145
|
- doc/guide/src/htmldoc.metainfo
|
@@ -158,7 +159,10 @@ files:
|
|
158
159
|
- lib/autoproj/osdeps.rb
|
159
160
|
- lib/autoproj/system.rb
|
160
161
|
- lib/autoproj/version.rb
|
161
|
-
- samples/
|
162
|
+
- samples/autoproj/init.rb
|
163
|
+
- samples/autoproj/manifest
|
164
|
+
- samples/autoproj/overrides.rb
|
165
|
+
- samples/autoproj/overrides.yml
|
162
166
|
- samples/manifest.xml
|
163
167
|
- samples/osdeps.yml
|
164
168
|
- test/data/test_manifest/autoproj/local/local.autobuild
|
data/samples/manifest
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
package_sets:
|
2
|
-
# Example from the RubyInMotion orocos package set
|
3
|
-
# - type: git
|
4
|
-
# url: git://github.com/doudou/rubim.orocos.git
|
5
|
-
|
6
|
-
# If you want to adapt the layout to your needs, uncomment the following (again,
|
7
|
-
# RubyInMotion orocos package set)
|
8
|
-
# layout:
|
9
|
-
# - orocos:
|
10
|
-
# - rubim.orocos
|
11
|
-
#
|
12
|
-
# The principle is to have a hierarchy of names, package names and names of
|
13
|
-
# package sets. In the above example, all packages of the rubim.orocos package
|
14
|
-
# set will be built under the orocos/ subdirectory. Alternatively, you could do:
|
15
|
-
#
|
16
|
-
# layout:
|
17
|
-
# - tools:
|
18
|
-
# - rubim.orocos
|