#!/bin/sh
#
# FIXME: this script don't know how to make a shared library (.so/.dll)
#

ALL_FLAGS=$@
SCRIPT_NAME=esql_wrap

if test "$DEBUG" = "ALL"; then
	#Force verbose mode for debugging when Aubit DEBUG is set
	ALL_FLAGS="$ALL_FLAGS --verbose"
	#SH_DEBUG="1"
fi

###################
for a in $ALL_FLAGS
###################
do
	case $a in
	-noecho)    #Don't show any non-critical messages while running
		NO_ECHO=1
		;;
	-verbose | --verbose)
	   A4GLVERBOSE="yes"
	   #SH_DEBUG=1
	   ;;
	-script-debug)
		SH_DEBUG="1"
		;;
	   
	esac
#######
done
#######

if test "$A4GLVERBOSE" = "1"; then
	echo "$SCRIPT_NAME: Verbose mode ON"
fi
if test "$SH_DEBUG" = "1"; then
	echo "$SCRIPT_NAME: Script debug mode ON - invoked with :"
	echo "$ALL_FLAGS"
fi

#######################################################################
#				Set environment 
#######################################################################

if [ "$AUBITDIR" = "" ]; then
    AUBITDIR=`aubit-config AUBITDIR`
	if [ "$AUBITDIR" = "" ]; then
        echo "ERROR: AUBITDIR unknown. Stop."
        exit 5
    fi
fi

#Contains values determined by Autoconf for INFORMIXDIR, IFX libs, etc.
if test -f "$AUBITDIR/etc/aubitrc"; then 
	. "$AUBITDIR/etc/aubitrc"
else
	if test -f "$HOME/.aubitrc"; then
		. "$HOME/.aubitrc"
	else
#WARNING - do not hard-code - use @AUBITETC@ instead!!	
		if test -f /etc/opt/aubit4gl/aubitrc; then
			. /etc/opt/aubit4gl/aubitrc
		else
			echo "WARNING: cannot find aubitrc"
		fi
	fi
fi

if [ "$INFORMIXDIR" = "" ]; then
	echo "ERROR: INFORMIXDIR not set"
	#export INFORMIXDIR="c:/informix"
	exit 4
fi

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$AUBITDIR/lib
export LD_RUN_PATH=$LD_RUN_PATH:$AUBITDIR/lib:$POSTGRESDIR/lib

ESQL_EXT=cpc
COMPILE_OBJ=0
output=""

# If we have a .ec on the command line -
# assume they have .ec as the extension instead

echo $* | grep "\.ec" >/dev/null 2>&1
[ $? -eq 0 ] &&	ESQL_EXT=ec

while [ "$1" != "" ]
do
	a=$1

	if [ "$a" = -c ]
	then
		COMPILE_OBJ=1
		shift
		continue
	fi




	d=`dirname $a`

	if [ "$d" != "" -a "$d" != "." ]; then
		c=$d/`basename "$a" `
		b=$d/`basename "$c" ".$ESQL_EXT"`
	else
		c=`basename "$a" `
		b=`basename "$c" ".$ESQL_EXT"`
		b2=./`basename "$c" ".$ESQL_EXT"`
	fi

	if [ $b.$ESQL_EXT = $a -o $b2.$ESQL_EXT = $a ]; then
		srcs="$srcs $a"
		shift
		continue
	fi
	case $a in
		*.c)
			srcs="$srcs $a"
			shift
			continue
		;;
	esac

	if [ $a = "-o" ]; then
		shift
		output="-o $1"
		case $1 in
            *.ao)
                OUTPUT_IS_OBJECT="1"
                ;;
			*.o)
                OUTPUT_IS_OBJECT="1"
				;;
        esac
		shift
		continue
	fi

	other_args="$other_args $a"
	shift
done

if test "$SH_DEBUG" = "1"; then
	echo "SOURCES : " $srcs
fi
if test "$COMPILE_OBJ" = "1" -a "$srcs" = ""; then
	echo "ERROR: no source files and no linking?"
	exit 1
fi

for a in $srcs
do
	case $a in
		*.ec)
			if test "$COMSPEC" = ""; then 
				ESQL_RUN="esql -e $a"
			else
				ESQL_RUN="esql -thread -e $a"     #-C INFORMIX_SE	
			fi
			echo $ESQL_RUN
			eval $ESQL_RUN
			RET=$?
			if test "$RET" != "0"; then
				exit $RET
			fi
		;;
	esac
	
    out=`basename $a ".$ESQL_EXT"`
	case $a in
		*.ec)
			cfiles="$cfiles $out.c"
			outfile="$out.c"
		;;
		*)
			outfile="$out"		
		;;
	esac
	
    GCC_COMPILE="gcc -c $outfile $other_args \
		-I\"$INFORMIXDIR/incl/esql\" -I\"$INFORMIXDIR/incl\" \
		-I\"$INFORMIXDIR/CSDK/incl/esql\" -I\"$INFORMIXDIR/CSDK/incl\" \
		-I$AUBITDIR/incl "

	if test "$OUTPUT_IS_OBJECT" = "1"; then
	    GCC_COMPILE="$GCC_COMPILE $output"
	    echo "Compiling $out.c to object $output"

		for a in $output; do
			case $a in
			-o) #skip it
				;;
			*)
				LOGFILE="$a.log"			
				;;
			esac
		done
	else
	    echo "Compiling $out.c to object"
		LOGFILE="$out.log"
	fi
	
	if test "$SH_DEBUG" = "1"; then	
		echo "$GCC_COMPILE > $LOGFILE 2>&1"
	fi
	eval "$GCC_COMPILE > $LOGFILE 2>&1"
    RET=$?
	if test "$RET" != "0"; then
		echo "$SCRIPT_NAME faled. GCC exit code was $RET - see $LOGFILE"
		if test "$SH_DEBUG" != "1"; then
			echo "Failed command was:"
			echo "$GCC_COMPILE > $LOGFILE 2>&1"		
		fi
        exit $RET
    fi
	rm -f $LOGFILE $out.c $out.c_
    ofiles="$ofiles $out.o"
done

if [ $COMPILE_OBJ = 1 ]; then
	exit 0
fi

if test "$COMSPEC" != "" ; then 
	#NOTE: On Windows, dll's must be in the PATH to be loadabe at run-time
	#(There is no LD_LIBRARAY_PATH - system loader looks only in PATH)
	if test -d "$INFORMIXDIR/CSDK"; then
		LIB=CSDK/bin
	else
		LIB=bin
	fi
	GCC_INFX="-mms-bitfields \
		\"$INFORMIXDIR/$LIB/isqlt09a.dll\" \"$INFORMIXDIR/$LIB/igl4n304.dll\" \
		\"$INFORMIXDIR/$LIB/iglxn304.dll\" \"$INFORMIXDIR/$LIB/igo4n304.dll\" "
else
	GCC_INFX="$IFX_LIBS -L$INFORMIXDIR/lib/esql -L$INFORMIXDIR/lib"
fi

#DO NOT link in -lESQL_INFORMIX - it is dlopen()ed
LFLAGS="-L$AUBITDIR/lib -laubit4gl"

GCC_RUN="gcc $ofiles $other_args $GCC_INFX $LFLAGS $output"
echo $GCC_RUN
eval $GCC_RUN
RET=$?
if test "$RET" != "0"; then 
	if test -f $LOGFILE; then 
		cat $LOGFILE
	fi
fi
exit $RET


