# Makefile for Algol68G revision 1.0

SHELL=/bin/sh

# CC=gcc

STDCFLAGS=-Wall -W -Wno-long-long

# Where are the directories?
# We expect libplot.so in $(libdir), if it is not there, then we
# compile without graphics support. 

prefix=/usr/local
exec_prefix=$(prefix)
bindir=$(exec_prefix)/bin
libdir=$(exec_prefix)/lib
srcdir=./source
chkdir=./suite

# Objects and libraries

OBJ=$(srcdir)/algol68g.o $(srcdir)/moidsize.o $(srcdir)/unused.o \
$(srcdir)/news.o $(srcdir)/heap.o $(srcdir)/keywords.o \
$(srcdir)/options.o $(srcdir)/message.o $(srcdir)/pretty.o $(srcdir)/listing.o \
$(srcdir)/genie.o $(srcdir)/genie_mon.o $(srcdir)/genie_name.o \
$(srcdir)/genie_frame.o $(srcdir)/genie_row.o $(srcdir)/genie_atoms.o \
$(srcdir)/genie_declare.o $(srcdir)/genie_moles.o $(srcdir)/genie_expres.o \
$(srcdir)/genie_volatile.o $(srcdir)/genie_signal.o $(srcdir)/garbage.o \
$(srcdir)/scope.o $(srcdir)/coercion.o $(srcdir)/taxes.o \
$(srcdir)/moids.o $(srcdir)/scanner.o $(srcdir)/victal.o \
$(srcdir)/parser.o $(srcdir)/prelude.o \
$(srcdir)/env_prelude.o $(srcdir)/env_mp.o $(srcdir)/env_transput.o $(srcdir)/env_cray.o\
$(srcdir)/plotutils.o $(srcdir)/elems.o $(srcdir)/terminal.o $(srcdir)/tausworthe.o

XLIBS=-L/usr/X11R6/lib -lXaw -lXmu -lXt -lSM -lICE -lXext -lX11 \
-L$(libdir) -lplot

HS=$(srcdir)/a68g_config.h $(srcdir)/algol68g.h $(srcdir)/genie.h $(srcdir)/mp.h

# Build targets from here

all:	$(OBJ)
	@echo "linking ..."
	@if [ -f $(libdir)/libplot.so ]; then \
		$(CC) $(OBJ) $(XLIBS) -lm $(LD_FLAGS) -o a68g; \
	else \
		$(CC) $(OBJ) -lm $(LD_FLAGS) -o a68g; \
	fi

install:	all
	@mv a68g $(bindir)/a68g

uninstall:
	@if [ -f $(bindir)/a68g ]; then \
		rm -f $(bindir)/a68g; \
	fi

depend:	
	@touch $(HS) 
	@touch $(srcdir)/tausworthe.c

# Householding targets

check:	all
	@$(chkdir)/run_suite > ./suite_result &

clean:	
	@rm -f $(srcdir)/*.o

dist:	distclean
	@cd ..;tar -czf algol68g-1.0.tar.gz algol68g-1.0

distclean mostlyclean maintainer-clean: clean
	@if [ -f a68g ]; then \
		rm -f a68g; \
	fi
	@if [ -f a68g.log ]; then \
		rm -f a68g.log; \
	fi
	@if [ -f .a68g.x ]; then \
		rm -f .a68g.x; \
	fi
	@if [ -f .a68g.x.l ]; then \
		rm -f .a68g.x.l; \
	fi
	@if [ -f suite_result ]; then \
		rm -f suite_result; \
	fi

indent:
	@indent -l96 source/*.h source/*.c
	@rm -f source/*.h~
	@rm -f source/*.c~

# Source targets. Not generalised, so individual options are possible.

$(srcdir)/algol68g.o:	$(HS) $(srcdir)/algol68g.c
	@echo "algol68g.c ..."
	@if [ -f $(libdir)/libplot.so ]; then \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) -DHAVE_GNU_PLOT $(srcdir)/algol68g.c -o $(srcdir)/algol68g.o; \
	else \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/algol68g.c -o $(srcdir)/algol68g.o; \
	fi

$(srcdir)/elems.o:	$(HS) $(srcdir)/elems.c
	@echo "elems.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/elems.c -o $(srcdir)/elems.o

$(srcdir)/terminal.o:	$(HS) $(srcdir)/terminal.c
	@echo "terminal.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/terminal.c -o $(srcdir)/terminal.o

$(srcdir)/moidsize.o:	$(HS) $(srcdir)/moidsize.c
	@echo "moidsize.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/moidsize.c -o $(srcdir)/moidsize.o

$(srcdir)/unused.o:	$(HS) $(srcdir)/unused.c
	@echo "unused.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/unused.c -o $(srcdir)/unused.o

$(srcdir)/news.o:	$(HS) $(srcdir)/news.c
	@echo "news.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/news.c -o $(srcdir)/news.o

$(srcdir)/heap.o:	$(HS) $(srcdir)/heap.c
	@echo "heap.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/heap.c -o $(srcdir)/heap.o

$(srcdir)/keywords.o:	$(HS) $(srcdir)/keywords.c
	@echo "keywords.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/keywords.c -o $(srcdir)/keywords.o

$(srcdir)/options.o:	$(HS) $(srcdir)/options.c
	@echo "options.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/options.c -o $(srcdir)/options.o

$(srcdir)/message.o:	$(HS) $(srcdir)/message.c
	@echo "message.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/message.c -o $(srcdir)/message.o

$(srcdir)/pretty.o:	$(HS) $(srcdir)/pretty.c
	@echo "pretty.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/pretty.c -o $(srcdir)/pretty.o

$(srcdir)/listing.o:	$(HS) $(srcdir)/listing.c
	@echo "listing.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/listing.c -o $(srcdir)/listing.o

$(srcdir)/scanner.o:	$(HS) $(srcdir)/environ.h $(srcdir)/scanner.c
	@echo "scanner.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/scanner.c -o $(srcdir)/scanner.o

$(srcdir)/victal.o:	$(HS) $(srcdir)/victal.c
	@echo "victal.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/victal.c -o $(srcdir)/victal.o

$(srcdir)/parser.o:	$(HS) $(srcdir)/parser.c
	@echo "parser.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/parser.c -o $(srcdir)/parser.o

$(srcdir)/taxes.o:	$(HS) $(srcdir)/taxes.c
	@echo "taxes.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/taxes.c -o $(srcdir)/taxes.o

$(srcdir)/moids.o:	$(HS) $(srcdir)/moids.c
	@echo "moids.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/moids.c -o $(srcdir)/moids.o

$(srcdir)/garbage.o:	$(HS) $(srcdir)/garbage.c
	@echo "garbage.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/garbage.c -o $(srcdir)/garbage.o

$(srcdir)/genie.o:	$(HS) $(srcdir)/genie.c
	@echo "genie.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie.c -o $(srcdir)/genie.o

$(srcdir)/genie_mon.o:	$(HS) $(srcdir)/genie_mon.c
	@echo "genie_mon.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_mon.c -o $(srcdir)/genie_mon.o

$(srcdir)/genie_frame.o:	$(HS) $(srcdir)/genie_frame.c
	@echo "genie_frame.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_frame.c -o $(srcdir)/genie_frame.o

$(srcdir)/genie_name.o:	$(HS) $(srcdir)/genie_name.c
	@echo "genie_name.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_name.c -o $(srcdir)/genie_name.o

$(srcdir)/genie_atoms.o:	$(HS) $(srcdir)/genie_atoms.c
	@echo "genie_atoms.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_atoms.c -o $(srcdir)/genie_atoms.o

$(srcdir)/genie_declare.o:	$(HS) $(srcdir)/genie_declare.c
	@echo "genie_declare.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_declare.c -o $(srcdir)/genie_declare.o

$(srcdir)/genie_moles.o:	$(HS) $(srcdir)/genie_moles.c
	@echo "genie_moles.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_moles.c -o $(srcdir)/genie_moles.o

$(srcdir)/genie_expres.o:	$(HS) $(srcdir)/genie_expres.c
	@echo "genie_expres.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_expres.c -o $(srcdir)/genie_expres.o

$(srcdir)/genie_volatile.o:	$(HS) $(srcdir)/genie_volatile.c
	@echo "genie_volatile.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) -O0 $(srcdir)/genie_volatile.c -o $(srcdir)/genie_volatile.o

$(srcdir)/genie_row.o:	$(HS) $(srcdir)/genie_row.c
	@echo "genie_row.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_row.c -o $(srcdir)/genie_row.o

$(srcdir)/genie_signal.o:	$(HS) $(srcdir)/genie_signal.c
	@echo "genie_signal.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/genie_signal.c -o $(srcdir)/genie_signal.o

$(srcdir)/scope.o:	$(HS) $(srcdir)/scope.c
	@echo "scope.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/scope.c -o $(srcdir)/scope.o

$(srcdir)/coercion.o:	$(HS) $(srcdir)/coercion.c
	@echo "coercion.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/coercion.c -o $(srcdir)/coercion.o

$(srcdir)/prelude.o:	$(HS) $(srcdir)/prelude.c
	@echo "prelude.c ..."
	@if [ -f $(libdir)/libplot.so ]; then \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) -DHAVE_GNU_PLOT $(srcdir)/prelude.c -o $(srcdir)/prelude.o; \
	else \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/prelude.c -o $(srcdir)/prelude.o; \
	fi

$(srcdir)/env_prelude.o:	$(HS) $(srcdir)/env_prelude.c
	@echo "env_prelude.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/env_prelude.c -o $(srcdir)/env_prelude.o

$(srcdir)/env_mp.o:	$(HS) $(srcdir)/env_mp.c
	@echo "env_mp.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/env_mp.c -o $(srcdir)/env_mp.o

$(srcdir)/env_transput.o:	$(HS) $(srcdir)/env_transput.c
	@echo "env_transput.c ..."
	@if [ -f $(libdir)/libplot.so ]; then \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) -DHAVE_GNU_PLOT $(srcdir)/env_transput.c -o $(srcdir)/env_transput.o; \
	else \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/env_transput.c -o $(srcdir)/env_transput.o; \
	fi

$(srcdir)/env_cray.o:	$(HS) $(srcdir)/env_cray.c
	@echo "env_cray.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/env_cray.c -o $(srcdir)/env_cray.o

$(srcdir)/plotutils.o:	$(HS) $(srcdir)/plotutils.c
	@echo "plotutils.c ..."
	@if [ -f $(libdir)/libplot.so ]; then \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) -DHAVE_GNU_PLOT $(srcdir)/plotutils.c -o $(srcdir)/plotutils.o; \
	else \
		$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/plotutils.c -o $(srcdir)/plotutils.o; \
	fi

$(srcdir)/tausworthe.o:	$(srcdir)/tausworthe.c
	@echo "tausworthe.c ..."
	@$(CC) -c $(CPPFLAGS) $(STDCFLAGS) $(CFLAGS) $(srcdir)/tausworthe.c -o $(srcdir)/tausworthe.o

TAGS info dvi:
	@echo "target not implemented"
