#!/bin/sh
shout() { echo "compile: $@" >&2; }
barf() { shout "fatal: $@"; exit 111; }
safe() { "$@" || barf "cannot $@"; }
usage() {
  shout "\
usage: package/compile [ [-]part ... ]
available parts:
`package/parts list`"
  exit 100
}
####
umask 022
[ -d package ] || barf "no package directory"
[ -d src     ] || barf "no src directory"
here=`env - PATH=$PATH pwd`
PATH="$here/compile:/command:$PATH"
export PATH
#
[ "$1" = "--help" ] && usage
#
safe mkdir -p compile command
safe cd compile
[ -r home ] || echo "$here" > home
[ -h src  ] || safe ln -s ../src src
for i in `ls src`
do
  [ -h $i ] || safe ln -s src/$i $i
done
safe cd $here
#
targets=
[ $# -gt 0 ] && targets="`package/parts target ${1+"$@"} < src/it=d`"
commands="`package/parts target ${1+"$@"} < package/commands`"
#
safe cd compile
safe make $targets
safe cd $here
for i in $commands
do
  safe rm -f "command/$i"'{new}'
  safe cp -p "compile/$i" "command/$i"'{new}'
  safe mv -f "command/$i"'{new}' "command/$i"
done
exit 0
