#
#	file:		Makefile
#	version:	1.0
#	date:		October 11, 1989
#	creation:	-
#	author:		-
#
#	description:
#	This is the Makefile for CEC
#
#	history:
#	891010	js	Standardized Makefile
#	900322	js	Added runtime generator support
#
#	Copyright (C) 1989
#		Hubert Bertling
#		Harald Ganzinger
#		Renate Schaefers
#		University of Dortmund
#


#	environment variables

# You should edit the following according to your needs
#------------------------------------------------------------
# PROSPECTRA is the directory where you unloaded CEC
PROSPECTRA		= /usr/local/cec
#
# RG_BIN_DIR is the directory where you unloaded the Runtime
#            Generator Version of CEC
RG_BIN_DIR		= /home/helga/cec/rgbin
#
# QUINTUS-PROLOG
# these are the versions of Quintus Prolog on different platforms
# QPROLOG_VER_sun4	= 2.4.2
# QPROLOG_VER_sun4	= 3.0
QPROLOG_VER_sun4	= 3.1.1
QPROLOG_VER_sun3	= 2.4.2

# these are the names of the Quintus Prolog executables
#QPROLOG_sun4_2.4.2	= /usr/ls5local/bin/qprolog
QPROLOG_sun4_3.0	= /usr/local/q3.0/bin3.0/sun4-4.1/prolog
QPROLOG_sun4_3.1.1	= /usr/local/q3.1.1/bin3.1.1/sun4-4.1/prolog
#QPROLOG_sun3_2.4.2	= /usr/local/bin/qprolog

# this is the directory of the include file quintus.h
# needed for the foreign language interface
QPROLOG_INC_DIR_sun4_2.4.2	= /usr/local/q2.4.2/library
QPROLOG_INC_DIR_sun4_3.0 \
	= /usr/local/q3.1.1/generic/qplib3.1.1/embed
QPROLOG_INC_DIR_sun3_2.4.2	= /usr/ls5local/src/prolog/q2.4.2/library
#------------------------------------------------------------
# You should'nt change anything below this line

ARCH:sh			= arch
QPROLOG_VER		= $(QPROLOG_VER_$(ARCH))
QPROLOG 		= $(QPROLOG_$(ARCH)_$(QPROLOG_VER))
QPROLOG_INC_DIR		= $(QPROLOG_INC_DIR_$(ARCH)_$(QPROLOG_VER))

STRIPPED_VER_2.4.2	= 242
STRIPPED_VER_3.0	= 30
STRIPPED_VER_3.1.1	= 311
QPROLOG_VER_CONSTANT	= QPROLOG_VER_$(STRIPPED_VER_$(QPROLOG_VER))

#	parameters

#	path names
SOURCES			= $(PROSPECTRA)/src/cec
PROSPECTRA_LIB_CEC_DIR	= $(PROSPECTRA)/lib/cec
PROSPECTRA_BIN_DIR	= $(PROSPECTRA)/bin
OBJ_DIR			= $(PROSPECTRA)/obj/cec
COMPLETION_DIR		= $(SOURCES)/completion
COMPUTE_DIR		= $(SOURCES)/compute
CR_DIR			= $(SOURCES)/cr
DISPLAY_DIR		= $(SOURCES)/display
HELP_DIR		= $(SOURCES)/help
INOUT_DIR		= $(SOURCES)/inout
MAKE_DIR		= $(SOURCES)/make
# PANNDAS_DIR		= $(SOURCES)/panndas
PROLOG_DIR		= $(SOURCES)/prolog
RG_DIR			= $(SOURCES)/rg
SPECVARS_DIR		= $(SOURCES)/specVars
TPS_DIR			= $(SOURCES)/tps
KNS_DIR			= $(TPS_DIR)/kns
POLYN_DIR		= $(TPS_DIR)/polyn
UNIAC_DIR		= $(SOURCES)/acUni
WORLDS_DIR		= $(SOURCES)/worlds

#	diverse
# Runtime Generator binaries are kept separate due to license reasons
SETPATH			= $(RG_BIN_DIR)/setpath
# object file kept in source directory, so qpc will find it (argh)
INTERRUPT_OBJ		= $(PROLOG_DIR)/interrupt.$(ARCH).o

#	temporary files


#	logical groupings

#	tool files

COMPLETION_LG =  \
	$(COMPLETION_DIR)/action.pl \
	$(COMPLETION_DIR)/complCom.pl \
	$(COMPLETION_DIR)/dbKit.pl  \
	$(COMPLETION_DIR)/dbscheme.pl  \
	$(COMPLETION_DIR)/eqCompletion.pl  \
	$(COMPLETION_DIR)/order.pl  \
	$(COMPLETION_DIR)/orderCom.pl  \
	$(COMPLETION_DIR)/regular.pl

COMPUTE_LG =  \
	$(COMPUTE_DIR)/antecedent.pl  \
	$(COMPUTE_DIR)/norm.pl  \
	$(COMPUTE_DIR)/narrow.pl \
	$(COMPUTE_DIR)/reduce.pl

CR_LG =  \
	$(CR_DIR)/output.pl  \
	$(CR_DIR)/complete.pl  \
	$(CR_DIR)/rewrite.pl \
	$(CR_DIR)/normbool.pl  \
	$(CR_DIR)/rpo.pl \
	$(CR_DIR)/theorem.pl  \
	$(CR_DIR)/consult.pl  \
	$(CR_DIR)/commands.pl

DISPLAY_LG = \
	$(DISPLAY_DIR)/show.pl \
	$(DISPLAY_DIR)/portray.pl

HELP_LG = \
	$(HELP_DIR)/helptext.pl

INOUT_LG = \
	$(INOUT_DIR)/in.pl \
	$(INOUT_DIR)/modExp.pl  \
	$(INOUT_DIR)/orderIO.pl \
	$(INOUT_DIR)/path.pl \
	$(INOUT_DIR)/thawFreeze.pl

MAKE_LG = \
	$(MAKE_DIR)/make.QProlog.pl \
	$(MAKE_DIR)/mapexpansion.pl

WORLDS_LG = \
	$(WORLDS_DIR)/changable.pl \
	$(WORLDS_DIR)/stack.pl \
	$(WORLDS_DIR)/startup.pl \
	$(WORLDS_DIR)/state.pl \
	$(WORLDS_DIR)/worlds.pl

# PANNDAS_LG =  \
# 	$(PANNDAS_DIR)/ccallqp.pl  \
# 	$(PANNDAS_DIR)/panConnect.pl  \
# 	$(PANNDAS_DIR)/panEvaluate.pl  \
# 	$(PANNDAS_DIR)/panOutput.pl  \
# 	$(PANNDAS_DIR)/panGetEquation.pl  \
# 	$(PANNDAS_DIR)/panSorts.pl  \
# 	$(PANNDAS_DIR)/panInput.pl  \
# 	$(PANNDAS_DIR)/inTerms.pl

PROLOG_LG = \
	$(PROLOG_DIR)/apply.pl \
	$(PROLOG_DIR)/arith.pl \
	$(PROLOG_DIR)/strings.pl \
	$(PROLOG_DIR)/imp.pl \
	$(PROLOG_DIR)/interrupt.pl \
	$(PROLOG_DIR)/io.pl \
	$(PROLOG_DIR)/lists.pl \
	$(PROLOG_DIR)/sets.pl \
	$(PROLOG_DIR)/utilities.pl \
	$(PROLOG_DIR)/funtest.pl  \
	$(PROLOG_DIR)/genarg.pl  \
	$(PROLOG_DIR)/arg.pl

SPECVAR_LG = \
	$(SPECVARS_DIR)/combine.pl  \
	$(SPECVARS_DIR)/morphisms.pl  \
	$(SPECVARS_DIR)/rename.pl \
 	$(SPECVARS_DIR)/specVar.pl \
	$(SPECVARS_DIR)/undo.pl

TERMS_LG = \
	$(TERMS_LG)/terms.pl \
	$(TERMS_LG)/typing.pl

TPS_LG =   \
	$(TPS_DIR)/interface.pl  \
	$(TPS_DIR)/rename.pl

KNS_LG =  \
	$(KNS_DIR)/kns.pl  \
	$(KNS_DIR)/knsmods.pl  \
	$(KNS_DIR)/rename.pl

POLYN_LG = \
	$(POLYN_DIR)/addinterp.pl \
	$(POLYN_DIR)/arithmetic.pl \
	$(POLYN_DIR)/check.pl \
	$(POLYN_DIR)/combine.pl \
	$(POLYN_DIR)/current.pl \
	$(POLYN_DIR)/inout.pl \
	$(POLYN_DIR)/interpret.pl \
	$(POLYN_DIR)/operators.pl \
	$(POLYN_DIR)/ordering.pl \
	$(POLYN_DIR)/polGreater.pl \
	$(POLYN_DIR)/polynomial.pl \
	$(POLYN_DIR)/rename.pl \
	$(POLYN_DIR)/suggest.pl \
	$(POLYN_DIR)/trace.pl \
	$(POLYN_DIR)/transform.pl \
	$(POLYN_DIR)/tuplelength.pl \
	$(POLYN_DIR)/utilities.pl

UNIAC_LG =   \
	$(UNIAC_DIR)/achelp.pl  \
	$(UNIAC_DIR)/gen.pl  \
	$(UNIAC_DIR)/match.pl  \
	$(UNIAC_DIR)/uniac.pl

CEC_FILES = \
	$(COMPLETION_LG) \
	$(COMPUTE_LG) \
	$(CR_LG) \
	$(DISPLAY_LG) \
	$(HELP_LG) \
	$(INOUT_LG) \
	$(MAKE_LG) \
	$(WORLDS_LG) \
# 	$(PANNDAS_LG) \
	$(PROLOG_LG) \
#	$(SPECVAR_LG) \
#	$(TERMS_LG) \
#	$(TPS_LG) \
#	$(KNS_LG) \
#	$(POLYN_LG) \
	$(UNIAC_LG)

#	makefile entries

all   :	cec

tools :	cec


cec : cec.$(ARCH)

cec.$(ARCH) : $(CEC_FILES) $(OBJ_DIR)/makeStart.$(ARCH) $(INTERRUPT_OBJ)
	cp $(INTERRUPT_OBJ) $(PROLOG_DIR)/interrupt.o
	$(QPROLOG) < makeStart.$(ARCH) 1> cec.log 2> cec.log
	- chmod -f 775 cec.$(ARCH)

$(OBJ_DIR)/makeStart.$(ARCH) : Makefile
	@ echo ":- assert(libPath('$(PROSPECTRA_LIB_CEC_DIR)')). " > makeStart.$(ARCH)
	@ echo ":- assert(srcPath('$(SOURCES)'))." >> makeStart.$(ARCH)
	@ echo ":- assert(objPath('$(OBJ_DIR)'))." >> makeStart.$(ARCH)
	@ echo ":- assert(prologVersion('Quintus Prolog', '$(QPROLOG_VER)'))." >> makeStart.$(ARCH)
	@ echo ":- assert(rg_env:(rg_compile(F) :- user:compile(F)))." >> makeStart.$(ARCH)
	@ echo ":- rg_env:rg_compile('$(MAKE_DIR)/make.QProlog.pl')." >> makeStart.$(ARCH)
	@ echo ":- createStandard." >> makeStart.$(ARCH)
	@ echo ":- saveCEC('cec.$(ARCH)')." >> makeStart.$(ARCH)

$(INTERRUPT_OBJ) : $(PROLOG_DIR)/interrupt.c
	cc -c -D$(QPROLOG_VER_CONSTANT) -I$(QPROLOG_INC_DIR) \
           -o $(INTERRUPT_OBJ) $(PROLOG_DIR)/interrupt.c


# Runtime Generator Version of CEC, only for internal use

cec.consult : $(CEC_FILES) $(OBJ_DIR)/makeStart.consult $(INTERRUPT_OBJ)
	cp $(INTERRUPT_OBJ) $(PROLOG_DIR)/interrupt.o
	$(QPROLOG) < makeStart.consult > cec.rg.log
	- chmod -f 775 cec.consult

$(OBJ_DIR)/makeStart.consult : Makefile
	@ echo ":- assert(libPath('$(PROSPECTRA_LIB_CEC_DIR)')). " > makeStart.consult
	@ echo ":- assert(srcPath('$(SOURCES)'))." >> makeStart.consult
	@ echo ":- assert(objPath('$(OBJ_DIR)'))." >> makeStart.consult
	@ echo ":- assert(rg_env:(rg_compile(F) :- user:consult(F)))." >> makeStart.consult
	@ echo ":- assert(prologVersion('Quintus Prolog', '$(QPROLOG_VER)'))." >> makeStart.consult
	@ echo ":- rg_env:rg_compile('$(MAKE_DIR)/make.QProlog.pl')." >> makeStart.consult
	@ echo ":- createStandard." >> makeStart.consult
	@ echo ":- saveCEC('cec.consult')." >> makeStart.consult

cec.rg.pl :	cec.consult $(OBJ_DIR)/makeDump $(RG_DIR)/rg_dump.pl
	cec.consult < makeDump >> cec.rg.log

$(OBJ_DIR)/makeDump : Makefile
	@ echo ":- compile('$(RG_DIR)/rg_dump.pl')." > makeDump
	@ echo ":- abolish(rg_env:rg_compile,1)." >> makeDump
	@ echo ":- dumpProgram(cec,ops)." >> makeDump

cec.rg.qof :	cec.rg.pl
	qpc -c -i ops.rg.pl cec.rg.pl >> cec.rg.log

rg_env.qof :	$(RG_DIR)/rg_env.pl
	qpc -c -i ops.rg.pl $(RG_DIR)/rg_env.pl >> cec.rg.log
	mv $(RG_DIR)/rg_env.qof .

rg_entry.qof :	$(RG_DIR)/rg_entry.pl
	qpc -c -i ops.rg.pl $(RG_DIR)/rg_entry.pl >> cec.rg.log
	mv $(RG_DIR)/rg_entry.qof .

cec.rg :	cec.rg.qof rg_env.qof rg_entry.qof $(INTERRUPT_OBJ)
	cp $(INTERRUPT_OBJ) $(PROLOG_DIR)/interrupt.o
	qld -v -w -d -o cec.rg cec.rg.qof rg_env.qof rg_entry.qof >> cec.rg.log
	- chmod -f 775 cec.rg
	$(SETPATH) cec.rg $(PROSPECTRA_LIB_CEC_DIR)


# installing and cleaning up

install :
	- mv cec.sun3 $(PROSPECTRA_BIN_DIR)
	- mv cec.sun4 $(PROSPECTRA_BIN_DIR)
	- mv cec.rg $(RG_BIN_DIR)

clean :
	rm -f *.map news
	rm -f makeStart.sun3 makeStart.sun4
	rm -f *.rg.pl *.qof
	rm -f makeStart.consult makeDump

cleanup :
	rm -f *.map cec.log
	rm -f *.map news
	rm -f makeStart.sun3 makeStart.sun4
	rm -f cec.sun3 cec.sun4
	rm -f *.rg.pl *.qof cec.rg.log
	rm -f makeStart.consult makeDump
	rm -f cec.rg cec.consult
