#! /bin/sh
if [ $# -eq 0 ]; then
printf "%s\n" "neatcc -- neatas/ncc/nld wrapper" >&2
exit 1
fi
if [ "$NAS" = "" ]; then NAS="neatas"; fi
if [ "$NCC" = "" ]; then NCC="ncc"; fi
if [ "$NLD" = "" ]; then NLD="nld"; fi
if [ "$NHD" = "" ]; then NHD="."; fi
if [ "$NLC" = "" ]; then NLC="."; fi
if [ "$1" = "-v" ]; then
printf "%s\n" "neatcc -- neatas/ncc/nld wrapper"
printf "assembler: %s\n" "$NAS"
printf "compiler: %s\n" "$NCC"
printf "linker: %s\n" "$NLD"
printf "headers: %s\n" "$NHD"
printf "libc: %s\n" "$NLC"
exit 0
fi
nccargs=" -I$NHD"
nldargs=""
asm_sources=""
c_sources=""
objects=""
link="yes"
waiting_arg="neither"
for arg in "$@"; do
case $waiting_arg in
neither)
if [ ${arg#-} != $arg ]; then # $arg starts with slash
case ${arg#-} in
I*|D*|O*|W*)
nccargs="$nccargs $arg"
if [ ${#arg} -eq 2 ]; then
waiting_arg="ncc"
fi
;;
c)
link="no"
;;
E)
nccargs="$nccargs $arg"
link="no"
;;
l*|L*|m*|e*|o*)
nldargs="$nldargs $arg"
if [ ${#arg} -eq 2 ]; then
waiting_arg="nld"
fi
;;
s|g|p)
nldargs="$nldargs $arg"
;;
*)
printf "unknown option: %s\n" $arg >&2
exit 2
esac
else
case "$arg" in
*.s)
asm_sources="$asm_sources $arg"
object=${arg//.s/.o}
;;
*.c)
c_sources="$c_sources $arg"
object=${arg//.c/.o}
;;
*.o)
object="$arg"
;;
*)
printf "invalid argument: %s\n" $arg >&2
exit 2
esac
objects="$objects $object"
fi
;;
ncc)
nccargs="$nccargs$arg"
waiting_arg="neither"
;;
nld)
nldargs="$nldargs $arg"
waiting_arg="neither"
esac
done
if [ -n "$asm_sources" ]; then
$NAS $asm_sources || exit
fi
if [ -n "$c_sources" ]; then
$NCC$nccargs $c_sources || exit
fi
if [ $link = "yes" ]; then
nldargs="$nldargs $objects $NLC/start.o $NLC/libc.a"
$NLD$nldargs && rm -f $objects
fi