#!/bin/sh prog=makepkgbuild die() { rc=$1; shift echo "$prog: $*" 1>&2 exit $rc } editpb() { op=$1 func=$2 case "$op" in append) regexp="^${func}[(][)]${func}()" edin="/^ *$func() *{ /^[ \t]*cd/ a" ;; *) die 2 unknown editpb operation: $op esac txt=$(awk -v r="$regexp" -v f="$func" 'BEGIN { FS = "\n"; RS = "" } $1 ~ r { for (i = 2; i <= NF; i++) print $i }' \ PKGMETA | sed 's/^/ /') [ X"$txt" = X ] && return 0 cat </dev/null $edin $txt . wq END return $? } if ! [ -r PKGMETA ] then die 1 "PKGMETA could not be read." fi case "$TDIR" in '') die 1 "TDIR env variable is not set." esac ttcmds=$(awk ' BEGIN { FS = "\n"; RS = "" } $1 == "template" { for (i = 2; i <= NF; i++) print $i }' PKGMETA) oifs=$IFS IFS=' ' for ttcmd in "$ttcmds" do IFS=' ' set -- $ttcmd cmd="$TDIR/$1" if ! [ -f "$cmd" -a -x "$cmd" ] then die 2 "Unknown template command: $cmd" fi done IFS=$oifs ttcmd="cat PKGMETA$(echo "$ttcmds" | sed "s!^! | $TDIR/!" | tr -d '\n')" "$TDIR/pbfields" PKGBUILD eval $ttcmd >>PKGBUILD || die 2 "template pipeline ($ttcmd) failed" for func in package check build do for op in append prepend do editpb $op $func || die 2 "error $? when trying to $op to ${func}()" done done