Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v4 04/17] docs/manual: add documentation for the pkg-rebar infrastructure
Date: Sun, 4 Jan 2015 22:33:34 +0100	[thread overview]
Message-ID: <20150104223334.08fc134c@free-electrons.com> (raw)
In-Reply-To: <1418135662-773-5-git-send-email-johan.oudinet@gmail.com>

Dear Johan Oudinet,

On Tue,  9 Dec 2014 15:34:09 +0100, Johan Oudinet wrote:

> +------------------------------
> +01: ################################################################################
> +02: #
> +03: # erlang-foobar
> +04: #
> +05: ################################################################################
> +06:
> +07: ERLANG_FOOBAR_VERSION = 1.0
> +08: ERLANG_FOOBAR_SOURCE = erlang-foobar-$(ERLANG_FOOBAR_VERSION).tar.gz

It might be good to use .tar.xz as the example, because otherwise this
example is bogus: erlang-foobar-$(ERLANG_FOOBAR_VERSION).tar.gz is the
default _SOURCE value, and should not be specified.

> +09: ERLANG_FOOBAR_SITE = http://www.foosoftware.org/download
> +10: ERLANG_FOOBAR_INSTALL_STAGING = YES
> +11: ERLANG_FOOBAR_CONF_OPTS = --enable-bar

Does this make sense for a rebar package that doesn't have
ERLANG_FOOBAR_CONFIGURE = YES ?

> +12: ERLANG_FOOBAR_DEPENDENCIES = host-libaaa libbbb
> +13:
> +14: $(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 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.

Does this applies to rebar packages?

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

Same question as above: does it make sense for a package that doesn't
pass <pkg>_CONFIGURE = YES ?

> +On line 12, we declare our dependencies, so that they are built
> +before the build process of our package starts.
> +
> +Finally, on line line 14, 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 target and host packages is also available, with the

"The ability to have host packages is also available, with the
+host-rebar-package+ macro", otherwise one could think that
host-rebar-package is also used for target packages.

> ++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.
> +
> +First, all the package metadata information variables that exist in
> +the generic infrastructure also exist in the rebar infrastructure:
> ++ERLANG_FOOBAR_VERSION+, +ERLANG_FOOBAR_SOURCE+,
> ++ERLANG_FOOBAR_PATCH+, +ERLANG_FOOBAR_SITE+,
> ++ERLANG_FOOBAR_SUBDIR+, +ERLANG_FOOBAR_DEPENDENCIES+,
> ++ERLANG_FOOBAR_INSTALL_STAGING+, +ERLANG_FOOBAR_INSTALL_TARGET+.

ERLANG_FOOBAR_LICENSE, ERLANG_FOOBAR_LICENSE_FILES.

Maybe we should refactor the documentation a bit to avoid mentioning
those variables over and over again.

> +Note that the rebar infrastructure does not expect a configure script,
> +but does call such a script when it exists.

What about <pkg>_CONFIGURE = YES ?

>  When a package uses both
> +the Autotools and rebar, it should use the rebar infrastructure.  In
> +this case however, the build commands do not call make, but only
> ++rebar compile+; this avoids triggering the download of dependencies
> +(as most Makefile's do when combined with rebar).  Also, note that the
> +install commands never call +make install+.  Instead, they install
> +Erlang's application directories (ebin, priv, etc.)  into a proper
> +location.  If this is not what you want, add custom hooks or override
> +rebar commands (see below).

What is "a proper location" ? As opposed to what ?

> +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_CONF_ENV+, to specify additional environment
> +  variables to pass to the configure script. By default, empty.

And only useful when <pkg>_CONFIGURE = YES, no?

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

Ditto.

> +* +ERLANG_FOOBAR_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+

Ditto.

> +
> +* +ERLANG_FOOBAR_AUTORECONF_ENV+, to specify additional environment
> +  variables to pass to the 'autoreconf' program if
> +  +ERLANG_FOOBAR_AUTORECONF=YES+. These are passed in the environment
> +  of the 'autoreconf' command. By default, empty.

Ditto.

> +
> +* +ERLANG_FOOBAR_AUTORECONF_OPTS+ to specify additional options passed
> +  to the 'autoreconf' program if +ERLANG_FOOBAR_AUTORECONF=YES+. By
> +  default, empty.

Ditto.

Maybe we should simply specify that when <pkg>_CONFIGURE = YES is
specified, the normal autotools-package infra is used and that
therefore for the configure step, a given set of variables have the
same meaning as the ones of the autotools-package infra?

> +* +ERLANG_FOOBAR_REBAR_ENV+, to specify additional environment
> +  variables to pass to rebar.  By default, the value sets a minimal
> +  PATH that only includes +HOST_DIR/bin+, +HOST_DIR/usr/bin+, and
> +  +/bin+.

<pkg>_ENV, no? At least that's what patch 03/17 does, but I indeed
suggested to use <pkg>_REBAR_ENV instead.

> +* +ERLANG_FOOBAR_REBAR_FLAGS+, to specify rebar flags. By default, the
> +  value is +deps_dir=ERLANG_FOOBAR_REBAR_DEPS_DIR+.

I don't see this variable used anywhere in PATCH 03/17.

> +* +ERLANG_FOOBAR_REBAR_DEPS_DIR+, to specify where to look for the
> +  package's dependencies.  By default, the value is
> +  +output/build/erlang-rebar-deps/target+, or
> +  +output/build/erlang-rebar-deps/host+ for host packages.  Note that
> +  if the package installs to staging as well, the rebar infrastructure
> +  then creates a symbolic link in this directory to
> +  +ERLANG_FOOBAR_ERLANG_LIBDIR+ so other packages may use it as
> +  a dependency.

Why would one want to override this? Isn't the value always set to:

+REBAR_HOST_DEPS_DIR = $(HOST_DIR)/usr/share/rebar/deps
+REBAR_TARGET_DEPS_DIR = $(STAGING_DIR)/usr/share/rebar/deps

> +* +ERLANG_FOOBAR_ERLANG_LIBDIR+, to specify where to install the
> +  Erlang application.  By default, the value is
> +  +/usr/lib/erlang/lib/ERLANG_FOOBAR_ERLANG_APP-ERLANG_FOOBAR_VERSION+.

Hum, the code does:

+$(2)_ERLANG_LIBDIR = \
+	/usr/lib/erlang/lib/$$($$(PKG)_ERLANG_APP)-$$($$(PKG)_VERSION)

So it doesn't really seem to leave the freedom for the package to
provide its own value, no?

> +
> +* +ERLANG_FOOBAR_ERLANG_APP+, to specify the name of the Erlang
> +  application to be installed.  This modifies where the application is
> +  installed (e.g., +/usr/lib/erlang/lib/ERLANG_FOOBAR_ERLANG_APP-ERLANG_FOOBAR_VERSION+)
> +  and the name of the symbolic link in +ERLANG_FOOBAR_REBAR_DEPS_DIR+,
> +  if any (e.g., +output/build/erlang-rebar-deps/target/ERLANG_FOOBAR_ERLANG_APP+.
> +  By default, the value is the lowercase package name stripped from
> +  any +erlang-+ prefix, and with dashes converted to underscores.

Ditto:

+$(2)_ERLANG_APP = $(subst -,_,$(call LOWERCASE,$(patsubst ERLANG_%,%,$(3))))

> +* +ERLANG_FOOBAR_ENV+, to specify additional environment variables to
> +  pass both to the configure script and rebar.  By default, sets CC,
> +  CFLAGS, LDFLAGS, ERL_COMPILER_OPTIONS, and ERL_EI_LIBDIR.

Ah, so here we document $$(PKG)_ENV, which actually exists in the code.
How is that different from ERLANG_FOOBAR_REBAR_ENV above?

Could you rework this documentation, and send an updated version?

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

  reply	other threads:[~2015-01-04 21:33 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-09 14:34 [Buildroot] [PATCH v4 00/17] ejabberd: XMPP server Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 01/17] package/erlang: export EI_VSN so other packages can use it Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 02/17] package/erlang-rebar: new host package Johan Oudinet
2014-12-22 14:16   ` Thomas Petazzoni
2014-12-09 14:34 ` [Buildroot] [PATCH v4 03/17] package/pkg-rebar: new infrastructure Johan Oudinet
2015-01-04 21:23   ` Thomas Petazzoni
2015-01-04 22:20     ` Yann E. MORIN
2015-01-05  9:31       ` Thomas Petazzoni
2015-01-05 11:13         ` Johan Oudinet
2015-01-05 22:01           ` Yann E. MORIN
2015-01-05 21:59         ` Yann E. MORIN
2015-01-06  8:24           ` Thomas Petazzoni
2015-01-06 10:05             ` Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 04/17] docs/manual: add documentation for the pkg-rebar infrastructure Johan Oudinet
2015-01-04 21:33   ` Thomas Petazzoni [this message]
2015-01-04 23:27     ` Yann E. MORIN
2015-01-04 23:39       ` Yann E. MORIN
2014-12-09 14:34 ` [Buildroot] [PATCH v4 05/17] erlang-goldrush: new package Johan Oudinet
2015-01-04 21:36   ` Thomas Petazzoni
2015-01-05 14:52     ` Johan Oudinet
2015-01-05 16:37       ` Thomas Petazzoni
2014-12-09 14:34 ` [Buildroot] [PATCH v4 06/17] erlang-lager: " Johan Oudinet
2015-01-04 21:37   ` Thomas Petazzoni
2015-01-05 16:10     ` Johan Oudinet
2015-01-05 16:38       ` Thomas Petazzoni
2015-01-05 23:53         ` Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 07/17] erlang-p1-zlib: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 08/17] erlang-p1-yaml: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 09/17] erlang-p1-xml: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 10/17] erlang-p1-utils: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 11/17] erlang-p1-tls: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 12/17] erlang-p1-stun: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 13/17] erlang-p1-stringprep: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 14/17] erlang-p1-sip: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 15/17] erlang-p1-iconv: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 16/17] erlang-p1-cache-tab: " Johan Oudinet
2014-12-09 14:34 ` [Buildroot] [PATCH v4 17/17] ejabberd: " Johan Oudinet
2015-01-05  0:06 ` [Buildroot] [PATCH v4 00/17] ejabberd: XMPP server Yann E. MORIN
2015-01-05 10:28   ` Johan Oudinet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150104223334.08fc134c@free-electrons.com \
    --to=thomas.petazzoni@free-electrons.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox