Signed-off-by: Ashley Whetter <ashley@awhetter.co.uk> --- scripts/Makefile.am | 1 + scripts/libmakepkg/srcinfo.sh.in | 120 +++++++++++++++++++++++++++++++++++++++ scripts/makepkg.sh.in | 94 ------------------------------ 3 files changed, 121 insertions(+), 94 deletions(-) create mode 100644 scripts/libmakepkg/srcinfo.sh.in diff --git a/scripts/Makefile.am b/scripts/Makefile.am index d660c0b..2dfd238 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -74,6 +74,7 @@ LIBMAKEPKG_IN = \ libmakepkg/lint_pkgbuild/source.sh \ libmakepkg/lint_pkgbuild/util.sh \ libmakepkg/lint_pkgbuild/variable.sh \ + libmakepkg/srcinfo.sh \ libmakepkg/source.sh \ libmakepkg/source/bzr.sh \ libmakepkg/source/file.sh \ diff --git a/scripts/libmakepkg/srcinfo.sh.in b/scripts/libmakepkg/srcinfo.sh.in new file mode 100644 index 0000000..96dc59b --- /dev/null +++ b/scripts/libmakepkg/srcinfo.sh.in @@ -0,0 +1,120 @@ +#!/bin/bash +# +# srcinfo.sh - functions for writing .SRCINFO files +# +# Copyright (c) 2016 Pacman Development Team <pacman-dev@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_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() { + local pkg + + printf "# Generated by makepkg %s\n" "$makepkg_version" + printf "# %s\n" "$(LC_ALL=C date -u)" + + srcinfo_write_global + + for pkg in "${pkgname[@]}"; do + srcinfo_write_package "$pkg" + done +} diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 80b95f4..4411ac2 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -999,100 +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() { - local pkg - - printf "# Generated by makepkg %s\n" "$makepkg_version" - printf "# %s\n" "$(LC_ALL=C date -u)" - - srcinfo_write_global - - for pkg in "${pkgname[@]}"; do - srcinfo_write_package "$pkg" - done -} - write_pkginfo() { local builddate=$(date -u "+%s") if [[ -n $PACKAGER ]]; then -- 2.7.0