robert pushed to lua-expat (epel7). "fix for lua 5.2"
notifications at fedoraproject.org
notifications at fedoraproject.org
Fri Apr 24 22:24:17 UTC 2015
>From b31b2324442203ed146e79411bbf758d1bce3653 Mon Sep 17 00:00:00 2001
From: Tom Callaway <spot at fedoraproject.org>
Date: Fri, 10 May 2013 15:51:57 -0400
Subject: fix for lua 5.2
diff --git a/lua-expat-lua-5.2-test-fix.patch b/lua-expat-lua-5.2-test-fix.patch
new file mode 100644
index 0000000..b00506b
--- /dev/null
+++ b/lua-expat-lua-5.2-test-fix.patch
@@ -0,0 +1,117 @@
+
+# HG changeset patch
+# User Tom?s Guisasola Gorham <tomas at tecgraf.puc-rio.br>
+# Date 1343436760 -3600
+# Node ID b2a77ebe7aed73ef5318895dd8f34dcdece94114
+# Parent e981a82571cf5c54d5e84f73fbcad7214f699c03
+test.lua: Expand tests and add compatibility with Lua 5.2
+
+diff -r e981a82571cf -r b2a77ebe7aed tests/test.lua
+--- a/tests/test.lua Sat Jul 28 00:15:08 2012 +0100
++++ b/tests/test.lua Sat Jul 28 01:52:40 2012 +0100
+@@ -2,8 +2,14 @@
+ -- See Copyright Notice in license.html
+ -- $Id: test.lua,v 1.6 2006/06/08 20:34:52 tomas Exp $
+
+-require"lxp"
++if string.find(_VERSION, " 5.0") then
++ lxp = assert(loadlib("./lxp.so", "luaopen_lxp"))()
++else
++ lxp = require"lxp"
++ gcinfo = function () return collectgarbage"count" end
++end
+ print (lxp._VERSION)
++assert(lxp.new, "Cannot find function lxp.new ("..tostring(lxp.new)..")")
+
+ -- basic test with no preamble
+ local p = lxp.new{}
+@@ -35,15 +41,44 @@
+ ]>
+ ]]
+
+-local X
+-function getargs (...) X = arg end
++X = {}
++if string.find(_VERSION, " 5.0") then
++ function getargs (...) X = arg end
++ function xgetargs (c)
++ return function (...)
++ table.insert(arg, 1, c)
++ table.insert(X, arg)
++ end
++ end
++else
++ (loadstring or load)[[
++ function getargs (...)
++ X = { ... }
++ X.n = select('#', ...)
++ end
++ function xgetargs (c)
++ return function (...)
++ local arg = { ... }
++ arg.n = select('#', ...) + 1
++ table.insert(arg, 1, c)
++ table.insert(X, arg)
++ end
++ end
++ table.getn = function (t)
++ if t.n then
++ return t.n
++ else
++ local n = 0
++ for i in pairs(t) do
++ if type(i) == "number" then
++ n = math.max(n, i)
++ end
++ end
++ return n
++ end
++ end]]()
++end
+
+-function xgetargs (c)
+- return function (...)
+- table.insert(arg, 1, c)
+- table.insert(X, arg)
+- end
+-end
+
+
+ -------------------------------
+@@ -61,7 +96,7 @@
+ assert(X.n == 3 and X[1] == p and X[2] == "to")
+ x = X[3]
+ assert(x.priority=="10" and x.xu=="hi" and x.method=="POST")
+-assert(x[1] == "priority" and x[2] == "xu" and table.getn(x) == 2)
++assert(x[1] == "priority" and x[2] == "xu" and table.getn(x) == 2, "x[1] == "..tostring(x[1])..", x[2] == "..tostring(x[2])..", #x == "..tostring(table.getn(x)))
+ assert(p:parse("</to>"))
+ assert(p:parse())
+ p:close()
+@@ -95,7 +130,7 @@
+ assert(p:parse"<to>")
+ assert(p:parse"<![CDATA[hi]]>")
+ assert(table.getn(X) == 3)
+-assert(X[1][1] == "s" and X[1][2] == p)
++assert(X[1][1] == "s" and X[1][2] == p, "X[1][1] == "..tostring(X[1][1])..", X[1][2] == "..tostring(X[1][2])..", p == "..tostring(p))
+ assert(X[2][1] == "c" and X[2][2] == p and X[2][3] == "hi")
+ assert(X[3][1] == "e" and X[3][2] == p)
+ assert(p:parse"</to>")
+@@ -220,7 +255,7 @@
+ ]])
+ p:close()
+ x = X[1]
+-assert(x[1] == "sn" and x[3] == "space" and x[4] == "a/namespace" and table.getn(x) == 4)
++assert(x[1] == "sn" and x[3] == "space" and x[4] == "a/namespace" and table.getn(x) == 4, "x[1] == "..tostring(x[1])..", x[3] == "..tostring(x[3])..", x[4] == "..tostring(x[4])..", #x == "..tostring(table.getn(x)))
+ x = X[3]
+ assert(x[1] == "s" and x[3] == "a/namespace?a")
+ x = X[4]
+@@ -316,7 +351,7 @@
+ local x = gcinfo()
+ for i=1,100000 do
+ -- due to a small bug in Lua...
+- if math.mod(i, 100) == 0 then collectgarbage() end
++ if (math.mod or math.fmod)(i, 100) == 0 then collectgarbage() end
+ lxp.new({})
+ end
+ collectgarbage(); collectgarbage()
+
diff --git a/lua-expat-lua-5.2.patch b/lua-expat-lua-5.2.patch
new file mode 100644
index 0000000..53df2e4
--- /dev/null
+++ b/lua-expat-lua-5.2.patch
@@ -0,0 +1,201 @@
+
+# HG changeset patch
+# User Tom?s Guisasola Gorham <tomas at tecgraf.puc-rio.br>
+# Date 1343430908 -3600
+# Node ID e981a82571cf5c54d5e84f73fbcad7214f699c03
+# Parent 5dfed844930e6ccd981d44290fe51d20255388bc
+Add compatibility with Lua 5.2
+
+diff -r 5dfed844930e -r e981a82571cf src/lxp/lom.lua
+--- a/src/lxp/lom.lua Fri Jul 27 22:03:24 2012 +0100
++++ b/src/lxp/lom.lua Sat Jul 28 00:15:08 2012 +0100
+@@ -1,13 +1,11 @@
+ -- See Copyright Notice in license.html
+ -- $Id: lom.lua,v 1.6 2005/06/09 19:18:40 tuler Exp $
+
+-require "lxp"
++local lxp = require "lxp"
+
+-local tinsert, tremove, getn = table.insert, table.remove, table.getn
++local tinsert, tremove = table.insert, table.remove
+ local assert, type, print = assert, type, print
+-local lxp = lxp
+
+-module ("lxp.lom")
+
+ local function starttag (p, tag, attr)
+ local stack = p:getcallbacks().stack
+@@ -19,14 +17,14 @@
+ local stack = p:getcallbacks().stack
+ local element = tremove(stack)
+ assert(element.tag == tag)
+- local level = getn(stack)
++ local level = #stack
+ tinsert(stack[level], element)
+ end
+
+ local function text (p, txt)
+ local stack = p:getcallbacks().stack
+- local element = stack[getn(stack)]
+- local n = getn(element)
++ local element = stack[#stack]
++ local n = #element
+ if type(element[n]) == "string" then
+ element[n] = element[n] .. txt
+ else
+@@ -34,7 +32,7 @@
+ end
+ end
+
+-function parse (o)
++local function parse (o)
+ local c = { StartElement = starttag,
+ EndElement = endtag,
+ CharacterData = text,
+@@ -47,7 +45,7 @@
+ status, err = p:parse(o)
+ if not status then return nil, err end
+ else
+- for l in o do
++ for l in pairs(o) do
+ status, err = p:parse(l)
+ if not status then return nil, err end
+ end
+@@ -58,3 +56,4 @@
+ return c.stack[1][1]
+ end
+
++return { parse = parse }
+diff -r 5dfed844930e -r e981a82571cf src/lxplib.c
+--- a/src/lxplib.c Fri Jul 27 22:03:24 2012 +0100
++++ b/src/lxplib.c Sat Jul 28 00:15:08 2012 +0100
+@@ -13,14 +13,16 @@
+
+ #include "lua.h"
+ #include "lauxlib.h"
+-#if ! defined (LUA_VERSION_NUM) || LUA_VERSION_NUM < 501
+-#include "compat-5.1.h"
+-#endif
+
+
+ #include "lxplib.h"
+
+
++#if !defined(lua_pushliteral)
++#define lua_pushliteral(L, s) \
++ lua_pushstring(L, "" s, (sizeof(s)/sizeof(char))-1)
++#endif
++
+
+ enum XPState {
+ XPSpre, /* parser just initialized */
+@@ -66,7 +68,7 @@
+
+
+ static void lxpclose (lua_State *L, lxp_userdata *xpu) {
+- lua_unref(L, xpu->tableref);
++ luaL_unref(L, LUA_REGISTRYINDEX, xpu->tableref);
+ xpu->tableref = LUA_REFNIL;
+ if (xpu->parser)
+ XML_ParserFree(xpu->parser);
+@@ -225,7 +227,7 @@
+ child->parser = XML_ExternalEntityParserCreate(p, context, NULL);
+ if (!child->parser)
+ luaL_error(L, "XML_ParserCreate failed");
+- lua_getref(L, xpu->tableref); /* child uses the same table of its father */
++ lua_rawgeti(L, LUA_REGISTRYINDEX, xpu->tableref); /*lua_getref(L, xpu->tableref); */ /* child uses the same table of its father */
+ child->tableref = luaL_ref(L, LUA_REGISTRYINDEX);
+ lua_pushstring(L, base);
+ lua_pushstring(L, systemId);
+@@ -449,7 +451,7 @@
+ xpu->state = XPSok;
+ xpu->b = &b;
+ lua_settop(L, 2);
+- lua_getref(L, xpu->tableref); /* to be used by handlers */
++ lua_rawgeti(L, LUA_REGISTRYINDEX, xpu->tableref); /*lua_getref(L, xpu->tableref);*/ /* to be used by handlers */
+ status = XML_Parse(xpu->parser, s, (int)len, s == NULL);
+ if (xpu->state == XPSstring) dischargestring(xpu);
+ if (xpu->state == XPSerror) { /* callback error? */
+@@ -517,7 +519,12 @@
+ return 1;
+ }
+
+-static const struct luaL_reg lxp_meths[] = {
++#if !defined LUA_VERSION_NUM
++/* Lua 5.0 */
++#define luaL_Reg luaL_reg
++#endif
++
++static const struct luaL_Reg lxp_meths[] = {
+ {"parse", lxp_parse},
+ {"close", lxp_close},
+ {"__gc", parser_gc},
+@@ -530,7 +537,7 @@
+ {NULL, NULL}
+ };
+
+-static const struct luaL_reg lxp_funcs[] = {
++static const struct luaL_Reg lxp_funcs[] = {
+ {"new", lxp_make_parser},
+ {NULL, NULL}
+ };
+@@ -541,25 +548,48 @@
+ */
+ static void set_info (lua_State *L) {
+ lua_pushliteral (L, "_COPYRIGHT");
+- lua_pushliteral (L, "Copyright (C) 2003-2007 Kepler Project");
++ lua_pushliteral (L, "Copyright (C) 2003-2012 Kepler Project");
+ lua_settable (L, -3);
+ lua_pushliteral (L, "_DESCRIPTION");
+ lua_pushliteral (L, "LuaExpat is a SAX XML parser based on the Expat library");
+ lua_settable (L, -3);
+ lua_pushliteral (L, "_VERSION");
+- lua_pushliteral (L, "LuaExpat 1.2.0");
++ lua_pushliteral (L, "LuaExpat 1.3.0");
+ lua_settable (L, -3);
+ }
+
+
++#if !defined LUA_VERSION_NUM || LUA_VERSION_NUM==501
++/*
++** Adapted from Lua 5.2.0
++*/
++static void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
++ luaL_checkstack(L, nup, "too many upvalues");
++ for (; l->name != NULL; l++) { /* fill the table with given functions */
++ int i;
++ for (i = 0; i < nup; i++) /* copy upvalues to the top */
++ lua_pushvalue(L, -nup);
++ lua_pushstring(L, l->name);
++ lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */
++ lua_settable(L, -(nup + 3));
++ }
++ lua_pop(L, nup); /* remove upvalues */
++}
++#endif
++
++
+ int luaopen_lxp (lua_State *L) {
+- luaL_newmetatable(L, ParserType);
+- lua_pushliteral(L, "__index");
+- lua_pushvalue(L, -2);
+- lua_rawset(L, -3);
+- luaL_openlib (L, NULL, lxp_meths, 0);
+- luaL_openlib (L, "lxp", lxp_funcs, 0);
+- set_info (L);
++ luaL_newmetatable(L, ParserType);
+
+- return 1;
++ lua_pushliteral(L, "__index");
++ lua_pushvalue(L, -2);
++ lua_rawset(L, -3);
++
++ luaL_setfuncs (L, lxp_meths, 0);
++ lua_pop (L, 1); /* remove metatable */
++
++ lua_newtable (L);
++ luaL_setfuncs (L, lxp_funcs, 0);
++ set_info (L);
++ return 1;
+ }
+
diff --git a/lua-expat.spec b/lua-expat.spec
index 80cfb7e..ca3a8d6 100644
--- a/lua-expat.spec
+++ b/lua-expat.spec
@@ -1,16 +1,20 @@
-%define luaver 5.1
+%define luaver 5.2
%define lualibdir %{_libdir}/lua/%{luaver}
%define luapkgdir %{_datadir}/lua/%{luaver}
Name: lua-expat
Version: 1.2.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: SAX XML parser based on the Expat library
Group: Development/Libraries
License: MIT
URL: http://www.keplerproject.org/luaexpat/
Source0: http://matthewwild.co.uk/projects/luaexpat/luaexpat-%{version}.tar.gz
+# http://code.matthewwild.co.uk/lua-expat/rev/e981a82571cf
+Patch0: lua-expat-lua-5.2.patch
+# http://code.matthewwild.co.uk/lua-expat/rev/b2a77ebe7aed
+Patch1: lua-expat-lua-5.2-test-fix.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: lua >= %{luaver}, lua-devel >= %{luaver}
@@ -22,6 +26,8 @@ LuaExpat is a SAX XML parser based on the Expat library.
%prep
%setup -q -n luaexpat-%{version}
+%patch0 -p1 -b .lua-52
+%patch1 -p1 -b .testfix
%build
@@ -54,6 +60,9 @@ rm -rf %{buildroot}
%changelog
+* Fri May 10 2013 Tom Callaway <spot at fedoraproject.org> - 1.2.0-5
+- fix for lua 5.2
+
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.2.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/lua-expat.git/commit/?h=epel7&id=b31b2324442203ed146e79411bbf758d1bce3653
More information about the scm-commits
mailing list