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