lua: add support for loading gzip compressed source files, bump package revision
SVN-Revision: 15108
This commit is contained in:
		| @@ -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. | # This is free software, licensed under the GNU General Public License v2. | ||||||
| # See /LICENSE for more information. | # See /LICENSE for more information. | ||||||
| @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk | |||||||
|  |  | ||||||
| PKG_NAME:=lua | PKG_NAME:=lua | ||||||
| PKG_VERSION:=5.1.4 | PKG_VERSION:=5.1.4 | ||||||
| PKG_RELEASE:=3 | PKG_RELEASE:=4 | ||||||
|  |  | ||||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | ||||||
| PKG_SOURCE_URL:=http://www.lua.org/ftp/ \ | PKG_SOURCE_URL:=http://www.lua.org/ftp/ \ | ||||||
|   | |||||||
							
								
								
									
										134
									
								
								package/lua/patches-host/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								package/lua/patches-host/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  | + | ||||||
|  |  /* }================================================================== */ | ||||||
|  |   | ||||||
|  |   | ||||||
							
								
								
									
										134
									
								
								package/lua/patches/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								package/lua/patches/040-gzip-source-loader.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  | + | ||||||
|  |  /* }================================================================== */ | ||||||
|  |   | ||||||
|  |   | ||||||
| @@ -6,8 +6,8 @@ Index: lua-5.1.4/src/Makefile | |||||||
|  AR= ar rcu |  AR= ar rcu | ||||||
|  RANLIB= ranlib |  RANLIB= ranlib | ||||||
|  RM= rm -f |  RM= rm -f | ||||||
| -LIBS= -lm $(MYLIBS) | -LIBS= -lm -lz $(MYLIBS) | ||||||
| +LIBS= -lm -lcrypt $(MYLIBS) | +LIBS= -lm -lz -lcrypt $(MYLIBS) | ||||||
|   |   | ||||||
|  MYCFLAGS= |  MYCFLAGS= | ||||||
|  MYLDFLAGS= |  MYLDFLAGS= | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich