summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancesco Colista2015-06-08 12:22:47 +0200
committerFrancesco Colista2015-06-08 12:22:47 +0200
commit7a2155d8d8b20b5f0a5285ede6e853229ec42f75 (patch)
treeb004fc540d8046593b8de15613834d7b7d0cc657
downloadaur-7a2155d8d8b20b5f0a5285ede6e853229ec42f75.tar.gz
Initial commit
-rw-r--r--.SRCINFO16
-rw-r--r--PKGBUILD30
-rw-r--r--lpc-lua5.2-compat.patch317
3 files changed, 363 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..78e7e470661d
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,16 @@
+pkgbase = lua-pc
+ pkgdesc = Lua Process Call
+ pkgver = 1.0.0
+ pkgrel = 2
+ url = https://github.com/LuaDist/lpc
+ arch = i686
+ arch = x86_64
+ license = MIT/X11
+ depends = lua
+ source = https://github.com/LuaDist/lpc/tarball/1.0.0
+ source = lpc-lua5.2-compat.patch
+ md5sums = d25afbbb5feaf6d966306e80dfef11fd
+ md5sums = 97c3a94797b03b84c6340781b413e5be
+
+pkgname = lua-pc
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..486e6f67eeee
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,30 @@
+# Maintainer: Cameron Banta <cbanta@gmail.com>
+# Contributor: Francesco Colista <francesco.colista@gmail.com>
+pkgname=lua-pc
+pkgver=1.0.0
+pkgrel=2
+pkgdesc="Lua Process Call"
+license=('MIT/X11')
+arch=('i686' 'x86_64')
+url="https://github.com/LuaDist/lpc"
+depends=('lua')
+source=(https://github.com/LuaDist/lpc/tarball/$pkgver
+ lpc-lua5.2-compat.patch)
+
+build() {
+ cd $srcdir
+ ln -s $(find -name LuaDist-lpc-*) lpc
+ cd "$srcdir/lpc"
+ patch -Np1 -i ../../lpc-lua5.2-compat.patch
+ make CFLAGS="$CFLAGS -fPIC" LDFLAGS="$LDFLAGS -shared"
+}
+
+package() {
+ cd "$srcdir/lpc"
+ make install DESTDIR="$pkgdir"
+ install -Dm644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING
+}
+
+md5sums=('d25afbbb5feaf6d966306e80dfef11fd'
+ '97c3a94797b03b84c6340781b413e5be')
+
diff --git a/lpc-lua5.2-compat.patch b/lpc-lua5.2-compat.patch
new file mode 100644
index 000000000000..98ec7b1a588d
--- /dev/null
+++ b/lpc-lua5.2-compat.patch
@@ -0,0 +1,317 @@
+--- lpc-1.0.0.orig/Makefile
++++ lpc-1.0.0/Makefile
+@@ -1,17 +1,24 @@
+-LUA_PREFIX = /usr/local/
+-PREFIX = /usr/local/
++LUA_PKGCONF ?= lua
++
+ MODULE = lpc
+ VERSION = 1.0.0
+
+-INSTALL_PREFIX = $(PREFIX)/lib/lua/5.1/
++ifneq ($(shell pkg-config $(LUA_PKGCONF) || echo not-installed),)
++$(error $(LUA_PKGCONF).pc not found)
++endif
+
++INSTALL_PREFIX = $(DESTDIR)$(shell pkg-config $(LUA_PKGCONF) --variable=INSTALL_CMOD)
++
+ CC = gcc
+ TARGET = lpc.so
+ OBJS = lpc.o
+ LIBS =
+-CFLAGS = -I $(LUA_PREFIX)/include -fPIC
++CFLAGS = -fPIC
+ LDFLAGS = -shared -fPIC
+
++LUA_CFLAGS = $(shell pkg-config $(LUA_PKGCONF) --cflags)
++LUA_LDFLAGS = $(shell pkg-config $(LUA_PKGCONF) --libs)
++
+ default: $(TARGET)
+
+
+@@ -29,7 +36,7 @@
+ rm -rf $(MODULE)-$(VERSION)
+
+ $(TARGET): $(OBJS)
+- $(CC) $(LDFLAGS) -o $(TARGET) $(OBJS)
++ $(CC) $(LUA_LDFLAGS) $(LDFLAGS) -o $(TARGET) $(OBJS)
+
+ .c.o:
+- $(CC) $(CFLAGS) -c $< -o $@
++ $(CC) $(LUA_CFLAGS) $(CFLAGS) -c $< -o $@
+--- lpc-1.0.0.orig/lpc.c
++++ lpc-1.0.0/lpc.c
+@@ -1,7 +1,7 @@
+ /*
+ ** LuaProcessCall
+ ** Copyright DarkGod 2007
+-**
++** lua 5.1/5.2 compat (c) 2014 Timo Teräs
+ */
+
+ #include <errno.h>
+@@ -15,47 +15,98 @@
+ #include "lauxlib.h"
+ #include "lualib.h"
+
+-#define topfile(L) ((FILE **)luaL_checkudata(L, 1, LUA_FILEHANDLE))
++#if LUA_VERSION_NUM < 502
+
+-static FILE *tofile (lua_State *L) {
+- FILE **f = topfile(L);
+- if (*f == NULL)
+- luaL_error(L, "attempt to use a closed file");
+- return *f;
++static int lua_absindex(lua_State *L, int idx) {
++ return (idx > 0 || idx <= LUA_REGISTRYINDEX)? idx : lua_gettop(L) + idx + 1;
++} /* lua_absindex() */
++
++static void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) {
++ int i, t = lua_absindex(L, -1 - nup);
++
++ for (; l->name; l++) {
++ for (i = 0; i < nup; i++)
++ lua_pushvalue(L, -nup);
++ lua_pushcclosure(L, l->func, nup);
++ lua_setfield(L, t, l->name);
++ }
++
++ lua_pop(L, nup);
++} /* luaL_setfuncs() */
++
++#define luaL_newlibtable(L, l) \
++ lua_createtable(L, 0, (sizeof (l) / sizeof *(l)) - 1)
++
++#define luaL_newlib(L, l) \
++ (luaL_newlibtable((L), (l)), luaL_setfuncs((L), (l), 0))
++
++#ifndef LUA_FILEHANDLE /* Not defined by earlier LuaJIT releases */
++#define LUA_FILEHANDLE "FILE*"
++#endif
++
++/*
++ * Lua 5.1 userdata is a simple FILE *, while LuaJIT is a struct with the
++ * first member a FILE *, similar to Lua 5.2.
++ */
++typedef struct luaL_Stream {
++ FILE *f;
++} luaL_Stream;
++
++static int luaL_fileresult(lua_State *L, int stat, const char *filename) {
++ int en = errno; /* calls to Lua API may change this value */
++ if (stat) {
++ lua_pushboolean(L, 1);
++ return 1;
++ }
++ else {
++ lua_pushnil(L);
++ if (filename)
++ lua_pushfstring(L, "%s: %s", filename, strerror(en));
++ else
++ lua_pushfstring(L, "%s", strerror(en));
++ lua_pushinteger(L, en);
++ return 3;
++ }
+ }
+
+-static int pushresult (lua_State *L, int i, const char *filename) {
+- int en = errno; /* calls to Lua API may change this value */
+- if (i) {
+- lua_pushboolean(L, 1);
+- return 1;
+- }
+- else {
+- lua_pushnil(L);
+- if (filename)
+- lua_pushfstring(L, "%s: %s", filename, strerror(en));
+- else
+- lua_pushfstring(L, "%s", strerror(en));
+- lua_pushinteger(L, en);
+- return 3;
+- }
++#define isclosed(p) ((p)->f == NULL)
++#define markclosed(p) ((p)->f = NULL)
++
++#else
++
++#define isclosed(p) ((p)->closef == NULL)
++#define markclosed(p) ((p)->closef = NULL)
++
++#endif
++
++#define tolstream(L) ((luaL_Stream *)luaL_checkudata(L, 1, LUA_FILEHANDLE))
++
++static FILE *tofile (lua_State *L) {
++ luaL_Stream *p = tolstream(L);
++ if (isclosed(p))
++ luaL_error(L, "attempt to use a closed file");
++ return p->f;
+ }
+
+-static int io_fclose (lua_State *L) {
+- FILE **p = topfile(L);
+- int ok = (fclose(*p) == 0);
+- *p = NULL;
+- return pushresult(L, ok, NULL);
++static int io_fclose (lua_State *L)
++{
++ luaL_Stream *p = tolstream(L);
++ int res = fclose(p->f);
++ markclosed(p);
++ return luaL_fileresult(L, (res == 0), NULL);
+ }
+
+-static FILE **newfile_fd(lua_State *L, int fd, const char *mode)
++static luaL_Stream *newfile_fd(lua_State *L, int fd, const char *mode)
+ {
+- FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *));
+- *pf = NULL; /* file handle is currently `closed' */
++ luaL_Stream *p = (luaL_Stream *) lua_newuserdata(L, sizeof(luaL_Stream));
++ markclosed(p);
+ luaL_getmetatable(L, LUA_FILEHANDLE);
+ lua_setmetatable(L, -2);
+- *pf = fdopen(fd, mode);
+- return pf;
++ p->f = fdopen(fd, mode);
++#if LUA_VERSION_NUM >= 502
++ p->closef = &io_fclose;
++#endif
++ return p;
+ }
+
+ static int lpc_run(lua_State *L)
+@@ -64,12 +115,12 @@
+ int p_in[2];
+ int pid;
+
+- if (pipe(p_out) == -1) { lua_pushnil(L); return 1; }
+- if (pipe(p_in) == -1) { lua_pushnil(L); return 1; }
++ if (pipe(p_out) == -1) goto err_noclose;
++ if (pipe(p_in) == -1) goto err_closeout;
++ if ((pid = fork()) == -1) goto err_closeinout;
+
+- if ((pid = fork()) == -1) { lua_pushnil(L); return 1; }
+- else if (pid == 0)
+- {
++ if (pid == 0) {
++ /* child */
+ char **args;
+ int n = lua_gettop(L); /* number of arguments */
+ int i;
+@@ -93,20 +144,24 @@
+ _exit(1);
+ return 0;
+ }
+- else
+- {
+- FILE **in;
+- FILE **out;
+
+- /* Cleanup */
+- close(p_out[0]);
+- close(p_in[1]);
++ /* Cleanup */
++ close(p_out[0]);
++ close(p_in[1]);
++ lua_pushnumber(L, pid);
++ newfile_fd(L, p_out[1], "w");
++ newfile_fd(L, p_in[0], "r");
++ return 3;
+
+- lua_pushnumber(L, pid);
+- out = newfile_fd(L, p_out[1], "w");
+- in = newfile_fd(L, p_in[0], "r");
+- return 3;
+- }
++err_closeinout:
++ close(p_in[0]);
++ close(p_in[1]);
++err_closeout:
++ close(p_out[0]);
++ close(p_out[1]);
++err_noclose:
++ lua_pushnil(L);
++ return 1;
+ }
+
+ static int lpc_wait(lua_State *L)
+@@ -116,13 +171,9 @@
+ int nonblock = luaL_optinteger(L, 2, 0);
+
+ if (waitpid(pid, &ret, (nonblock == 1) ? WNOHANG : 0) == pid)
+- {
+ lua_pushnumber(L, ret);
+- }
+ else
+- {
+ lua_pushnil(L);
+- }
+ return 1;
+ }
+
+@@ -141,13 +192,9 @@
+ FD_SET(fileno(f), &rfds);
+ retval = select(1 + fileno(f), &rfds, NULL, NULL, &tv);
+ if (retval == 1)
+- {
+ lua_pushboolean(L, 1);
+- }
+ else
+- {
+ lua_pushnil(L);
+- }
+ return 1;
+ }
+
+@@ -166,13 +213,9 @@
+ FD_SET(fileno(f), &wfds);
+ retval = select(1 + fileno(f), NULL, &wfds, NULL, &tv);
+ if (retval == 1)
+- {
+ lua_pushboolean(L, 1);
+- }
+ else
+- {
+ lua_pushboolean(L, 0);
+- }
+ return 1;
+ }
+
+@@ -192,7 +235,7 @@
+ lua_settable (L, -3);
+ }
+
+-static const struct luaL_reg lpclib[] =
++static const struct luaL_Reg lpclib[] =
+ {
+ {"run", lpc_run},
+ {"wait", lpc_wait},
+@@ -207,15 +250,15 @@
+
+ static void createmeta(lua_State *L)
+ {
+- luaL_getmetatable(L, LUA_FILEHANDLE); /* get IO's metatable for file handles */
+- luaL_register(L, NULL, io_add_flib); /* file methods */
++ luaL_getmetatable(L, LUA_FILEHANDLE); /* get IO's metatable for file handles */
++ luaL_setfuncs(L, io_add_flib, 0); /* file methods */
+ }
+
+-
+ int luaopen_lpc (lua_State *L)
+ {
+ createmeta(L);
+
++#if LUA_VERSION_NUM < 502
+ luaL_openlib(L, "lpc", lpclib, 0);
+
+ /* create environment for 'run' */
+@@ -225,6 +268,9 @@
+ lua_setfield(L, -2, "__close");
+ lua_setfenv(L, -2);
+ lua_pop(L, 1); /* pop 'run' */
++#else
++ luaL_newlib(L, lpclib);
++#endif
+
+ set_info(L);
+ return 1;