X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=tools%2Focamlmoduledep.sh;h=857531226f2048ab18bd01de6217c9d378146c4f;hp=3bab18669ef3a3c5fe32d86f76f3284084d9a28e;hb=31d45495fda9a110fd348f8b492761c28b434ec9;hpb=31514b441ce29f78c114e9d912ba09f37f91d257 diff --git a/tools/ocamlmoduledep.sh b/tools/ocamlmoduledep.sh index 3bab186..8575312 100755 --- a/tools/ocamlmoduledep.sh +++ b/tools/ocamlmoduledep.sh @@ -4,23 +4,27 @@ PROG="$0" CMDLINE="$*" usage() { - echo "$PROG [-native] [-I dir .. -I dir] Module" + echo "$PROG [-inter] [-native] [-I dir .. -I dir] Module" } INCLUDES="" MODULES="" NATIVE=0 +INTER=0 while true; do case $1 in -I) dir=`echo "$2" | sed "s:^+:$(ocamlc -where)/:"` INCLUDES="$INCLUDES -$2" +$dir" shift ;; -native) NATIVE=1 ;; + -inter) + INTER=1 + ;; [A-Z]*) MODULES="$MODULES $1" ;; @@ -42,13 +46,19 @@ fi for MODULE in $MODULES; do module="$(echo $MODULE | cut -b1 | tr A-Z a-z)$(echo $MODULE | cut -b2-)" echo "$INCLUDES" | while read include; do + if test -z "$include"; then continue; fi base="$include/$module" - if test -z "$include"; then continue; fi - if test -f "$base".ml -o -f "$base".mly -o -f "$base".mll -o -f "$base".pack; then - echo -n "$base"."$ext " + if test \( "$INTER" = "1" \) -a \( -f "$base".mli \) ; then + ## if we want to depend only on cmi of a module + /bin/echo -n "$base"."cmi " + elif test -f "$base".ml -o -f "$base".mly -o -f "$base".mll -o -f "$base".pack -o -f "$base".ml.str; then + ## else we depend on the implementation + /bin/echo -n "$base"."$ext " break elif test -f "$base".mli; then - echo -n "$base"."cmi " + ## and fall back on depending on the cmi if the cmx is not available + ## (which prevents cross-module inlining in the case of cmx) + /bin/echo -n "$base"."cmi " break fi done