XDKDEV="C:\Program Files\Hummingbird\Connectivity\7.10\Exceed\XDK"
MSDEV="C:/Program Files/Microsoft SDK"
MSVC="C:/Program Files/Microsoft Visual Studio"
BINMODEDIR="C:\Program Files\Microsoft Visual Studio\VC98\Lib"

stdout=/tmp/stdo$$
stderr=/tmp/stde$$

args=
libpath=
libs=
incpath="$INCPATH"
incpath="$incpath /I\"$XDKDEV\Include\""

defs='/D "WIN32" /D "CONSOLE" /D "MOTIFAPP"'
linkopts="/subsystem:console"

# defs for optimized 
optdefs='/Oispb1 /D "NDEBUG"'
optlinkopts="/incremental:no"

#defs for debugged
debugdefs='/Zi /Gi /Od /D "_DEBUG"'
debuglinkopts="/DEBUG /incremental:yes"

undefs=
cfiles=
mounts=
echo=0
tmp="$MSDEV\Lib"

prelibs="$prelibs wsock32.lib"

deflibs="$deflibs $LIBPATH kernel32.lib"
deflibs="$deflibs $LIBPATH user32.lib"
deflibs="$deflibs $LIBPATH Advapi32.lib"
deflibs="$deflibs $LIBPATH Shell32.lib"
deflibs="$deflibs /NODEFAULTLIB:LIBC"

#deflibs="$deflibs user32.lib gdi32.lib winspool.lib"
#deflibs="$deflibs comdlg32.lib advapi32.lib shell32.lib"
#deflibs="$deflibs uuid.lib wsock32.lib"
#deflibs="$deflibs -NODEFAULTLIB:LIBCMT -NODEFAULTLIB:LIBC"

link=1
compile=1
mkdep=0
map=
oset=0
oname=
dllflag=/MD
dlllib=
binmode=
dfile=
deffile=

cleanup() { 

	for i in $delfiles foo ; do
		if test -f $i ; then
			rm -f $i
		fi
	done

	for i in $cfiles foo ; do
		if test ! "$i" = foo ; then
			file=`echo $i | sed -e "s?\.cpp??"`
			if test -f $file.obj ; then
				mv $file.obj $file.o
			fi
                        file1=`echo $file | sed "s/.*\///"`
                        if test -f $file1.obj ; then
                                mv $file1.obj $file1.o
                        fi
		fi
	done

#	if test -f $oname.exe ; then
#		mv $oname.exe foo
#		mv foo $oname
#	fi
	if test -f $stdout ; then
		rm $stdout
	fi
	if test -f $stderr ; then
		rm $stderr
	fi
	if test -f foo$$ ; then
		rm foo$$
	fi
	if test -f bar$$ ; then
		rm bar$$
	fi
	if test -f foobar$$ ; then
		rm foobar$$
	fi
}

trap 'cleanup; exit 1' 1 2 15

for i in $* ; do
	case $i in 
                -staticRunTime)
                         dlllib="libcmt.lib"
                         dllflag="-MT" ;;
                -dllRunTime)
                         dlllib="msvcrt.lib"
                         dllflag="-MD" ;;
                -o)      # args="$args $i"
                         oset=1 ;;
		-map)	 map="/MAP" ;;
                -Wp*)    dfile=`echo $i | sed "s/^.*\(.deps.*\)/ \1/"`
                         mkdep=1 ;;
		-M)	 compile=0
			 dfile=
			 mkdep=1 ;;
		-g)      defs="$defs $debugdefs" 
			 linkopts="$linkopts $debuglinkopts" ;;
		-O2)	 defs="$defs $optdefs"
			 linkopts="$linkopts $optlinkopts" ;;
		-mount*) mounts="$mounts $i" ;;
		-D*)     defs="$defs `echo $i | sed 's?-D?/D?'`" ;; 
		-U*)     undefs="$undefs `echo $i | sed 's?-U?/U?'`" ;;
                -I*)     tmp=`echo $i | sed "s/-I//"`
                         tmp2=`cygpath -a --windows "$tmp"`
                         if test -n "$tmp2" ; then
                           incpath="$incpath /I\"$tmp2\""
                         fi  ;;
                -L*)     tmp=`echo $i | sed "s/-L//"`
                         tmp2=`cygpath -w -s $tmp`
                         if test -n "$tmp2" ; then
                           libpath="$libpath /libpath:\"$tmp2\""
                         fi ;;
		-l*)     libs="$libs `echo $i | sed 's?-l??'`.lib" ;;
		-echo)   echo=1 ;;
		-c)      link=0
			 args="$args $i" ;;
		-E)	 link=0
			 args="$args /E" ;;
		-B)	 LIB="$LIB;$BINMODEDIR"
			 binmode="BINMODE.OBJ" ;;
		*.cpp)	 
			 cfiles="$cfiles $i" ;;
                *.C)     ofname=$i
			 fname=`echo $i | sed "s?\.C?.cpp?"`
                         cp $i $fname
                         delfiles="$delfiles $fname"
			 cfiles="$cfiles $fname" ;;
                *.cc)    fname=`echo $i | sed "s?\.cc?.cpp?"`
                         cp $i $fname
                         delfiles="$delfiles $fname"
			 cfiles="$cfiles $fname" ;;
                -def*)   tmp=`echo $i | sed "s/-def//"`
                         tmp2=`cygpath -w -s "$tmp"`
                         deffile="/DEF:\"$tmp2\"" ;;
                -module) dllflag="$dllflag /LD"
                         linkmodule="/DLL /EXPORT:DXEntry" ;;
                *)       if test $oset = 1 ; then
                             oname=$i
                             args="$args /Fe$i"
                             oset=0
			 else
			     args="$args $i"
                         fi ;;
	esac
done


tmp=`cygpath -a --windows "$MSDEV/Include"`
msincs="/I\"$tmp\""
incpath="$incpath $msincs"
#incpath=`echo $incpath | sed 's/\\\\/\\\\\\\\/g'`
#libpath=`echo $libpath | sed 's/\\\\/\\\\\\\\/g'`

if test $mkdep = 1; then
    if test -f foo$$ ; then
	rm foo$$
    fi
    touch foo$$

    MSVC_INCLUDE=\"$MSVC/Vc98/Include\"
    MSVC_COMMON_INCLUDE=\"$MSVC/Common/Include\"
    cmd="makedepend -ffoo$$ -Dintelnt -D_WIN32 -D_M_IX86=500 -Y -I$MSVC_INCLUDE -I$MSVC_COMMON_INCLUDE $fname"
    if test $echo = 1 ; then
	echo $cmd
    fi
    eval $cmd 2>/dev/null
    sed -e "/Microsoft/d"  \
	-e "/DO NOT DELETE/d"  \
	-e "/^$/d" -e "s/^.*://"  \
		< foo$$ > bar$$
    if test -f foo$$ ; then
	rm foo$$
    fi
    if test `cat bar$$ | wc -l` -eq 0 ; then
	echo `echo $fname | sed "s/\.cpp/.o/"`: $ofname > foobar$$
    else
	echo `echo $fname | sed "s/\.cpp/.o/"`: $ofname "\\" > foobar$$
	sed  -e '1,$s/$/ \\/' -e '$s/\\/ /' < bar$$ >> foobar$$
    fi
    if test "$dfile" != ""
    then
	mv foobar$$ $dfile
    else
	cat foobar$$
    fi
    err=0
fi

if test $compile = 1
then

    if test $link = 1 ; then
	cmd="cl -nologo $incpath $msincs $defs $undefs $args $cfiles $dllflag /link $libpath $prelibs $libs $deflibs $dlllib $map $binmode $linkopts $linkmodule $deffile" 
    else
	cmd="cl $dllflag -nologo $incpath $defs $undefs $args $cfiles"
    fi

    for i in $mounts foo ; do
	if test ! "$i" = foo ; then
	    src=`echo $i | sed -e "s/-mount://" | sed -e "s/=.*//"`
	    dst=`echo $i | sed -e "s/-mount.*=//"`
	    cmd=`echo $cmd | sed "s?$src?$dst?g"`
	fi
    done

    if test $echo = 1 ; then
	echo $cmd
    fi

    if eval $cmd 1> $stdout 2> $stderr ; then
        s=`cat $stdout $stderr | grep "error C[0-9].*:"`
        if test "$s" = "" ; then
	    err=0;
        else
	    err=1;
        fi
    else
        err=1
    fi

    if test $link = 1 ; then
	cat $stdout | grep -v "object file assumed" >&1
	cat $stderr | grep -v "object file assumed" >&2
    else
	cat $stdout | sed "1d" >&1
	cat $stderr | sed "1d" >&2
    fi
fi

cleanup

exit $err
