[pacman-dev] [RFC] Make PKGBUILD attributes configurable
Dustin Falgout
dustin at falgout.us
Sun Apr 23 01:00:55 UTC 2017
Here is a basic POC for what I had in mind. Please let me know what you think.
>From e7f9293f42d8d069b7a57165b25e79e248abd680 Mon Sep 17 00:00:00 2001
From: Dustin Falgout <dustin at falgout.us>
Date: Sat, 22 Apr 2017 19:54:51 -0500
Subject: [PATCH] [POC] makepkg :: Configurable pkgbuild attributes
Signed-off-by: Dustin Falgout <dustin at falgout.us>
---
scripts/libmakepkg/conf/attributes-march.multi | 0
scripts/libmakepkg/conf/attributes.multi | 0
scripts/libmakepkg/conf/attributes.single | 0
scripts/libmakepkg/srcinfo.sh.in | 61 +++++++++++++++++++++-----
4 files changed, 49 insertions(+), 12 deletions(-)
create mode 100644 scripts/libmakepkg/conf/attributes-march.multi
create mode 100644 scripts/libmakepkg/conf/attributes.multi
create mode 100644 scripts/libmakepkg/conf/attributes.single
diff --git a/scripts/libmakepkg/conf/attributes-march.multi b/scripts/libmakepkg/conf/attributes-march.multi
new file mode 100644
index 00000000..e69de29b
diff --git a/scripts/libmakepkg/conf/attributes.multi b/scripts/libmakepkg/conf/attributes.multi
new file mode 100644
index 00000000..e69de29b
diff --git a/scripts/libmakepkg/conf/attributes.single b/scripts/libmakepkg/conf/attributes.single
new file mode 100644
index 00000000..e69de29b
diff --git a/scripts/libmakepkg/srcinfo.sh.in b/scripts/libmakepkg/srcinfo.sh.in
index 99f5628a..96783850 100644
--- a/scripts/libmakepkg/srcinfo.sh.in
+++ b/scripts/libmakepkg/srcinfo.sh.in
@@ -23,8 +23,53 @@ LIBMAKEPKG_SRCINFO_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+SINGLE_VALUED_ATTRS=
+MULTI_VALUED_ATTRS=
+MARCH_MULTI_VALUED_ATTRS=
+
source "$LIBRARY/util/pkgbuild.sh"
+set_attributes() {
+ local makepkgd="${confdir}/makepkg.d"
+ local singlevalued_default= multivalued_default= singlevalued= multivalued=
+ local tmparray=()
+
+ mapfile -t singlevalued_default < "${LIBRARY}/conf/attributes.single"
+ mapfile -t multivalued_default < "${LIBRARY}/conf/attributes.multi"
+
+ [[ -f "${makepkgd}/attributes.single" ]] && mapfile -t singlevalued < "${makepkgd}/attributes.single"
+ [[ -f "${makepkgd}/attributes.multi" ]] && mapfile -t multivalued < "${makepkgd}/attributes.multi"
+
+ for key in "${singlevalued_default[@]}" "${singlevalued[@]}"; do
+ [[ -n "${key}" ]] && tmparray["${key}"]=1
+ done
+
+ SINGLE_VALUED_ATTRS=("${!tmparray[@]}")
+
+ tmparray=()
+
+ for key in "${multivalued_default[@]}" "${multivalued[@]}"; do
+ [[ -n "${key}" ]] && tmparray["${key}"]=1
+ done
+
+ MULTI_VALUED_ATTRS=("${!tmparray[@]}")
+}
+
+set_march_attributes() {
+ local makepkgd="${confdir}/makepkg.d"
+ local multivalued_default= multivalued=
+
+ mapfile -t multivalued_default < "${LIBRARY}/conf/attributes.multi"
+
+ [[ -f "${makepkgd}/attributes-march.multi" ]] && mapfile -t multivalued < "${makepkgd}/attributes-march.multi"
+
+ for key in "${multivalued_default[@]}" "${multivalued[@]}"; do
+ [[ -n "${key}" ]] && tmparray["${key}"]=1
+ done
+
+ MARCH_MULTI_VALUED_ATTRS=("${!tmparray[@]}")
+}
+
srcinfo_open_section() {
printf '%s = %s\n' "$1" "$2"
}
@@ -61,15 +106,12 @@ pkgbuild_extract_to_srcinfo() {
srcinfo_write_section_details() {
local attr package_arch a
- local multivalued_arch_attrs=(source provides conflicts depends replaces
- optdepends makedepends checkdepends
- {md5,sha{1,224,256,384,512}}sums)
- for attr in "${singlevalued[@]}"; do
+ for attr in "${SINGLE_VALUED_ATTRS[@]}"; do
pkgbuild_extract_to_srcinfo "$1" "$attr" 0
done
- for attr in "${multivalued[@]}"; do
+ for attr in "${MULTI_VALUED_ATTRS[@]}"; do
pkgbuild_extract_to_srcinfo "$1" "$attr" 1
done
@@ -78,19 +120,14 @@ srcinfo_write_section_details() {
# 'any' is special. there's no support for, e.g. depends_any.
[[ $a = any ]] && continue
- for attr in "${multivalued_arch_attrs[@]}"; do
+ for attr in "${MARCH_MULTI_VALUED_ATTRS[@]}"; do
pkgbuild_extract_to_srcinfo "$1" "${attr}_$a" 1
done
done
}
srcinfo_write_global() {
- local singlevalued=(pkgdesc pkgver pkgrel epoch url install changelog)
- local multivalued=(arch groups license checkdepends makedepends
- depends optdepends provides conflicts replaces
- noextract options backup
- source validpgpkeys {md5,sha{1,224,256,384,512}}sums)
-
+ set_attributes
srcinfo_open_section 'pkgbase' "${pkgbase:-$pkgname}"
srcinfo_write_section_details ''
srcinfo_close_section
--
2.12.2
From: pacman-dev <pacman-dev-bounces at archlinux.org> on behalf of Dustin Falgout <dustin at falgout.us>
Sent: Saturday, April 22, 2017 7:03 PM
To: Discussion list for pacman development
Subject: Re: [pacman-dev] [RFC] Make PKGBUILD attributes configurable
Sure, no problem. Currently, our build server uses some custom attributes in the PKGBUILD for additional metadata needed for things like release monitoring. I would like to start using .SRCINFO files on the server because they are easier to parse and also because it would be better convention-wise. Here's an example[1].
[1] https://github.com/Antergos/antergos-packages/blob/master/antergos/mate/mate-desktop/PKGBUILD
--
Dustin Falgout
E-mail: dustin at falgout.us
Github: lots0logs
From: pacman-dev <pacman-dev-bounces at archlinux.org> on behalf of Allan McRae <allan at archlinux.org>
Sent: Saturday, April 22, 2017 6:51 PM
To: Discussion list for pacman development
Subject: Re: [pacman-dev] [RFC] Make PKGBUILD attributes configurable
On 23/04/17 09:36, Dustin Falgout wrote:
> I would like a way to include custom attributes from the PKGBUILD in the output of the --printsrcinfo option. So basically, this...
>
> pkgbase = pacman
> pkgdesc = A library-based package manager with dependency support
> pkgver = 5.0.1
> pkgrel = 4
> url = http://www.archlinux.org/pacman/
> arch = i686
> arch = x86_64
> ...
> _custom_attribute1 = some value
> _custom_attribute2 = some value
> _custom_attribute3 = some value
> ...
>
> pkgname = pacman
>
Bringing the mailing list back into this (seems our reply field is
broken...)
Can you give an example of what a custom attribute would be? Your
example is still to vague to judge whether this would be something we
wish to support.
Thanks,
Allan
More information about the pacman-dev
mailing list