makepkg: provide a field for tracking generic metadata
The xdata field is an array of key=value entries that allow a packager to include arbitrary metadata in the generated .PKGINFO. Fixes #241. Signed-off-by: Dominik Peteler <archlinux+gitlab@with-h.at>
This commit is contained in:
parent
af54cd4ee1
commit
9fca328caf
5 changed files with 70 additions and 2 deletions
|
@ -313,6 +313,15 @@ underscore and the architecture name e.g., 'replaces_x86_64=()'.
|
|||
Enable building packages using link time optimization. Adds '-flto'
|
||||
to both CFLAGS and CXXFLAGS.
|
||||
|
||||
*xdata (array)*::
|
||||
This array allows you to add additional metadata to the package.
|
||||
This data is neither used by pacman nor by makepkg;
|
||||
It has purely informational purpose, or may be interpreted by third-party tools.
|
||||
+
|
||||
All entries in that array must have the form 'key=value', where
|
||||
'key' is an arbitrary non-empty string and 'value' must not contain an equal sign.
|
||||
Furthermore, the key ``pkgtype'' is reserved for the makepkg program.
|
||||
|
||||
|
||||
Packaging Functions
|
||||
-------------------
|
||||
|
|
|
@ -25,6 +25,7 @@ sources = [
|
|||
'source.sh.in',
|
||||
'util.sh.in',
|
||||
'variable.sh.in',
|
||||
'xdata.sh.in',
|
||||
]
|
||||
|
||||
foreach src : sources
|
||||
|
|
58
scripts/libmakepkg/lint_pkgbuild/xdata.sh.in
Normal file
58
scripts/libmakepkg/lint_pkgbuild/xdata.sh.in
Normal file
|
@ -0,0 +1,58 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# xdata.sh - Check the 'xdata' array conforms to requirements.
|
||||
#
|
||||
# Copyright (c) 2014-2025 Pacman Development Team <pacman-dev@lists.archlinux.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
[[ -n "$LIBMAKEPKG_LINT_PKGBUILD_XDATA_SH" ]] && return
|
||||
LIBMAKEPKG_LINT_PKGBUILD_XDATA_SH=1
|
||||
|
||||
MAKEPKG_LIBRARY=${MAKEPKG_LIBRARY:-'@libmakepkgdir@'}
|
||||
|
||||
source "$MAKEPKG_LIBRARY/util/message.sh"
|
||||
source "$MAKEPKG_LIBRARY/util/pkgbuild.sh"
|
||||
|
||||
|
||||
lint_pkgbuild_functions+=('lint_xdata')
|
||||
|
||||
|
||||
lint_xdata() {
|
||||
local xdata_list entry key value ret=0
|
||||
|
||||
get_pkgbuild_all_split_attributes xdata xdata_list
|
||||
|
||||
for entry in "${xdata_list[@]}"; do
|
||||
key="${entry%%=*}"
|
||||
value="${entry##*=}"
|
||||
|
||||
if [[ "${entry}" == "${key}=${value}" ]]; then
|
||||
# Entries must contain exactly one equal sign.
|
||||
error "$(gettext "%s array: Entries must contain exactly one equal sign, e.g. key=value.")" "xdata"
|
||||
ret=1
|
||||
elif [[ "${key}" == '' ]]; then
|
||||
# Do not allow keys without values.
|
||||
error "$(gettext "%s array: The key part of an entry must not be empty.")" "xdata"
|
||||
ret=1
|
||||
elif [[ "${key}" == "pkgtype" ]]; then
|
||||
# The key "pkgtype" is reserved for makepkg.
|
||||
error "$(gettext "%s array: The key 'pkgtype' is reserved for makepkg.")" "xdata"
|
||||
ret=1
|
||||
fi
|
||||
done
|
||||
|
||||
return $ret
|
||||
}
|
|
@ -30,7 +30,7 @@ known_hash_algos=({ck,md5,sha{1,224,256,384,512},b2})
|
|||
|
||||
pkgbuild_schema_arrays=(arch backup checkdepends conflicts depends groups
|
||||
license makedepends noextract optdepends options
|
||||
provides replaces source validpgpkeys
|
||||
provides replaces source validpgpkeys xdata
|
||||
"${known_hash_algos[@]/%/sums}")
|
||||
|
||||
pkgbuild_schema_strings=(changelog epoch install pkgbase pkgdesc pkgrel pkgver
|
||||
|
|
|
@ -493,7 +493,7 @@ write_pkginfo() {
|
|||
|
||||
write_kv_pair "pkgname" "$pkgname"
|
||||
write_kv_pair "pkgbase" "$pkgbase"
|
||||
write_kv_pair "xdata" "pkgtype=$pkgtype"
|
||||
write_kv_pair "xdata" "pkgtype=$pkgtype" "${xdata[@]}"
|
||||
|
||||
local fullver=$(get_full_version)
|
||||
write_kv_pair "pkgver" "$fullver"
|
||||
|
|
Loading…
Add table
Reference in a new issue