#  Oukseh Lee
#
#  Copyright(c) 2000-2004 Research On Program Analysis System
#  http://ropas.snu.ac.kr
#
#  All rights reserved. This file is distributed under the terms of
#  an Open Source License.

# The main Makefile

!include config\Makefile.nt

#### COOKCU ##### BEGIN

CAMLC=boot\ncamlrun boot\nmlc -I boot
CAMLOPT=boot\ncamlrun .\nmlo -I stdlib -nontyping
COMPFLAGS=$(INCLUDES)
LINKFLAGS=
CAMLYACC=boot\ocamlyacc
NYACC=boot\nyacc
YACCFLAGS=-v
NLEX=boot\ncamlrun boot\nlex
CAMLLEX=boot\ncamlrun boot\ocamllex

DEPFLAGS=$(INCLUDES)
CAMLRUN=boot\ncamlrun
MKDIR=mkdir -p
NEWCAMLC=$(CAMLC) -nontyping
NMLDEP=tools\nmldep\nmldep

INCLUDES=-I utils -I parser -I ocaml/parsing -I ocaml/typing \
         -I typing -I ocaml/bytecomp -I ocaml/asmcomp \
		 -I ocaml/driver -I ocaml/toplevel \
         -I main -I n2caml -I lambda

UTILS=utils/misc.cmo utils/tbl.cmo utils/config.cmo \
  utils/clflags.cmo utils/terminfo.cmo utils/ccomp.cmo \
  utils/warnings.cmo

OPTUTILS=$(UTILS)

PARSING=parser/linenum.cmo parser/location.cmo \
  ocaml/parsing/longident.cmo \
  ocaml/parsing/syntaxerr.cmo ocaml/parsing/parser.cmo \
  ocaml/parsing/lexer.cmo ocaml/parsing/parse.cmo ocaml/parsing/printast.cmo

TYPING=ocaml/typing/ident.cmo ocaml/typing/path.cmo \
  ocaml/typing/primitive.cmo ocaml/typing/types.cmo \
  ocaml/typing/btype.cmo \
  ocaml/typing/subst.cmo ocaml/typing/predef.cmo \
  ocaml/typing/datarepr.cmo ocaml/typing/env.cmo \
  ocaml/typing/typedtree.cmo ocaml/typing/ctype.cmo \
  ocaml/typing/printtyp.cmo ocaml/typing/includeclass.cmo \
  ocaml/typing/mtype.cmo ocaml/typing/includecore.cmo \
  ocaml/typing/includemod.cmo ocaml/typing/parmatch.cmo \
  ocaml/typing/typetexp.cmo ocaml/typing/typecore.cmo \
  ocaml/typing/typedecl.cmo ocaml/typing/typeclass.cmo \
  ocaml/typing/typemod.cmo

COMP=ocaml/bytecomp/lambda.cmo ocaml/bytecomp/printlambda.cmo \
  ocaml/bytecomp/typeopt.cmo ocaml/bytecomp/switch.cmo ocaml/bytecomp/matching.cmo \
  ocaml/bytecomp/translobj.cmo ocaml/bytecomp/translcore.cmo \
  ocaml/bytecomp/translclass.cmo ocaml/bytecomp/translmod.cmo \
  ocaml/bytecomp/simplif.cmo ocaml/bytecomp/runtimedef.cmo

BYTECOMP=ocaml/bytecomp/meta.cmo ocaml/bytecomp/instruct.cmo \
  ocaml/bytecomp/bytegen.cmo \
  ocaml/bytecomp/printinstr.cmo ocaml/bytecomp/opcodes.cmo \
  ocaml/bytecomp/emitcode.cmo \
  ocaml/bytecomp/bytesections.cmo ocaml/bytecomp/dll.cmo ocaml/bytecomp/symtable.cmo \
  ocaml/bytecomp/bytelibrarian.cmo ocaml/bytecomp/bytelink.cmo

ASMCOMP=ocaml\asmcomp\arch.cmo ocaml\asmcomp\cmm.cmo ocaml\asmcomp\printcmm.cmo \
  ocaml\asmcomp\reg.cmo ocaml\asmcomp\mach.cmo ocaml\asmcomp\proc.cmo \
  ocaml\asmcomp\clambda.cmo ocaml\asmcomp\compilenv.cmo \
  ocaml\asmcomp\closure.cmo ocaml\asmcomp\cmmgen.cmo \
  ocaml\asmcomp\printmach.cmo ocaml\asmcomp\selectgen.cmo ocaml\asmcomp\selection.cmo \
  ocaml\asmcomp\comballoc.cmo ocaml\asmcomp\liveness.cmo \
  ocaml\asmcomp\spill.cmo ocaml\asmcomp\split.cmo \
  ocaml\asmcomp\interf.cmo ocaml\asmcomp\coloring.cmo \
  ocaml\asmcomp\reloadgen.cmo ocaml\asmcomp\reload.cmo \
  ocaml\asmcomp\printlinear.cmo ocaml\asmcomp\linearize.cmo \
  ocaml\asmcomp\schedgen.cmo ocaml\asmcomp\scheduling.cmo \
  ocaml\asmcomp\emitaux.cmo ocaml\asmcomp\emit.cmo ocaml\asmcomp\asmgen.cmo \
  ocaml\asmcomp\asmlink.cmo ocaml\asmcomp\asmlibrarian.cmo


NUTILS = utils/nconfig.cmo utils/nmisc.cmo

NTYPER = typing/setmap.cmo typing/debug.cmo \
         typing/scope.cmo typing/ntypes.cmo typing/printty.cmo \
         typing/error.cmo \
         typing/unify.cmo typing/nenv.cmo typing/printenv.cmo typing/npredef.cmo \
         typing/absyn.cmo typing/infer.cmo typing/dump.cmo \
         typing/init.cmo

NPARSER=parser/ast_gen.cmo parser/info.cmo \
    parser/string_ast.cmo parser/nsyntaxerr.cmo parser/nparser.cmo \
    parser/nlexer.cmo parser/postparse.cmo \
    parser/nparse.cmo

NTOCAML= n2caml/fake.cmo n2caml/ast2fake.cmo n2caml/nconvert.cmo \
  n2caml/strtbl.cmo n2caml/strtbl_build.cmo n2caml/n2caml.cmo \
  n2caml/absyn2ast.cmo lambda/record.cmo

NDRIVER=ocaml/driver/errors.cmo ocaml/driver/compile.cmo \
  main/nterrors.cmo main/ncompile.cmo \
  main/main_args.cmo main/noption.cmo main/nmain.cmo

OPTDRIVER=ocaml/driver/opterrors.cmo ocaml/driver/optcompile.cmo \
  main/nterrors.cmo main/ncompile.cmo main/optmain.cmo

NTOP=ocaml/driver/errors.cmo ocaml/driver/compile.cmo \
  main/nterrors.cmo main/ncompile.cmo\
  main/genprintval.cmo main/toploop.cmo \
  ocaml/toplevel/trace.cmo main/topdirs.cmo main/ntopmain.cmo

NTOPMAIN=main/ntopmain.cmo
NTOPLIB=main/toplevellib.cma

NCOMPOBJS= $(UTILS) $(NUTILS) $(PARSING) \
  $(TYPING) $(NTYPING) $(COMP) $(BYTECOMP) $(NPARSER) $(NTYPER) $(NTOCAML) $(NDRIVER)

NOPTOBJS=$(UTILS) $(NUTILS) $(PARSING) $(TYPING) $(COMP) \
        $(NPARSER) $(NTYPER) $(NTOCAML) $(ASMCOMP) $(OPTDRIVER)

NTOPLIBS=$(UTILS) $(NUTILS) $(PARSING) $(TYPING) $(NTYPING) \
  $(COMP) $(BYTECOMP) $(NPARSER) $(NTYPER) $(NTOCAML) $(NTOP)

NOBJS= $(NTOPLIB) $(NTOPMAIN)

EXPUNGEOBJS=utils/misc.cmo utils/tbl.cmo \
  utils/config.cmo utils/clflags.cmo \
  ocaml/typing/ident.cmo ocaml/typing/path.cmo ocaml/typing/types.cmo \
  ocaml/typing/btype.cmo \
  ocaml/typing/predef.cmo ocaml/bytecomp/runtimedef.cmo \
  ocaml/bytecomp/bytesections.cmo ocaml/bytecomp/dll.cmo \
  ocaml/bytecomp/symtable.cmo ocaml/toplevel/expunge.cmo

PERVASIVES=arg array buffer callback char digest filename format gc hashtbl \
  lexing list map obj parsing pervasives printexc printf queue random \
  set sort stack string stream sys oo genlex topdirs toploop weak lazy \
  marshal int32 int64 nativeint outcometree \
  arrayLabels listLabels stringLabels stdLabels \
  interop nml_setmaphash_ nml_typing_

NTYFILES=pervasives.nty stdlib.nty unix.nty

LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader
UNIXLIB=unix.cma unix.cmi unix.cmo libunix.lib


all: boot nmlc nml ntylib otherlibraries ntools

opt: runtimeopt nmlo libraryopt otherlibrariesopt

opt.opt: nmlc.opt nmlo.opt nlex.opt

rebuild: nmlc nml

ntylib::
	cd stdlib\nty & $(MAKEREC) all

boot:: config\m.h config\s.h
	cd ocaml\byterun & $(MAKEREC) all
	cp ocaml\byterun\ncamlrun.exe boot\ncamlrun.exe
	cd ocaml\yacc & $(MAKEREC) all
	cp ocaml\yacc\ocamlyacc.exe boot\ocamlyacc.exe
	cd tools\yacc & $(MAKEREC) all
	cp tools\yacc\nyacc.exe boot\nyacc.exe
	cd stdlib & $(MAKEREC) COMPILER=../boot/nmlc all
	cd stdlib & cp $(LIBFILES) ..\boot
	cp ocaml\byterun\libcamlrun.lib boot\libcamlrun.lib

config\m.h:
	cd config & cp m-nt.h m.h

config\s.h:
	cd config & cp s-nt.h s.h

clean::
	rm -f config/m.h config/s.h

clean::
	cd stdlib\nty & $(MAKEREC) clean

win32::
	cd config & cp m-nt.h m.h
	cd config & cp s-nt.h s.h

unix::  
	cd config & cp m-unix.h m.h
	cd config & cp s-unix.h s.h


nml: $(NOBJS) expunge
	$(CAMLC) $(LINKFLAGS) -linkall -o nml.tmp $(NOBJS)
	- $(CAMLRUN) .\expunge nml.tmp nml $(PERVASIVES)
	rm -f nml.tmp

clean::
	rm -f nml

nmlc: $(NCOMPOBJS)
	$(CAMLC) $(LINKFLAGS) -o nmlc $(NCOMPOBJS)

nmlc.opt: $(NCOMPOBJS:.cmo=.cmx)
	cd ocaml\asmrun & $(MAKEREC) meta.obj
	$(CAMLOPT) $(LINKFLAGS) -o nmlc.opt \
		$(NCOMPOBJS:.cmo=.cmx) ocaml\asmrun\meta.obj ocaml\asmrun\dynlink.obj

clean::
	rm -f nmlc

nmlo: $(NOPTOBJS)
	$(CAMLC) $(LINKFLAGS) -o nmlo $(NOPTOBJS)

nmlo.opt: $(NOPTOBJS:.cmo=.cmx)
	$(CAMLOPT) $(LINKFLAGS) -o nmlo.opt $(NOPTOBJS:.cmo=.cmx)

nlex.opt:
	cd lex & $(MAKEREC) allopt

clean::
	rm -f nmlo

ntools:: 
	cd tools & $(MAKEREC) all

clean::
	cd tools & $(MAKEREC) clean

clean::
	cd ocaml\tools & $(MAKEREC) clean

# Start up the system from the distribution compiler

# Installation
install::
	if not exist $(BINDIR) mkdir $(BINDIR)
	if not exist $(LIBDIR) mkdir $(LIBDIR)
	cd ocaml\byterun & $(MAKEREC) install
	echo $(LIBDIR)> $(LIBDIR)\ld.conf
	cp nmlc $(BINDIR)\nmlc.exe
	cp nml $(BINDIR)\nml.exe
	cd stdlib & $(MAKEREC) install
	cd stdlib\nty & $(MAKEREC) install
	cp main\toploop.cmi $(LIBDIR)\toploop.cmi
	cp main\topdirs.cmi $(LIBDIR)\topdirs.cmi
	cp main\ntopmain.cmo $(LIBDIR)\ntopmain.cmo
	cp main\toplevellib.cma $(LIBDIR)\toplevellib.cma
	$(NEWCAMLC) -a -o $(LIBDIR)\toplevellib.cma $(NTOPLIB)
	cp expunge $(LIBDIR)\expunge.exe
	cp ocaml\typing\outcometree.cmi $(LIBDIR)\outcometree.cmi
	cp ocaml\typing\outcometree.mli $(LIBDIR)\outcometree.mli
 	cd tools & $(MAKEREC) install
	for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) install & cd ..\..)
	copy /a README $(DISTRIB)\Readme.txt
	copy /a README.win32 $(DISTRIB)\Win32.txt
	copy /a LICENSE $(DISTRIB)\License.txt
	copy /a Changes $(DISTRIB)\Changes.txt
  
installopt:
	cd ocaml\asmrun & $(MAKEREC) install
	cp nmlo $(BINDIR)\nmlo.exe
	cd stdlib & $(MAKEREC) installopt
	for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) installopt & cd ..\..)

# The compiler

ocamlc: $(COMPOBJS)
	$(CAMLC) $(LINKFLAGS) -o ocamlc $(COMPOBJS)

clean::
	rm -f ocamlc

# The native-code compiler

ocamlopt: $(OPTOBJS)
	$(CAMLC) $(LINKFLAGS) -o ocamlopt $(OPTOBJS)

clean::
	rm -f ocamlopt

# The toplevel

ocaml: $(TOPOBJS) expunge
	$(CAMLC) $(LINKFLAGS) -linkall -o ocaml.tmp $(TOPOBJS)
	- $(CAMLRUN) .\expunge ocaml.tmp ocaml $(PERVASIVES)
	rm -f ocaml.tmp

main\toplevellib.cma: $(NTOPLIBS)
	$(CAMLC) -a -o $@ $(NTOPLIBS)

clean::
	rm -f ocaml/toplevel/toplevellib.cma

##### COOKCU ############################

parser/nparser.n: parser/nparser.ny
	$(NYACC) $(YACCFLAGS) parser/nparser.ny
clean::
	rm -f parser/nparser.n parser/nparser.output

beforedepend:: parser/nparser.n 

parser/nlexer.n: parser/nlexer.nl
	$(NLEX) parser/nlexer.nl

clean::
	rm -f parser/nlexer.n

beforedepend:: parser/nlexer.n

###############################################################


# The configuration file

#### COOKCU ####  utils/config.mlp -> utils/config.ml (config/Makefile)



# The configuration file

utils\config.ml: utils\config.mlp config\Makefile.nt
    @rm -f utils\config.ml
	    sed -e "s|%%%%DONTYPING%%%%|$(DONTYPING)|" \
		    -e "s|%%%%LIBDIR%%%%|$(LIBDIR:\=\\\\\\\\)|" \
		    -e "s|%%%%BYTERUN%%%%|ncamlrun|" \
		    -e "s|%%%%BYTECC%%%%|$(BYTECC) $(BYTECCCOMPOPTS)|" \
		    -e "s|%%%%BYTELINK%%%%|$(BYTECC) $(BYTECCLINKOPTS)|" \
		    -e "s|%%%%NATIVECC%%%%|$(NATIVECC) $(NATIVECCCOMPOPTS)|" \
		    -e "s|%%%%NATIVELINK%%%%|$(NATIVECC) $(NATIVECCLINKOPTS)|" \
		    -e "s|%%%%PARTIALLD%%%%|lib /nologo /debugtype:cv|" \
		    -e "s|%%%%BYTECCLIBS%%%%|$(BYTECCLIBS)|" \
		    -e "s|%%%%NATIVECCLIBS%%%%|$(NATIVECCLIBS)|" \
		    -e "s|%%%%ARCH%%%%|$(ARCH)|" \
		    -e "s|%%%%MODEL%%%%|$(MODEL)|" \
		    -e "s|%%%%SYSTEM%%%%|$(SYSTEM)|" \
		    -e "s|%%%%EXT_OBJ%%%%|.obj|" \
		    -e "s|%%%%EXT_ASM%%%%|.asm|" \
		    -e "s|%%%%EXT_LIB%%%%|.lib|" \
		    -e "s|%%%%EXT_DLL%%%%|.dll|" \
		    utils\config.mlp > utils\config.ml
    @attrib +r utils\config.ml




##### COOKCU ##### END

clean::
	rm -f utils\config.ml

beforedepend:: utils\config.ml

# The parser

ocaml\parsing\parser.mli ocaml\parsing\parser.ml: ocaml\parsing\parser.mly
	$(CAMLYACC) $(YACCFLAGS) ocaml\parsing\parser.mly

clean::
	rm -f ocaml\parsing\parser.mli ocaml\parsing\parser.ml ocaml\parsing\parser.output

beforedepend:: ocaml\parsing\parser.mli ocaml\parsing\parser.ml

# The lexer

ocaml\parsing\lexer.ml: ocaml\parsing\lexer.mll
	$(CAMLLEX) ocaml\parsing\lexer.mll

clean::
	rm -f ocaml\parsing\lexer.ml

beforedepend:: ocaml\parsing\lexer.ml

# The auxiliary lexer for counting line numbers

parser\linenum.ml: parser\linenum.mll
	$(CAMLLEX) parser\linenum.mll

clean::
	rm -f parser\linenum.ml

beforedepend:: parser\linenum.ml

# The numeric opcodes

ocaml\bytecomp\opcodes.ml: ocaml\byterun\instruct.h
	sed -n -e "/^enum/p" -e "s|,||g" -e "/^  /p" ocaml\byterun\instruct.h | \
        gawk -f ocaml\tools\make-opcodes > ocaml\bytecomp\opcodes.ml

clean::
	rm -f ocaml\bytecomp\opcodes.ml

beforedepend:: ocaml\bytecomp\opcodes.ml

# The predefined exceptions and primitives

ocaml\byterun\primitives:
	cd ocaml\byterun & $(MAKEREC) primitives

ocaml\bytecomp\runtimedef.ml: ocaml\byterun\primitives ocaml\byterun\fail.h
	echo let builtin_exceptions = ^[^| > ocaml\bytecomp\runtimedef.ml
	sed -n -e "s|.*/\* \(\"[A-Za-z_]*\"\) \*/$$|  \1;|p" ocaml\byterun\fail.h | \
        sed -e "$$s|;$$||" >> ocaml\bytecomp\runtimedef.ml
	echo ^|^] >> ocaml\bytecomp\runtimedef.ml
	echo let builtin_primitives = ^[^| >> ocaml\bytecomp\runtimedef.ml
	sed -e "s|.*|  \"^&\";|" -e "$$s|;$$||" ocaml\byterun\primitives \
        >> ocaml\bytecomp\runtimedef.ml
	echo ^|^] >> ocaml\bytecomp\runtimedef.ml

ocaml\asmcomp\arch.ml: ocaml\asmcomp\$(ARCH)\arch.ml
	cp ocaml\asmcomp\$(ARCH)\arch.ml ocaml\asmcomp\arch.ml

ocaml\asmcomp\proc.ml: ocaml\asmcomp\$(ARCH)\proc_nt.ml
	cp ocaml\asmcomp\$(ARCH)\proc_nt.ml ocaml\asmcomp\proc.ml

ocaml\asmcomp\selection.ml: ocaml\asmcomp\$(ARCH)\selection.ml
	cp ocaml\asmcomp\$(ARCH)\selection.ml ocaml\asmcomp\selection.ml

ocaml\asmcomp\reload.ml: ocaml\asmcomp\$(ARCH)\reload.ml
	cp ocaml\asmcomp\$(ARCH)\reload.ml ocaml\asmcomp\reload.ml

ocaml\asmcomp\scheduling.ml: ocaml\asmcomp\$(ARCH)\scheduling.ml
	cp ocaml\asmcomp\$(ARCH)\scheduling.ml ocaml\asmcomp\scheduling.ml

ocaml\asmcomp\emit.ml: ocaml\asmcomp\$(ARCH)\emit_nt.mlp ocaml\tools\cvt_emit
	boot\ncamlrun ocaml\tools\cvt_emit < ocaml\asmcomp\$(ARCH)\emit_nt.mlp > ocaml\asmcomp\emit.ml

clean::
	rm -f ocaml\asmcomp\arch.ml
	rm -f ocaml\asmcomp\proc.ml
	rm -f ocaml\asmcomp\selection.ml
	rm -f ocaml\asmcomp\emit.ml
	rm -f ocaml\asmcomp\reload.ml
	rm -f ocaml\asmcomp\scheduling.ml



clemn::
	rm -f ocaml\bytecomp\runtimedef.ml

beforedepend:: ocaml\bytecomp\runtimedef.ml

# Choose the right machine-dependent files

ocaml\tools\cvt_emit: ocaml\tools\cvt_emit.mll
	cd ocaml\tools && $(MAKEREC) cvt_emit

# The "expunge" utility

expunge: $(EXPUNGEOBJS)
	$(CAMLC) $(LINKFLAGS) -o expunge $(EXPUNGEOBJS)

clean::
	rm -f expunge

# The runtime system for the bytecode compiler

runtime: makeruntime stdlib\libcamlrun.lib

makeruntime:
	cd byterun & $(MAKEREC) all
stdlib\libcamlrun.lib: ocaml\byterun\libcamlrun.lib
	cp ocaml\byterun\libcamlrun.lib stdlib\libcamlrun.lib
clean::
	cd ocaml\byterun & $(MAKEREC) clean
	rm -f stdlib\libcamlrun.lib
alldepend::
	cd ocaml\byterun & $(MAKEREC) depend

# The runtime system for the native-code compiler

runtimeopt: makeruntimeopt stdlib\libasmrun.lib

makeruntimeopt:
	cd ocaml\asmrun & $(MAKEREC) all

stdlib\libasmrun.lib: ocaml\asmrun\libasmrun.lib
	cp ocaml\asmrun\libasmrun.lib stdlib\libasmrun.lib

clean::
    cd ocaml\asmrun & $(MAKEREC) clean
    rm -f stdlib\libasmrun.lib

#library

library:
	cd stdlib & $(MAKEREC) all
libraryopt:
	cd stdlib & $(MAKEREC) allopt
clean::
	cd stdlib & $(MAKEREC) clean
alldepend::
	cd stdlib & $(MAKEREC) depend

# Tools

ocamltools:
	cd tools & $(MAKEREC) all
clean::
	cd tools & $(MAKEREC) clean
alldepend::
	cd tools & $(MAKEREC) depend

# The extra libraries

otherlibraries:
	-for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) all & cd ..\..)
otherlibrariesopt:
	-for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) allopt & cd ..\..)
partialclean::
	-for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) partialclean & cd ..\..)
clean::
	-for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) clean & cd ..\..)
alldepend::
	-for %i in ($(OTHERLIBRARIES)) do (cd otherlibs\%i & $(MAKEREC) depend & cd ..\..)

# The replay debugger
#
#ocamldebugger: 
#	cd debugger; $(MAKEREC) all
#partialclean::
#	cd debugger; $(MAKEREC) clean
#alldepend::
#	cd debugger; $(MAKEREC) depend
#

clean::
	rm -f boot/*.cm* boot/*.nty boot/camlheader boot/*.a boot/nyacc boot/ocamlyacc boot/ncamlrun

clean::
	cd ./yacc; $(MAKEREC) clean

# Default rules

#### COOKCU #####

.SUFFIXES: .ml .mli .n .cmo .cmi .cmx .ns .nty

.ml.cmo:
	$(CAMLC) $(COMPFLAGS) -c $<

.mli.cmi:
	$(CAMLC) $(COMPFLAGS) -c $<

.ml.cmx:
	$(CAMLOPT) $(COMPFLAGS) -c $<

.n.cmo:
	$(NEWCAMLC) $(COMPFLAGS) -c $<

.n.cmx:
	$(CAMLOPT) $(COMPFLAGS) -c $<

.ns.nty:
	$(NEWCAMLC) $(COMPFLAGS) -c $<

#### COOKCU ##### END

#### COOKCU ##### (optional)

clean::
    cd stdlib & $(MAKEREC) clean
	rm -f boot/*.exe boot/*.lib
	rm -f utils/config.ml
	rm -f utils/*.cm[iox] utils/*.[so] utils/*.obj utils/*~
	rm -f ocaml/parsing/*.cm[iox] ocaml/parsing/*.[so] ocaml/parsing/*.obj ocaml/parsing/*~
	rm -f ocaml/typing/*.cm[iox] ocaml/typing/*.[so] ocaml/typing/*.obj ocaml/typing/*~
	rm -f ocaml/bytecomp/*.cm[iox] ocaml/bytecomp/*.[so] ocaml/bytecomp/*.obj ocaml/bytecomp/*~
	rm -f ocaml/asmcomp/*.cm[iox] ocaml/asmcomp/*.[so] ocaml/asmcomp/*.obj ocaml/asmcomp/*~
	rm -f ocaml/driver/*.cm[iox] ocaml/driver/*.[so] ocaml/driver/*.obj ocaml/driver/*~
	rm -f ocaml/toplevel/*.cm[iox] ocaml/toplevel/*.[so] ocaml/toplevel/*.obj ocaml/toplevel/*~
	rm -f ocaml/tools/*.cm[iox] ocaml/tools/*.[so] ocaml/tools/*~
	rm -f utils/*.cm[iox] utils/*.[so] utils/*~
	rm -f parser/*.cm[iox] parser/*.[so] parser/*.obj parser/*~
	rm -f n2caml/*.cm[iox] n2caml/*.[so] n2caml/*.obj n2caml/*~
	rm -f typing/*.cm[iox] typing/*.[so] typing/*.obj typing/*~
	rm -f lambda/*.cm[iox] lambda/*.[so] lambda/*.obj lambda/*~
	rm -f main/*.cm[iox] main/*.[so] main/*.obj main/*~
	rm -f nml nmlc nmlo
	rm -Rf stdlib/caml
	cd ocaml\yacc & $(MAKEREC) clean
	rm -f *~

depend: beforedepend ocamltools ntools
	(for d in utils parsing typing bytecomp asmcomp driver toplevel \
              n/utils n/parser n/typing n/ntyping n/n2caml n/driver n/toplevel ; \
         do $(CAMLDEP) $(DEPFLAGS) $$d/*.mli $$d/*.ml; \
         done) > .depend
	(for d in n/utils n/parser n/typing n/ntyping n/n2caml n/driver n/toplevel ; \
         do $(NMLDEP) $(DEPFLAGS) $$d/*.n; \
         done) >> .depend

alldepend:: depend

!include .depend



syntax highlighted by Code2HTML, v. 0.9.1