lua: Migrate to gentargets and improve it

Closes #803

Based on initial patch by rvpaasen@t3i.nl

[Peter: lua/luac needs liblua.so.* on target]
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2012.11.x
Gustavo Zacarias 2010-04-29 18:03:45 -03:00 committed by Peter Korsgaard
parent 494149b989
commit 46913a2d4f
9 changed files with 400 additions and 76 deletions

View File

@ -14,7 +14,7 @@
Updated/fixed packages: alsa-utils, busybox, dnsmasq, dosfstools,
e2fsprogs, eeprog, fbv, freetype, hostapd, iperf, iptables, iw, less,
libaio,libdrm, libgcrypt, libglib2, libpng, libxml2, matchbox,
libaio,libdrm, libgcrypt, libglib2, libpng, libxml2, lua, matchbox,
mdadm, memstat, mesa3d, mtd-utils, nano, openssl, pciutils,
php, pixman, portage, pppd, pthread-stubs, python, qt, radvd,
samba, setserial, squashfs, tslib, usb_modeswith, wget,
@ -34,6 +34,7 @@
#513: Add new squid package
#661: lmbench: new package
#800: [PATCH] iperf update to 2.0.4
#803: [PATCH] lua - add shared library patch and config option for...
#805: [PATCH] mdadm - version update
#817: integrator926_defconfig uses unsupported uboot board name
#851: Add option to specify --sysroot value for external toolchain

View File

@ -1,8 +1,34 @@
config BR2_PACKAGE_LUA
bool "lua"
select BR2_PACKAGE_READLINE
select BR2_PACKAGE_NCURSES
help
Lua is a powerful, fast, light-weight, embeddable scripting language.
http://www.lua.org/
config BR2_PACKAGE_LUA_COMPILER
bool "lua compiler"
depends on BR2_PACKAGE_LUA
select BR2_PACKAGE_LUA_SHARED_LIBRARY
help
Install luac binary
config BR2_PACKAGE_LUA_INTERPRETER
bool "lua interpreter"
depends on BR2_PACKAGE_LUA
select BR2_PACKAGE_LUA_SHARED_LIBRARY
help
Install lua binary
config BR2_PACKAGE_LUA_INTERPRETER_READLINE
bool "readline support"
depends on BR2_PACKAGE_LUA_INTERPRETER
select BR2_PACKAGE_READLINE
select BR2_PACKAGE_NCURSES
help
Enables command-line editing in the lua interpreter.
config BR2_PACKAGE_LUA_SHARED_LIBRARY
bool "shared library"
depends on BR2_PACKAGE_LUA
help
Install shared liblua.so

View File

@ -0,0 +1,48 @@
--- lua-5.1.4.orig/src/lcode.c 2007/12/28 15:32:23 2.25.1.3
+++ lua-5.1.4/src/lcode.c 2009/06/15 14:07:34
@@ -544,15 +544,18 @@
pc = NO_JUMP; /* always true; do nothing */
break;
}
- case VFALSE: {
- pc = luaK_jump(fs); /* always jump */
- break;
- }
case VJMP: {
invertjump(fs, e);
pc = e->u.s.info;
break;
}
+ case VFALSE: {
+ if (!hasjumps(e)) {
+ pc = luaK_jump(fs); /* always jump */
+ break;
+ }
+ /* else go through */
+ }
default: {
pc = jumponcond(fs, e, 0);
break;
@@ -572,14 +575,17 @@
pc = NO_JUMP; /* always false; do nothing */
break;
}
- case VTRUE: {
- pc = luaK_jump(fs); /* always jump */
- break;
- }
case VJMP: {
pc = e->u.s.info;
break;
}
+ case VTRUE: {
+ if (!hasjumps(e)) {
+ pc = luaK_jump(fs); /* always jump */
+ break;
+ }
+ /* else go through */
+ }
default: {
pc = jumponcond(fs, e, 1);
break;

View File

@ -0,0 +1,10 @@
--- lua-5.1.4.orig/src/ldblib.c 2007/12/28 15:32:23 2.63.1.3
+++ lua-5.1.4/src/ldblib.c 2010/02/23 12:36:59
@@ -45,6 +45,7 @@
static int db_getfenv (lua_State *L) {
+ luaL_checkany(L, 1);
lua_getfenv(L, 1);
return 1;
}

View File

@ -0,0 +1,14 @@
--- lua-5.1.4.orig/src/llex.c 2007/12/28 15:32:23 2.63.1.3
+++ lua-5.1.4/src/llex.c 2010/02/23 12:36:59
@@ -118,8 +118,10 @@
lua_State *L = ls->L;
TString *ts = luaS_newlstr(L, str, l);
TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */
- if (ttisnil(o))
+ if (ttisnil(o)) {
setbvalue(o, 1); /* make sure `str' will not be collected */
+ luaC_checkGC(L);
+ }
return ts;
}

View File

@ -0,0 +1,17 @@
diff -Naur lua-5.1.4.org/src/luaconf.h lua-5.1.4/src/luaconf.h
--- lua-5.1.4.org/src/luaconf.h 2008-02-11 17:25:08.000000000 +0100
+++ lua-5.1.4/src/luaconf.h 2009-11-24 23:19:15.052817379 +0100
@@ -94,9 +94,9 @@
".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll"
#else
-#define LUA_ROOT "/usr/local/"
-#define LUA_LDIR LUA_ROOT "share/lua/5.1/"
-#define LUA_CDIR LUA_ROOT "lib/lua/5.1/"
+#define LUA_ROOT "/usr/"
+#define LUA_LDIR LUA_ROOT "share/lua/"
+#define LUA_CDIR LUA_ROOT "lib/lua/"
#define LUA_PATH_DEFAULT \
"./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \
LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua"

View File

@ -0,0 +1,145 @@
diff -Naur lua-5.1.4.org/Makefile lua-5.1.4/Makefile
--- lua-5.1.4.org/Makefile 2009-11-24 23:49:28.232820455 +0100
+++ lua-5.1.4/Makefile 2009-11-24 23:50:35.452817115 +0100
@@ -43,7 +43,7 @@
# What to install.
TO_BIN= lua luac
TO_INC= lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp
-TO_LIB= liblua.a
+TO_LIB= liblua.a liblua.so.$R
TO_MAN= lua.1 luac.1
# Lua version and release.
@@ -63,6 +63,7 @@
cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
+ ln -sf liblua.so.$R $(INSTALL_LIB)/liblua.so
cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)
ranlib:
diff -Naur lua-5.1.4.org/src/ldo.h lua-5.1.4/src/ldo.h
--- lua-5.1.4.org/src/ldo.h 2009-11-24 23:49:28.232820455 +0100
+++ lua-5.1.4/src/ldo.h 2009-11-24 23:49:54.244818140 +0100
@@ -46,7 +46,7 @@
LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult);
LUAI_FUNC void luaD_reallocCI (lua_State *L, int newsize);
LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize);
-LUAI_FUNC void luaD_growstack (lua_State *L, int n);
+LUA_API void luaD_growstack (lua_State *L, int n);
LUAI_FUNC void luaD_throw (lua_State *L, int errcode);
LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud);
diff -Naur lua-5.1.4.org/src/lfunc.h lua-5.1.4/src/lfunc.h
--- lua-5.1.4.org/src/lfunc.h 2009-11-24 23:49:28.236815431 +0100
+++ lua-5.1.4/src/lfunc.h 2009-11-24 23:49:54.244818140 +0100
@@ -18,7 +18,7 @@
cast(int, sizeof(TValue *)*((n)-1)))
-LUAI_FUNC Proto *luaF_newproto (lua_State *L);
+LUA_API Proto *luaF_newproto (lua_State *L);
LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e);
LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e);
LUAI_FUNC UpVal *luaF_newupval (lua_State *L);
diff -Naur lua-5.1.4.org/src/lmem.h lua-5.1.4/src/lmem.h
--- lua-5.1.4.org/src/lmem.h 2009-11-24 23:49:28.236815431 +0100
+++ lua-5.1.4/src/lmem.h 2009-11-24 23:49:54.244818140 +0100
@@ -38,9 +38,9 @@
((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t))))
-LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize,
+LUA_API void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize,
size_t size);
-LUAI_FUNC void *luaM_toobig (lua_State *L);
+LUA_API void *luaM_toobig (lua_State *L);
LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size,
size_t size_elem, int limit,
const char *errormsg);
diff -Naur lua-5.1.4.org/src/lstring.h lua-5.1.4/src/lstring.h
--- lua-5.1.4.org/src/lstring.h 2009-11-24 23:49:28.236815431 +0100
+++ lua-5.1.4/src/lstring.h 2009-11-24 23:49:54.244818140 +0100
@@ -25,7 +25,7 @@
LUAI_FUNC void luaS_resize (lua_State *L, int newsize);
LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e);
-LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l);
+LUA_API TString *luaS_newlstr (lua_State *L, const char *str, size_t l);
#endif
diff -Naur lua-5.1.4.org/src/lundump.h lua-5.1.4/src/lundump.h
--- lua-5.1.4.org/src/lundump.h 2009-11-24 23:49:28.232820455 +0100
+++ lua-5.1.4/src/lundump.h 2009-11-24 23:49:54.244818140 +0100
@@ -17,7 +17,7 @@
LUAI_FUNC void luaU_header (char* h);
/* dump one chunk; from ldump.c */
-LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip);
+LUA_API int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip);
#ifdef luac_c
/* print one chunk; from print.c */
diff -Naur lua-5.1.4.org/src/Makefile lua-5.1.4/src/Makefile
--- lua-5.1.4.org/src/Makefile 2009-11-24 23:49:28.236815431 +0100
+++ lua-5.1.4/src/Makefile 2009-11-24 23:49:54.244818140 +0100
@@ -23,6 +23,7 @@
PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
LUA_A= liblua.a
+LUA_SO= liblua.so
CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \
lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \
lundump.o lvm.o lzio.o
@@ -33,11 +34,12 @@
LUA_O= lua.o
LUAC_T= luac
-LUAC_O= luac.o print.o
+LUAC_O= luac.o print.o lopcodes.o
ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O)
-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
+ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T)
ALL_A= $(LUA_A)
+ALL_SO= $(LUA_SO)
default: $(PLAT)
@@ -47,14 +49,23 @@
a: $(ALL_A)
+so: $(ALL_SO)
+
$(LUA_A): $(CORE_O) $(LIB_O)
$(AR) $@ $?
$(RANLIB) $@
-$(LUA_T): $(LUA_O) $(LUA_A)
- $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
+$(LUA_SO): $(CORE_O) $(LIB_O)
+ $(CC) -o $@.$(PKG_VERSION) -shared -Wl,-soname="$@.$(PKG_VERSION)" $? -nostdlib -lgcc
+ ln -fs $@.$(PKG_VERSION) $@
+
+$(LUA_T): $(LUA_O) $(LUA_SO)
+ $(CC) -o $@ -L. -llua $(MYLDFLAGS) $(LUA_O) $(LIBS)
+
+$(LUAC_T): $(LUAC_O) $(LUA_SO)
+ $(CC) -o $@ -L. -llua $(MYLDFLAGS) $(LUAC_O) $(LIBS)
-$(LUAC_T): $(LUAC_O) $(LUA_A)
+$(LUAC_T)-host: $(LUAC_O) $(LUA_A)
$(CC) -o $@ $(MYLDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS)
clean:
@@ -96,7 +107,7 @@
$(MAKE) all MYCFLAGS=
linux:
- $(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
+ $(MAKE) all MYCFLAGS+=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
macosx:
$(MAKE) all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-lreadline"

View File

@ -0,0 +1,22 @@
--- lua-5.1.4.orig/src/lvm.c 2007/12/28 15:32:23 2.63.1.3
+++ lua-5.1.4/src/lvm.c 2009/07/01 20:36:59
@@ -133,6 +133,7 @@
void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) {
int loop;
+ TValue temp;
for (loop = 0; loop < MAXTAGLOOP; loop++) {
const TValue *tm;
if (ttistable(t)) { /* `t' is a table? */
@@ -152,7 +153,9 @@
callTM(L, tm, t, key, val);
return;
}
- t = tm; /* else repeat with `tm' */
+ /* else repeat with `tm' */
+ setobj(L, &temp, tm); /* avoid pointing inside table (may rehash) */
+ t = &temp;
}
luaG_runerror(L, "loop in settable");
}

View File

@ -4,78 +4,119 @@
#
#############################################################
LUA_VERSION=5.1.4
LUA_VERSION = 5.1.4
LUA_SITE = http://www.lua.org/ftp
LUA_INSTALL_STAGING = YES
LUA_SOURCE=lua-$(LUA_VERSION).tar.gz
LUA_CAT:=$(ZCAT)
LUA_SITE=http://www.lua.org/ftp
LUA_DIR=$(BUILD_DIR)/lua-$(LUA_VERSION)
LUA_CFLAGS=-DLUA_USE_LINUX
LUA_MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
$(DL_DIR)/$(LUA_SOURCE):
$(call DOWNLOAD,$(LUA_SITE),$(LUA_SOURCE))
$(LUA_DIR)/.unpacked: $(DL_DIR)/$(LUA_SOURCE)
$(LUA_CAT) $(DL_DIR)/$(LUA_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
touch $(LUA_DIR)/.unpacked
$(LUA_DIR)/src/lua: $(LUA_DIR)/.unpacked
rm -f $@
$(MAKE) $(TARGET_CONFIGURE_OPTS) \
MYCFLAGS=$(LUA_CFLAGS) \
MYLIBS=$(LUA_MYLIBS) \
AR="$(TARGET_CROSS)ar rcu" \
-C $(LUA_DIR)/src all
$(LUA_DIR)/src/luac: $(LUA_DIR)/src/lua
$(LUA_DIR)/src/liblua.a: $(LUA_DIR)/src/lua
$(STAGING_DIR)/usr/lib/liblua.a: $(LUA_DIR)/src/liblua.a
cp -dpf $(LUA_DIR)/src/liblua.a $(STAGING_DIR)/usr/lib/liblua.a
$(STAGING_DIR)/usr/bin/lua: $(LUA_DIR)/src/lua
cp -dpf $(LUA_DIR)/src/lua $(STAGING_DIR)/usr/bin/lua
$(STAGING_DIR)/usr/bin/luac: $(LUA_DIR)/src/luac
cp -dpf $(LUA_DIR)/src/luac $(STAGING_DIR)/usr/bin/luac
$(TARGET_DIR)/usr/lib/liblua.a: $(STAGING_DIR)/usr/lib/liblua.a
cp -dpf $(STAGING_DIR)/usr/lib/liblua.a $(TARGET_DIR)/usr/lib/liblua.a
$(TARGET_DIR)/usr/bin/lua: $(STAGING_DIR)/usr/bin/lua
cp -dpf $(STAGING_DIR)/usr/bin/lua $(TARGET_DIR)/usr/bin/lua
$(TARGET_DIR)/usr/bin/luac: $(STAGING_DIR)/usr/bin/luac
cp -dpf $(STAGING_DIR)/usr/bin/luac $(TARGET_DIR)/usr/bin/luac
lua-bins: $(TARGET_DIR)/usr/bin/lua $(TARGET_DIR)/usr/bin/luac
lua-libs: $(if $(BR2_HAVE_DEVFILES),$(TARGET_DIR)/usr/lib/liblua.a)
lua: readline ncurses lua-bins lua-libs
lua-source: $(DL_DIR)/$(LUA_SOURCE)
lua-clean:
rm -f $(STAGING_DIR)/usr/bin/lua $(TARGET_DIR)/usr/bin/luac
rm -f $(STAGING_DIR)/usr/lib/liblua.a
rm -f $(TARGET_DIR)/usr/bin/lua $(TARGET_DIR)/usr/bin/luac
rm -f $(TARGET_DIR)/usr/lib/liblua.a
-$(MAKE) -C $(LUA_DIR) clean
lua-dirclean:
rm -rf $(LUA_DIR)
#############################################################
#
# Toplevel Makefile options
#
#############################################################
ifeq ($(BR2_PACKAGE_LUA),y)
TARGETS+=lua
ifeq ($(BR2_PACKAGE_LUA_SHARED_LIBRARY),y)
LUA_MYCFLAGS += -fPIC -DLUA_USE_DLOPEN
LUA_MYLIBS += -ldl
endif
ifeq ($(BR2_PACKAGE_LUA_INTERPRETER_READLINE),y)
LUA_DEPENDENCIES = readline ncurses
LUA_MYLIBS += -lreadline -lhistory -lncurses
LUA_MYCFLAGS += -DLUA_USE_LINUX
else
LUA_MYCFLAGS += -DLUA_USE_POSIX
endif
define LUA_BUILD_CMDS
sed -i -e 's/-O2//' $(@D)/src/Makefile
sed -i -e 's/\/usr\/local/\/usr/' $(@D)/etc/lua.pc
$(MAKE) $(TARGET_CONFIGURE_OPTS) MYCFLAGS="$(LUA_MYCFLAGS)" \
MYLIBS="$(LUA_MYLIBS)" AR="$(TARGET_CROSS)ar rcu" \
PKG_VERSION=$(LUA_VERSION) -C $(@D)/src all
endef
ifeq ($(BR2_PACKAGE_LUA_SHARED_LIBRARY),y)
define LUA_INSTALL_STAGING_SHARED_LIB
$(INSTALL) -D $(@D)/src/liblua.so.$(LUA_VERSION) \
$(STAGING_DIR)/usr/lib/liblua.so.$(LUA_VERSION)
ln -sf liblua.so.$(LUA_VERSION) $(STAGING_DIR)/usr/lib/liblua.so
endef
endif
define LUA_INSTALL_STAGING_CMDS
$(INSTALL) -m 0644 -D $(@D)/etc/lua.pc \
$(STAGING_DIR)/usr/lib/pkgconfig
$(INSTALL) $(@D)/src/liblua.a $(STAGING_DIR)/usr/lib
$(INSTALL) $(@D)/src/lua $(STAGING_DIR)/usr/bin
$(INSTALL) $(@D)/src/luac $(STAGING_DIR)/usr/bin
$(INSTALL) $(@D)/src/lua.h $(STAGING_DIR)/usr/include
$(INSTALL) $(@D)/src/luaconf.h $(STAGING_DIR)/usr/include
$(INSTALL) $(@D)/src/lualib.h $(STAGING_DIR)/usr/include
$(INSTALL) $(@D)/src/lauxlib.h $(STAGING_DIR)/usr/include
endef
ifeq ($(BR2_PACKAGE_LUA_INTERPRETER),y)
define LUA_INSTALL_INTERPRETER
$(INSTALL) $(@D)/src/lua $(TARGET_DIR)/usr/bin
endef
endif
ifeq ($(BR2_PACKAGE_LUA_COMPILER),y)
define LUA_INSTALL_COMPILER
$(INSTALL) $(@D)/src/luac $(TARGET_DIR)/usr/bin
endef
endif
ifeq ($(BR2_PACKAGE_LUA_SHARED_LIBRARY),y)
define LUA_INSTALL_LIBRARY
$(INSTALL) $(@D)/src/liblua.so.$(LUA_VERSION) \
$(TARGET_DIR)/usr/lib/liblua.so.$(LUA_VERSION)
ln -sf liblua.so.$(LUA_VERSION) $(TARGET_DIR)/usr/lib/liblua.so
$(INSTALL) $(@D)/src/liblua.a $(TARGET_DIR)/usr/lib/liblua.a
endef
else
define LUA_INSTALL_LIBRARY
$(INSTALL) $(@D)/src/liblua.a $(TARGET_DIR)/usr/lib/liblua.a
endef
endif
ifeq ($(BR2_HAVE_DEVFILES),y)
define LUA_INSTALL_DEVFILES
$(INSTALL) -m 0644 -D $(@D)/etc/lua.pc \
$(TARGET_DIR)/usr/lib/pkgconfig/lua.pc
$(INSTALL) $(@D)/src/lua.h $(TARGET_DIR)/usr/include
$(INSTALL) $(@D)/src/luaconf.h $(TARGET_DIR)/usr/include
$(INSTALL) $(@D)/src/lualib.h $(TARGET_DIR)/usr/include
$(INSTALL) $(@D)/src/lauxlib.h $(TARGET_DIR)/usr/include
endef
endif
define LUA_INSTALL_TARGET_CMDS
$(LUA_INSTALL_INTERPRETER)
$(LUA_INSTALL_COMPILER)
$(LUA_INSTALL_LIBRARY)
$(LUA_INSTALL_DEVFILES)
endef
LUA_INSTALLED_FILES = \
/usr/include/lua.h \
/usr/include/luaconf.h \
/usr/include/lualib.h \
/usr/include/lauxlib.h \
/usr/lib/pkgconfig/lua.pc \
/usr/bin/lua \
/usr/bin/luac \
/usr/lib/liblua.a \
/usr/lib/liblua.so*
define LUA_UNINSTALL_STAGING_CMDS
for i in $(LUA_INSTALLED_FILES); do \
rm -f $(STAGING_DIR)$$i; \
done
endef
define LUA_UNINSTALL_TARGET_CMDS
for i in $(LUA_INSTALLED_FILES); do \
rm -f $(TARGET_DIR)$$i; \
done
endef
define LUA_CLEAN_CMDS
-$(MAKE) -C $(@D) clean
endef
$(eval $(call GENTARGETS,package,lua))