#
# Makefile for "project/qc1.sics/src"
#
# Define the position of the top-level project directory.
#
PROJECT		= ../..
#
# Define the program to be made.
#
qup		:= PROGRAM		= qc1.qup
sics		:= PROGRAM		= qc1.sics
#
# Defines for various useful project directories.  These
# shouldn't need changing.
#
BIN		= $(PROJECT)/bin
TARGET		= $(BIN)/$(PROGRAM)
PROGBASE	= $(PROJECT)/$(PROGRAM)
SRC		= $(PROGBASE)/src
OBJ		= $(PROGBASE)/obj
#
# Defines for various processing flags.
#
QC		= $(BIN)/qc -sics
SHELL		= /bin/sh

qup		:= SS		= ql
sics		:= SS		= pl
qup		:= OS		= qo
sics		:= OS		= ql

SOURCES = \
	$(SRC)/alive.$(SS) \
	$(SRC)/built_in.$(SS) \
	$(SRC)/compile_procs.$(SS) \
	$(SRC)/dynamic.$(SS) \
	$(SRC)/flatten_or_once.$(SS) \
	$(SRC)/fresh_copy.$(SS) \
	$(SRC)/index.$(SS) \
	$(SRC)/misc.$(SS) \
	$(SRC)/ol.$(SS) \
	$(SRC)/peephole.$(SS) \
	$(SRC)/permalloc.$(SS) \
	$(SRC)/permvars.$(SS) \
	$(SRC)/pretrans.$(SS) \
	$(SRC)/qc1.$(SS) \
	$(SRC)/read_procs.$(SS) \
	$(SRC)/registers.$(SS) \
	$(SRC)/tempalloc.$(SS) \
	$(SRC)/unravel.$(SS) \
	$(SRC)/valvar.$(SS) \
	$(SRC)/var_names.$(SS) \
	$(SRC)/write.$(SS)
sics	:= SOURCES += \
	$(SRC)/interpret_term.$(SS) \
	$(SRC)/objvar.$(SS) \
	$(SRC)/sicstus.$(SS)
OBJECTS = \
	$(OBJ)/alive.$(OS) \
	$(OBJ)/built_in.$(OS) \
	$(OBJ)/compile_procs.$(OS) \
	$(OBJ)/dynamic.$(OS) \
	$(OBJ)/flatten_or_once.$(OS) \
	$(OBJ)/fresh_copy.$(OS) \
	$(OBJ)/index.$(OS) \
	$(OBJ)/misc.$(OS) \
	$(OBJ)/ol.$(OS) \
	$(OBJ)/peephole.$(OS) \
	$(OBJ)/permalloc.$(OS) \
	$(OBJ)/permvars.$(OS) \
	$(OBJ)/pretrans.$(OS) \
	$(OBJ)/qc1.$(OS) \
	$(OBJ)/read_procs.$(OS) \
	$(OBJ)/registers.$(OS) \
	$(OBJ)/tempalloc.$(OS) \
	$(OBJ)/unravel.$(OS) \
	$(OBJ)/valvar.$(OS) \
	$(OBJ)/var_names.$(OS) \
	$(OBJ)/write.$(OS)
sics	:= OBJECTS += \
	$(OBJ)/interpret_term.$(OS) \
	$(OBJ)/objvar.$(OS) \
	$(OBJ)/sicstus.$(OS)

#
# Compile src/file.pl to obj/file.ql
#
$$(OBJ)/%.ql: $$(SRC)/%.pl
	echo "fcompile('$<')." | $(SICSTUS)
	mv $(<:.pl=.ql) $@

#
# Compile src/file.ql to obj/file.qo
#
$$(OBJ)/%.qo: $$(SRC)/%.ql
	$(QC) -c -o $@ $<

all:
	$(MAKE) `pwd | sed 's|.*/qc1.\(.*\)/src|\1|'`

sics: $$(OBJECTS)
	(echo "unix(argv(Args)), load(Args)."; \
	 echo; \
	 echo "save('$(TARGET).save').") | \
		$(SICSTUS) $(OBJECTS)
	chmod 755 $(TARGET)

qup: $$(OBJECTS)
	$(QC) -o $(TARGET) $(OBJECTS)
	chmod 755 $(TARGET)

clean:
	$(RM) $(OBJECTS)

clobber: clean
	$(RM) $(TARGET)

sics2qup:
	$(RM) $(PROJECT)/qc1.qup/obj/*.ql
	for file in *.pl; \
	do \
		mv $$file `basename $$file .pl`.ql; \
	done
