From c22cb56acddf5bc4147f60908d5ebd770a079070 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Thu, 29 Aug 2024 11:09:34 +0000 Subject: automatic import of openEuler-rpm-config --- macros.forge | 283 ----------------------------------------------------------- 1 file changed, 283 deletions(-) delete mode 100644 macros.forge (limited to 'macros.forge') diff --git a/macros.forge b/macros.forge deleted file mode 100644 index 18e9dba..0000000 --- a/macros.forge +++ /dev/null @@ -1,283 +0,0 @@ -# Map forge information to rpm metadata. This macro will compute default spec -# variable values. -# -# The following spec variables SHOULD be set before calling the macro: -# -# forgeurl the project url on the forge, strongly recommended; -# alternatively, use -u -# Version if applicable, set it with Version: -# tag if applicable -# commit if applicable -# date if applicable (to override the mtime of the Source archive) -# -# The macro will attempt to compute and set the following variables if they are -# not already set by the packager: -# -# forgesource an URL that can be used as SourceX: value -# forgesetupargs the correct arguments to pass to %setup for this source -# used by %forgesetup and %forgeautosetup -# archivename the source archive filename, without extentions -# archiveext the source archive filename extensions, without leading dot -# archiveurl the url that can be used to download the source archive, -# without renaming -# scm the scm type, when packaging code snapshots: commits or tags -# -# If the macro is unable to parse your forgeurl value set at least archivename -# and archiveurl before calling it. -# -# Most of the computed variables are both overridable and optional. However, -# the macro WILL REDEFINE %{dist} when packaging a snapshot (commit or tag). -# The previous %{dist} value will be lost. Don’t call the macro if you don’t -# wish %{dist} to be changed. -# -# Optional parameters: -# -u Ignore forgeurl even if it exists and use instead. Note -# that the macro will still end up setting as the forgeurl -# spec variable if it manages to parse it. -# -s Silently ignore problems in forgeurl, use it if it can be parsed, -# ignore it otherwise. -# -p Restore problem handling, override -s. -# -v Be verbose and print every spec variable the macro sets. -# -i Print some info about the state of spec variables the macro may use or -# set at the end of the processing. -%forgemeta(u:spvi) %{lua: -local forgeurl = rpm.expand("%{?-u*}") -if (forgeurl == "") then - forgeurl = rpm.expand("%{?forgeurl}") -end -local silent = false -local verbose = false -local informative = false -if (rpm.expand("%{?-s}") ~= "") then - silent = true -end -if (rpm.expand("%{?-p}") ~= "") then - silent = false -end -if (rpm.expand("%{?-v}") ~= "") then - verbose = true -end -if (rpm.expand("%{?-i}") ~= "") then - informative = true -end -local tag = rpm.expand("%{?tag}") -local commit = rpm.expand("%{?commit}") --- Be explicit about the spec variables we’re setting -local function explicitset(rpmvariable,value) - rpm.define(rpmvariable .. " " .. value) - if verbose then - rpm.expand("%{echo:Setting %%{" .. rpmvariable .. "} = " .. value .. "\\n}") - end -end --- Never ever stomp on a spec variable the packager already set -local function safeset(rpmvariable,value) - if (rpm.expand("%{?" .. rpmvariable .. "}") == "") then - explicitset(rpmvariable,value) - end -end --- Set spec variable values for each known software publishing service -if (forgeurl ~= "") then - local forge = string.match(forgeurl, "^[^:]+://([^/]+)/") - if (forge == nil) then - if not silent then - rpm.expand("%{error:URLs must include a protocol such as https:// and a path starting with / !\\n}") - end - else - if (string.match(forge, "^gitlab[%.-]") or string.match(forge, "[%.-]gitlab[%.]")) then - forgeurl = string.match(forgeurl, "https://[^/]+/[^/]+/[^/#?]+") - if (forgeurl == nil) then - if not silent then - rpm.expand("%{error:Gitlab URLs must match https://(…[-.])gitlab[-.]…/owner/repo !\\n}") - end - else - explicitset("forgeurl", forgeurl) - if (commit == "") then - rpm.expand("%{error:All Gitlab URLs require commit value knowledge: you need to define %{commit}!\\nPlease vote on https://gitlab.com/gitlab-org/gitlab-ce/issues/38830\\n}") - end - safeset("archiveext", "tar.bz2") - safeset("forgesetupargs", "-n %{archivename}") - if (commit ~= "") or (tag ~= "") then - safeset("scm", "git") - end - local owner = string.match(forgeurl, "^[^:]+://[^/]+/([^/]+)") - local repo = string.match(forgeurl, "^[^:]+://[^/]+/[^/]+/([^/]+)") - local version = rpm.expand("%{?version}") - if (version ~= "") and (version ~= "0") and (tag == "") then - -- GitLab does not have strong versionning semantics - -- Some projects use "version" as release tag, others "v" + "version" - -- Tag value needs to be explicitly declared before calling the macro - -- in the second case - tag = version - safeset("tag", tag) - end - if (tag ~= "") then - safeset("archivename", repo .. "-%{tag}-%{commit}") - safeset("archiveurl", "%{forgeurl}/repository/%{tag}/archive.%{archiveext}") - else - safeset("archivename", repo .. "-%{commit}") - safeset("archiveurl", "%{forgeurl}/repository/%{commit}/archive.%{archiveext}") - end - end - end - if (string.match(forge, "^github[%.-]") or string.match(forge, "[%.-]github[%.]")) then - forgeurl = string.match(forgeurl, "https://[^/]+/[^/]+/[^/#?]+") - if (forgeurl == nil) then - if not silent then - rpm.expand("%{error:GitHub URLs must match https://(…[-.])github[-.]…/owner/repo !\\n}") - end - else - explicitset("forgeurl", forgeurl) - safeset("archiveext", "tar.gz") - local forgesetupargs = "-n %{archivename}" - if (commit ~= "") or (tag ~= "") then - safeset("scm", "git") - end - local owner = string.match(forgeurl, "^[^:]+://[^/]+/([^/]+)") - local repo = string.match(forgeurl, "^[^:]+://[^/]+/[^/]+/([^/]+)") - if (tag ~= "") then - -- if upstream used a version suffix such as -rc1 or -beta it will not - -- be a valid version string for rpm but github will accept it fine and - -- use the same naming as for other versions: v prefix in the tag and - -- archivename, no v prefix in the topdir naming inside the archive - local version = rpm.expand("%{?version}") - if version ~= "" and - (string.match(tag, "^v" .. version .. "[^%d]") or - string.match(tag, "^v" .. version .. "$")) then - forgesetupargs = "-n " .. repo .. "-" .. string.gsub(tag, "^v", "") - end - safeset("archivename", repo .. "-%{tag}") - safeset("archiveurl", "%{forgeurl}/archive/%{tag}.%{archiveext}") - else - if (commit ~= "") then - safeset("archivename", repo .. "-%{commit}") - safeset("archiveurl", "%{forgeurl}/archive/%{commit}/" .. repo .. "-%{commit}.%{archiveext}") - else - safeset("archivename", repo .. "-%{version}") - safeset("archiveurl", "%{forgeurl}/archive/v%{version}.%{archiveext}") - end - end - safeset("forgesetupargs", forgesetupargs) - end - end - if (forge == "code.googlesource.com") then - forgeurl = string.match(forgeurl, "https://code.googlesource.com/[^#?]*[^/#?]+") - if (forgeurl == nil) then - if not silent then - rpm.expand("%{error:Googlesource URLs must match https://code.googlesource.com/…/repo !\\n}") - end - else - explicitset("forgeurl", forgeurl) - safeset("archiveext", "tar.gz") - safeset("forgesetupargs", "-c") - if (commit ~= "") or (tag ~= "") then - safeset("scm", "git") - end - local repo = string.match(forgeurl, "^[^:]+://.+/([^/?#]+)") - if (tag ~= "") then - safeset("archivename", repo .. "-%{tag}") - safeset("archiveurl", "%{forgeurl}/+archive/%{tag}.%{archiveext}") - else - if (commit ~= "") then - safeset("archivename", repo .. "-%{commit}") - safeset("archiveurl", "%{forgeurl}/+archive/%{commit}.%{archiveext}") - else - safeset("archivename", repo .. "-v%{version}") - safeset("archiveurl", "%{forgeurl}/+archive/v%{version}.%{archiveext}") - end - end - end - end - if (forge == "bitbucket.org") then - forgeurl = string.match(forgeurl, "https://[^/]+/[^/]+/[^/#?]+") - if (forgeurl == nil) then - if not silent then - rpm.expand("%{error:BitBucket URLs must match https://bitbucket.org/owner/repo !\\n}") - end - else - explicitset("forgeurl", forgeurl) - if (commit == "") then - rpm.expand("%{error:All BitBucket URLs require commit value knowledge: you need to define %{commit}!\\n}") - end - local shortcommit = string.sub(commit, 1, 12) - safeset("archiveext", "tar.bz2") - -- Default to git even though BitBucket allows choosing between several SCMs - -- Set scm to hg for example before calling the macro if your project does not use git - safeset("scm", "git") - local owner = string.match(forgeurl, "^[^:]+://[^/]+/([^/]+)") - local repo = string.match(forgeurl, "^[^:]+://[^/]+/[^/]+/([^/]+)") - safeset("archivename", owner .. "-" .. repo .. "-" .. shortcommit) - safeset("forgesetupargs", "-n %{archivename}") - if (tag ~= "") then - safeset("archiveurl", "%{forgeurl}/get/%{tag}.%{archiveext}") - else - safeset("archiveurl", "%{forgeurl}/get/%{commit}.%{archiveext}") - end - end - end - if (forge == "pagure.io") then - if not silent then - rpm.expand("%{error:https://pagure.io/pagure/issue/861 needs to be resolved before the “pagure.io”\\nsoftware publishing service can be supported.\\n}") - end - end - -- Final tests to check forgeurl was successfuly parsed - if not silent then - if (rpm.expand("%{?archivename}") == "") or (rpm.expand("%{?archiveurl}") == "") then - rpm.expand("%{error:Automation for the “" .. forge .. "”\\nsoftware publishing service is not implemented yet.\\nPlease extend the %%forgemeta macro!\\n}") - end - end - end -end --- Set defaults if forgeurl is missing or does not parse -local archivename = rpm.expand("%{?archivename}") -safeset("archiveext", "tar.gz") -if (archivename ~= "") then - safeset("forgesetupargs", "-n %{archivename}") -end -if (commit ~= "") or (tag ~= "") then - safeset("scm", "git") -end --- Source URL processing (computing the forgesource spec variable) -local archiveurl = rpm.expand("%{?archiveurl}") -local archiveext = rpm.expand("%{?archiveext}") -if (archivename ~= "") and (archiveurl ~= "") then - if (string.match(archiveurl, "/([^/]+)$") == archivename .. "." .. archiveext) then - safeset("forgesource", "%{archiveurl}") - else - safeset("forgesource", "%{?archiveurl}#/%{?archivename}.%{archiveext}") - end -end --- dist processing (computing the correct pefix for snapshots) -local distprefix = rpm.expand("%{?tag}") -local version = rpm.expand("%{?version}") -if (distprefix == version) or (distprefix == "v" .. version) then - distprefix = "" -end -if (distprefix == "") then - distprefix = string.sub(rpm.expand("%{?commit}"), 1, 7) -end -if (distprefix ~= "") then - local dist = ".%{?date}%{!?date:%([ -r %{_sourcedir}/%{archivename}.%{archiveext} ] && date +%Y%m%d -u -r %{_sourcedir}/%{archivename}.%{archiveext})}%{scm}" .. string.gsub(distprefix, "-",".") .. rpm.expand("%{?dist}") - explicitset("dist", dist) -end --- Final spec variable summary if the macro was called with -i -if informative then - rpm.expand("%{echo:Forge-specific packaging variables\\n}") - rpm.expand("%{echo: forgeurl: %{?forgeurl}\\n}") - rpm.expand("%{echo: forgesource: %{?forgesource}\\n}") - rpm.expand("%{echo: forgesetupargs: %{?forgesetupargs}\\n}") - rpm.expand("%{echo:Generic variables\\n}") - rpm.expand("%{echo: archivename: %{?archivename}\\n}") - rpm.expand("%{echo: archiveext: %{?archiveext}\\n}") - rpm.expand("%{echo: archiveurl: %{?archiveurl}\\n}") - rpm.expand("%{echo: scm: %{?scm}\\n}") - rpm.expand("%{echo: tag: %{?tag}\\n}") - rpm.expand("%{echo: commit: %{?commit}\\n}") - rpm.expand("%{echo: dist: %{?dist} (snapshot date is either manually supplied or computed once %%{_sourcedir}/%%{archivename}.%%{archiveext} is available)\\n}") -end -} - -# Convenience macro to relay computed arguments to %setup -%forgesetup(a:b:cDn:Tq) %setup %{?forgesetupargs} %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{-q} - -# Convenience macro to relay computed arguments to %autosetup -%forgeautosetup(a:b:cDn:TvNS:p:) %autosetup %{?forgesetupargs} %{-a} %{-b} %{-c} %{-D} %{-n} %{-T} %{-v} %{-N} %{-S} %{-p} -- cgit v1.2.3