#!/bin/sh
#
# compile-sagittarius - SRFI-139 implementation for Sagittarius
#
#   Copyright (c) 2016  Takashi Kato  <ktakashi@ymail.com>
#
#   Redistribution and use in source and binary forms, with or without
#   modification, are permitted provided that the following conditions
#   are met:
#
#   1. Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#
#   2. Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer in the
#      documentation and/or other materials provided with the distribution.
#
#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
#   TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
#   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
#   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
#   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
#   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
set -e

if [ -n "$COMPILE_R7RS" -a "$0" != "$COMPILE_R7RS" ]; then
    exec "$COMPILE_R7RS" "$@"
fi

CC=${CC:-"gcc"}
CXX=${CXX:-"g++"}

SAGITTARIUS=${SAGITTARIUS:-"sagittarius"}
LOADPATH=
OUTPUT="a.out"
DONT_TRANSLATE=${DONT_TRANSLATE:-""}

ME=$(basename $0)

while getopts :A:D:I:o: name
do
    case $name in
	A) LOADPATH="$LOADPATH -A $OPTARG" ;;
	D) printf "%s: warning: -D options is not supported on Sagittarius\n" $ME;;
	I) LOADPATH="$LOADPATH -L $OPTARG" ;;
	o) OUTPUT="$OPTARG" ;;
	:) printf "%s: error: argument missing after `-%s`\n" $ME $OPTARG
	   exit 2;;
	?) printf "%s: error: unrecognized command line option `-%s`\n" $ME $OPTARG
	exit 2;;
    esac
done

shift $(($OPTIND - 1))

if [ -z "$1" ]; then
    printf "%s: error: no input file\n" $ME
    exit 1
fi

set +e
SCHEME2C=`which sagittarius-scheme2c`
if [ $? -ne 0 -o x"$DONT_TRANSLATE" != x"" ]; then
    set -e
    INVOKE_OPTION="-t"
    
    if [ x"$ME" = x"compile-r7rs" ]; then
	INVOKE_OPTION="-r7"
    fi
    
    cat  <<EOF >"$OUTPUT"
#!/bin/sh
#|
exec $SAGITTARIUS $INVOKE_OPTION $LOADPATH "\$0" "\$@"
|#
EOF
    cat "$1" >>"$OUTPUT"
    chmod a+x "$OUTPUT"
else
    set -e
    TMPFILE=$(mktemp /tmp/scheme2c.XXXXXX.c)
    $SCHEME2C -o $TMPFILE $LOADPATH -e $1
    COMPILER_FLAGS=`sagittarius-config -L -I -l --c-flags`
    case `uname` in
	CYGWIN*) $CXX -o $OUTPUT -O2 $TMPFILE $COMPILER_FLAGS;;
	*) $CC -o $OUTPUT -O2 $TMPFILE $COMPILER_FLAGS;;
    esac
    rm $TMPFILE
fi
	   
