From 4cad2423a34d9bb740375f121d2390cd3cf925dc Mon Sep 17 00:00:00 2001 From: Ashley Whetter Date: Mon, 21 Mar 2016 14:04:43 +1000 Subject: [PATCH] libmakepkg: extract functions for writing .SRCINFO files Signed-off-by: Ashley Whetter Signed-off-by: Allan McRae --- scripts/Makefile.am | 1 + scripts/libmakepkg/.gitignore | 1 + scripts/libmakepkg/srcinfo.sh.in | 127 +++++++++++++++++++++++++++++++ scripts/makepkg.sh.in | 101 ------------------------ 4 files changed, 129 insertions(+), 101 deletions(-) create mode 100644 scripts/libmakepkg/srcinfo.sh.in diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 6f9abb86..1e6a40bb 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -81,6 +81,7 @@ LIBMAKEPKG_IN = \ libmakepkg/source/hg.sh \ libmakepkg/source/local.sh \ libmakepkg/source/svn.sh \ + libmakepkg/srcinfo.sh \ libmakepkg/tidy.sh \ libmakepkg/tidy/docs.sh \ libmakepkg/tidy/emptydirs.sh \ diff --git a/scripts/libmakepkg/.gitignore b/scripts/libmakepkg/.gitignore index 2de91e73..211a0882 100644 --- a/scripts/libmakepkg/.gitignore +++ b/scripts/libmakepkg/.gitignore @@ -4,6 +4,7 @@ lint_pkgbuild.sh lint_pkgbuild/*.sh source.sh source/*.sh +srcinfo.sh tidy.sh tidy/*.sh util.sh diff --git a/scripts/libmakepkg/srcinfo.sh.in b/scripts/libmakepkg/srcinfo.sh.in new file mode 100644 index 00000000..83765fa5 --- /dev/null +++ b/scripts/libmakepkg/srcinfo.sh.in @@ -0,0 +1,127 @@ +#!/bin/bash +# +# srcinfo.sh - functions for writing .SRCINFO files +# +# Copyright (c) 2014-2016 Pacman Development Team +# +# 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 . +# + +[[ -n "$LIBMAKEPKG_SRCINFO_SH" ]] && return +LIBMAKEPKG_SRCINFO_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/pkgbuild.sh" + +srcinfo_open_section() { + printf '%s = %s\n' "$1" "$2" +} + +srcinfo_close_section() { + echo +} + +srcinfo_write_attr() { + # $1: attr name + # $2: attr values + + local attrname=$1 attrvalues=("${@:2}") + + # normalize whitespace, strip leading and trailing + attrvalues=("${attrvalues[@]//+([[:space:]])/ }") + attrvalues=("${attrvalues[@]#[[:space:]]}") + attrvalues=("${attrvalues[@]%[[:space:]]}") + + printf "\t$attrname = %s\n" "${attrvalues[@]}" +} + +pkgbuild_extract_to_srcinfo() { + # $1: pkgname + # $2: attr name + # $3: multivalued + + local pkgname=$1 attrname=$2 isarray=$3 outvalue= + + if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then + srcinfo_write_attr "$attrname" "${outvalue[@]}" + fi +} + +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 + pkgbuild_extract_to_srcinfo "$1" "$attr" 0 + done + + for attr in "${multivalued[@]}"; do + pkgbuild_extract_to_srcinfo "$1" "$attr" 1 + done + + get_pkgbuild_attribute "$1" 'arch' 1 'package_arch' + for a in "${package_arch[@]}"; do + # 'any' is special. there's no support for, e.g. depends_any. + [[ $a = any ]] && continue + + for attr in "${multivalued_arch_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) + + srcinfo_open_section 'pkgbase' "${pkgbase:-$pkgname}" + srcinfo_write_section_details '' + srcinfo_close_section +} + +srcinfo_write_package() { + local singlevalued=(pkgdesc url install changelog) + local multivalued=(arch groups license checkdepends depends optdepends + provides conflicts replaces options backup) + + srcinfo_open_section 'pkgname' "$1" + srcinfo_write_section_details "$1" + srcinfo_close_section +} + +write_srcinfo_header() { + printf "# Generated by makepkg %s\n" "$makepkg_version" + printf "# %s\n" "$(LC_ALL=C date -u)" +} + +write_srcinfo_content() { + local pkg + + srcinfo_write_global + + for pkg in "${pkgname[@]}"; do + srcinfo_write_package "$pkg" + done +} + +write_srcinfo() { + write_srcinfo_header + write_srcinfo_content +} diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 2efcc985..f80e37ab 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -999,107 +999,6 @@ find_libprovides() { printf '%s\n' "${libprovides[@]}" } -srcinfo_open_section() { - printf '%s = %s\n' "$1" "$2" -} - -srcinfo_close_section() { - echo -} - -srcinfo_write_attr() { - # $1: attr name - # $2: attr values - - local attrname=$1 attrvalues=("${@:2}") - - # normalize whitespace, strip leading and trailing - attrvalues=("${attrvalues[@]//+([[:space:]])/ }") - attrvalues=("${attrvalues[@]#[[:space:]]}") - attrvalues=("${attrvalues[@]%[[:space:]]}") - - printf "\t$attrname = %s\n" "${attrvalues[@]}" -} - -pkgbuild_extract_to_srcinfo() { - # $1: pkgname - # $2: attr name - # $3: multivalued - - local pkgname=$1 attrname=$2 isarray=$3 outvalue= - - if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then - srcinfo_write_attr "$attrname" "${outvalue[@]}" - fi -} - -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 - pkgbuild_extract_to_srcinfo "$1" "$attr" 0 - done - - for attr in "${multivalued[@]}"; do - pkgbuild_extract_to_srcinfo "$1" "$attr" 1 - done - - get_pkgbuild_attribute "$1" 'arch' 1 'package_arch' - for a in "${package_arch[@]}"; do - # 'any' is special. there's no support for, e.g. depends_any. - [[ $a = any ]] && continue - - for attr in "${multivalued_arch_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) - - srcinfo_open_section 'pkgbase' "${pkgbase:-$pkgname}" - srcinfo_write_section_details '' - srcinfo_close_section -} - -srcinfo_write_package() { - local singlevalued=(pkgdesc url install changelog) - local multivalued=(arch groups license checkdepends depends optdepends - provides conflicts replaces options backup) - - srcinfo_open_section 'pkgname' "$1" - srcinfo_write_section_details "$1" - srcinfo_close_section -} - -write_srcinfo_header() { - printf "# Generated by makepkg %s\n" "$makepkg_version" - printf "# %s\n" "$(LC_ALL=C date -u)" -} - -write_srcinfo_content() { - local pkg - - srcinfo_write_global - - for pkg in "${pkgname[@]}"; do - srcinfo_write_package "$pkg" - done -} - -write_srcinfo() { - write_srcinfo_header - write_srcinfo_content -} - write_pkginfo() { local builddate=$(date -u "+%s") if [[ -n $PACKAGER ]]; then