#!/bin/sh prog=genpkg prepd=~/.genpkg/preps modsd=~/pkg/mods pkgd=~/pkg/dest vard=~/.genpkg/var mergefile() { fname="$1" shift if [ -f "$fname.$$" ] then echo "$prog: error: temp file already exists: $fname.$$" 1>&2 return 1 fi while [ "$#" -gt 0 ] do sect="$1" shift getpkgtree "$fname" "$sect" >> "$fname.$$" case "$?" in 0) ;; 101) rm "$fname.$$" return 101 ;; 102) continue ;; # empty section so don't echo a newline below *) echo "$prog: unknown error from getpkgtree: $?" 1>&2 rm "$fname.$$" return 1 ;; esac [ "$#" -gt 0 ] && echo >> "$fname.$$" done if du "$fname.$$" | awk '$1 == 0 { exit 1 }' then mv "$fname.$$" "$fname" return 0 else rm "$fname.$$" return 1 fi } scanfield() { awk -v fld="$1" ' BEGIN { FS = "\n"; RS = "" } $1 == fld { print $2; found = 1; exit } END { exit !found } ' return $? } # Create an extra "ver" field in case the packager needs to modify the pkgver. dupver() { awk ' BEGIN { OFS = FS = "\n"; RS = ""; ORS = "\n\n" } $1 == "pkgver" { pkgver = $2 } 1 END { if(pkgver) print "ver", pkgver } ' } if [ $# -lt 1 ] then echo "usage: $prog [package name]" 1>&2 exit 2 fi if ! [ -d "$modsd" ] then echo "$prog: bad package mods dir: $modsd" 1>&2 exit 1 fi if ! [ -d "$pkgd" ] then echo "$prog: bad package dest dir: $pkgd" 1>&2 exit 1 fi if ! [ -d "$vard" ] then echo "$prog: bad package var dir: $vard" 1>&2 exit 1 fi for pkg do [ -d "$pkgd/$pkg" ] || mkdir "$pkgd/$pkg" cd "$pkgd/$pkg" [ -d PKGTREE ] && rm -rf PKGTREE mkdir PKGTREE trap 'rm -f PKGDATA' 1 2 15 PREPSPATH="$prepd" PKGVAR="$vard" prepkg "$pkg" > PKGDATA ret=$? case $ret in 0) echo "$pkgd/$pkg" ;; 101) # 101 from prepkg means cleanup cd rm -r "$pkgd/$pkg" exit 1 ;; *) rm PKGDATA exit $ret esac trap '' 1 2 15 mod="$modsd/$pkg" if [ -f "$mod" -a -r "$mod" ] then echo "Moding with $mod." 1>&2 trap 'rm -f PKGDATA.new' 1 2 15 # Duplicate the version in case modpkg modifies it. if cat PKGDATA | dupver | modpkg "$mod" > PKGDATA.new then mv PKGDATA.new PKGDATA else echo "$prog: modpkg failed." 1>&2 [ "$GENPKGDBG" ] || rm PKGDATA.new fi trap '' 1 2 15 fi # Insert PKGBUILD fields into prefix of PKGBUILD body. cat PKGDATA | injectdigs | vervar | pbfields |\ putpkgtree PKGBUILD prefix body || exit "$?" # Merge split PKGTREE files into their own separate text files. mergefile PKGBUILD prefix build check package suffix case $? in 0) ;; 101) echo "$PROG: error: missing PKGBUILD file in PKGTREE" 1>&2 exit 101 ;; *) exit $? esac pkgname=`scanfield pkgname < PKGDATA` if [ $? -ne 0 ] then echo "$PROG: pkgname missing from generated PKGDATA" 1>&2 exit 1 fi # Ignore errors when merging .install file. We don't mind missing it. mergefile "$pkgname.install" pre_install post_install pre_upgrade post_upgrade if [ -z "$GENPKGDBG" ] then rm -rf PKGTREE #rm PKGDATA fi done