###################################
#   Makefile for tactics/contrib
###################################

# $Id: Makefile,v 1.55 1999/07/01 14:32:55 bertot Exp $

include ../../config

MAKE=make

COQMKTOP=$(COQTOP)/bin/$(ARCH)/coqmktop -srcdir ../..

LINEAR = general.cmx dpctypes.cmx subst.cmx graph.cmx unif.cmx \
         kwc.cmx lk_proofs.cmx prove.cmx ccidpc.cmx dpc.cmx

NATURAL = ntrefiner.cmx util.cmx tutil.cmx ntparam.cmx ntdef.cmx ntaux.cmx \
          ntsons.cmx nttrans.cmx ntpprinter.cmx ntformat.cmx ntdata.cmx \
          ntuse.cmx ntcount.cmx ppml.cmx ppaux.cmx ppenglish_aux.cmx \
          ppenglish.cmx ppfrench_aux.cmx ppfrench.cmx ppprooftext.cmx \
          nttop.cmx ntcommand.cmx ntentries.cmx

EXTRACTION = ml_import.cmx mlterm.cmx fw_env.cmx fwtoml.cmx \
             genpp.cmx optimise.cmx caml.cmx haskell.cmx ocaml.cmx

OMEGA = omega.cmx coq_omega.cmx

TCC = tcc.cmx

RING = quote.cmx ring.cmx 

PROGRAMS = misc_utils.cmx effects.cmx renamings.cmx progTypes.cmx \
       progAst.cmx prog_errors.cmx prog_env.cmx prog_utils.cmx \
       prog_db.cmx prog_cci.cmx monad.cmx tradEnv.cmx \
       prog_red.cmx prog_typing.cmx prog_wp.cmx mlise.cmx prog_tactic.cmx \
       pprog.cmx prog_extract.cmx

PCOQ = name_to_ast.cmx xlate.cmx vtp.cmx translate.cmx centaur.cmx

CONTRIBTACS = $(TCC) $(LINEAR) $(EXTRACTION) $(NATURAL) \
              $(OMEGA) $(RING) $(PROGRAMS) $(PCOQ)

CMOCONTRIBTACS = g_zsyntax.cmo $(CONTRIBTACS:.cmx=.cmo)

LIBS =-I ../tcc -I linear -I extraction -I natural -I omega -I polynom\
	-I pcoq

ALLLIBS = -I ../../src/lib/util -I ../../src/meta -I ../../src/constr \
          -I ../../src/proofs -I ../../src/typing -I ../../src/parsing \
	  -I ../../src/env -I ../../src/tactics \
	  -I $(CAMLP4LIB) $(LIBS)

byte:
	cd ../tcc; $(MAKE) byte
	cd linear; $(MAKE) byte
	cd extraction; $(MAKE) byte
	cd polynom; $(MAKE) byte
	cd omega; $(MAKE) byte
	cd ../programs; $(MAKE) byte
	cd natural; $(MAKE) byte
	cd pcoq; $(MAKE) byte

bytesmall:
	cd ../tcc; $(MAKE) byte
	cd linear; $(MAKE) byte
	cd extraction; $(MAKE) byte
	cd pcoq; $(MAKE) byte

opt: coq-contrib.out coq-pcoq.out install
	cd ../tcc; $(MAKE) module
	cd linear; $(MAKE) module
	cd extraction; $(MAKE) module
	cd polynom; $(MAKE) module
	cd omega; $(MAKE) module
	cd ../programs; $(MAKE) module programs.coq
	cd natural; $(MAKE) module
	cd pcoq; $(MAKE) module

optsmall: coq-contrib.out install
	cd ../tcc; $(MAKE) module
	cd linear; $(MAKE) module
	cd extraction; $(MAKE) module
	cd pcoq; $(MAKE) module

coq-contrib.out:
	cd ../tcc; $(MAKE) sourceopt
	cd linear; $(MAKE) opt
	cd extraction; $(MAKE) opt
	cd omega; $(MAKE) opt
	cd ../programs; $(MAKE) sourceopt
	cd natural; $(MAKE) opt
	cd polynom; $(MAKE) opt
	cd pcoq; $(MAKE) opt
	$(COQMKTOP) -opt -o $@ $(LIBS) $(CONTRIBTACS)
	-strip $@

coq-pcoq.out:
	cd pcoq; $(MAKE) opt
	$(COQMKTOP) -opt -o $@ $(LIBS) $(PCOQ)

install:
	mv coq-contrib.out $(COQTOP)/bin/$(ARCH)/
	-mv coq-pcoq.out $(COQTOP)/bin/$(ARCH)/

# The bytecode version for the debugger (with all tactics linked)

coq-debug: coq-debug.out install-coq-debug

coq-debug.out:
	$(COQMKTOP) -o $@ -g $(ALLLIBS) $(CMOCONTRIBTACS)

install-coq-debug:
	mv coq-debug.out $(COQTOP)/bin/$(ARCH)/

# The native-code version for time profiling

coq-profile: coq-profile.out install-coq-profile

coq-profile.out:
	$(COQMKTOP) -o $@ -opt -p $(ALLLIBS)

install-coq-profile:
	mv coq-profile.out $(COQTOP)/bin/$(ARCH)/


install-library:
	cd linear; $(MAKE) install-library
	cd extraction; $(MAKE) install-library
	cd polynom; $(MAKE) install-library
	cd omega; $(MAKE) install-library
	cd natural; $(MAKE) install-library
	cd pcoq; $(MAKE) install-library

clean:
	cd linear; $(MAKE) clean
	cd extraction; $(MAKE) clean
	cd polynom; $(MAKE) clean
	cd omega; $(MAKE) clean
	cd natural; $(MAKE) clean
	cd pcoq; $(MAKE) clean

depend:
	cd linear; $(MAKE) depend
	cd extraction; $(MAKE) depend
	cd polynom; $(MAKE) depend
	cd omega; $(MAKE) depend
	cd natural; $(MAKE) depend
	cd pcoq; $(MAKE) depend

