Factorise common bits of Remakefile in tools/ocamldriver.sh
authorKim Nguyễn <kn@lri.fr>
Wed, 24 Jul 2013 21:49:44 +0000 (23:49 +0200)
committerKim Nguyễn <kn@lri.fr>
Wed, 24 Jul 2013 21:49:44 +0000 (23:49 +0200)
Remakefile.in
tools/ocamldriver.sh [new file with mode: 0644]

index cb9fc4a..3fa1d73 100644 (file)
@@ -72,102 +72,24 @@ distclean: clean test_clean
        fi
 
 %.cmx %.dep:
-       REMAKE="$(REMAKE) -v OCAMLNATIVE=-native"
        base=$*
-       dirname=${base%/*}
-       if test -f "$dirname".pack; then
-               #we are below a pack directory
-               PACKDIR=`basename $dirname`
-               PACKINCLUDE="-I $dirname"
-       elif test -f $*.pack -a -d $*; then
-               $(REMAKE) $*.pack
-               PACKINCLUDE="-I $*"
-               PACKDIR=`basename $*`
-               DOPACK=1
-       fi
-       if test "$PACKDIR"; then
-               PACKNAME=`echo $PACKDIR | cut -b1 | tr a-z A-Z`${PACKDIR#?}
-               FORPACK="-for-pack $PACKNAME"
-       fi
-
-       if test "$DOPACK"; then
-               modules=`cat $*.pack`
-               objects=`echo $modules | xargs tools/ocamlmoduledep.sh -native $PACKINCLUDE -I $(SRC) `
-       else
-               $REMAKE $*.ml
-               modules=`$(OCAMLDEP) $(OCAMLFINDFLAGS) -modules $*.ml | cut -f 2- -d ':'`
-               objects=`tools/ocamlmoduledep.sh -native $PACKINCLUDE -I $(SRC) $modules`
-       fi
-
-       $REMAKE $objects
-
-       deps=`echo $objects | sed 's/[.]cm[ix]/.dep/g'`
-       rm -f $*.dep; touch $*.dep
-       $(REMAKE) $deps
-       for f in $deps; do
-         for g in `cat $f`; do
-             if grep -q $g $*.dep; then continue; fi
-             echo $g >> $*.dep
-          done
-          if grep -q $f $*.dep; then continue; fi
-          echo $f >> $*.dep
-       done
-       if test -f $*.mli; then $REMAKE -v PACKINCLUDE="$PACKINCLUDE" $*.cmi; fi
-       if test "$DOPACK"; then
-               sorted_objects=`cat $*.dep | grep "$PACKDIR" | sed 's/[.]dep/.cmx/' | xargs`
-               cat $*.dep | grep -v "$PACKDIR" > $*.tmp
-               mv $*.tmp $*.dep
-               $(OCAMLOPT) -o $@ -pack $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS) $sorted_objects
-       else
-               $(OCAMLOPT) -o $@ $FORPACK -c $PACKINCLUDE $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS) $*.ml
-       fi
+       target=$@
+       NATIVE=-native
+       REMAKE="$(REMAKE) -v OCAMLNATIVE=$NATIVE"
+       OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
+       SRC=$(SRC)
+       COMPILE="$(OCAMLOPT) $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS)"
+       . tools/ocamldriver.sh
 
 %.cmo %.dep:
-       REMAKE="$(REMAKE)"
        base=$*
-       dirname=${base%/*}
-       if test -f "$dirname".pack; then
-               #we are below a pack directory
-               PACKDIR=`basename $dirname`
-               PACKINCLUDE="-I $dirname"
-       elif test -f $*.pack -a -d $*; then
-               PACKINCLUDE="-I $*"
-               PACKDIR=`basename $*`
-               DOPACK=1
-       fi
-
-       if test "$DOPACK"; then
-               modules=`cat $*.pack`
-               objects=`echo $modules | xargs tools/ocamlmoduledep.sh $PACKINCLUDE -I $(SRC) `
-               $REMAKE $objects
-       else
-               $REMAKE $*.ml
-               modules=`$(OCAMLDEP) $(OCAMLFINDFLAGS) -modules $*.ml | cut -f 2- -d ':'`
-               objects=`tools/ocamlmoduledep.sh $PACKINCLUDE -I $(SRC) $modules`
-               $REMAKE $objects
-       fi
-
-       deps=`echo $objects | sed 's/[.]cm[io]/.dep/g'`
-       rm -f $*.dep; touch $*.dep
-       $(REMAKE) $deps
-       for f in $deps; do
-          for g in `cat $f`; do
-             if grep -q $g $*.dep; then continue; fi
-             echo $g >> $*.dep
-          done
-          if grep -q $f $*.dep; then continue; fi
-          echo $f >> $*.dep
-       done
-
-       if test -f $*.mli; then $REMAKE -v PACKINCLUDE="$PACKINCLUDE" $*.cmi; fi
-       if test "$DOPACK"; then
-               sorted_objects=`cat $*.dep | grep "$PACKDIR" | sed 's/[.]dep/.cmo/' | xargs`
-               cat $*.dep | grep -v "$PACKDIR" > $*.tmp
-               mv $*.tmp $*.dep
-               $(OCAMLC) -o $@ -pack $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS) $sorted_objects
-       else
-               $(OCAMLC) -o $@ -c $PACKINCLUDE $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS)  $*.ml
-       fi
+       target=$@
+       NATIVE=
+       REMAKE="$(REMAKE) -v OCAMLNATIVE=$NATIVE"
+       OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
+       SRC=$(SRC)
+       COMPILE="$(OCAMLC) $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS)"
+       . tools/ocamldriver.sh
 
 %.cmi:
        $(REMAKE) $*.mli
diff --git a/tools/ocamldriver.sh b/tools/ocamldriver.sh
new file mode 100644 (file)
index 0000000..2425147
--- /dev/null
@@ -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