2014-01-11 08:42:07 -07:00
|
|
|
################################################################################
|
|
|
|
# LuaRocks package infrastructure
|
|
|
|
# see http://luarocks.org/
|
|
|
|
#
|
|
|
|
# This file implements an infrastructure that eases development of
|
|
|
|
# package .mk files for LuaRocks packages.
|
|
|
|
# LuaRocks supports various build.type : builtin, make, cmake.
|
|
|
|
# This luarocks infrastructure supports only the builtin mode,
|
|
|
|
# the make & cmake modes could be directly handled by generic & cmake infrastructure.
|
|
|
|
#
|
|
|
|
# See the Buildroot documentation for details on the usage of this
|
|
|
|
# infrastructure
|
|
|
|
#
|
|
|
|
# In terms of implementation, this LuaRocks infrastructure requires
|
2014-07-24 12:07:02 -06:00
|
|
|
# the .mk file to only specify metadata information about the
|
2014-01-11 08:42:07 -07:00
|
|
|
# package: name, version, etc.
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# inner-luarocks-package -- defines how the configuration, compilation and
|
|
|
|
# installation of a LuaRocks package should be done, implements a few hooks to
|
|
|
|
# tune the build process and calls the generic package infrastructure to
|
|
|
|
# generate the necessary make targets
|
|
|
|
#
|
|
|
|
# argument 1 is the lowercase package name
|
2014-07-24 12:57:41 -06:00
|
|
|
# argument 2 is the uppercase package name, including a HOST_ prefix
|
2014-01-11 08:42:07 -07:00
|
|
|
# for host packages
|
|
|
|
# argument 3 is the uppercase package name, without the HOST_ prefix
|
|
|
|
# for host packages
|
2014-02-05 02:44:03 -07:00
|
|
|
# argument 4 is the type (target or host)
|
2014-01-11 08:42:07 -07:00
|
|
|
################################################################################
|
|
|
|
|
|
|
|
define inner-luarocks-package
|
|
|
|
|
2014-09-27 13:32:45 -06:00
|
|
|
$(2)_BUILD_OPTS ?=
|
2017-02-23 10:00:40 -07:00
|
|
|
$(2)_NAME_UPSTREAM ?= $(1)
|
|
|
|
$(2)_SUBDIR ?= $$($(2)_NAME_UPSTREAM)-$$(shell echo "$$($(2)_VERSION)" | sed -e "s/-[0-9]$$$$//")
|
2017-02-23 10:00:42 -07:00
|
|
|
$(2)_ROCKSPEC ?= $$(call LOWERCASE,$$($(2)_NAME_UPSTREAM))-$$($(2)_VERSION).rockspec
|
|
|
|
$(2)_SOURCE ?= $$(call LOWERCASE,$$($(2)_NAME_UPSTREAM))-$$($(2)_VERSION).src.rock
|
infra: consistently use double dollar signs inside inner-xxx-targets
The inner-xxx-targets in the buildroot package infrastructures are
evaluated using $(eval) which causes variable references to be a bit
different than in regular make code. As we want most references to be
expanded only at the time of the $(eval) we should not use standard
references $(VAR) but rather use double dollar signs $$(VAR). This includes
function references like $(call), $(subst), etc. The only exception is the
reference to pkgdir/pkgname and numbered variables, which are parameters to
the inner block: $(1), $(2), etc.
This patch introduces consistent usage of double-dollar signs throughout the
different inner-xxx-targets blocks.
In some cases, this would potentially cause circular references, in
particular when the value of HOST_FOO_VAR would be obtained from the
corresponding FOO_VAR if HOST_FOO_VAR is not defined. In these cases, a test
is added to check for a host package (the only case where such constructions
are relevant; these are not circular).
Benefits of these changes are:
- behavior of variables is now again as expected. For example, setting
$(2)_VERSION = virtual in pkg-virtual.mk will effectively work, while
originally it would cause very odd results.
- The output of 'make printvars' is now much more useful. This target shows
the value of all variables, and the expression that led to that value.
However, if the expression was coming from an inner-xxx-targets block, and
was using single dollar signs, it would show in printvars as
VAR = value (value)
while if double dollar signs are used, it would effectively look like
VAR = value (actual expression)
as is intended.
This improvement is for example effective for FOO_DL_VERSION, FOO_RAWNAME,
FOO_SITE_METHOD and FOO_MAKE.
The correctness of this patch has been verified using 'make printvars',
'make manual' and 'make legal-info' before and after applying this patch,
and comparing the output.
Insight-provided-by: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-06-11 13:12:24 -06:00
|
|
|
$(2)_SITE ?= $$(call qstrip,$$(BR2_LUAROCKS_MIRROR))
|
2014-01-11 08:42:07 -07:00
|
|
|
|
|
|
|
# Since we do not support host-luarocks-package, we know this is
|
|
|
|
# a target package, and can just add the required dependencies
|
|
|
|
$(2)_DEPENDENCIES += host-luarocks luainterpreter
|
|
|
|
|
|
|
|
#
|
luarocks-package: rework extraction
The luarocks package infra extracts the package directly under
$(BUILD_DIR), because the contents are always in a subdirectory name
<pkg>-<version>. However, this only works when the upstream package name
is the same as the Buildroot package name.
Instead, we can rely on the fixed structure of a .src.rock: it always
contains the source subdirectory in a directory called foo, where foo
is the basename of the .src.rock file. Therefore, we can extract into
a subdirectory of $($(PKG)_DIR), then move its contents up two
directory levels.
Note, we can't extract directly into $($(PKG)_DIR) because it's
possible that $($(PKG)_SUBDIR) == <pkg>-<version>. In that case, we
would try to move the directory unto itself and get "Directory not
empty". This is the case e.g. for the lpty package.
Two alternatives were considered but are more complicated:
- instead of using wildcards for the move, we could have used
<.src.rock basename>/$($(PKG)_SUBDIR);
- instead of extracting with luarocks, we could use unzip to extract
(the .src.rock is a ZIP file), but then we also have to move the
.rockspec into the subdir. In addition, sometimes the ZIP file
contains a tarball instead of the extracted source.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-02-23 10:00:38 -07:00
|
|
|
# Extract step. Extract into a temporary dir and move the relevant part to the
|
|
|
|
# source dir.
|
2014-01-11 08:42:07 -07:00
|
|
|
#
|
|
|
|
ifndef $(2)_EXTRACT_CMDS
|
|
|
|
define $(2)_EXTRACT_CMDS
|
luarocks-package: rework extraction
The luarocks package infra extracts the package directly under
$(BUILD_DIR), because the contents are always in a subdirectory name
<pkg>-<version>. However, this only works when the upstream package name
is the same as the Buildroot package name.
Instead, we can rely on the fixed structure of a .src.rock: it always
contains the source subdirectory in a directory called foo, where foo
is the basename of the .src.rock file. Therefore, we can extract into
a subdirectory of $($(PKG)_DIR), then move its contents up two
directory levels.
Note, we can't extract directly into $($(PKG)_DIR) because it's
possible that $($(PKG)_SUBDIR) == <pkg>-<version>. In that case, we
would try to move the directory unto itself and get "Directory not
empty". This is the case e.g. for the lpty package.
Two alternatives were considered but are more complicated:
- instead of using wildcards for the move, we could have used
<.src.rock basename>/$($(PKG)_SUBDIR);
- instead of extracting with luarocks, we could use unzip to extract
(the .src.rock is a ZIP file), but then we also have to move the
.rockspec into the subdir. In addition, sometimes the ZIP file
contains a tarball instead of the extracted source.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-02-23 10:00:38 -07:00
|
|
|
mkdir -p $$($(2)_DIR)/luarocks-extract
|
|
|
|
cd $$($(2)_DIR)/luarocks-extract && \
|
2018-04-02 07:09:26 -06:00
|
|
|
$$(LUAROCKS_RUN_ENV) $$(LUAROCKS_RUN_CMD) unpack --force $$($(2)_DL_DIR)/$$($(2)_SOURCE)
|
luarocks-package: rework extraction
The luarocks package infra extracts the package directly under
$(BUILD_DIR), because the contents are always in a subdirectory name
<pkg>-<version>. However, this only works when the upstream package name
is the same as the Buildroot package name.
Instead, we can rely on the fixed structure of a .src.rock: it always
contains the source subdirectory in a directory called foo, where foo
is the basename of the .src.rock file. Therefore, we can extract into
a subdirectory of $($(PKG)_DIR), then move its contents up two
directory levels.
Note, we can't extract directly into $($(PKG)_DIR) because it's
possible that $($(PKG)_SUBDIR) == <pkg>-<version>. In that case, we
would try to move the directory unto itself and get "Directory not
empty". This is the case e.g. for the lpty package.
Two alternatives were considered but are more complicated:
- instead of using wildcards for the move, we could have used
<.src.rock basename>/$($(PKG)_SUBDIR);
- instead of extracting with luarocks, we could use unzip to extract
(the .src.rock is a ZIP file), but then we also have to move the
.rockspec into the subdir. In addition, sometimes the ZIP file
contains a tarball instead of the extracted source.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-02-23 10:00:38 -07:00
|
|
|
mv $$($(2)_DIR)/luarocks-extract/*/* $$($(2)_DIR)
|
2014-01-11 08:42:07 -07:00
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
#
|
|
|
|
# Build/install step.
|
|
|
|
#
|
|
|
|
ifndef $(2)_INSTALL_TARGET_CMDS
|
|
|
|
define $(2)_INSTALL_TARGET_CMDS
|
2015-07-01 02:10:47 -06:00
|
|
|
cd $$($(2)_SRCDIR) && $$(LUAROCKS_RUN_ENV) flock $$(TARGET_DIR) \
|
|
|
|
$$(LUAROCKS_RUN_CMD) make --keep $$($(2)_ROCKSPEC) $$($(2)_BUILD_OPTS)
|
2014-01-11 08:42:07 -07:00
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Call the generic package infrastructure to generate the necessary
|
|
|
|
# make targets
|
2014-02-05 02:44:03 -07:00
|
|
|
$(call inner-generic-package,$(1),$(2),$(3),$(4))
|
2014-01-11 08:42:07 -07:00
|
|
|
|
2014-04-01 03:12:50 -06:00
|
|
|
# $(2)_DEPENDENCIES are handled for configure step (too late)
|
|
|
|
# but host-luarocks is required to do the extract
|
|
|
|
$$($(2)_TARGET_EXTRACT): | host-luarocks
|
|
|
|
|
2014-01-11 08:42:07 -07:00
|
|
|
endef
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# luarocks-package -- the target generator macro for LuaRocks packages
|
|
|
|
################################################################################
|
|
|
|
|
2014-02-05 02:44:03 -07:00
|
|
|
luarocks-package = $(call inner-luarocks-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
|
2014-01-11 08:42:07 -07:00
|
|
|
# host-luarocks-package not supported
|