#############################################################################
# MAKEFILE FOR THE METIS FIRST-ORDER PROVER
# Copyright (c) 2001-2004 Joe Hurd, distributed under the GNU GPL version 2
###############################################################################

.PHONY: all build test clean

all: build test

# Compiling ML programs: source files

#The Metis files
MSRC = src07/Portable.sig  src07/PortablePolyml.sml  src07/PortableSmlNJ.sml	\
       src07/Useful.sig src07/Useful.sml	\
       src07/Polyhash.sig src07/Polyhash.sml	\
       src07/Lazy.sig src07/Lazy.sml	\
       src07/Set.sig src07/Set.sml	\
       src07/Ordered.sig src07/Ordered.sml	\
       src07/ElementSet.sig src07/ElementSet.sml	\
       src07/Map.sig src07/Map.sml	\
       src07/KeyMap.sig src07/KeyMap.sml	\
       src07/Sharing.sig src07/Sharing.sml	\
       src07/Stream.sig src07/Stream.sml	\
       src07/Heap.sig src07/Heap.sml	\
       src07/Print.sig src07/Print.sml \
       src07/Parse.sig src07/Parse.sml \
       src07/Options.sig src07/Options.sml	\
       src07/Name.sig src07/Name.sml	\
       src07/Term.sig src07/Term.sml	\
       src07/Subst.sig src07/Subst.sml	\
       src07/Atom.sig src07/Atom.sml	\
       src07/Formula.sig src07/Formula.sml	\
       src07/Literal.sig src07/Literal.sml	\
       src07/Thm.sig src07/Thm.sml	\
       src07/Proof.sig src07/Proof.sml	\
       src07/Rule.sig src07/Rule.sml	\
       src07/Normalize.sig src07/Normalize.sml	\
       src07/Model.sig src07/Model.sml	\
       src07/Problem.sig src07/Problem.sml	\
       src07/Poly.sig  src07/Poly.sml	\
       src07/TermNet.sig src07/TermNet.sml	\
       src07/AtomNet.sig src07/AtomNet.sml	\
       src07/LiteralNet.sig src07/LiteralNet.sml	\
       src07/Subsume.sig src07/Subsume.sml	\
       src07/KnuthBendixOrder.sig src07/KnuthBendixOrder.sml	\
       src07/Rewrite.sig src07/Rewrite.sml	\
       src07/Units.sig src07/Units.sml	\
       src07/Clause.sig src07/Clause.sml	\
       src07/Active.sig src07/Active.sml	\
       src07/Waiting.sig src07/Waiting.sml	\
       src07/SplitStack.sig src07/SplitStack.sml \
       src07/Resolution.sig src07/Resolution.sml	\
       src07/Tptp.sig src07/Tptp.sml	\
       src07/metis.sml


ifeq ($(shell uname),Darwin)
  #For Mac, we must restore execute permission to the code segment.
  SEGPROT=-segprot POLY rwx rwx
  OS=OSX
else
  #But for Linux, no such command is even available.
  SEGPROT=
  OS=LINUX
endif

#This is correct if Poly/ML is installed centrally, with its libraries in /usr/local/lib
POLYDIR=
#Otherwise, you need a line such as the following, to locate those libraries:
#POLYDIR=-L/usr/groups/theory/isabelle/polyml/x86-linux

#Create the destination directory if necessary
$(HOME)/bin:
	mkdir $(HOME)/bin

#Note that "poly" must be on the search path!!
#Executables are stored in $(HOME)/bin/
build: $(MSRC) scripts/TreeLimitedRun.c $(HOME)/bin
	gcc -D$(OS) scripts/TreeLimitedRun.c -o $(HOME)/bin/TreeLimitedRun
	echo 'use"load07.ML"; cd".."; PolyML.export("metit",metis);' | poly
	cc -o metit metit.o $(POLYDIR) -lpolymain -lpolyml $(SEGPROT)
	mv metit $(HOME)/bin/metit; date

clean:
	rm *.o

test:

