SHA256
1
0
forked from pool/python-lupa

Compare commits

4 Commits

Author SHA256 Message Date
0adad007b0 Accepting request 1296221 from devel:languages:python
- Update to 2.5:
  * Lua uses dlopen() again, which was lost in Lupa 2.3.
  * Built with Cython 3.1.2.
  * Failures in the test suite didn't set a non-zero process exit value.
  * Removed support for Python 2.x.
  * Built with Cython 3.0.11.
  * A new method LuaRuntime.gccollect() was added to trigger the Lua garbage
    collector.
  * A new context manager LuaRuntime.nogc() was added to temporarily disable
    the Lua garbage collector.
  * The table_from() method gained a new keyword argument recursive=False.
  * The LuaRuntime methods "eval", "execute" and "compile" gained new keyword
    options mode and name that allow constraining the input type and
    modifying the (chunk) name shown in error messages, following similar
    arguments in the Lua load() function.
  * Loading Lua modules did not work for the version specific Lua modules
    introduced in Lupa 2.0. It turned out that it can only be enabled for one
    of them in a given Python run, so it is now left to users to enable it
    explicitly at need.
  * Built with Cython 3.0.9 for improved support of Python 3.12/13.
- Drop patches, included upstream:
  * no-bundle.patch
  * noexcept.patch

OBS-URL: https://build.opensuse.org/request/show/1296221
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-lupa?expand=0&rev=19
2025-07-30 09:44:20 +00:00
dcd86df3e2 - Update to 2.5:
* Lua uses dlopen() again, which was lost in Lupa 2.3.
  * Built with Cython 3.1.2.
  * Failures in the test suite didn't set a non-zero process exit value.
  * Removed support for Python 2.x.
  * Built with Cython 3.0.11.
  * A new method LuaRuntime.gccollect() was added to trigger the Lua garbage
    collector.
  * A new context manager LuaRuntime.nogc() was added to temporarily disable
    the Lua garbage collector.
  * The table_from() method gained a new keyword argument recursive=False.
  * The LuaRuntime methods "eval", "execute" and "compile" gained new keyword
    options mode and name that allow constraining the input type and
    modifying the (chunk) name shown in error messages, following similar
    arguments in the Lua load() function.
  * Loading Lua modules did not work for the version specific Lua modules
    introduced in Lupa 2.0. It turned out that it can only be enabled for one
    of them in a given Python run, so it is now left to users to enable it
    explicitly at need.
  * Built with Cython 3.0.9 for improved support of Python 3.12/13.
- Drop patches, included upstream:
  * no-bundle.patch
  * noexcept.patch

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-lupa?expand=0&rev=34
2025-07-22 02:57:05 +00:00
a9a39d7e96 Accepting request 1281777 from devel:languages:python
- Convert to pip-based build

OBS-URL: https://build.opensuse.org/request/show/1281777
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-lupa?expand=0&rev=18
2025-06-02 20:00:25 +00:00
23d0b26aec - Convert to pip-based build
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-lupa?expand=0&rev=32
2025-06-02 07:59:05 +00:00
6 changed files with 43 additions and 451 deletions

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ad3fef486be7adddd349fe9a9c393789061312cf98ebc533b489be34f484cb79
size 6278066

3
lupa-2.5.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:69c6a89f2b7b08a3040d7ed2a1eeccba37a31ddc92fa199339c53a2ae3c48c34
size 7235982

View File

@@ -1,19 +0,0 @@
Index: lupa-2.0/setup.py
===================================================================
--- lupa-2.0.orig/setup.py
+++ lupa-2.0/setup.py
@@ -365,10 +365,11 @@ if not configs and not option_no_bundle:
or (get_machine() != "x86_64" and 'luajit' in os.path.basename(lua_bundle_path.rstrip(os.sep)))
)
]
-if not configs and not option_use_bundle:
- configs = find_lua_build(no_luajit=option_no_luajit)
if not configs:
- configs = no_lua_error()
+ configs = [
+ (find_lua_build(no_luajit=option_no_luajit) if not option_use_bundle else {})
+ or no_lua_error()
+ ]
# check if Cython is installed, and use it if requested or necessary

View File

@@ -1,418 +0,0 @@
Index: lupa-2.0/lupa/_lupa.pyx
===================================================================
--- lupa-2.0.orig/lupa/_lupa.pyx
+++ lupa-2.0/lupa/_lupa.pyx
@@ -685,7 +685,7 @@ cdef int check_lua_stack(lua_State* L, i
return 0
-cdef int get_object_length_from_lua(lua_State* L) nogil:
+cdef int get_object_length_from_lua(lua_State* L) noexcept nogil:
cdef size_t length = lua.lua_objlen(L, lua.lua_upvalueindex(1))
lua.lua_pushlightuserdata(L, <void*>length)
return 1
@@ -789,10 +789,10 @@ cdef tuple _fix_args_kwargs(tuple args):
################################################################################
# fast, re-entrant runtime locking
-cdef inline bint lock_runtime(LuaRuntime runtime) with gil:
+cdef inline bint lock_runtime(LuaRuntime runtime) noexcept with gil:
return lock_lock(runtime._lock, pythread.PyThread_get_thread_ident(), True)
-cdef inline void unlock_runtime(LuaRuntime runtime) nogil:
+cdef inline void unlock_runtime(LuaRuntime runtime) noexcept nogil:
unlock_lock(runtime._lock)
@@ -967,7 +967,7 @@ cdef _LuaObject new_lua_object(LuaRuntim
init_lua_object(obj, runtime, L, n)
return obj
-cdef void init_lua_object(_LuaObject obj, LuaRuntime runtime, lua_State* L, int n):
+cdef void init_lua_object(_LuaObject obj, LuaRuntime runtime, lua_State* L, int n) noexcept:
obj._runtime = runtime
obj._state = L
lua.lua_pushvalue(L, n)
@@ -1353,7 +1353,7 @@ cdef class _LuaIter:
# type conversions and protocol adaptations
-cdef int py_asfunc_call(lua_State *L) nogil:
+cdef int py_asfunc_call(lua_State *L) noexcept nogil:
if (lua.lua_gettop(L) == 1 and lua.lua_islightuserdata(L, 1)
and lua.lua_topointer(L, 1) == <void*>unpack_wrapped_pyfunction):
# special case: unpack_python_argument_or_jump() calls this to find out the Python object
@@ -1363,7 +1363,7 @@ cdef int py_asfunc_call(lua_State *L) no
lua.lua_insert(L, 1)
return py_object_call(L)
-cdef py_object* unpack_wrapped_pyfunction(lua_State* L, int n) nogil:
+cdef py_object* unpack_wrapped_pyfunction(lua_State* L, int n) noexcept nogil:
cdef lua.lua_CFunction cfunction = lua.lua_tocfunction(L, n)
if cfunction is <lua.lua_CFunction>py_asfunc_call:
lua.lua_pushvalue(L, n)
@@ -1458,7 +1458,7 @@ cdef object py_from_lua(LuaRuntime runti
return new_lua_function(runtime, L, n)
return new_lua_object(runtime, L, n)
-cdef py_object* unpack_userdata(lua_State *L, int n) nogil:
+cdef py_object* unpack_userdata(lua_State *L, int n) noexcept nogil:
"""
Like luaL_checkudata(), unpacks a userdata object and validates that
it's a wrapped Python object. Returns NULL on failure.
@@ -1627,7 +1627,7 @@ cdef bint py_to_lua_custom(LuaRuntime ru
return 1 # values pushed
-cdef inline int _isascii(unsigned char* s):
+cdef inline int _isascii(unsigned char* s) noexcept:
cdef unsigned char c = 0
while s[0]:
c |= s[0]
@@ -1663,7 +1663,7 @@ cdef int raise_lua_error(LuaRuntime runt
raise LuaError(error_message)
-cdef bint _looks_like_traceback_line(unicode line):
+cdef bint _looks_like_traceback_line(unicode line) except -1:
# Lua tracebacks look like this (using tabs as indentation):
# stack traceback:
# [C]: in function 'error'
@@ -1825,7 +1825,7 @@ cdef tuple unpack_multiple_lua_results(L
# bounded memory allocation
-cdef void* _lua_alloc_restricted(void* ud, void* ptr, size_t old_size, size_t new_size) nogil:
+cdef void* _lua_alloc_restricted(void* ud, void* ptr, size_t old_size, size_t new_size) noexcept nogil:
# adapted from https://stackoverflow.com/a/9672205
# print(<size_t>ud, <size_t>ptr, old_size, new_size)
cdef MemoryStatus* memory_status = <MemoryStatus*>ud
@@ -1855,7 +1855,7 @@ cdef void* _lua_alloc_restricted(void* u
memory_status.used += new_size - old_size
return new_ptr
-cdef int _lua_panic(lua_State *L) nogil:
+cdef int _lua_panic(lua_State *L) noexcept nogil:
cdef const char* msg = lua.lua_tostring(L, -1)
if msg == NULL:
msg = "error object is not a string"
@@ -1896,7 +1896,7 @@ cdef class _PyReference:
cdef int _ref
-cdef int py_object_gc_with_gil(py_object *py_obj, lua_State* L) with gil:
+cdef int py_object_gc_with_gil(py_object *py_obj, lua_State* L) noexcept with gil:
cdef _PyReference pyref
# originally, we just used:
#cpython.ref.Py_XDECREF(py_obj.obj)
@@ -1917,7 +1917,7 @@ cdef int py_object_gc_with_gil(py_object
finally:
py_obj.obj = NULL
-cdef int py_object_gc(lua_State* L) nogil:
+cdef int py_object_gc(lua_State* L) noexcept nogil:
if not lua.lua_isuserdata(L, 1):
return 0
py_obj = unpack_userdata(L, 1)
@@ -1968,7 +1968,7 @@ cdef bint call_python(LuaRuntime runtime
return py_function_result_to_lua(runtime, L, result)
-cdef int py_call_with_gil(lua_State* L, py_object *py_obj) with gil:
+cdef int py_call_with_gil(lua_State* L, py_object *py_obj) noexcept with gil:
cdef LuaRuntime runtime = None
cdef lua_State* stored_state = NULL
@@ -1985,7 +1985,7 @@ cdef int py_call_with_gil(lua_State* L,
if stored_state is not NULL:
runtime._state = stored_state
-cdef int py_object_call(lua_State* L) nogil:
+cdef int py_object_call(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_python_argument_or_jump(L, 1) # may not return on error!
result = py_call_with_gil(L, py_obj)
if result < 0:
@@ -1994,7 +1994,7 @@ cdef int py_object_call(lua_State* L) no
# str() support for Python objects
-cdef int py_str_with_gil(lua_State* L, py_object* py_obj) with gil:
+cdef int py_str_with_gil(lua_State* L, py_object* py_obj) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_obj.runtime
@@ -2012,7 +2012,7 @@ cdef int py_str_with_gil(lua_State* L, p
try: runtime.store_raised_exception(L, b'error during Python str() call')
finally: return -1
-cdef int py_object_str(lua_State* L) nogil:
+cdef int py_object_str(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_python_argument_or_jump(L, 1) # may not return on error!
result = py_str_with_gil(L, py_obj)
if result < 0:
@@ -2072,7 +2072,7 @@ cdef int setattr_for_lua(LuaRuntime runt
return 0
-cdef int py_object_getindex_with_gil(lua_State* L, py_object* py_obj) with gil:
+cdef int py_object_getindex_with_gil(lua_State* L, py_object* py_obj) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_obj.runtime
@@ -2084,7 +2084,7 @@ cdef int py_object_getindex_with_gil(lua
try: runtime.store_raised_exception(L, b'error reading Python attribute/item')
finally: return -1
-cdef int py_object_getindex(lua_State* L) nogil:
+cdef int py_object_getindex(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_python_argument_or_jump(L, 1) # may not return on error!
result = py_object_getindex_with_gil(L, py_obj)
if result < 0:
@@ -2092,7 +2092,7 @@ cdef int py_object_getindex(lua_State* L
return result
-cdef int py_object_setindex_with_gil(lua_State* L, py_object* py_obj) with gil:
+cdef int py_object_setindex_with_gil(lua_State* L, py_object* py_obj) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_obj.runtime
@@ -2104,7 +2104,7 @@ cdef int py_object_setindex_with_gil(lua
try: runtime.store_raised_exception(L, b'error writing Python attribute/item')
finally: return -1
-cdef int py_object_setindex(lua_State* L) nogil:
+cdef int py_object_setindex(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_python_argument_or_jump(L, 1) # may not return on error!
result = py_object_setindex_with_gil(L, py_obj)
if result < 0:
@@ -2124,12 +2124,12 @@ cdef lua.luaL_Reg *py_object_lib = [
## # Python helper functions for Lua
-cdef inline py_object* unpack_single_python_argument_or_jump(lua_State* L) nogil:
+cdef inline py_object* unpack_single_python_argument_or_jump(lua_State* L) noexcept nogil:
if lua.lua_gettop(L) > 1:
lua.luaL_argerror(L, 2, "invalid arguments") # never returns!
return unpack_python_argument_or_jump(L, 1)
-cdef inline py_object* unpack_python_argument_or_jump(lua_State* L, int n) nogil:
+cdef inline py_object* unpack_python_argument_or_jump(lua_State* L, int n) noexcept nogil:
cdef py_object* py_obj
if lua.lua_isuserdata(L, n):
@@ -2144,7 +2144,7 @@ cdef inline py_object* unpack_python_arg
return py_obj
-cdef int py_wrap_object_protocol_with_gil(lua_State* L, py_object* py_obj, int type_flags) with gil:
+cdef int py_wrap_object_protocol_with_gil(lua_State* L, py_object* py_obj, int type_flags) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_obj.runtime
@@ -2153,41 +2153,41 @@ cdef int py_wrap_object_protocol_with_gi
try: runtime.store_raised_exception(L, b'error during type adaptation')
finally: return -1
-cdef int py_wrap_object_protocol(lua_State* L, int type_flags) nogil:
+cdef int py_wrap_object_protocol(lua_State* L, int type_flags) noexcept nogil:
cdef py_object* py_obj = unpack_single_python_argument_or_jump(L) # never returns on error!
result = py_wrap_object_protocol_with_gil(L, py_obj, type_flags)
if result < 0:
return lua.lua_error(L) # never returns!
return result
-cdef int py_as_attrgetter(lua_State* L) nogil:
+cdef int py_as_attrgetter(lua_State* L) noexcept nogil:
return py_wrap_object_protocol(L, 0)
-cdef int py_as_itemgetter(lua_State* L) nogil:
+cdef int py_as_itemgetter(lua_State* L) noexcept nogil:
return py_wrap_object_protocol(L, OBJ_AS_INDEX)
-cdef int py_as_function(lua_State* L) nogil:
+cdef int py_as_function(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_single_python_argument_or_jump(L) # never returns on error!
lua.lua_pushcclosure(L, <lua.lua_CFunction>py_asfunc_call, 1)
return 1
# iteration support for Python objects in Lua
-cdef int py_iter(lua_State* L) nogil:
+cdef int py_iter(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_single_python_argument_or_jump(L) # never returns on error!
result = py_iter_with_gil(L, py_obj, 0)
if result < 0:
return lua.lua_error(L) # never returns!
return result
-cdef int py_iterex(lua_State* L) nogil:
+cdef int py_iterex(lua_State* L) noexcept nogil:
cdef py_object* py_obj = unpack_single_python_argument_or_jump(L) # never returns on error!
result = py_iter_with_gil(L, py_obj, OBJ_UNPACK_TUPLE)
if result < 0:
return lua.lua_error(L) # never returns!
return result
-cdef int convert_to_lua_Integer(lua_State* L, int idx, lua.lua_Integer* integer) nogil:
+cdef int convert_to_lua_Integer(lua_State* L, int idx, lua.lua_Integer* integer) noexcept nogil:
cdef int isnum
cdef lua.lua_Integer temp
temp = lua.lua_tointegerx(L, idx, &isnum)
@@ -2198,7 +2198,7 @@ cdef int convert_to_lua_Integer(lua_Stat
lua.lua_pushfstring(L, "Could not convert %s to string", lua.luaL_typename(L, idx))
return -1
-cdef int py_enumerate(lua_State* L) nogil:
+cdef int py_enumerate(lua_State* L) noexcept nogil:
if lua.lua_gettop(L) > 2:
lua.luaL_argerror(L, 3, "invalid arguments") # never returns!
cdef py_object* py_obj = unpack_python_argument_or_jump(L, 1)
@@ -2214,7 +2214,7 @@ cdef int py_enumerate(lua_State* L) nogi
return result
-cdef int py_enumerate_with_gil(lua_State* L, py_object* py_obj, lua.lua_Integer start) with gil:
+cdef int py_enumerate_with_gil(lua_State* L, py_object* py_obj, lua.lua_Integer start) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_obj.runtime
@@ -2224,7 +2224,7 @@ cdef int py_enumerate_with_gil(lua_State
try: runtime.store_raised_exception(L, b'error creating an iterator with enumerate()')
finally: return -1
-cdef int py_iter_with_gil(lua_State* L, py_object* py_obj, int type_flags) with gil:
+cdef int py_iter_with_gil(lua_State* L, py_object* py_obj, int type_flags) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_obj.runtime
@@ -2257,7 +2257,7 @@ cdef int py_push_iterator(LuaRuntime run
lua.lua_pushnil(L)
return 3
-cdef int py_iter_next(lua_State* L) nogil:
+cdef int py_iter_next(lua_State* L) noexcept nogil:
# first value in the C closure: the Python iterator object
cdef py_object* py_obj = unpack_python_argument_or_jump(L, 1) # may not return on error!
result = py_iter_next_with_gil(L, py_obj)
@@ -2265,7 +2265,7 @@ cdef int py_iter_next(lua_State* L) nogi
return lua.lua_error(L) # never returns!
return result
-cdef int py_iter_next_with_gil(lua_State* L, py_object* py_iter) with gil:
+cdef int py_iter_next_with_gil(lua_State* L, py_object* py_iter) noexcept with gil:
cdef LuaRuntime runtime
try:
runtime = <LuaRuntime?>py_iter.runtime
@@ -2302,7 +2302,7 @@ cdef class _PyArguments:
cdef tuple args
cdef dict kwargs
-cdef int py_args_with_gil(PyObject* runtime_obj, lua_State* L) with gil:
+cdef int py_args_with_gil(PyObject* runtime_obj, lua_State* L) noexcept with gil:
cdef _PyArguments pyargs
cdef LuaRuntime runtime
try:
@@ -2314,7 +2314,7 @@ cdef int py_args_with_gil(PyObject* runt
try: runtime.store_raised_exception(L, b'error while calling python.args()')
finally: return -1
-cdef int py_args(lua_State* L) nogil:
+cdef int py_args(lua_State* L) noexcept nogil:
cdef PyObject* runtime
runtime = <PyObject*>lua.lua_touserdata(L, lua.lua_upvalueindex(1))
if not runtime:
@@ -2327,7 +2327,7 @@ cdef int py_args(lua_State* L) nogil:
# overflow handler setter
-cdef int py_set_overflow_handler(lua_State* L) nogil:
+cdef int py_set_overflow_handler(lua_State* L) noexcept nogil:
if (not lua.lua_isnil(L, 1)
and not lua.lua_isfunction(L, 1)
and not unpack_python_argument_or_jump(L, 1)):
@@ -2352,7 +2352,7 @@ cdef lua.luaL_Reg *py_lib = [
# Setup helpers for library tables (removed from C-API in Lua 5.3).
-cdef void luaL_setfuncs(lua_State *L, const lua.luaL_Reg *l, int nup):
+cdef void luaL_setfuncs(lua_State *L, const lua.luaL_Reg *l, int nup) noexcept:
cdef int i
lua.luaL_checkstack(L, nup, "too many upvalues")
while l.name != NULL:
@@ -2364,7 +2364,7 @@ cdef void luaL_setfuncs(lua_State *L, co
lua.lua_pop(L, nup)
-cdef int libsize(const lua.luaL_Reg *l):
+cdef int libsize(const lua.luaL_Reg *l) noexcept:
cdef int size = 0
while l and l.name:
l += 1
@@ -2373,7 +2373,7 @@ cdef int libsize(const lua.luaL_Reg *l):
cdef const char *luaL_findtable(lua_State *L, int idx,
- const char *fname, int size_hint):
+ const char *fname, int size_hint) noexcept:
cdef const char *end
if idx:
lua.lua_pushvalue(L, idx)
@@ -2400,7 +2400,7 @@ cdef const char *luaL_findtable(lua_Stat
return NULL
-cdef void luaL_pushmodule(lua_State *L, const char *modname, int size_hint):
+cdef void luaL_pushmodule(lua_State *L, const char *modname, int size_hint) noexcept:
# XXX: "_LOADED" is the value of LUA_LOADED_TABLE,
# but it's absent in lua51
luaL_findtable(L, lua.LUA_REGISTRYINDEX, "_LOADED", 1)
@@ -2416,7 +2416,7 @@ cdef void luaL_pushmodule(lua_State *L,
cdef void luaL_openlib(lua_State *L, const char *libname,
- const lua.luaL_Reg *l, int nup):
+ const lua.luaL_Reg *l, int nup) noexcept:
if libname:
luaL_pushmodule(L, libname, libsize(l))
lua.lua_insert(L, -(nup + 1))
@@ -2427,7 +2427,7 @@ cdef void luaL_openlib(lua_State *L, con
# internal Lua functions meant to be called in protected mode
-cdef int get_from_lua_table(lua_State* L) nogil:
+cdef int get_from_lua_table(lua_State* L) noexcept nogil:
"""Equivalent to the following Lua function:
function(t, k) return t[k] end
"""
Index: lupa-2.0/lupa/lock.pxi
===================================================================
--- lupa-2.0.orig/lupa/lock.pxi
+++ lupa-2.0/lupa/lock.pxi
@@ -71,7 +71,7 @@ cdef class FastRLock:
return self._count > 0 and self._owner == pythread.PyThread_get_thread_ident()
-cdef inline bint lock_lock(FastRLock lock, pythread_t current_thread, bint blocking) nogil:
+cdef inline bint lock_lock(FastRLock lock, pythread_t current_thread, bint blocking) noexcept nogil:
# Note that this function *must* hold the GIL when being called.
# We just use 'nogil' in the signature to make sure that no Python
# code execution slips in that might free the GIL
@@ -91,7 +91,7 @@ cdef inline bint lock_lock(FastRLock loc
lock, current_thread,
pythread.WAIT_LOCK if blocking else pythread.NOWAIT_LOCK)
-cdef bint _acquire_lock(FastRLock lock, pythread_t current_thread, int wait) nogil:
+cdef bint _acquire_lock(FastRLock lock, pythread_t current_thread, int wait) noexcept nogil:
# Note that this function *must* hold the GIL when being called.
# We just use 'nogil' in the signature to make sure that no Python
# code execution slips in that might free the GIL
@@ -119,7 +119,7 @@ cdef bint _acquire_lock(FastRLock lock,
lock._count = 1
return 1
-cdef inline void unlock_lock(FastRLock lock) nogil:
+cdef inline void unlock_lock(FastRLock lock) noexcept nogil:
# Note that this function *must* hold the GIL when being called.
# We just use 'nogil' in the signature to make sure that no Python
# code execution slips in that might free the GIL

View File

@@ -1,3 +1,35 @@
-------------------------------------------------------------------
Tue Jul 22 02:56:37 UTC 2025 - Steve Kowalik <steven.kowalik@suse.com>
- Update to 2.5:
* Lua uses dlopen() again, which was lost in Lupa 2.3.
* Built with Cython 3.1.2.
* Failures in the test suite didn't set a non-zero process exit value.
* Removed support for Python 2.x.
* Built with Cython 3.0.11.
* A new method LuaRuntime.gccollect() was added to trigger the Lua garbage
collector.
* A new context manager LuaRuntime.nogc() was added to temporarily disable
the Lua garbage collector.
* The table_from() method gained a new keyword argument recursive=False.
* The LuaRuntime methods "eval", "execute" and "compile" gained new keyword
options mode and name that allow constraining the input type and
modifying the (chunk) name shown in error messages, following similar
arguments in the Lua load() function.
* Loading Lua modules did not work for the version specific Lua modules
introduced in Lupa 2.0. It turned out that it can only be enabled for one
of them in a given Python run, so it is now left to users to enable it
explicitly at need.
* Built with Cython 3.0.9 for improved support of Python 3.12/13.
- Drop patches, included upstream:
* no-bundle.patch
* noexcept.patch
-------------------------------------------------------------------
Mon Jun 2 07:58:20 UTC 2025 - Markéta Machová <mmachova@suse.com>
- Convert to pip-based build
-------------------------------------------------------------------
Tue Oct 17 10:12:44 UTC 2023 - Daniel Garcia Moreno <daniel.garcia@suse.com>

View File

@@ -1,7 +1,7 @@
#
# spec file for package python-lupa
#
# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,31 +18,28 @@
%{?sle15_python_module_pythons}
Name: python-lupa
Version: 2.0
Version: 2.5
Release: 0
Summary: Python wrapper around Lua and LuaJIT
License: MIT
Group: Development/Languages/Python
URL: https://github.com/scoder/lupa
Source: https://files.pythonhosted.org/packages/source/l/lupa/lupa-%{version}.tar.gz
# PATCH-FIX-UPSTREAM no-bundle.patch gh#scoder/lupa@19279acda1ad
Patch1: no-bundle.patch
# PATCH-FIX-UPSTREAM noexcept.patch gh#scoder/lupa@fc0a1af99b74
Patch2: noexcept.patch
BuildRequires: %{python_module Cython}
BuildRequires: %{python_module devel}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: pkgconfig(lua)
Suggests: lua
%if 0%{suse_version} >= 1550 || 0%{?sle_version} >= 150400
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
Recommends: luajit
# Synchronized with archs where luajit is build
%ifnarch riscv64 ppc64 ppc64le s390x
BuildRequires: pkgconfig(luajit)
%endif
Recommends: luajit
# /suse_version
%endif
%python_subpackages
@@ -57,10 +54,10 @@ rm -rf third-party/
%build
export CFLAGS="-fno-strict-aliasing %{optflags}"
%python_build
%pyproject_wheel
%install
%python_install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitearch}
%check