#!/bin/bash tempdir="$(mktemp -d --tmpdir ${0##*/}.XXXXXXXXXXX)" ################################################################################ # BUG: can insert empty lines format_array=" s/\(/& / # force whitespace after the opening 'var=(' bit s/\)/ &/ # force whitespace after the trailing ')' bit s/\s+/\n /g # delimit array elements with '\n ' " format-array() { local var=$1 local file=$2 sed -ri \ -e "/^$var=\(.*\)/{ $format_array } # single-line" \ -e "/^$var=\([^)]*$/,/\)/{ $format_array } # multi-line" \ "$file" } ################################################################################ print_array=" /\(/d # strip the opening 'var=(' line /\)/d # strip the trailing ')' line /./p # print everything else " sort-array() { local var=$1 local file=$2 # extract the data { # HACK: strip empty lines; to work around bug in format-array sed -nr "/^$var=\(/,/\)/{ $print_array }" \ | sed '/^\s*$/d' \ | sort -u } < "$file" > "$tempdir/$var" # remove it from the file sed -i -e "/^$var=(/i @$var@" -e "/^$var=/,/)/d" "$file" # re-insert it into the file sed -i \ -e "/^@$var@/a$var=(" \ -e "/^@$var@/r$tempdir/$var" \ -e "/^@$var@/a)" \ -e "/^@$var@/d" \ "$file" } ################################################################################ normalize() { local file=$1 for var in {make,check,}depends arch license; do format-array "$var" "$file" sort-array "$var" "$file" done # clean up whitespace sed -ri 's/\s+$//' "$file" # generalize sed -ri \ -e 's/([^=])firefox/\1$pkgbase/g' \ -e 's/\$pkgbase-(install-dir\.patch)/firefox-\1/g' \ "$file" if ! grep -q pkgbase= "$file"; then sed -i '/pkgdesc=/iif [[ -z $pkgbase ]]\; then pkgbase=$pkgname\; fi' "$file" fi } main() { cat > "$tempdir/PKGBUILD" normalize "$tempdir/PKGBUILD" cat "$tempdir/PKGBUILD" rm -rf "$tempdir" } main "$@"