1
0
forked from lua/lua-macros

4 Commits

Author SHA256 Message Date
Michal Suchanek
227b626ed0 macros.lua: Fix parsing on older SLE releases
Older RPM versions don't like blank lines in lua macros.
2025-11-06 19:15:00 +01:00
521e3b1dc4 fix: convert %lua_provides to pure Lua for better control
Converts the logic within the %lua_provides macro from a
multi-line string of RPM macros to native Lua code. This allows
for more robust conditional logic, especially when checking for
default Lua versions and handling provides/obsoletes.
2025-11-03 01:21:47 +01:00
d1f0f1035b One level down to copy. 2025-10-21 00:38:19 +02:00
60b20c88fb Rewrite %luarocks_install to use a shell script
install-lua-rock.sh, which is packaged as well.
2025-10-21 00:05:32 +02:00
4 changed files with 67 additions and 48 deletions

15
install-lua-rock.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
set -ex
# 1. %{lua_version}
# 2. %{buildroot}%{_prefix}
# 3. %{buildroot}%{luarocks_treedir}/%{mod_name}
SOURCE_DIR="$3"
luarocks --lua-version="$1" --tree="$2" install --deps-mode=none --no-manifest "${*:$#}"
if [ -d "${SOURCE_DIR}" ] && [ "$(find "${SOURCE_DIR}" -type f | wc -l)" -gt 0 ]
then
mkdir -p __rocktree
mv -v "${SOURCE_DIR}"/*/* __rocktree
fi

View File

@@ -1,3 +1,16 @@
-------------------------------------------------------------------
Mon Nov 3 00:20:49 UTC 2025 - Matej Cepl <mcepl@cepl.eu>
- Finally broke %lua_provides to be working. I got stumped by the
craziness of rpm which runs Lua interpreter with locales and
crazy reformatting of integers.
-------------------------------------------------------------------
Mon Oct 20 21:30:36 UTC 2025 - Matej Cepl <mcepl@cepl.eu>
- Rewrite %luarocks_install to use a shell script
install-lua-rock.sh, which is packaged as well.
------------------------------------------------------------------- -------------------------------------------------------------------
Tue Oct 14 23:16:09 UTC 2025 - Matej Cepl <mcepl@cepl.eu> Tue Oct 14 23:16:09 UTC 2025 - Matej Cepl <mcepl@cepl.eu>

View File

@@ -27,6 +27,7 @@ License: MIT
Group: Development/Languages/Other Group: Development/Languages/Other
URL: https://www.lua.org URL: https://www.lua.org
Source0: macros.lua Source0: macros.lua
Source1: install-lua-rock.sh
%if 0%{?suse_version} > 1600 %if 0%{?suse_version} > 1600
Requires: lua-interpreter Requires: lua-interpreter
%elif 0%{?suse_version} >= 1500 %elif 0%{?suse_version} >= 1500
@@ -46,9 +47,11 @@ cp -p %{SOURCE0} .
: :
%install %install
install -Dm644 macros.lua %{buildroot}%{_rpmmacrodir}/macros.lua install -Dm644 %{SOURCE0} %{buildroot}%{_rpmmacrodir}/macros.lua
install -Dm755 %{SOURCE1} %{buildroot}%{_rpmconfigdir}/install-lua-rock.sh
%files %files
%{_rpmmacrodir}/macros.lua %{_rpmmacrodir}/macros.lua
%{_rpmconfigdir}/install-lua-rock.sh
%changelog %changelog

View File

@@ -6,12 +6,12 @@ local f = io.popen("lua -e 'print(_VERSION)'")
local output = f:read("*a") local output = f:read("*a")
f:close() f:close()
local ver = output:match("Lua (%d%.%d)") local ver = output:match("Lua (%d%.%d)")
print(ver:gsub("^%s*(.-)%s*$", "%1")) print(ver)
} }
%lua_version_nodots %{lua: %lua_version_nodots %{lua:
local ver = rpm.expand("%{lua_version}") local ver = rpm.expand("%{lua_version}")
local nodots = ver:gsub("%.", "") local nodots = ver:gsub("%.", "")
print(nodots:gsub("^%s*(.-)%s*$", "%1")) print(nodots)
} }
# compiled modules should go here # compiled modules should go here
%lua_archdir %{lua: %lua_archdir %{lua:
@@ -44,14 +44,14 @@ print(rpm.expand("%{_datadir}/lua/%{lua_version}"))
print(result) print(result)
} }
%lua_version_default %{lua: %lua_version_default %{lua:
local result = 5.4 local result = "5.4"
local ver = rpm.expand("%{?suse_version}") local ver = rpm.expand("%{?suse_version}")
if #ver > 0 then if #ver > 0 then
ver = tonumber(ver) ver = tonumber(ver)
if ver < 1500 then if ver < 1500 then
result = 5.1 result = "5.1"
elseif ver < 1600 then elseif ver < 1600 then
result = 5.3 result = "5.3"
end end
end end
print(result) print(result)
@@ -63,48 +63,39 @@ print(result)
print(nodots) print(nodots)
} }
# Lua default version # Lua default version
# This REQUIRES macro %{mod_name} to be defined. # This REQUIRES macro %%{mod_name} to be defined.
# Optionally you can define macro `lua_provides_type`, which can # -e: Exclude lua prefix
# have two different values: # -n: Specify name
# 'exclude-prefix' which excludes lua prefix, or %lua_provides(en:) %{lua:
# anything else which is used as the provided symbol
%lua_provides %{lua:
local mod_name = rpm.expand("%{?mod_name}") local mod_name = rpm.expand("%{?mod_name}")
if mod_name == "" then if mod_name == "" or mod_name == "%{?mod_name}" then
print("-- Error: %{mod_name} is not defined!") print("-- Error: %%{mod_name} is not defined!")
return return
end end
--
local current_ver = rpm.expand("%{lua_version_nodots}"):gsub("^%s*(.-)%s*$", "%1") local lua_ver_nodots = rpm.expand("%{lua_version_nodots}")
local default_ver = rpm.expand("%{lua_version_default_nodots}"):gsub("^%s*(.-)%s*$", "%1") local lua_ver_default_nodots = rpm.expand("%{lua_version_default_nodots}")
local flavor = rpm.expand("%{flavor}")
local output = "" local version = rpm.expand("%{version}")
local release = rpm.expand("%{release}")
-- Check if we are building for the default Lua version --
if current_ver == default_ver then local provides_name
if rpm.expand("%{-n*}") ~= "" then
local package_type = rpm.expand("%{?lua_provides_type}"):gsub("^%s*(.-)%s*$", "%1") provides_name = rpm.expand("%{-n*}")
local package_name = mod_name elseif rpm.expand("%{-e:1}") == "1" then
provides_name = mod_name
-- Check for type defined externally (e.g., via --define 'lua_provides_type package-name') else
if package_type == "exclude-prefix" then provides_name = "lua-" .. mod_name
-- Use name without "lua-" prefix end
package_name = mod_name --
elseif package_type ~= "" then if lua_ver_nodots == lua_ver_default_nodots then
-- Use custom name defined by package_type print("Provides: " .. provides_name .. " = " .. version .. "-" .. release .. "\\n")
package_name = package_type print("Obsoletes: " .. provides_name .. " < " .. version .. "-" .. release .. "\\n")
else end
-- Default: Use 'lua-' prefix --
package_name = "lua-" .. mod_name if flavor == "luajit" then
end print("Obsoletes: lua51-" .. mod_name .. " <= " .. version .. "-" .. release .. "\\n")
local version = rpm.expand("%{version}")
local release = rpm.expand("%{release}")
output = "Provides: " .. package_name .. " = " .. version .. "-" .. release .. " Obsoletes: " .. package_name .. " < " .. version .. "-" .. release
end end
print(output)
} }
# LuaRocks # LuaRocks
@@ -114,7 +105,4 @@ luarocks --lua-version "%{lua_version}" make --deps-mode none --pack-binary-rock
%luarocks_treedir %{_prefix}/lib/luarocks/rocks-%{lua_version} %luarocks_treedir %{_prefix}/lib/luarocks/rocks-%{lua_version}
%luarocks_install \ %luarocks_install \
/bin/sh -c 'luarocks --lua-version="%{lua_version}" --tree="%{buildroot}%{_prefix}" install --deps-mode=none --no-manifest "$@" && \ %{_rpmconfigdir}/install-lua-rock.sh "%{lua_version}" "%{buildroot}%{_prefix}" "%{buildroot}%{luarocks_treedir}/%{mod_name}"
source_dir="%{buildroot}%{luarocks_treedir}/%{mod_name}/%{rock_version}" && \
[ -d "${source_dir}" ] && [ "$(ls -A "${source_dir}" | wc -l)" -gt 0 ] && \
mv -v "${source_dir}" __rocktree' --