# -*- Mode: makefile -*-
#
# Assumes variables:
#    ROOT: root directory of the source tree
#

#
# User definitions - TERMS, REFINER, SEQ_SET, ENSROOT, OCAMLSRC, CCC, THEORIES
#
include $(ROOT)/mk/config
include $(ROOT)/mk/config.local

MP_VERSION=0.8.3 (CS101 rev 12)

#
# Versions of Ocaml/Camlp4 that are compatible with MetaPRL
# CAML_VERSIONS shoud be a space-separated list of versions
#
CAML_VERSIONS=3.06
CAMLP4_VERSIONS=3.06

# All the names for "yes"
YESFLAGS=1 true True t T TRUE Y y yes Yes YES

DEFAULT_THEORIES = base itt
ALL_THEORIES = base ocaml_doc itt ocaml_sos fol czf phobos sil tptp fir experimental/compile
# Outdated and does not currently compile: lf

ifndef TERMS
   TERMS=undefined
endif
ifndef REFINER
   REFINER=undefined
endif
ifndef MAKE_OPTS
   MAKE_OPTS=-s
endif
ifndef SEQ_SET
   SEQ_SET=Array
endif
ifndef LIBMOJAVE
   LIBMOJAVE=undefined
endif
ifndef ENSROOT
   ENSROOT=undefined
endif
ifndef OCAMLSRC
   OCAMLSRC=undefined
endif
ifndef TESTS
   TESTS=no
endif
ifneq (,$(findstring $(TESTS),$(YESFLAGS)))
   TESTS=YES
else
   TESTS=no
endif
ifndef CCC
   CCC=gcc -O2 -Wall -Wno-unused-variable
endif
CC=$(CCC)

ifndef OSTYPE
   OSTYPE=
endif
ifeq ($(OSTYPE),linux)
   OSTYPE=Linux
endif
ifeq ($(OSTYPE),linux-gnu)
   OSTYPE=Linux
endif
ifeq ($(OSTYPE),posix)
   OSTYPE=Linux
endif
ifeq ($(OSTYPE),solaris)
   OSTYPE=Solaris
endif

#
# Use readline by default on Linux
#
ifndef READLINE
    ifeq ($(OSTYPE),Linux)
        READLINE=YES
    else
        READLINE=NO
    endif
endif
ifneq (,$(findstring $(READLINE),$(YESFLAGS)))
   READLINE=YES
   OTHER_CCLIBS := $(OTHER_CCLIBS) -cclib -lreadline -cclib -lncurses
else
   READLINE=no
endif

#
# Theory directories to compile
#
ifndef THEORIES
   THEORIES = $(DEFAULT_THEORIES)
endif

ifeq ($(ROOT),.) 
   ADDROOT=
else
   ADDROOT=$(ROOT)/
endif

SUPPORT_DIRS =  $(addprefix $(ADDROOT)support/, display shell tactics)
ifeq ($(THEORIES),all)
   MP_DIRS = $(SUPPORT_DIRS) $(addprefix $(ADDROOT)theories/, $(ALL_THEORIES))
else
   MP_DIRS = $(SUPPORT_DIRS) $(addprefix $(ADDROOT)theories/, $(THEORIES))
endif

#
# Options for simp and verb variations
#
PPFLAGS=-D$(REFINER)_EXN -DSEQ_SET=$(SEQ_SET)_linear_set

#
# Parameters
#
ifndef INLINE
   INLINE=5
endif

MAKE:=$(MAKE) $(MAKE_OPTS)

#
# Config
#
ifeq ($(OSTYPE),win32)
   EXE = .exe
endif
ifeq ($(OSTYPE),cygwin32)
   EXE = .exe
endif

ifdef PROFILE
   EXT_LIB=.p.a
   EXT_OBJ=.p.o
   EXT_PROF=.p
else
   EXT_LIB=.a
   EXT_OBJ=.o
   EXT_PROF=
endif

ifndef CAMLLIB
   CAMLLIB = /usr/lib/ocaml
endif

ifndef CAMLP4LIB
   CAMLP4LIB := /usr/lib/ocaml/camlp4
endif

ifndef MPLIB
   MPLIB=$(ROOT)/lib
endif

.PHONY: default check_versions check_versions_opt all lib opt optlib clean depend install export import profile

default: all
check_versions::

#
# OCAML commands
#
ifndef CAMLP4
   CAMLP4 = camlp4o$(EXE)
check_versions::
	@VERSIONS="$(CAMLP4_VERSIONS)" $(ROOT)/mk/check_version.sh "$(CAMLP4)" "" CAMLP4 "Camlp4 version"
endif
ifndef OCAMLC
   OCAMLC := ocamlc$(EXE)
check_versions::
	@VERSIONS="$(CAML_VERSIONS)" $(ROOT)/mk/check_version.sh "$(OCAMLC)" "" OCAMLC "The Objective Caml compiler, version"
endif
ifndef OCAMLCP
   OCAMLCP = $(OCAMLC)
endif
ifndef OCAMLMKTOP
   OCAMLMKTOP = ocamlmktop
check_versions::
	@VERSIONS="$(CAML_VERSIONS)" $(ROOT)/mk/check_version.sh "$(OCAMLMKTOP)" "-o /dev/null" $OCAMLMKTOP "The Objective Caml compiler, version"
endif
ifndef OCAMLOPT
   OCAMLOPT := ocamlopt$(EXE)
check_versions_opt::
	@VERSIONS="$(CAML_VERSIONS)" $(ROOT)/mk/check_version.sh "$(OCAMLOPT)" "" OCAMLOPT "The Objective Caml native-code compiler, version"
endif
ifndef OCAMLLEX
   OCAMLLEX = ocamllex$(EXE)
endif
ifndef OCAMLYACC
   OCAMLYACC = ocamlyacc$(EXE)
endif
ifndef PRLC
   PRLC = $(ROOT)/bin/prlc$(EXE) -lib $(ROOT)/lib
endif
ifndef CONVERT
   CONVERT = $(ROOT)/bin/convert$(EXE)
endif

ifndef SLOPPY_DEPENDENCIES
   SLOPPY_DEPENDENCIES = false
endif

OCAMLC := $(OCAMLC) -warn-error A -w A
OCAMLOPT := $(OCAMLOPT) -warn-error A -w A
SUPPORT_INCL := -I $(ROOT)/support/display -I $(ROOT)/support/shell -I $(ROOT)/support/tactics
