From 2b85475321db7b38d4df0869fb51d38d98bb6671 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kim=20Nguy=E1=BB=85n?= Date: Wed, 24 Jul 2013 23:49:44 +0200 Subject: [PATCH] Factorise common bits of Remakefile in tools/ocamldriver.sh --- Remakefile.in | 106 ++++++------------------------------------- tools/ocamldriver.sh | 52 +++++++++++++++++++++ 2 files changed, 66 insertions(+), 92 deletions(-) create mode 100644 tools/ocamldriver.sh diff --git a/Remakefile.in b/Remakefile.in index cb9fc4a..3fa1d73 100644 --- a/Remakefile.in +++ b/Remakefile.in @@ -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 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 -- 2.17.1