#!/bin/sh
# Compile GNU Chill programs.
: || exec /bin/sh -f $0 $argv:q

# The compiler name might be different when doing cross-compilation
# (this should be configured)
gcc_name=gcc
whatgcc=gcc
speclang=-xnone
startfile=chillrt0
gnuchill_script_flags=
gnuchill_version=unknown
extraflags=

# replace the command name by the name of the new command
progname=`basename $0`
case "$0" in
  */*)
    gcc=`echo $0 | sed -e "s;/[^/]*$;;"`/$gcc_name
    ;;
  *)
    gcc=$gcc_name
    ;;
esac

# $first is yes for first arg, no afterwards.
first=yes
# If next arg is the argument of an option, $quote is non-empty.
# More precisely, it is the option that wants an argument.
quote=
# $library is made empty to disable use of libchill.
library="-lchill"
libpath=chillrt
numargs=$#

for arg
do
  if [ $first = yes ]
  then
    # Need some 1st arg to `set' which does not begin with `-'.
    # We get rid of it after the loop ends.
    set gcc
    first=no
  fi
  # If you have to ask what this does, you should not edit this file. :-)
  # The ``S'' at the start is so that echo -nostdinc does not eat the
  # -nostdinc.
  arg=`echo "S$arg" | sed "s/^S//; s/'/'\\\\\\\\''/g"`
  if [ x$quote != x ]
  then
    quote=
  else
    quote=
    case $arg in
      -nostdlib)
	# Inhibit linking with -lchill.
	library=
	libpath=
	startfile=
	;;
      -B*)
	gcc=`echo $arg | sed -e "s/^-B//"`$gcc_name
	;;
      -[bBVDUoeTuIYmLiA] | -Tdata | -Xlinker)
	# these switches take following word as argument,
	# so don't treat it as a file name.
	quote=$arg
	;;
      -[cSEM] | -MM)
	# Don't specify libraries if we won't link,
	# since that would cause a warning.
	library=
	libpath=
	startfile=
	;;
      -x*)
	speclang=$arg
	;;
      -v)
	# catch `chill -v'
	if [ $numargs = 1 ] ; then
	  library=
	  libpath=
	  startfile=
	fi
	echo "GNUCHILL version $gnuchill_version"
	;;
      -fgrant-only | -fchill-grant-only)
        #inhibit production of an object file
        extraflags="-S -o /dev/null"
	library=
	libpath=
	startfile=
        ;;
      -*)
	# Pass other options through; they don't need -x and aren't inputs.
	;;
      *)
	# If file ends in .i, put options around it.
	# But not if a specified -x option is currently active.
	case "$speclang $arg" in -xnone\ *.[i])
	  set "$@" -xchill "'$arg'" -xnone
	  continue
	esac
	;;
    esac
  fi
  set "$@" "'$arg'"
done

# Get rid of that initial 1st arg
if [ $first = no ]; then
  shift
else
  echo "$0: No input files specified."
  exit 1
fi

if [ x$quote != x ]
then
  echo "$0: argument to \`$quote' missing"
  exit 1
fi

# The '-ansi' flag prevents cpp from changing this:
#  NEWMODE x = SET (sun, mon, thu, wed, thu, fri, sat);
#to this:
#  NEWMODE x = SET (1, mon, thu, wed, thu, fri, sat);
#which is a CHILL syntax error.
eval $whatgcc -ansi $gnuchill_script_flags $startfile "$@" $libpath $library $extraflags
