autoproj 1.3.4 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,123 @@
1
+ ---
2
+ title: Operating System dependencies
3
+ sort_info: 300
4
+ ---
5
+
6
+ Each package set can have one or multiple .osdeps files. These files declare
7
+ how to install prepackaged dependencies, based on the underlying operating system.
8
+
9
+ Defining dependencies between source packages and OS packages
10
+ -------------------------------------------------------------
11
+
12
+ These dependencies can be defined in two ways:
13
+
14
+ * by adding a <tt>&lt;osdep name="depname" /&gt;</tt> tag in the package's
15
+ [manifest.xml](manifest-xml.html)
16
+ * by calling <tt>pkg.depends_on_os_package("depname")</tt> [in the autobuild
17
+ file](autobuild.html).
18
+
19
+ In both cases, depname is used as a key to find the OS package definition in the
20
+ osdeps files (see below). It does not have to be the actual package name.
21
+
22
+ OS packages
23
+ -----------
24
+
25
+ The general format of the an OS package definition:
26
+
27
+ {coderay:: yaml}
28
+ name:
29
+ distribution1,distribution2:
30
+ version1,version2: [package_name1, package_name2]
31
+ {coderay}
32
+
33
+ Where 'name' is the name used to declare the dependency (see above),
34
+ <tt>distribution*</tt> the name of the distribution and <tt>version*</tt> the
35
+ distribution's version, and <tt>package_name*</tt> the name of the package in
36
+ the underlying OS.
37
+
38
+ Since the osdeps file is a YAML file, <tt>[package_name1, package_name2]</tt> can also be written
39
+
40
+ {coderay:: yaml}
41
+ name:
42
+ distribution1,distribution2:
43
+ version1,version2:
44
+ - package_name1
45
+ - package_name2
46
+ {coderay}
47
+
48
+ If only one package needs to be installed, one can use the shortcut
49
+
50
+ {coderay:: yaml}
51
+ name:
52
+ distribution1,distribution2:
53
+ version1,version2: package_name
54
+ {coderay}
55
+
56
+ Finally, if the package name is version-independent, the version can be omitted:
57
+
58
+
59
+ {coderay:: yaml}
60
+ name:
61
+ distribution1,distribution2: package_name
62
+ {coderay}
63
+
64
+ Examples:
65
+
66
+ {coderay:: yaml}
67
+ ruby:
68
+ debian,ubuntu:
69
+ 9.04,10.04,sid: libruby-dev
70
+ boost:
71
+ debian:
72
+ - libboost1.38-dev
73
+ - libboost-program1.38-dev
74
+ ubuntu:
75
+ 9.04,10.04: libboost-dev
76
+ {coderay}
77
+
78
+ At the time of this writing, autoproj is able to install packages on
79
+ Ubuntu/Debian and Gentoo. Support for other operating systems can be easily
80
+ added, so [contact me](http://github.com/doudou) if you want to do so.
81
+
82
+ RubyGems packages
83
+ -----------------
84
+
85
+ RubyGems packages are OS-independent. In the osdeps files, they can be referred
86
+ to by replacing the OS distribution name by 'gem'.
87
+
88
+ Example:
89
+
90
+ {coderay:: yaml}
91
+ hoe:
92
+ gem:
93
+ hoe
94
+ {coderay}
95
+
96
+ If the OS dep name and the RubyGems name are the same, one can use the shortcut
97
+
98
+ {coderay:: yaml}
99
+ hoe: gem
100
+ {coderay}
101
+
102
+ Note that it is possible to use a mixture of RubyGems and OS packages. For
103
+ instance, the following snippet will both install the gnuplot package and the
104
+ gnuplot RubyGems whenever an osdep on 'gnuplot' is declared.
105
+
106
+ {coderay:: yaml}
107
+ gnuplot:
108
+ gem: gnuplot
109
+ debian: gnuplot
110
+ {coderay}
111
+
112
+ Ignoring some dependencies
113
+ --------------------------
114
+ It is possible that, on some operating systems, a given package should simply be
115
+ ignored. To do so, simply use the 'ignore' keyword. Example:
116
+
117
+ {coderay:: yaml}
118
+ gnuplot:
119
+ gem: gnuplot
120
+ debian: ignore
121
+ ubuntu: gnuplot
122
+ {coderay}
123
+
@@ -4,16 +4,37 @@ sort_info: 50
4
4
  ---
5
5
 
6
6
  This page describes the structure of a autoproj installation, and describes how
7
- to manage one. See [the introduction](index.page) for the bootstrapping process.
7
+ to manage one. See [the introduction](index.html) for the bootstrapping process.
8
8
 
9
9
  Structure
10
10
  ---------
11
11
 
12
- A autoproj installation is characterized by a autoproj/ directory in which all
13
- autoproj-related configuration is saved. The contained files are as follows:
14
-
15
- * autoproj/manifest: list of available package sets, customization options.
16
- The first part is covered here, the second in the next page.
12
+ !overview.png!
13
+ <img class="full" src="overview.png" />
14
+
15
+ The autoproj configuration and build process goes like this:
16
+
17
+ * a set of packages are declared in _package sets_. These package sets can
18
+ either be local (saved along with the rest of the autoproj configuration) or
19
+ remote (imported from a VCS). They declare how to get, build and install
20
+ a certain number of packages. On the image above, there are three of those
21
+ sets: rubim.base, rubim.orocos and rubim.drivers.
22
+ * packages that are relevant to the local installation are cherry-picked from
23
+ the package sets. One can either select packages one-by-one (the case for the
24
+ two packages of rubim.drivers above), or a package set can be imported as a
25
+ whole (rubim.orocos and rubim.base).
26
+ * autoproj will then import the selected packages, auto-select their
27
+ dependencies and import them as well, build and install all of this.
28
+ * the selected packages can be imported and built in subdirectories of the
29
+ installation tree. In the above example, all packages from rubim.orocos are
30
+ built in the tools/ subdirectory, one package of rubim.drivers in the
31
+ perception/ subdirectory and so on.
32
+
33
+ In practice, the autoproj configuration is saved in an autoproj/ directory. It
34
+ is split like this:
35
+
36
+ * autoproj/manifest: list of available package sets, package selection and
37
+ installation layout (where to put what).
17
38
  * .remotes/\*: package sets that are imported from a remote version
18
39
  control system
19
40
  * autoproj/\*/: local sets, i.e. sets that have not been imported from a remote
@@ -29,8 +50,10 @@ The build is done in two steps:
29
50
  installation
30
51
 
31
52
  Moreover, the <tt>build/log</tt> directory contains the output of all commands
32
- that have been run during the build. Finally, a <tt>env.sh</tt> script is
33
- generated to set up your shell for the use of the installed software.
53
+ that have been run during the build.
54
+
55
+ Finally, a <tt>env.sh</tt> script is generated to set up your shell for the use
56
+ of the installed software.
34
57
 
35
58
  Listing and adding package sets
36
59
  -------------------------------
@@ -64,7 +87,9 @@ For the git importer, one of 'branch' or 'tag' options can be provided as well:
64
87
  {coderay}
65
88
 
66
89
  Imported package sets are saved in the <tt>.remotes</tt> directory of the
67
- autoproj installation.
90
+ autoproj installation. The importers that are available for configuration are
91
+ the same than the ones available for the packages themselves, so see [this
92
+ page](package_sets/importers.html#all_importers) for the list of available importers.
68
93
 
69
94
  Management
70
95
  ----------
@@ -84,12 +109,18 @@ autoproj build --reconfigure
84
109
  Alternatively, you can edit the autoproj/config.yml file directly.
85
110
 
86
111
  If you are in a disconnected environment (i.e. no access to remote
87
- repositories), use the <tt>--no-update</tt> option to skip the update phase.
88
- autoproj will still have to checkout new packages, though:
112
+ repositories), use the fast-build mode, to skip the package update and OS
113
+ packages installation phases (autoproj will still check out new packages,
114
+ though):
89
115
 
90
- autoproj build --no-update
116
+ autoproj fast-build
91
117
  {.commandline}
92
118
 
119
+ The package update can be disabled with --no-update and the OS dependencies
120
+ installation with --no-osdeps. In practice, "autoproj fast-build" is equivalent
121
+ to autoproj build --no-update --no-osdeps
122
+ {.block}
123
+
93
124
  If, on the other hand, you only want to update the source code, do
94
125
 
95
126
  autoproj update
@@ -1,13 +1,17 @@
1
+ require 'find'
2
+ require 'fileutils'
1
3
  require 'autobuild'
2
4
  require 'set'
3
5
 
4
6
  class Autobuild::Package
5
- def autoproj_name
7
+ def autoproj_name # :nodoc:
6
8
  srcdir.gsub /^#{Regexp.quote(Autoproj.root_dir)}\//, ''
7
9
  end
8
10
  end
9
11
 
10
12
  module Autoproj
13
+ # Subclass of Autobuild::Reporter, used to display a message when the build
14
+ # finishes/fails.
11
15
  class Reporter < Autobuild::Reporter
12
16
  def error(error)
13
17
  error_lines = error.to_s.split("\n")
@@ -22,15 +26,12 @@ module Autoproj
22
26
  end
23
27
  end
24
28
 
29
+ # Displays a warning message
25
30
  def self.warn(message)
26
31
  STDERR.puts Autoproj.console.color(" WARN: #{message}", :magenta)
27
32
  end
28
33
 
29
- @definition_files = Hash.new
30
34
  @file_stack = Array.new
31
- class << self
32
- attr_reader :definition_files
33
- end
34
35
 
35
36
  def self.package_name_from_options(spec)
36
37
  if spec.kind_of?(Hash)
@@ -78,16 +79,18 @@ module Autoproj
78
79
  end
79
80
  end
80
81
 
82
+ # Sets up a documentation target on pkg that runs 'rake <target>'
81
83
  def ruby_doc(pkg, target = 'doc')
82
84
  pkg.doc_task do
85
+ pkg.progress "generating documentation for %s"
83
86
  pkg.doc_disabled unless File.file?('Rakefile')
84
87
  Autobuild::Subprocess.run pkg.name, 'doc', 'rake', target
85
88
  end
86
89
 
87
90
  end
88
91
 
89
- # Common setup for packages hosted on groupfiles/Autonomy
90
- def package_common(package_type, spec)
92
+ # Common setup for packages
93
+ def package_common(package_type, spec) # :nodoc:
91
94
  package_name = Autoproj.package_name_from_options(spec)
92
95
 
93
96
  begin
@@ -108,6 +111,20 @@ def package_common(package_type, spec)
108
111
  end
109
112
  end
110
113
 
114
+ def import_package(options, &block)
115
+ package_common(:import, options, &block)
116
+ end
117
+
118
+ # Define a cmake package
119
+ #
120
+ # Example:
121
+ #
122
+ # cmake_package 'package_name' do |pkg|
123
+ # pkg.define "CMAKE_BUILD_TYPE", "Release"
124
+ # end
125
+ #
126
+ # +pkg+ is an Autobuild::CMake instance. See the Autobuild API for more
127
+ # information.
111
128
  def cmake_package(options, &block)
112
129
  package_common(:cmake, options) do |pkg|
113
130
  Autoproj.add_build_system_dependency 'cmake'
@@ -123,8 +140,15 @@ def cmake_package(options, &block)
123
140
  end
124
141
  end
125
142
 
126
- # Use this method to import and build CMake packages that are hosted on the
127
- # groupfiles server, on the autonomy project folder
143
+ # Define an autotools package
144
+ #
145
+ # Example:
146
+ # autotools_package 'package_name' do |pkg|
147
+ # pkg.configureflags << "--enable-llvm"
148
+ # end
149
+ #
150
+ # +pkg+ is an Autobuild::Autotools instance. See the Autobuild API for more
151
+ # information.
128
152
  def autotools_package(options, &block)
129
153
  package_common(:autotools, options) do |pkg|
130
154
  Autoproj.add_build_system_dependency 'autotools'
@@ -140,20 +164,32 @@ def autotools_package(options, &block)
140
164
  end
141
165
  end
142
166
 
143
- def ruby_common(pkg)
167
+ # Common setup for Ruby packages
168
+ def ruby_common(pkg) # :nodoc:
144
169
  def pkg.prepare_for_forced_build
145
170
  super
146
171
  extdir = File.join(srcdir, 'ext')
147
172
  if File.directory?(extdir)
148
- FileUtils.rm_rf File.join(extdir, "build", "CMakeCache.txt")
149
- FileUtils.rm_rf File.join(extdir, "Makefile")
173
+ Find.find(extdir) do |file|
174
+ next if file !~ /\<Makefile\>|\<CMakeCache.txt\>$/
175
+ FileUtils.rm_rf file
176
+ end
150
177
  end
151
178
  end
152
179
  def pkg.prepare_for_rebuild
153
180
  super
154
181
  extdir = File.join(srcdir, 'ext')
155
182
  if File.directory?(extdir)
156
- FileUtils.rm_rf File.join(extdir, "build")
183
+ Find.find(extdir) do |file|
184
+ if file =~ /Makefile/
185
+ Autobuild::Subprocess.run self, 'build', Autobuild.tool("make"), "-C", File.dirname(file), "clean"
186
+ end
187
+ end
188
+ Find.find(extdir) do |file|
189
+ if File.directory?(file) && file == "build"
190
+ FileUtils.rm_rf file
191
+ end
192
+ end
157
193
  end
158
194
  end
159
195
 
@@ -180,6 +216,17 @@ def env_add(name, value)
180
216
  Autoproj.env_add(name, value)
181
217
  end
182
218
 
219
+
220
+ # Defines a Ruby package
221
+ #
222
+ # Example:
223
+ #
224
+ # ruby_package 'package_name' do |pkg|
225
+ # pkg.doc_target = 'doc'
226
+ # end
227
+ #
228
+ # +pkg+ is an Autobuild::Importer instance. See the Autobuild API for more
229
+ # information.
183
230
  def ruby_package(options)
184
231
  package_common(:import, options) do |pkg|
185
232
  class << pkg
@@ -194,12 +241,25 @@ def ruby_package(options)
194
241
  end
195
242
  end
196
243
 
244
+ # Defines an oroGen package. By default, autoproj will look for an orogen file
245
+ # called package_basename.orogen if the package is called dir/package_basename
246
+ #
247
+ # Example:
248
+ # orogen_package 'package_name' do |pkg|
249
+ # pkg.orogen_file = "my.orogen"
250
+ # pkg.corba = false
251
+ # end
252
+ #
253
+ # +pkg+ is an Autobuild::Orogen instance. See the Autobuild API for more
254
+ # information.
197
255
  def orogen_package(options, &block)
198
256
  package_common(:orogen, options) do |pkg|
199
257
  yield(pkg) if block_given?
200
258
  end
201
259
  end
202
260
 
261
+ # Defines an import-only package, i.e. a package that is simply checked out but
262
+ # not built in any way
203
263
  def source_package(options)
204
264
  package_common(options) do |pkg|
205
265
  pkg.srcdir = pkg.name
@@ -207,11 +267,17 @@ def source_package(options)
207
267
  end
208
268
  end
209
269
 
270
+ # Define a configuration option
271
+ #
272
+ # See Autoproj.configuration_option
210
273
  def configuration_option(*opts, &block)
211
274
  Autoproj.configuration_option(*opts, &block)
212
275
  end
213
276
 
214
- def user_config(*opts)
215
- Autoproj.user_config(*opts)
277
+ # Retrieves the configuration value for the given option
278
+ #
279
+ # See Autoproj.user_config
280
+ def user_config(key)
281
+ Autoproj.user_config(key)
216
282
  end
217
283
 
@@ -1,24 +1,44 @@
1
1
  # The following definitions are needed to bootstrap autoproj
2
2
  none: ignore
3
3
 
4
- ruby:
4
+ ruby18:
5
5
  debian,ubuntu:
6
6
  - ruby1.8-dev
7
7
  - ruby1.8
8
+ - rubygems1.8
9
+ - ri1.8
8
10
  - libopenssl-ruby1.8
9
11
  gentoo:
10
12
  - dev-lang/ruby:1.8
11
13
 
14
+ ruby19:
15
+ debian,ubuntu:
16
+ - ruby1.9.1
17
+ - ruby1.9.1-dev
18
+ - rubygems1.9.1
19
+ - ri1.9.1
20
+ - libopenssl-ruby1.9.1
21
+ gentoo:
22
+ - dev-lang/ruby:1.9
23
+ arch:
24
+ - ruby
25
+
26
+ rdoc: gem
27
+
12
28
  build-essential:
13
29
  debian,ubuntu: build-essential
14
30
  gentoo:
31
+ arch:
15
32
 
16
33
  libxml2:
17
34
  debian,ubuntu: libxml2-dev
18
35
  gentoo: dev-libs/libxml2
36
+ arch: libxml2
37
+
19
38
  libxslt:
20
39
  debian,ubuntu: libxslt1-dev
21
40
  gentoo: dev-libs/libxslt
41
+ arch: libxslt
22
42
 
23
43
  autobuild: gem
24
44
  autoproj: gem
@@ -27,26 +47,30 @@ autoproj: gem
27
47
  git:
28
48
  debian,ubuntu: git-core
29
49
  gentoo: dev-util/git
30
-
50
+ arch: git
31
51
  svn:
32
52
  debian,ubuntu: subversion
33
53
  gentoo: dev-util/subversion
34
-
54
+ arch: subversion
35
55
  cmake:
36
56
  debian,ubuntu: cmake
37
57
  gentoo: dev-util/cmake
58
+ arch: cmake
38
59
 
39
60
  autotools:
40
61
  debian,ubuntu: [automake1.9, autoconf]
41
62
  gentoo: [sys-devel/automake:1.9, sys-devel/autoconf]
63
+ arch: automake autoconf
42
64
 
43
65
  lsb_release:
44
66
  debian,ubuntu: lsb-release
45
67
  gentoo: sys-apps/lsb-release
68
+ arch:
46
69
 
47
70
  archive:
48
71
  debian,ubuntu: [tar, unzip]
49
72
  gentoo: [app-arch/tar, app-arch/unzip]
73
+ arch: [tar, unzip]
50
74
 
51
75
  # vim: expandtab
52
76