| // -*- mode:doc; -*- |
| // vim: set syntax=asciidoc: |
| |
| === Infrastructure for Waf-based packages |
| |
| [[waf-package-tutorial]] |
| |
| ==== +waf-package+ tutorial |
| |
| First, let's see how to write a +.mk+ file for a Waf-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_CONF_OPTS = --enable-bar --disable-baz |
| 11: LIBFOO_DEPENDENCIES = bar |
| 12: |
| 13: $(eval $(waf-package)) |
| ------------------------ |
| |
| On line 7, we declare the version of the package. |
| |
| On line 8 and 9, we declare the name of the tarball (xz-ed tarball |
| recommended) and the location of the tarball on the Web. Buildroot |
| will automatically download the tarball from this location. |
| |
| On line 10, we tell Buildroot what options to enable for libfoo. |
| |
| On line 11, we tell Buildroot the dependencies of libfoo. |
| |
| Finally, on line line 13, we invoke the +waf-package+ |
| macro that generates all the Makefile rules that actually allows the |
| package to be built. |
| |
| [[waf-package-reference]] |
| |
| ==== +waf-package+ reference |
| |
| The main macro of the Waf package infrastructure is +waf-package+. |
| It is similar to the +generic-package+ macro. |
| |
| Just like the generic infrastructure, the Waf infrastructure works |
| by defining a number of variables before calling the +waf-package+ |
| macro. |
| |
| First, all the package metadata information variables that exist in |
| the generic infrastructure also exist in the Waf infrastructure: |
| +LIBFOO_VERSION+, +LIBFOO_SOURCE+, +LIBFOO_PATCH+, +LIBFOO_SITE+, |
| +LIBFOO_SUBDIR+, +LIBFOO_DEPENDENCIES+, +LIBFOO_INSTALL_STAGING+, |
| +LIBFOO_INSTALL_TARGET+. |
| |
| An additional variable, specific to the Waf infrastructure, can |
| also be defined. |
| |
| * +LIBFOO_SUBDIR+ may contain the name of a subdirectory inside the |
| package that contains the main wscript file. This is useful, |
| if for example, the main wscript file 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_NEEDS_EXTERNAL_WAF+ can be set to +YES+ or +NO+ to tell |
| Buildroot to use the bundled +waf+ executable. If set to +NO+, the |
| default, then Buildroot will use the waf executable provided in the |
| package source tree; if set to +YES+, then Buildroot will download, |
| install waf as a host tool and use it to build the package. |
| |
| * +LIBFOO_WAF_OPTS+, to specify additional options to pass to the |
| +waf+ script at every step of the package build process: configure, |
| build and installation. By default, empty. |
| |
| * +LIBFOO_CONF_OPTS+, to specify additional options to pass to the |
| +waf+ script for the configuration step. By default, empty. |
| |
| * +LIBFOO_BUILD_OPTS+, to specify additional options to pass to the |
| +waf+ script during the build step. By default, empty. |
| |
| * +LIBFOO_INSTALL_STAGING_OPTS+, to specify additional options to pass |
| to the +waf+ script during the staging installation step. By default, |
| empty. |
| |
| * +LIBFOO_INSTALL_TARGET_OPTS+, to specify additional options to pass |
| to the +waf+ script during the target installation step. By default, |
| empty. |