[Buildroot] [PATCH next 2/2] package/luarocks: rework configuration file for per-package folders

Thomas Petazzoni thomas.petazzoni at bootlin.com
Mon Nov 19 10:32:27 UTC 2018


Currently, luarocks.mk generates a configuration file with hardcoded
STAGING_DIR, TARGET_DIR, TARGET_CC, LUAROCKS_CFLAGS and TARGET_LDFLAGS
values. This is not compatible with per-package folders, where the
value of STAGING_DIR, TARGET_DIR, TARGET_CC and possibly
TARGET_CFLAGS/TARGET_LDFLAGS may be different from one package to the
other.

Based on input from François Perrad, this commit:

 - Ensures that the getenv() function can be used in the sandboxed
   environment used when reading the Luarocks configuration file.

 - Changes the Luarocks configuration file to use getenv() for the
   appropriate variables. Since the contents of this file is not
   fixed, it is no longer generated by luarocks.mk using a series of
   'echo' but simply concatanated with the rest of the Luarocks
   configuration file.

 - Adjusts LUAROCKS_RUNV_ENV so that the necessary environment
   variables are now passed.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
---
 package/luarocks/0002-getenv-in-config.patch | 31 ++++++++++++++++++++
 package/luarocks/luarocks-br-config.lua      | 12 ++++++++
 package/luarocks/luarocks.mk                 | 21 +++++--------
 3 files changed, 51 insertions(+), 13 deletions(-)
 create mode 100644 package/luarocks/0002-getenv-in-config.patch
 create mode 100644 package/luarocks/luarocks-br-config.lua

diff --git a/package/luarocks/0002-getenv-in-config.patch b/package/luarocks/0002-getenv-in-config.patch
new file mode 100644
index 0000000000..9113724dfd
--- /dev/null
+++ b/package/luarocks/0002-getenv-in-config.patch
@@ -0,0 +1,31 @@
+From 3d855e0c678b241f4f9b9c596c409da3a27411aa Mon Sep 17 00:00:00 2001
+From: Francois Perrad <francois.perrad at gadz.org>
+Date: Fri, 16 Nov 2018 19:57:47 +0100
+Subject: [PATCH] Allow using getenv in configuration file
+
+This commit adds getenv() in the sandboxed environment used when
+loading a config file, which allows to get environment variables from
+a luarocks configuration file.
+
+Signed-off-by: Francois Perrad <francois.perrad at gadz.org>
+[Thomas: slightly improved commit title/log]
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+---
+ src/luarocks/core/cfg.lua | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/luarocks/core/cfg.lua b/src/luarocks/core/cfg.lua
+index 3237786..9bc0d22 100644
+--- a/src/luarocks/core/cfg.lua
++++ b/src/luarocks/core/cfg.lua
+@@ -89,6 +89,7 @@ do
+    local function env_for_config_file(cfg, platforms)
+       local e
+       e = {
++         getenv = os.getenv,
+          home = cfg.home,
+          lua_version = cfg.lua_version,
+          platforms = util.make_shallow_copy(platforms),
+-- 
+2.17.1
+
diff --git a/package/luarocks/luarocks-br-config.lua b/package/luarocks/luarocks-br-config.lua
new file mode 100644
index 0000000000..39d6eaad12
--- /dev/null
+++ b/package/luarocks/luarocks-br-config.lua
@@ -0,0 +1,12 @@
+-- BR cross-compilation
+variables.LUA_INCDIR = getenv('STAGING_DIR') .. [[/usr/include]]
+variables.LUA_LIBDIR = getenv('STAGING_DIR') .. [[/usr/lib]]
+variables.CC = getenv('TARGET_CC')
+variables.LD = getenv('TARGET_CC')
+variables.CFLAGS = getenv('TARGET_CFLAGS')
+variables.LIBFLAG = [[-shared ]] .. getenv('TARGET_LDFLAGS')
+external_deps_dirs = { getenv('STAGING_DIR') .. [[/usr]] }
+gcc_rpath = false
+rocks_trees = { getenv('TARGET_DIR') .. [[/usr]] }
+wrap_bin_scripts = false
+deps_mode = [[none]]
diff --git a/package/luarocks/luarocks.mk b/package/luarocks/luarocks.mk
index cfef8f19b3..1577189007 100644
--- a/package/luarocks/luarocks.mk
+++ b/package/luarocks/luarocks.mk
@@ -30,23 +30,18 @@ endef
 define HOST_LUAROCKS_INSTALL_CMDS
 	rm -f $(LUAROCKS_CONFIG_FILE)
 	$(MAKE1) -C $(@D) install
-	echo "-- BR cross-compilation"                                  >> $(LUAROCKS_CONFIG_FILE)
-	echo "variables.LUA_INCDIR = [[$(STAGING_DIR)/usr/include]]"    >> $(LUAROCKS_CONFIG_FILE)
-	echo "variables.LUA_LIBDIR = [[$(STAGING_DIR)/usr/lib]]"        >> $(LUAROCKS_CONFIG_FILE)
-	echo "variables.CC = [[$(TARGET_CC)]]"                          >> $(LUAROCKS_CONFIG_FILE)
-	echo "variables.LD = [[$(TARGET_CC)]]"                          >> $(LUAROCKS_CONFIG_FILE)
-	echo "variables.CFLAGS = [[$(LUAROCKS_CFLAGS)]]"                >> $(LUAROCKS_CONFIG_FILE)
-	echo "variables.LIBFLAG = [[-shared $(TARGET_LDFLAGS)]]"        >> $(LUAROCKS_CONFIG_FILE)
-	echo "external_deps_dirs = { [[$(STAGING_DIR)/usr]] }"          >> $(LUAROCKS_CONFIG_FILE)
-	echo "gcc_rpath = false"                                        >> $(LUAROCKS_CONFIG_FILE)
-	echo "rocks_trees = { [[$(TARGET_DIR)/usr]] }"                  >> $(LUAROCKS_CONFIG_FILE)
-	echo "wrap_bin_scripts = false"                                 >> $(LUAROCKS_CONFIG_FILE)
-	echo "deps_mode = [[none]]"                                     >> $(LUAROCKS_CONFIG_FILE)
+	cat $(HOST_LUAROCKS_PKGDIR)/luarocks-br-config.lua >> $(LUAROCKS_CONFIG_FILE)
 endef
 
 $(eval $(host-generic-package))
 
-LUAROCKS_RUN_ENV = LUA_PATH="$(HOST_DIR)/share/lua/$(LUAINTERPRETER_ABIVER)/?.lua"
+LUAROCKS_RUN_ENV = \
+	LUA_PATH="$(HOST_DIR)/share/lua/$(LUAINTERPRETER_ABIVER)/?.lua" \
+	STAGING_DIR="$(STAGING_DIR)" \
+	TARGET_DIR="$(TARGET_DIR)" \
+	TARGET_CC="$(TARGET_CC)" \
+	TARGET_CFLAGS="$(LUAROCKS_CFLAGS)" \
+	TARGET_LDFLAGS="$(TARGET_LDFLAGS)"
 LUAROCKS_RUN_CMD = $(LUA_RUN) $(HOST_DIR)/bin/luarocks
 
 define LUAROCKS_FINALIZE_TARGET
-- 
2.19.1




More information about the buildroot mailing list