###
###  Makefile for PRISM ver1.0
###
###  Copyright (C) 1998
###    Taisuke Sato, Yoshitaka Kameya, Yasushi Hagiwara, Nobuhisa Ueda,
###      Dept. of Computer Science, Tokyo Institute of Technology.

############################ targets ##############################
##
## make prism --- Compile PRISM system with GUI environment
## make no-GUI --- Compile PRISM system with no-GUI environment
## make install --- Copy the PRISM executable. 
## make clean --- Clean up the files which is not used after installation.  
## make distclean --- Clean up the files which is not in distribution.
##
################ Specify your system configuration ################

## C compiler options:
CC = gcc
CP = cp
CFLAGS = -O3

## PRISM executable (saved file by SICStus built-in save/1):
PRISM = prism
BINDIR = /usr/local/bin

## X libraries for GUI:
## (please ignore if you don't use GUI.)
XLIB = /usr/local/X11R6/lib

## SICStus Prolog library directory:
SP_LIB = /usr/local/lib/sicstus3

## SICStus Prolog executable:
#SP_EXE = /usr/local/bin/prolog
SP_EXE = $(SP_LIB)/sicstus

SP_BIN = $(SP_LIB)/bin

## Libraries for GUI (please ignore if you don't use GUI.):
##  `-lsocket' option may be required for Solaris 2.
LIBS = -lX11 -lm -lsocket
## Add `-L$(XLIB)' and/or `-R$(XLIB)' option(s) if nessesary.
LIBOPT = -L$(XLIB) -R$(XLIB) $(LIBS)

################### end of system configuration ##################

LIBOPT_NO_GUI = -lm

OFILES_NO_GUI = em.o random.o trie.o prob.o
OFILES = $(OFILES_NO_GUI) graph.o
PL_NO_GUI = [prism,parse,make_routines,em,exec,c_interface,\
			sw_handling,modifier,misc,start]
PL = [prism,parse,make_routines,em,tclIF,exec,c_interface,\
			sw_handling,modifier,misc,start]

VERSION = 1.0
MESSAGE = '-=-=-=-=-= PRISM programming system: version $(VERSION) =-=-=-=-=-'

### target definitions: 

## [NOTE]
##   We use `splfr' provided by SICStus Prolog 3. This is invoked by
##   "$(SP_BIN)/splfr Resource SourceFile [+dynamic|+static] [+c CFiles]
##   [+o Objectfiles] [+l Libraries]", then we get a library `prism.so'.

all: no-GUI

## make GUI version

prism: o-files clean-pl
	$(SP_BIN)/splfr prism foreignGUI.pl +dynamic +o $(OFILES) +l $(LIBOPT)
	cat em_stable.pl emGUI.pl > em.pl
	cat startGUI.pl start_stable.pl > start.pl
	echo "compile($(PL)),save($(PRISM)),nl,write($(MESSAGE)),nl,nl,start." | $(SP_EXE) -f -a -help 

o-files: prism.h $(OFILES)

## make non-GUI version

no-GUI: o-files-no-GUI clean-pl
	$(SP_BIN)/splfr prism foreign.pl +dynamic +o $(OFILES_NO_GUI)\
	                                          +l $(LIBOPT_NO_GUI)
	cat em_stable.pl emNoGUI.pl > em.pl
	cat startNoGUI.pl start_stable.pl > start.pl
	echo "compile($(PL_NO_GUI)),save(prism),nl,write($(MESSAGE)),nl,nl,start." | $(SP_EXE) -f -a -help

o-files-no-GUI: prism.h $(OFILES_NO_GUI)

## make misc executables (for debug)
cprism: o-files main.o
	$(CC) -o cprism $(OFILES) main.o -lm

em.o: prism.h em.c
random.o: prism.h random.c
trie.o: prism.h trie.c
prob.o:	prism.h prob.c
graph.o: prism.h graph.c
main.o: prism.h main.c

install:
	$(CP) ./prism $(BINDIR)/$(PRISM)

distclean: clean
	-rm -f prism prism.so

clean: clean-pl
	-rm -f cprism $(OFILES) main.o

clean-pl:
	-rm -f start.pl em.pl


