Make the main target more generic, to allow compilation of
[tatoo.git] / Remakefile.in
1 OCAMLFINDPACKAGES = "ulex,unix,expat,camlp4.macro"
2 OCAMLFINDSYNTAX = camlp4o
3 OCAMLFINDPPOPTS = $(addprefix "-ppopt ", @CAMLP4FLAGS@ -I include)
4 OCAMLFINDINCLUDES = $(addprefix "-I ", src)
5 OCAMLFINDFLAGS = -syntax $(OCAMLFINDSYNTAX) -package $(OCAMLFINDPACKAGES)  \
6         $(OCAMLFINDPPOPTS) $(OCAMLFINDINCLUDES)
7 OCAMLFINDLINKFLAGS = -linkpkg
8 ODEP=tools/odeps.sh @OCAMLDEP@
9 BIN=@PACKAGE_TARNAME@
10 EXE=@EXE@
11
12
13
14 Remakefile: Remakefile.in config.status
15         ./config.status Remakefile
16
17 configure config.status: configure.in
18         autoconf
19         ./config.status --recheck
20
21 %.native:
22         base=${1%.native}
23         src=${base}.ml
24         obj=${base}.cmx
25         dir=$(dirname $1)
26         ./remake -v OCAMLDEPNATIVE=-native "$obj"
27         SRCS=$(ls "$dir"/*.cmx | sed 's/\.cmx/.ml/g')
28         OBJS=$(@OCAMLDEP@ $OCAMLDEPNATIVE $OCAMLFINDFLAGS -modules $SRCS | tools/osort.sh cmx)
29         @OCAMLOPT@ -o "$1"  @OCAMLFLAGS@ @OCAMLOPTFLAGS@ $OCAMLFINDLINKFLAGS $OCAMLFINDFLAGS $OBJS
30
31 %.byte:
32         base=${1%.byte}
33         src=${base}.ml
34         obj=${base}.cmo
35         dir=$(dirname $1)
36         ./remake "$obj"
37         OBJS=""
38         for i in "$dir"/*.cmi; do
39                 ibase=${i%.cmi}
40                 if test -f "${ibase}.ml" -o -d "${ibase}" -o -f "${ibase}.mly" -o -f "${ibase}.mll"; then
41                         OBJS="$OBJS ${ibase}.cmo"
42                 fi
43         done
44         ./remake $OBJS
45         SRCS=$(ls "$dir"/*.cmo | sed 's/\.cmo/.ml/g')
46         SORTED_OBJS=$(@OCAMLDEP@ $OCAMLFINDFLAGS -modules $SRCS | tools/osort.sh cmo)
47         @OCAMLC@ -o "$1"  @OCAMLFLAGS@ @OCAMLCFLAGS@ $OCAMLFINDLINKFLAGS $OCAMLFINDFLAGS $SORTED_OBJS
48
49 %.cmx:
50         target="$1"
51         base="${target%.cmx}"
52         src="${base}.ml"
53         if [ -f "$src" ]; then
54                 ./remake "$src"
55                 DEPS=$( $ODEP -native $OCAMLFINDFLAGS $PACKINCLUDE "$src" )
56                 echo "$DEPS" | ./remake -v PACKINCLUDE="$PACKINCLUDE" -v OCAMLDEPNATIVE=-native -v OCAMLFORPACK="$OCAMLFORPACK" -r "$target"
57                 @OCAMLOPT@ -o "$target" -c @OCAMLFLAGS@ @OCAMLOPTFLAGS@ $OCAMLFORPACK $OCAMLFINDFLAGS $PACKINCLUDE "$src"
58         elif [ -d "$base" ];    then
59                 modname=$(basename "$base")
60                 packname=$(echo "$modname" | sed 's/\(.*\)/\u\1/')
61                 OBJS=$(ls "$base"/*.ml | sed 's/\.ml/.cmx/g')
62                 ./remake -v PACKINCLUDE="-I $base" -v OCAMLFORPACK="-for-pack $packname" $OBJS
63                 SORTED_OBJS=$(@OCAMLDEP@ -native $OCAMLFINDFLAGS -I $base -modules "$base"/*.ml | tools/osort.sh cmx)
64                 @OCAMLOPT@ -o "$target" -pack $SORTED_OBJS
65         elif [ -f "$base".mly ]; then
66                 ./remake "$base".mly
67                 @OCAMLYACC@ "$base".mly
68                 $ODEP $OCAMLDEPNATIVE $OCAMLFINDFLAGS "$src" | \
69                         ./remake -v PACKINCLUDE="$PACKINCLUDE" -v OCAMLDEPNATIVE=-native -v OCAMLFORPACK="$OCAMLFORPACK" -r "$target"
70                 @OCAMLOPT@ -o "$target" -c @OCAMLFLAGS@ @OCAMLOPTFLAGS@ $OCAMLFORPACK $OCAMLFINDFLAGS $PACKINCLUDE "$src"
71         fi
72
73
74 %.cmo:
75         target="$1"
76         base="${target%.cmo}"
77         src="${base}.ml"
78         if [ -f "$src" ]; then
79                 ./remake "$src"
80                 DEPS=$( $ODEP $OCAMLFINDFLAGS $PACKINCLUDE "$src" )
81                 echo "$DEPS" | ./remake -v PACKINCLUDE="$PACKINCLUDE" -r "$target"
82                 @OCAMLC@ -o "$target" -c @OCAMLFLAGS@ @OCAMLCFLAGS@ $OCAMLFINDFLAGS $PACKINCLUDE "$src"
83         elif [ -d "$base" ];    then
84                 modname=$(basename "$base")
85                 packname=$(echo "$modname" | sed 's/\(.*\)/\u\1/')
86                 OBJS=$(ls "$base"/*.ml | sed 's/\.ml/.cmo/g')
87                 ./remake -v PACKINCLUDE="-I $base" $OBJS
88                 SORTED_OBJS=$(@OCAMLDEP@ $OCAMLFINDFLAGS -I $base -modules "$base"/*.ml | tools/osort.sh cmo)
89                 @OCAMLC@ -o "$target" -pack $SORTED_OBJS
90         elif [ -f "$base".mly ]; then
91                 ./remake "$base".mly
92                 @OCAMLYACC@ "$base".mly
93                 $ODEP $OCAMLFINDFLAGS $PACKINCLUDE "$src" | ./remake -v PACKINCLUDE="$PACKINCLUDE" -r "$target"
94                 @OCAMLC@ -o "$target" -c @OCAMLFLAGS@ @OCAMLCFLAGS@ $OCAMLFINDFLAGS $PACKINCLUDE "$src"
95         fi
96
97
98
99 %.cmi:
100         target="$1"
101         base=${target%.cmi}
102         if test -f "$base".mli; then
103                 ./remake "$base".mli
104                 src=${base}.mli
105                 DEPS=$($ODEP $OCAMLDEPNATIVE $OCAMLFINDFLAGS $PACKINCLUDE "$src")
106                 echo "$DEPS" | ./remake -v PACKINCLUDE="$PACKINCLUDE" -v OCAMLDEPNATIVE="$OCAMLDEPNATIVE" -v OCAMLFORPACK="$OCAMLFORPACK" -r "$target"
107                 if test -z "$OCAMLDEPNATIVE"; then
108                         @OCAMLC@ -o "$target" -c @OCAMLFLAGS@ @OCAMLCFLAGS@ $OCAMLFINDFLAGS $PACKINCLUDE "$src"
109                 else
110                         @OCAMLOPT@ -o "$target" -c @OCAMLFLAGS@ @OCAMLOPTFLAGS@ $OCAMLFINDFLAGS $PACKINCLUDE "$src"
111                 fi
112         else
113                 if test -z "$OCAMLDEPNATIVE"; then
114                   obj=${base}.cmo
115                 else
116                   obj=${base}.cmx
117                 fi
118                 ./remake -v PACKINCLUDE="$PACKINCLUDE" -v OCAMLDEPNATIVE="$OCAMLDEPNATIVE" -v OCAMLFORPACK="$OCAMLFORPACK" "$obj"
119         fi
120
121 clean:
122         find src -name '*.cm*' -o -name '*.o' -o -name '*.byte' -o -name '*.native' -o -name '*.mll' -o -name '*.mly' | while read file; do
123         case "$file" in
124                 *.mll)
125                         rm -f "${file%.mll}.ml"
126                         ;;
127                 *.mly)
128                         rm -f "${file%.mly}.ml" "${file%.mly}.mli"
129                         ;;
130                 *)
131                         rm -f "$file"
132                         ;;
133         esac
134         done
135
136 distclean: clean
137         rm -rf config.status configure config.log autom4te.cache .remake Remakefile remake
138