X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=tools%2Focamldriver.sh;fp=tools%2Focamldriver.sh;h=2425147bf75ac52e77f7efc65460ebfd923133d7;hp=0000000000000000000000000000000000000000;hb=2b85475321db7b38d4df0869fb51d38d98bb6671;hpb=31514b441ce29f78c114e9d912ba09f37f91d257 diff --git a/tools/ocamldriver.sh b/tools/ocamldriver.sh new file mode 100644 index 0000000..2425147 --- /dev/null +++ b/tools/ocamldriver.sh @@ -0,0 +1,52 @@ +#!/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