diff options
author | coadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu> | 2015-08-26 03:33:26 -0300 |
---|---|---|
committer | coadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu> | 2015-08-26 03:33:26 -0300 |
commit | 8eafe04ec5eaf917d9e2d58993604c454f1a26d1 (patch) | |
tree | c0e9bb91659c3a1f5814ba94ee251639b52c5873 /extra/coadde/cron-jobs/check_archlinux/parse_pkgbuilds.sh | |
parent | f17c9169de91036cd4b9bb725d2cc6713ad06ce5 (diff) |
re-estructure dbscrips
Diffstat (limited to 'extra/coadde/cron-jobs/check_archlinux/parse_pkgbuilds.sh')
-rwxr-xr-x | extra/coadde/cron-jobs/check_archlinux/parse_pkgbuilds.sh | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/extra/coadde/cron-jobs/check_archlinux/parse_pkgbuilds.sh b/extra/coadde/cron-jobs/check_archlinux/parse_pkgbuilds.sh new file mode 100755 index 0000000..b857ac8 --- /dev/null +++ b/extra/coadde/cron-jobs/check_archlinux/parse_pkgbuilds.sh @@ -0,0 +1,153 @@ +#!/bin/bash + +# Usage : parse_pkgbuilds.sh arch <pkgbuilds_dir1,dir2,...> +# Example : parse_pkgbuilds.sh i686 /var/abs/core /var/abs/extra + +exit() { return; } + +splitpkg_overrides=('depends' 'optdepends' 'provides' 'conflicts') +variables=('pkgname' 'pkgbase' 'epoch' 'pkgver' 'pkgrel' 'makedepends' 'arch' "${splitpkg_overrides[@]}") +readonly -a variables splitpkg_overrides + +backup_package_variables() { + for var in "${splitpkg_overrides[@]}"; do + indirect="${var}_backup" + eval "${indirect}=(\"\${$var[@]}\")" + done +} + +restore_package_variables() { + for var in "${splitpkg_overrides[@]}"; do + indirect="${var}_backup" + if [ -n "${!indirect}" ]; then + eval "${var}=(\"\${$indirect[@]}\")" + else + unset "${var}" + fi + done +} + +print_info() { + echo -e "%NAME%\n$pkgname\n" + if [ -n "$epoch" ]; then + echo -e "%VERSION%\n$epoch:$pkgver-$pkgrel\n" + else + echo -e "%VERSION%\n$pkgver-$pkgrel\n" + fi + echo -e "%PATH%\n$dir\n" + + if [ -n "$pkgbase" ]; then + echo -e "%BASE%\n$pkgbase\n" + fi + + if [ -n "$arch" ]; then + echo "%ARCH%" + for i in "${arch[@]}"; do echo "$i"; done + echo "" + fi + if [ -n "$depends" ]; then + echo "%DEPENDS%" + for i in "${depends[@]}"; do + echo "$i" + done + echo "" + fi + if [ -n "$makedepends" ]; then + echo "%MAKEDEPENDS%" + for i in "${makedepends[@]}"; do + echo "$i" + done + echo "" + fi + if [ -n "$conflicts" ]; then + echo "%CONFLICTS%" + for i in "${conflicts[@]}"; do echo "$i"; done + echo "" + fi + if [ -n "$provides" ]; then + echo "%PROVIDES%" + for i in "${provides[@]}"; do echo "$i"; done + echo "" + fi +} + +source_pkgbuild() { + ret=0 + dir=$1 + pkgbuild=$dir/PKGBUILD + for var in "${variables[@]}"; do + unset "${var}" + done + source "$pkgbuild" &>/dev/null || ret=$? + + # ensure $pkgname and $pkgver variables were found + if [ $ret -ne 0 -o -z "$pkgname" -o -z "$pkgver" ]; then + echo -e "%INVALID%\n$pkgbuild\n" + return 1 + fi + + if [ "${#pkgname[@]}" -gt "1" ]; then + pkgbase=${pkgbase:-${pkgname[0]}} + for pkg in "${pkgname[@]}"; do + if [ "$(type -t "package_${pkg}")" != "function" ]; then + echo -e "%INVALID%\n$pkgbuild\n" + return 1 + else + backup_package_variables + pkgname=$pkg + while IFS= read -r line; do + var=${line%%=*} + var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters + for realvar in "${variables[@]}"; do + if [ "$var" == "$realvar" ]; then + eval $line + break + fi + done + done < <(type "package_${pkg}") + print_info + restore_package_variables + fi + done + else + echo + print_info + fi + + return 0 +} + +find_pkgbuilds() { + #Skip over some dirs + local d="${1##*/}" + if [ "$d" = "CVS" -o "$d" = ".svn" ]; then + return + fi + + if [ -f "$1/PKGBUILD" ]; then + source_pkgbuild "$1" + return + fi + empty=1 + for dir in "$1"/*; do + if [ -d "$dir" ]; then + find_pkgbuilds "$dir" + unset empty + fi + done + if [ -n "$empty" ]; then + echo -e "%MISSING%\n$1\n" + fi +} + +if [ -z "$1" -o -z "$2" ]; then + exit 1 +fi + +CARCH=$1 +shift +for dir in "$@"; do + find_pkgbuilds "$dir" +done + +exit 0 |