#!/bin/sh

fatal()
{
  echo "ada-link: fatal: $1" 1>&2
  exit 1
}

if [ $# -lt 2 ]
then
  echo "ada-link: usage: [@dir] basename objects ..." 1>&2
  exit 1
fi

#
# Check if base directory was specified.
#

BASE_DIR="."
echo "$1" | grep '^@' 2>&1 >/dev/null
if [ $? -eq 0 ]
then
  BASE_DIR=`echo $1 | sed 's/^@//g'`
  shift
fi

ADALINK=`head -n 1 "${BASE_DIR}/conf-adalink"`
if [ $? -ne 0 ]
then
  fatal "could not read ${BASE_DIR}/conf-adalink"
fi
SYSTYPE=`head -n 1 "${BASE_DIR}/conf-systype"`
if [ $? -ne 0 ]
then
  fatal "could not read ${BASE_DIR}/conf-systype"
fi
ADATYPE=`head -n 1 "${BASE_DIR}/conf-adatype"`
if [ $? -ne 0 ]
then
  fatal "could not read ${BASE_DIR}/conf-adatype"
fi

ADALDFLAGS="${ADALDFLAGS} `head -n 1 ${BASE_DIR}/conf-adaldflags 2>/dev/null`"

#
# Read global flag file list, if present.
#

if [ -f "${BASE_DIR}/conf-aldfflist" ]
then
  for f in `cat "${BASE_DIR}/conf-aldfflist"`
  do
    FLAGS=`cat $f 2>/dev/null` || fatal "could not read $f"
    ADALDFLAGS="${ADALDFLAGS} ${FLAGS}"
  done
fi

out="$1"
shift

#
# Read local flag file list, if present.
#

if [ -f "${out}.lff" ]
then
  for f in `cat "${out}.lff"`
  do
    targ="`dirname $out`/`dirname $f`/`basename $f`"
    FLAGS="`cat $targ 2>/dev/null`" || fatal "could not read $f"
    ADALDFLAGS="${ADALDFLAGS} ${FLAGS}"
  done
fi

#
# Compensate for any compiler bugs.
#

case ${SYSTYPE} in
  DARWIN)
    case ${ADATYPE} in
      GCC)
        ;;
      *)
        ;;
    esac
    ;;
  *)
    ;;
esac

exec ${ADALINK} -o ${out} ${1+"$@"} ${ADALDFLAGS}
