[PATCH] makepkg: Implement pkgtype in .PKGINFO

Allan McRae allan at archlinux.org
Sun Jan 2 08:12:55 UTC 2022


On 20/12/21 03:49, Morten Linderud wrote:
> From: Morten Linderud <morten at linderud.pw>
> 
> This implements pkgtype into .PKGINFO. This is useful to ensure tools
> parsing packages do not miss important context on the creation of the
> package.
> 
> For instance discovering if a given .pkg.tar is a debug package, one
> would have to do heuristics on the pkgdesc and "${pkgbase}-debug".
> However both of these values are controlled by the packager.
> 
> Similarly, the heuristic for discovering split packages is if pkgbase
> and pkgname differ, which can happen in any package as both values are
> packager controlled.
> 
> This should ensure we don't need to rely on heuristics and instead
> include the context of how the package was created.
> 
> Signed-off-by: Morten Linderud <morten at linderud.pw>
> ---
>   scripts/makepkg.sh.in | 7 +++++++
>   1 file changed, 7 insertions(+)
> 
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 3c7977db..9f5fd401 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -601,6 +601,7 @@ write_pkginfo() {
>   
>   	write_kv_pair "pkgname" "$pkgname"
>   	write_kv_pair "pkgbase" "$pkgbase"
> +	write_kv_pair "pkgtype" "$pkgtype"
>   

This field needs ignored by libalpm while reading .PKGINFO.  See 
be_package.c parse_descfile().

>   	local fullver=$(get_full_version)
>   	write_kv_pair "pkgver" "$fullver"
> @@ -681,6 +682,8 @@ list_package_files() {
>   create_package() {
>   	(( NOARCHIVE )) && return 0
>   
> +	pkgtype=${pkgtype:-pkg}
> +
>   	if [[ ! -d $pkgdir ]]; then
>   		error "$(gettext "Missing %s directory.")" "\$pkgdir/"
>   		plainerr "$(gettext "Aborting...")"
> @@ -765,6 +768,7 @@ create_debug_package() {
>   
>   	pkgdesc="Detached debugging symbols for $pkgname"
>   	pkgname=$pkgbase- at DEBUGSUFFIX@
> +	pkgtype=debug
>   
>   	create_package
>   }
> @@ -775,6 +779,8 @@ create_srcpackage() {
>   	local srclinks="$(mktemp -d "$startdir"/srclinks.XXXXXXXXX)"
>   	mkdir "${srclinks}"/${pkgbase}
>   
> +	pkgtype=src
> +
>   	msg2 "$(gettext "Adding %s...")" "$BUILDSCRIPT"
>   	ln -s "${BUILDFILE}" "${srclinks}/${pkgbase}/${BUILDSCRIPT}"
>   
> @@ -950,6 +956,7 @@ run_single_packaging() {
>   
>   run_split_packaging() {
>   	local pkgname_backup=("${pkgname[@]}")
> +	pkgtype=split
>   	backup_package_variables
>   	for pkgname in ${pkgname_backup[@]}; do
>   		run_single_packaging $pkgname

So...  not happy about this.   A PKGBUILD for a single package called 
"foo" has a different value depending on whether you have package() or 
package_foo().

Allan


More information about the pacman-dev mailing list