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

=== Infrastructure for rebar-based packages

[[rebar-package-tutorial]]

==== +rebar-package+ tutorial

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

----
01: ################################################################################
02: #
03: # erlang-foobar
04: #
05: ################################################################################
06:
07: ERLANG_FOOBAR_VERSION = 1.0
08: ERLANG_FOOBAR_SOURCE = erlang-foobar-$(ERLANG_FOOBAR_VERSION).tar.xz
09: ERLANG_FOOBAR_SITE = http://www.foosoftware.org/download
10: ERLANG_FOOBAR_DEPENDENCIES = host-libaaa libbbb
11:
12: $(eval $(rebar-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 declare our dependencies, so that they are built
before the build process of our package starts.

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

[[rebar-package-reference]]

==== +rebar-package+ reference

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

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

All the package metadata information variables that exist in the
xref:generic-package-reference[generic package infrastructure] also
exist in the +rebar+ infrastructure.

A few additional variables, specific to the +rebar+ 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.

* +ERLANG_FOOBAR_USE_AUTOCONF+, to specify that the package uses
  _autoconf_ at the configuration step.  When a package sets this
  variable to +YES+, the +autotools+ infrastructure is used.
+
.Note
You can also use some of the variables from the +autotools+
  infrastructure: +ERLANG_FOOBAR_CONF_ENV+, +ERLANG_FOOBAR_CONF_OPTS+,
  +ERLANG_FOOBAR_AUTORECONF+, +ERLANG_FOOBAR_AUTORECONF_ENV+ and
  +ERLANG_FOOBAR_AUTORECONF_OPTS+.

* +ERLANG_FOOBAR_USE_BUNDLED_REBAR+, to specify that the package has
  a bundled version of _rebar_ *and* that it shall be used. Valid
  values are +YES+ or +NO+ (the default).
+
.Note
If the package bundles a _rebar_ utility, but can use the generic
  one that Buildroot provides, just say +NO+ (i.e., do not specify
  this variable). Only set if it is mandatory to use the _rebar_
  utility bundled in this package.

* +ERLANG_FOOBAR_REBAR_ENV+, to specify additional environment
  variables to pass to the _rebar_ utility.

* +ERLANG_FOOBAR_KEEP_DEPENDENCIES+, to keep the dependencies
  described in the rebar.config file. Valid values are +YES+ or +NO+
  (the default). Unless this variable is set to +YES+, the _rebar_
  infrastructure removes such dependencies in a post-patch hook to
  ensure rebar does not download nor compile them.

With the rebar infrastructure, all the steps required to build
and install the packages are already defined, and they generally work
well for most rebar-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 xref:hooks[] for details.

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