befd4cdfd1b110a091b39017d2a0eb3ce1f195eb
[tatoo.git] / tools / ocamlmoduledep.sh
1 #!/bin/sh
2
3
4 PROG="$0"
5 CMDLINE="$*"
6 usage() {
7     echo "$PROG [-native] [-I dir .. -I dir] Module"
8 }
9
10 INCLUDES=""
11 MODULES=""
12 NATIVE=0
13 INTER=0
14 while true; do
15     case $1 in
16         -I)
17             dir=`echo "$2" | sed "s:^+:$(ocamlc -where)/:"`
18             INCLUDES="$INCLUDES
19 $2"
20             shift
21             ;;
22         -native)
23             NATIVE=1
24             ;;
25         -inter)
26             INTER=1
27             ;;
28         [A-Z]*)
29                 MODULES="$MODULES $1"
30             ;;
31         *)
32             echo "ERROR: '$1'"
33             usage
34             exit 2
35             ;;
36     esac
37     shift
38     if test "$#" -eq 0; then break; fi
39 done
40 if test "$NATIVE" = "1"; then
41     ext=cmx
42 else
43     ext=cmo
44 fi
45
46 for MODULE in $MODULES; do
47     module="$(echo $MODULE | cut -b1 | tr A-Z a-z)$(echo $MODULE | cut -b2-)"
48     echo "$INCLUDES" | while read include; do
49         base="$include/$module"
50         if test -z "$include"; then continue; fi
51         if test  \( "$INTER" = "1" \) -a \( -f "$base".mli \) ; then
52                 echo -n "$base"."cmi "
53         elif test -f "$base".ml -o -f "$base".mly -o -f "$base".mll -o -f "$base".pack; then
54             echo -n "$base"."$ext "
55             break
56         elif test -f "$base".mli; then
57             echo -n "$base"."cmi "
58             break
59         fi
60     done
61 done
62 echo