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

=== Infrastructure for LuaRocks-based packages

[[luarocks-package-tutorial]]

==== +luarocks-package+ tutorial

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

------------------------
01: ################################################################################
02: #
03: # luafoo
04: #
05: ################################################################################
06:
07: LUAFOO_VERSION = 1.0.2-1
08: LUAFOO_DEPENDENCIES = foo
09:
10: LUAFOO_BUILD_OPTS += FOO_INCDIR=$(STAGING_DIR)/usr/include
11: LUAFOO_BUILD_OPTS += FOO_LIBDIR=$(STAGING_DIR)/usr/lib
12: LUAFOO_LICENSE = luaFoo license
13: LUAFOO_LICENSE_FILES = COPYING
14:
15: $(eval $(luarocks-package))
------------------------

On line 7, we declare the version of the package (the same as in the rockspec,
which is the concatenation of the upstream version and the rockspec revision,
separated by a hyphen '-').

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

On lines 10-11, we tell Buildroot to pass custom options to LuaRocks when it is
building the package.

On lines 12-13, we specify the licensing terms for the package.

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

[[luarocks-package-reference]]

==== +luarocks-package+ reference

LuaRocks is a deployment and management system for Lua modules, and supports
various +build.type+: +builtin+, +make+ and +cmake+. In the context of
Buildroot, the +luarocks-package+ infrastructure only supports the +builtin+
mode. LuaRocks packages that use the +make+ or +cmake+ build mechanisms
should instead be packaged using the +generic-package+ and +cmake-package+
infrastructures in Buildroot, respectively.

The main macro of the LuaRocks package infrastructure is +luarocks-package+:
like +generic-package+ it works by defining a number of variables providing
metadata information about the package, and then calling +luarocks-package+. It
is worth mentioning that building LuaRocks packages for the host is not
supported, so the macro +host-luarocks-package+ is not implemented.

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

First, all the package metadata information variables that exist in
the generic infrastructure also exist in the LuaRocks infrastructure:
+LUAFOO_VERSION+, +LUAFOO_SOURCE+, +LUAFOO_SITE+,
+LUAFOO_DEPENDENCIES+, +LUAFOO_LICENSE+, +LUAFOO_LICENSE_FILES+.

Two of them are populated by the LuaRocks infrastructure (for the
+download+ step). If your package is not hosted on the LuaRocks mirror
+$(BR2_LUAROCKS_MIRROR)+, you can override them:

* +LUAFOO_SITE+, which defaults to +$(BR2_LUAROCKS_MIRROR)+

* +LUAFOO_SOURCE+, which defaults to +luafoo-$(LUAFOO_VERSION).src.rock+

A few additional variables, specific to the LuaRocks infrastructure, are
also defined. They can be overridden in specific cases.

* +LUAFOO_ROCKSPEC+, which defaults to +luafoo-$(LUAFOO_VERSION).rockspec+

* +LUAFOO_SUBDIR+, which defaults to
  +luafoo-$(LUAFOO_VERSION_WITHOUT_ROCKSPEC_REVISION)+

* +LUAFOO_BUILD_OPTS+ contains additional build options for the
  +luarocks build+ call.
