lua: add support for loading gzip compressed source files, bump package revision
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 4 Apr 2009 23:06:56 +0000 (23:06 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 4 Apr 2009 23:06:56 +0000 (23:06 +0000)
SVN-Revision: 15108

package/lua/Makefile
package/lua/patches-host/040-gzip-source-loader.patch [new file with mode: 0644]
package/lua/patches/040-gzip-source-loader.patch [new file with mode: 0644]
package/lua/patches/400-luaposix_5.1.4-embedded.patch

index 67f3175c772fba4fb18988740e92a94d668b7760..689b845d55c244a3eea8b51252511c134da71ae9 100644 (file)
@@ -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 (file)
index 0000000..6fbafa2
--- /dev/null
@@ -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 <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <zlib.h>
+ /* 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 (file)
index 0000000..6fbafa2
--- /dev/null
@@ -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 <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <zlib.h>
+ /* 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
++
+ /* }================================================================== */
index 73d8eb03badad4ba4a31e06f1f5cb49f7f14b724..f0757f0e47ff1dc2b200b325c0358e2901ec4dff 100644 (file)
@@ -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=