+#!/bin/sh
+EXT=${target%?}
+dirname=${base%/*}
+
+if test -f "$dirname".pack; then
+ #we are below a pack directory
+ PACKDIR=`basename $dirname`
+ PACKINCLUDE="-I $dirname"
+elif test -f ${base}.pack -a -d ${base}; then
+ $REMAKE ${base}.pack
+ PACKINCLUDE="-I ${base}"
+ PACKDIR=`basename ${base}`
+ DOPACK=1
+fi
+if test "$PACKDIR"; then
+ PACKNAME=`echo $PACKDIR | cut -b1 | tr a-z A-Z`${PACKDIR#?}
+ if test "$NATIVE"; then
+ FORPACK="-for-pack $PACKNAME"
+ fi
+fi
+
+if test "$DOPACK"; then
+ modules=`cat ${base}.pack`
+ objects=`echo $modules | xargs tools/ocamlmoduledep.sh $NATIVE $PACKINCLUDE -I $SRC `
+else
+ $REMAKE ${base}.ml
+ modules=`$OCAMLDEP -modules ${base}.ml | cut -f 2- -d ':'`
+ objects=`tools/ocamlmoduledep.sh $NATIVE $PACKINCLUDE -I $SRC $modules`
+fi
+
+$REMAKE $objects
+
+deps=`echo $objects | sed "s/[.]cm[i${EXT}]/.dep/g"`
+rm -f ${base}.dep; touch ${base}.dep
+$REMAKE $deps
+for f in $deps; do
+ for g in `cat $f`; do
+ if grep -q $g ${base}.dep; then continue; fi
+ echo $g >> ${base}.dep
+ done
+ if grep -q $f ${base}.dep; then continue; fi
+ echo $f >> ${base}.dep
+done
+if test -f ${base}.mli; then $REMAKE -v PACKINCLUDE="$PACKINCLUDE" ${base}.cmi; fi
+if test "$DOPACK"; then
+ sorted_objects=`cat ${base}.dep | grep "$PACKDIR" | sed "s/[.]dep/.cm${EXT}/" | xargs`
+ cat ${base}.dep | grep -v "$PACKDIR" > ${base}.tmp
+ mv ${base}.tmp ${base}.dep
+ $COMPILE -o ${target} -pack $sorted_objects
+else
+ $COMPILE -o ${target} $FORPACK -c $PACKINCLUDE ${base}.ml
+fi