#!/bin/bash fatal() { [ -z "$1" ] && echo "$@" exit 1 } while :; do case $1 in --debug) set -x ;; --spec) shift SPEC=$1 ;; *) [ -z "$1" ] && break ;; esac shift done rules= rules_in= [ -f .gear/rules.in ] && rules_in=".gear/rules.in" [ -f .gear-rules ] && rules_in=".gear-rules.in" [ -f "$rules_in" ] || exit rules="${rules_in%*.in}" [ -z "$SPEC" ] && SPEC=`ls *.spec 2>/dev/null` [ -f "$SPEC" ] || fatal "spec $SPEC not found" vars="$(awk ' { line = $0; while(match(line, /@([a-z]+)@/, f)) { if(!x[f[1]]) { print f[1]; x[f[1]] = 1; } line = substr(line, RSTART + RLENGTH) } }' $rules_in)" tmpspec=`mktemp --tmpdir spec-XXXXX` trap "rm -f $tmpspec" INT TERM install -p -m644 "$rules_in" "$rules" || fatal for var in $vars; do cat $SPEC > $tmpspec echo "%$var" >> $tmpspec val="$(rpm -bE $tmpspec | tail -1)" [ -z "$val" ] && fatal "$var not expanded" echo "substitute $var --> $val" perl -i -npe "s/\@\Q$var\E@/$val/g" $rules done rm -f $tmpspec