diff options
author | CoprDistGit <infra@openeuler.org> | 2024-08-29 11:09:34 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-08-29 11:09:34 +0000 |
commit | c22cb56acddf5bc4147f60908d5ebd770a079070 (patch) | |
tree | 302eb716e7d6c4b9c514cf5cd9575b5a347fe220 /common.lua | |
parent | b28db8b7389e86a8b2a424f4851ecf7714373516 (diff) |
automatic import of openEuler-rpm-config
Diffstat (limited to 'common.lua')
-rw-r--r-- | common.lua | 294 |
1 files changed, 0 insertions, 294 deletions
diff --git a/common.lua b/common.lua deleted file mode 100644 index 884ee4d..0000000 --- a/common.lua +++ /dev/null @@ -1,294 +0,0 @@ --- Convenience Lua functions that can be used within rpm macros - --- Reads an rpm variable. Unlike a basic rpm.expand("{?foo}"), returns nil if --- the variable is unset, which is convenient in lua tests and enables --- differentiating unset variables from variables set to "" -local function read(rpmvar) - if not rpmvar or - (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then - return nil - else - return rpm.expand("%{?" .. rpmvar .. "}") - end -end - --- Returns true if the macro that called this function had flag set --- – for example, hasflag("z") would give the following results: --- %foo -z bar → true --- %foo -z → true --- %foo → false -local function hasflag(flag) - return (rpm.expand("%{-" .. flag .. "}") ~= "") -end - --- Returns the argument passed to flag in the macro that called this function --- – for example, readflag("z") would give the following results: --- %foo -z bar → bar --- %foo → nil --- %foo -z "" → empty string --- %foo -z '' → empty string -local function readflag(flag) - if not hasflag(flag) then - return nil - else - local a = rpm.expand("%{-" .. flag .. "*}") - -- Handle "" and '' as empty strings - if (a == '""') or (a == "''") then - a = '' - end - return a - end -end - --- Sets a spec variable; echoes the result if verbose -local function explicitset(rpmvar, value, verbose) - local value = value - if (value == nil) or (value == "") then - value = "%{nil}" - end - rpm.define(rpmvar .. " " .. value) - if verbose then - rpm.expand("%{warn:Setting %%{" .. rpmvar .. "} = " .. value .. "}") - end -end - --- Unsets a spec variable if it is defined; echoes the result if verbose -local function explicitunset(rpmvar, verbose) - if (rpm.expand("%{" .. rpmvar .. "}") ~= "%{" .. rpmvar .. "}") then - rpm.define(rpmvar .. " %{nil}") - if verbose then - rpm.expand("%{warn:Unsetting %%{" .. rpmvar .. "}}") - end - end -end - --- Sets a spec variable, if not already set; echoes the result if verbose -local function safeset(rpmvar, value, verbose) - if (rpm.expand("%{" .. rpmvar .. "}") == "%{" .. rpmvar .. "}") then - explicitset(rpmvar,value,verbose) - end -end - --- Aliases a list of rpm variables to the same variables suffixed with 0 (and --- vice versa); echoes the result if verbose -local function zalias(rpmvars, verbose) - for _, sfx in ipairs({{"","0"},{"0",""}}) do - for _, rpmvar in ipairs(rpmvars) do - local toalias = "%{?" .. rpmvar .. sfx[1] .. "}" - if (rpm.expand(toalias) ~= "") then - safeset(rpmvar .. sfx[2], toalias, verbose) - end - end - end -end - --- Takes a list of rpm variable roots and a suffix and alias current<root> to --- <root><suffix> if it resolves to something not empty -local function setcurrent(rpmvars, suffix, verbose) - for _, rpmvar in ipairs(rpmvars) do - if (rpm.expand("%{?" .. rpmvar .. suffix .. "}") ~= "") then - explicitset( "current" .. rpmvar, "%{" .. rpmvar .. suffix .. "}", verbose) - else - explicitunset("current" .. rpmvar, verbose) - end - end -end - --- Echo the list of rpm variables, with suffix, if set -local function echovars(rpmvars, suffix) - for _, rpmvar in ipairs(rpmvars) do - rpmvar = rpmvar .. suffix - local header = string.sub(" " .. rpmvar .. ": ",1,21) - rpm.expand("%{?" .. rpmvar .. ":%{echo:" .. header .. "%{?" .. rpmvar .. "}}}") - end -end - --- Returns an array, indexed by suffix, containing the non-empy values of --- <rpmvar><suffix>, with suffix an integer string or the empty string -local function getsuffixed(rpmvar) - local suffixes = {} - zalias({rpmvar}) - for suffix=0,9999 do - local value = rpm.expand("%{?" .. rpmvar .. suffix .. "}") - if (value ~= "") then - suffixes[tostring(suffix)] = value - end - end - -- rpm convention is to alias no suffix to zero suffix - -- only add no suffix if zero suffix is different - local value = rpm.expand("%{?" .. rpmvar .. "}") - if (value ~= "") and (value ~= suffixes["0"]) then - suffixes[""] = value - end - return suffixes -end - --- Returns the list of suffixes, including the empty string, for which --- <rpmvar><suffix> is set to a non empty value -local function getsuffixes(rpmvar) - suffixes = {} - for suffix in pairs(getsuffixed(rpmvar)) do - table.insert(suffixes,suffix) - end - table.sort(suffixes, - function(a,b) return (tonumber(a) or 0) < (tonumber(b) or 0) end) - return suffixes -end - --- Returns the suffix for which <rpmvar><suffix> has a non-empty value that --- matches best the beginning of the value string -local function getbestsuffix(rpmvar, value) - local best = nil - local currentmatch = "" - for suffix, setvalue in pairs(getsuffixed(rpmvar)) do - if (string.len(setvalue) > string.len(currentmatch)) and - (string.find(value, "^" .. setvalue)) then - currentmatch = setvalue - best = suffix - end - end - return best -end - --- %writevars core -local function writevars(macrofile, rpmvars) - for _, rpmvar in ipairs(rpmvars) do - print("sed -i 's\029" .. string.upper("@@" .. rpmvar .. "@@") .. - "\029" .. rpm.expand( "%{" .. rpmvar .. "}" ) .. - "\029g' " .. macrofile .. "\n") - end -end - --- https://github.com/rpm-software-management/rpm/issues/566 --- Reformat a text intended to be used used in a package description, removing --- rpm macro generation artefacts. --- – remove leading and ending empty lines --- – trim intermediary empty lines to a single line --- – fold on spaces --- Should really be a %%{wordwrap:…} verb -local function wordwrap(text) - text = rpm.expand(text .. "\n") - text = string.gsub(text, "\t", " ") - text = string.gsub(text, "\r", "\n") - text = string.gsub(text, " +\n", "\n") - text = string.gsub(text, "\n+\n", "\n\n") - text = string.gsub(text, "^\n", "") - text = string.gsub(text, "\n( *)[-*—][ ]+", "\n%1– ") - output = "" - for line in string.gmatch(text, "[^\n]*\n") do - local pos = 0 - local advance = "" - for word in string.gmatch(line, "%s*[^%s]*\n?") do - local wl, bad = utf8.len(word) - if not wl then - print("%{warn:Invalid UTF-8 sequence detected in:}" .. - "%{warn:" .. word .. "}" .. - "%{warn:It may produce unexpected results.}") - wl = bad - end - if (pos == 0) then - advance, n = string.gsub(word, "^(%s*– ).*", "%1") - if (n == 0) then - advance = string.gsub(word, "^(%s*).*", "%1") - end - advance = string.gsub(advance, "– ", " ") - pos = pos + wl - elseif (pos + wl < 81) or - ((pos + wl == 81) and string.match(word, "\n$")) then - pos = pos + wl - else - word = advance .. string.gsub(word, "^%s*", "") - output = output .. "\n" - pos = utf8.len(word) - end - output = output .. word - if pos > 80 then - pos = 0 - if not string.match(word, "\n$") then - output = output .. "\n" - end - end - end - end - output = string.gsub(output, "\n*$", "\n") - return output -end - --- Because rpmbuild will fail if a subpackage is declared before the source --- package itself, provide a source package declaration shell as fallback. -local function srcpkg(verbose) - if verbose then - rpm.expand([[ -%{echo:Creating a header for the SRPM from %%{source_name}, %%{source_summary} and} -%{echo:%%{source_description}. If that is not the intended result, please declare the} -%{echo:SRPM header and set %%{source_name} in your spec file before calling a macro} -%{echo:that creates other package headers.} -]]) - end - print(rpm.expand([[ -Name: %{source_name} -Summary: %{source_summary} -%description -%wordwrap -v source_description -]])) - explicitset("currentname", "%{source_name}", verbose) -end - --- %new_package core -local function new_package(source_name, pkg_name, name_suffix, first, verbose) - -- Safety net when the wrapper is used in conjunction with traditional syntax - if (not first) and (not source_name) then - rpm.expand([[ -%{warn:Something already set a package name. However, %%{source_name} is not set.} -%{warn:Please set %%{source_name} to the SRPM name to ensure reliable processing.} -]]) - if name_suffix then - print(rpm.expand("%package " .. name_suffix)) - else - print(rpm.expand("%package -n " .. pkg_name)) - end - return - end - -- New processing - if not (pkg_name or name_suffix or source_name) then - rpm.expand([[ -%{error:You need to set %%{source_name} or provide explicit package naming!} -]]) - end - if name_suffix then - print(rpm.expand("%package " .. name_suffix)) - explicitset("currentname", "%{source_name}-" .. name_suffix, verbose) - else - if not source_name then - source_name = pkg_name - end - if (pkg_name == source_name) then - safeset("source_name", source_name, verbose) - print(rpm.expand("Name: %{source_name}")) - else - if source_name and first then - srcpkg(verbose) - end - print(rpm.expand("%package -n " .. pkg_name)) - end - explicitset("currentname", pkg_name, verbose) - end -end - -return { - read = read, - hasflag = hasflag, - readflag = readflag, - explicitset = explicitset, - explicitunset = explicitunset, - safeset = safeset, - zalias = zalias, - setcurrent = setcurrent, - echovars = echovars, - getsuffixed = getsuffixed, - getsuffixes = getsuffixes, - getbestsuffix = getbestsuffix, - writevars = writevars, - wordwrap = wordwrap, - new_package = new_package, -} |