// -*- mode:doc; -*-
// vim: set syntax=asciidoc:

Infrastructure for autotools-based packages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[[autotools-package-tutorial]]

+autotools-package+ tutorial
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

First, let's see how to write a +.mk+ file for an autotools-based
package, with an example :

------------------------
01: ################################################################################
02: #
03: # libfoo
04: #
05: ################################################################################
06:
07: LIBFOO_VERSION = 1.0
08: LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
09: LIBFOO_SITE = http://www.foosoftware.org/download
10: LIBFOO_INSTALL_STAGING = YES
11: LIBFOO_INSTALL_TARGET = NO
12: LIBFOO_CONF_OPT = --disable-shared
13: LIBFOO_DEPENDENCIES = libglib2 host-pkgconf
14:
15: $(eval $(autotools-package))
------------------------

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball and the location
of the tarball on the Web. Buildroot will automatically download the
tarball from this location.

On line 10, we tell Buildroot to install the package to the staging
directory. The staging directory, located in +output/staging/+
is the directory where all the packages are installed, including their
development files, etc. By default, packages are not installed to the
staging directory, since usually, only libraries need to be installed in
the staging directory: their development files are needed to compile
other libraries or applications depending on them. Also by default, when
staging installation is enabled, packages are installed in this location
using the +make install+ command.

On line 11, we tell Buildroot to not install the package to the
target directory. This directory contains what will become the root
filesystem running on the target. For purely static libraries, it is
not necessary to install them in the target directory because they will
not be used at runtime. By default, target installation is enabled; setting
this variable to NO is almost never needed. Also by default, packages are
installed in this location using the +make install+ command.

On line 12, we tell Buildroot to pass a custom configure option, that
will be passed to the +./configure+ script before configuring
and building the package.

On line 13, we declare our dependencies, so that they are built
before the build process of our package starts.

Finally, on line line 15, we invoke the +autotools-package+
macro that generates all the Makefile rules that actually allows the
package to be built.

[[autotools-package-reference]]

+autotools-package+ reference
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The main macro of the autotools package infrastructure is
+autotools-package+. It is similar to the +generic-package+ macro. The ability to
have target and host packages is also available, with the
+host-autotools-package+ macro.

Just like the generic infrastructure, the autotools infrastructure
works by defining a number of variables before calling the
+autotools-package+ macro.

First, all the package metadata information variables that exist in the
generic infrastructure also exist in the autotools infrastructure:
+LIBFOO_VERSION+, +LIBFOO_SOURCE+,
+LIBFOO_PATCH+, +LIBFOO_SITE+,
+LIBFOO_SUBDIR+, +LIBFOO_DEPENDENCIES+,
+LIBFOO_INSTALL_STAGING+, +LIBFOO_INSTALL_TARGET+.

A few additional variables, specific to the autotools infrastructure,
can also be defined. Many of them are only useful in very specific
cases, typical packages will therefore only use a few of them.

* +LIBFOO_SUBDIR+ may contain the name of a subdirectory
  inside the package that contains the configure script. This is useful,
  if for example, the main configure script is not at the root of the
  tree extracted by the tarball. If +HOST_LIBFOO_SUBDIR+ is
  not specified, it defaults to +LIBFOO_SUBDIR+.

* +LIBFOO_CONF_ENV+, to specify additional environment
  variables to pass to the configure script. By default, empty.

* +LIBFOO_CONF_OPT+, to specify additional configure
  options to pass to the configure script. By default, empty.

* +LIBFOO_MAKE+, to specify an alternate +make+
  command. This is typically useful when parallel make is enabled in
  the configuration (using +BR2_JLEVEL+) but that this
  feature should be disabled for the given package, for one reason or
  another. By default, set to +$(MAKE)+. If parallel building
  is not supported by the package, then it should be set to
  +LIBFOO_MAKE=$(MAKE1)+.

* +LIBFOO_MAKE_ENV+, to specify additional environment
  variables to pass to make in the build step. These are passed before
  the +make+ command. By default, empty.

* +LIBFOO_MAKE_OPT+, to specify additional variables to
  pass to make in the build step. These are passed after the
  +make+ command. By default, empty.

* +LIBFOO_AUTORECONF+, tells whether the package should
  be autoreconfigured or not (i.e, if the configure script and
  Makefile.in files should be re-generated by re-running autoconf,
  automake, libtool, etc.). Valid values are +YES+ and
  +NO+. By default, the value is +NO+

* +LIBFOO_AUTORECONF_OPT+ to specify additional options
  passed to the 'autoreconf' program if
  +LIBFOO_AUTORECONF=YES+. By default, empty.

* +LIBFOO_LIBTOOL_PATCH+ tells whether the Buildroot
  patch to fix libtool cross-compilation issues should be applied or
  not. Valid values are +YES+ and +NO+. By
  default, the value is +YES+

* +LIBFOO_INSTALL_STAGING_OPT+ contains the make options
  used to install the package to the staging directory. By default, the
  value is +DESTDIR=$(STAGING_DIR) install+, which is
  correct for most autotools packages. It is still possible to override
  it.

* +LIBFOO_INSTALL_TARGET_OPT+ contains the make options
  used to install the package to the target directory. By default, the
  value is +DESTDIR=$(TARGET_DIR) install+. The default
  value is correct for most autotools packages, but it is still possible
  to override it if needed.

* +LIBFOO_CLEAN_OPT+ contains the make options used to
  clean the package. By default, the value is +clean+.

* +LIBFOO_UNINSTALL_STAGING_OPT+, contains the make
  options used to uninstall the package from the staging directory. By
  default, the value is +DESTDIR=$$(STAGING_DIR) uninstall+.

* +LIBFOO_UNINSTALL_TARGET_OPT+, contains the make
  options used to uninstall the package from the target directory. By
  default, the value is +DESTDIR=$$(TARGET_DIR) uninstall+.

With the autotools infrastructure, all the steps required to build
and install the packages are already defined, and they generally work
well for most autotools-based packages. However, when required, it is
still possible to customize what is done in any particular step:

* By adding a post-operation hook (after extract, patch, configure,
  build or install). See the reference documentation of the generic
  infrastructure for details.

* By overriding one of the steps. For example, even if the autotools
  infrastructure is used, if the package +.mk+ file defines its
  own +LIBFOO_CONFIGURE_CMDS+ variable, it will be used
  instead of the default autotools one. However, using this method
  should be restricted to very specific cases. Do not use it in the
  general case.
