From 27b7e29e13432b15949646c5a479a840b47fbe28 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 4 Apr 2009 23:06:56 +0000 Subject: [PATCH] lua: add support for loading gzip compressed source files, bump package revision SVN-Revision: 15108 --- package/lua/Makefile | 4 +- .../patches-host/040-gzip-source-loader.patch | 134 ++++++++++++++++++ .../lua/patches/040-gzip-source-loader.patch | 134 ++++++++++++++++++ .../patches/400-luaposix_5.1.4-embedded.patch | 4 +- 4 files changed, 272 insertions(+), 4 deletions(-) create mode 100644 package/lua/patches-host/040-gzip-source-loader.patch create mode 100644 package/lua/patches/040-gzip-source-loader.patch diff --git a/package/lua/Makefile b/package/lua/Makefile index 67f3175c77..689b845d55 100644 --- a/package/lua/Makefile +++ b/package/lua/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2008 OpenWrt.org +# Copyright (C) 2006-2009 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=lua PKG_VERSION:=5.1.4 -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.lua.org/ftp/ \ diff --git a/package/lua/patches-host/040-gzip-source-loader.patch b/package/lua/patches-host/040-gzip-source-loader.patch new file mode 100644 index 0000000000..6fbafa206d --- /dev/null +++ b/package/lua/patches-host/040-gzip-source-loader.patch @@ -0,0 +1,134 @@ +diff -ur lua-5.1.4.orig/src/Makefile lua-5.1.4/src/Makefile +--- lua-5.1.4.orig/src/Makefile 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/Makefile 2009-04-04 23:06:15.000000000 +0200 +@@ -12,7 +12,7 @@ + AR= ar rcu + RANLIB= ranlib + RM= rm -f +-LIBS= -lm $(MYLIBS) ++LIBS= -lm -lz $(MYLIBS) + + MYCFLAGS= + MYLDFLAGS= +diff -ur lua-5.1.4.orig/src/lauxlib.c lua-5.1.4/src/lauxlib.c +--- lua-5.1.4.orig/src/lauxlib.c 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/lauxlib.c 2009-04-05 00:03:33.000000000 +0200 +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + + + /* This file uses only the official API of Lua. +@@ -535,6 +536,12 @@ + char buff[LUAL_BUFFERSIZE]; + } LoadF; + ++typedef struct LoadGZ { ++ int first_chunk; ++ gzFile f; ++ char buffer[LUAL_GZLDBUFFER]; ++} LoadGZ; ++ + + static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; +@@ -550,6 +557,26 @@ + } + + ++static const char *getGZ (lua_State *L, void *ud, size_t *size) { ++ LoadGZ *lf = (LoadGZ *)ud; ++ char *sp = 0; ++ (void)L; ++ if (gzeof(lf->f)) return NULL; ++ *size = gzread(lf->f, lf->buffer, sizeof(lf->buffer)); ++ if (*size > 0) { ++ if (lf->first_chunk) { ++ lf->first_chunk = 0; ++ if (strstr(lf->buffer, "#!") && (sp=strstr(lf->buffer, "\n")) != NULL) { ++ *size -= ((uint)sp - (uint)lf->buffer); ++ return sp; ++ } ++ } ++ return lf->buffer; ++ } ++ return NULL; ++} ++ ++ + static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; +@@ -560,6 +587,31 @@ + + + LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { ++ if ((filename != NULL) && strstr(filename, ".lua.gz")) { ++ return luaL_loadfile_gzip(L, filename); ++ } ++ else { ++ return luaL_loadfile_plain(L, filename); ++ } ++} ++ ++ ++LUALIB_API int luaL_loadfile_gzip (lua_State *L, const char *filename) { ++ LoadGZ gzf; ++ int status; ++ int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ ++ lua_pushfstring(L, "@%s", filename); ++ gzf.f = gzopen(filename, "r"); ++ gzf.first_chunk = 1; ++ if (gzf.f == Z_NULL) return errfile(L, "open", fnameindex); ++ status = lua_load(L, getGZ, &gzf, lua_tostring(L, -1)); ++ (void)gzclose(gzf.f); ++ lua_remove(L, fnameindex); ++ return status; ++} ++ ++ ++LUALIB_API int luaL_loadfile_plain (lua_State *L, const char *filename) { + LoadF lf; + int status, readstatus; + int c; +diff -ur lua-5.1.4.orig/src/lauxlib.h lua-5.1.4/src/lauxlib.h +--- lua-5.1.4.orig/src/lauxlib.h 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/lauxlib.h 2009-04-04 23:06:15.000000000 +0200 +@@ -81,6 +81,8 @@ + LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + + LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); ++LUALIB_API int (luaL_loadfile_gzip) (lua_State *L, const char *filename); ++LUALIB_API int (luaL_loadfile_plain) (lua_State *L, const char *filename); + LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, + const char *name); + LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); +diff -ur lua-5.1.4.orig/src/luaconf.h lua-5.1.4/src/luaconf.h +--- lua-5.1.4.orig/src/luaconf.h 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/luaconf.h 2009-04-04 23:27:20.000000000 +0200 +@@ -101,7 +101,9 @@ + #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" + #define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ +- LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" ++ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ ++ "./?.lua.gz;" LUA_LDIR"?.lua.gz;" LUA_LDIR"?/init.lua.gz;" \ ++ LUA_CDIR"?.lua.gz;" LUA_CDIR"?/init.lua.gz" + #define LUA_CPATH_DEFAULT \ + "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" + #endif +@@ -506,6 +508,12 @@ + */ + #define LUAL_BUFFERSIZE BUFSIZ + ++ ++/* ++@@ LUAL_GZLDBUFFER is the buffer size used by the gzip source loader. ++*/ ++#define LUAL_GZLDBUFFER 8192 ++ + /* }================================================================== */ + + diff --git a/package/lua/patches/040-gzip-source-loader.patch b/package/lua/patches/040-gzip-source-loader.patch new file mode 100644 index 0000000000..6fbafa206d --- /dev/null +++ b/package/lua/patches/040-gzip-source-loader.patch @@ -0,0 +1,134 @@ +diff -ur lua-5.1.4.orig/src/Makefile lua-5.1.4/src/Makefile +--- lua-5.1.4.orig/src/Makefile 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/Makefile 2009-04-04 23:06:15.000000000 +0200 +@@ -12,7 +12,7 @@ + AR= ar rcu + RANLIB= ranlib + RM= rm -f +-LIBS= -lm $(MYLIBS) ++LIBS= -lm -lz $(MYLIBS) + + MYCFLAGS= + MYLDFLAGS= +diff -ur lua-5.1.4.orig/src/lauxlib.c lua-5.1.4/src/lauxlib.c +--- lua-5.1.4.orig/src/lauxlib.c 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/lauxlib.c 2009-04-05 00:03:33.000000000 +0200 +@@ -11,6 +11,7 @@ + #include + #include + #include ++#include + + + /* This file uses only the official API of Lua. +@@ -535,6 +536,12 @@ + char buff[LUAL_BUFFERSIZE]; + } LoadF; + ++typedef struct LoadGZ { ++ int first_chunk; ++ gzFile f; ++ char buffer[LUAL_GZLDBUFFER]; ++} LoadGZ; ++ + + static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; +@@ -550,6 +557,26 @@ + } + + ++static const char *getGZ (lua_State *L, void *ud, size_t *size) { ++ LoadGZ *lf = (LoadGZ *)ud; ++ char *sp = 0; ++ (void)L; ++ if (gzeof(lf->f)) return NULL; ++ *size = gzread(lf->f, lf->buffer, sizeof(lf->buffer)); ++ if (*size > 0) { ++ if (lf->first_chunk) { ++ lf->first_chunk = 0; ++ if (strstr(lf->buffer, "#!") && (sp=strstr(lf->buffer, "\n")) != NULL) { ++ *size -= ((uint)sp - (uint)lf->buffer); ++ return sp; ++ } ++ } ++ return lf->buffer; ++ } ++ return NULL; ++} ++ ++ + static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; +@@ -560,6 +587,31 @@ + + + LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { ++ if ((filename != NULL) && strstr(filename, ".lua.gz")) { ++ return luaL_loadfile_gzip(L, filename); ++ } ++ else { ++ return luaL_loadfile_plain(L, filename); ++ } ++} ++ ++ ++LUALIB_API int luaL_loadfile_gzip (lua_State *L, const char *filename) { ++ LoadGZ gzf; ++ int status; ++ int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ ++ lua_pushfstring(L, "@%s", filename); ++ gzf.f = gzopen(filename, "r"); ++ gzf.first_chunk = 1; ++ if (gzf.f == Z_NULL) return errfile(L, "open", fnameindex); ++ status = lua_load(L, getGZ, &gzf, lua_tostring(L, -1)); ++ (void)gzclose(gzf.f); ++ lua_remove(L, fnameindex); ++ return status; ++} ++ ++ ++LUALIB_API int luaL_loadfile_plain (lua_State *L, const char *filename) { + LoadF lf; + int status, readstatus; + int c; +diff -ur lua-5.1.4.orig/src/lauxlib.h lua-5.1.4/src/lauxlib.h +--- lua-5.1.4.orig/src/lauxlib.h 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/lauxlib.h 2009-04-04 23:06:15.000000000 +0200 +@@ -81,6 +81,8 @@ + LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + + LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); ++LUALIB_API int (luaL_loadfile_gzip) (lua_State *L, const char *filename); ++LUALIB_API int (luaL_loadfile_plain) (lua_State *L, const char *filename); + LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, + const char *name); + LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); +diff -ur lua-5.1.4.orig/src/luaconf.h lua-5.1.4/src/luaconf.h +--- lua-5.1.4.orig/src/luaconf.h 2009-04-04 23:06:04.000000000 +0200 ++++ lua-5.1.4/src/luaconf.h 2009-04-04 23:27:20.000000000 +0200 +@@ -101,7 +101,9 @@ + #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" + #define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ +- LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" ++ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ ++ "./?.lua.gz;" LUA_LDIR"?.lua.gz;" LUA_LDIR"?/init.lua.gz;" \ ++ LUA_CDIR"?.lua.gz;" LUA_CDIR"?/init.lua.gz" + #define LUA_CPATH_DEFAULT \ + "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" + #endif +@@ -506,6 +508,12 @@ + */ + #define LUAL_BUFFERSIZE BUFSIZ + ++ ++/* ++@@ LUAL_GZLDBUFFER is the buffer size used by the gzip source loader. ++*/ ++#define LUAL_GZLDBUFFER 8192 ++ + /* }================================================================== */ + + diff --git a/package/lua/patches/400-luaposix_5.1.4-embedded.patch b/package/lua/patches/400-luaposix_5.1.4-embedded.patch index 73d8eb03ba..f0757f0e47 100644 --- a/package/lua/patches/400-luaposix_5.1.4-embedded.patch +++ b/package/lua/patches/400-luaposix_5.1.4-embedded.patch @@ -6,8 +6,8 @@ Index: lua-5.1.4/src/Makefile AR= ar rcu RANLIB= ranlib RM= rm -f --LIBS= -lm $(MYLIBS) -+LIBS= -lm -lcrypt $(MYLIBS) +-LIBS= -lm -lz $(MYLIBS) ++LIBS= -lm -lz -lcrypt $(MYLIBS) MYCFLAGS= MYLDFLAGS= -- 2.30.2