= Introduction
== WARNING for 0.5 users
Old configuration files used with autobuild 0.5 aren't accepted by Autobuild 0.6. Since 0.6, Autobuild
uses Ruby for configuration (just like rake does)
== What's autobuild ?
Autobuild is a builder for a set of software packages. It takes as input a yaml config file as input and
* imports the package from a SCM or (optionnaly) updates it
* configures it. This phase can handle code generation, configuration (for instance for autotools-based
packages), ...
* build
* install
It takes the dependencies between packages into account in its build process, updates the needed environment
variables (+PKG_CONFIG_PATH+, +PATH+, +LD_LIBRARY_PATH+, ...)
== Available packages
=== Common usage
All package objects define the following attributes
*importer*:: the importer object (see "Available importers" below)
*srcdir*:: where the package sources are located. If it is a relative
path, it is relative to the value of Autobuild.srcdir. The default is to
use the package name.
*prefix*:: the directory where the package should be installed. If it is a relative
path, it is relative to the value of Autobuild.prefix. The default is to
use the package name.
Each package method (Autobuild.import, Autobuild.autotools, ...) takes either a package
name for first argument, or a name => dependency_array hash, and take a block which
can be used to configure the package. For instance
Autobuild.import :my_package do |pkg|
pkg.srcdir = 'my_package_dir'
end
Autobuild.import :my_package => [:depends, :depends_also] do |pkg|
end
=== Source only
package = Autobuild.import(dependencies) do |pkg|
end
Use +import+ if you need the package sources but don't need to build it. You just need
to set +importer+ and +srcdir+. +prefix+ is ignored.
=== Autotools
package = Autobuild.autotools(name, dependencies) do |pkg|
end
Use this to build GNU autotools-based packages. This handles autoconf-only packages as
well as those using automake
Options to give the +configure+ script are given in the +configureflags+ array
pkg.configureflags = ['--with-blah', 'FOO=bar' ]
If you want the files produced during the build to be separated from the source files, set the +builddir+ attribute.
For now, it has to be a relative path, relative to the source directory.
pkg.builddir = 'build'
The generation of the configure script uses four programs: +autoheader+, +autoconf+, +aclocal+,
+automake+. The default program path can be overriden in the Autotools.programs hash. For
instance, to be sure that automake-1.9 is used for all packages, you set
Autotools.programs['automake'] = 'automake-1.9'
Autobuild tries to detect what tools it should run, but you can override. Autodetection works
as follows:
* if a script named +autogen+ or +autogen.sh+ exists in the package source directory, it is run
and the other tools are not. The name of this kind of script can be set by calling Autotools#use
pkg.use :autogen => 'my_autogen_script'
* +autoheader+ is never used by default
* +autoconf+ is used if there is configure.ac or configure.in in the source dir
* +aclocal+ is used if +autoconf+ is enabled (either explicitely or by autodetection)
* +automake+ is used if there is a Makefile.am file in the source dir
* you can force to enable or disable any of these steps by calling Autotools#use. Set it to +true+
to force its usage, +false+ to disable it or to a string to force the usage of a particular program
pkg.use :autogen => false
pkg.use :automake => false
pkg.use :autoheader => true
pkg.use :autoconf => 'my_autoconf_program'
The 'autogen' option cannot be set to +true+.
The only program used during the build and install phases is +make+. Its path can be overriden
in the Autobuild.programs hash
Autobuild.programs['make'] = 'gnumake'
== Available importers
You must set an importer object for each package. The package importer is the +importer+ attribute
and is set via package.importer = my_importer. An importer +foo+ is defined by the class
Autobuild::FooImporter and defines a Autobuild.foo method which creates a new importer object.
Importer classes files are in lib/autobuild/import/
=== CVS
package.importer = cvs(cvsroot, module[, options])
Where +options+ is an option hash. See also Autobuild::CVSImporter and Autobuild.cvs
* the default CVS command is +cvs+. It can be changed by
Autobuild.programs['cvs'] = 'my_cvs_command'
* the default checkout option is -P. You can change that by giving a +cvsco+ option
cvs cvsroot, module, :cvsco => ['--my', '--cvs', '--options']
* the default update option is -dP. You can change that by giving a +cvsup+ option
cvs cvsroot, module, :cvsup => ['--my', '--cvs', '--options']
=== Subversion
package.importer = svn(url[, options])
Where +options+ is an option hash. See also Autobuild::SVNImporter and Autobuild.svn
* the default Subversion command is +svn+. It can be changed by
Autobuild.programs['svn'] = 'my_svn_command'
* by default, no options are given to checkout. You add some by giving a +svnco+ option
svn url, :svnco => ['--my', '--svn', '--options']
* by default, no options are given to update. You can add some by giving a +svnup+ option
svn url, :svnup => ['--my', '--svn', '--options']
=== *Darcs*
package.importer = darcs(url[, options])
Where +options+ is a hash. See also Autobuild::DarcsImporter and Autobuild.darcs
* the default Darcs command is +darcs+. It can be changed by
Autobuild.programs['darcs'] = 'my_svn_command'
* by default, no options are given to get. You add some by giving a +get+ option
darcs url, :get => ['--my', '--darcs', '--options']
* by default, no options are given to pull. You can add some by giving a +pull+ option
darcs url, :pull => ['--my', '--darcs', '--options']
= Copyright and license
Author:: Sylvain Joyeux
Copyright:: Copyright (c) 2005-2006 Sylvain Joyeux
License:: GPL