# Makefile for UNIX REXX system
#    by Anders Christensen

# Using Digital's c89 on decstation 5000/200 under Ultrix 4.2
#CC = c89 -YPOSIX
#CEXTRA = -std -Dultrix -D_POSIX_SOURCE

# Using cc on decstation 3100 under OSF/1 v.1.00
#CC = cc 
#CEXTRA = -std -D_POSIX_SOURCE

# Using FSF's gcc v2.x on various machines and operating systems
CC = gcc
CEXTRA = -pedantic -ansi -Wall -D_POSIX_SOURCE

# Using SGI's cc on IRIX Indigo under IP12
#CC = cc
#CEXTRA = -ansiposix

# Using Sun's unbundled ANSI C v1.1 (it is terribly bad!!!)
#CC = /usr/lang/acc
#CEXTRA = -Xc -Dsparc 

# Using c89 HP/UX 8.05 
#CC = c89 -D_POSIX_SOURCE
#CEXTRA = -Aa 

BINDIR = /usr/bin
DEBUG  = 
PROF	 = # -pg
OPTIMIZE = -O6 -m486

COPT = $(DEBUG) $(CEXTRA) $(OPTIMIZE) $(PROF) 
LINKOPT = -g $(OPTIMIZE) $(PROF) $(LEXTRA)
OTHERCOPT = $(DEBUG) $(OPTIMIZE) $(PROF)

LIBS = -lm $(ELIBS) 

YACC = bison -ly
#YACC = yacc
AWK = gawk
#LEX = flex
#LEX = lex
LEX = flex -L
RCSDIFF = rcsdiff

FILES = rexx maths funcs builtin error variable interpret debug dbgfuncs \
	memory parsing files misc unixfuncs cmsfuncs shell rexxext stack \
	traceing interp cmath convert

#CSRCFILES = $(addsuffix .c, $(FILES)) 
CSRCFILES = rexx.c maths.c funcs.c builtin.c error.c variable.c \
	interpret.c debug.c dbgfuncs.c memory.c parsing.c files.c \
	misc.c unixfuncs.c cmsfuncs.c shell.c rexxext.c stack.c \
	traceing.c interp.c cmath.c convert.c

#OFILES = $(addsuffix .o, $(FILES)) yaccsrc.o lexsrc.o
OFILES = rexx.o maths.o funcs.o builtin.o error.o variable.o \
	interpret.o debug.o dbgfuncs.o memory.o parsing.o files.o \
	misc.o unixfuncs.o cmsfuncs.o shell.o rexxext.o stack.o \
	traceing.o interp.o cmath.o yaccsrc.o lexsrc.o convert.o

TRIPFILES = trip/*.rexx trip/testing trip/README

DEMOS = code/block code/animal code/README

HFILES = rexx.h defs.h extern.h types.h config.h
CFILES = yaccsrc.c lexsrc.c $(CSRCFILES)

BACKUP = /home/ludvigc/anders/rexx

YACCOUTPUT = yaccsrc.c yaccsrc.output symbols.h y.output
LEXOUTPUT = lexsrc.c 
JUNKFILES = core *~ gmon.out mon.out *.aux *.dvi *.log rexx.tar.Z rexx.tar
JUNK = $(OFILES) $(LEXOUTPUT) $(YACCOUTPUT) $(JUNKFILES) rexx 

MATHS = strmath.c cmath.c mpmath.c
DOCS = README SYNTAX.tex FUNCS.tex MISC.tex BUGS.tex

CODESRC = $(HFILES) $(CSRCFILES) $(MATHS) lexsrc.l yaccsrc.y
ALLSRC = $(HFILES) $(CSRCFILES) $(MATHS) $(DOCS) lexsrc.l yaccsrc.y Makefile

lexsrc = parse.c rexx.h rexx.c
lexobj = parse.o rexx.o


all : rexx

$(CFILES) : $(HFILES)

rexx : $(OFILES) 
	$(CC) $(LINKOPT) -o rexx $(OFILES) $(LIBS)

lexsrc.o : symbols.h lexsrc.c $(HFILES)
	$(CC) $(OTHERCOPT) -c lexsrc.c 

lexsrc.c : lexsrc.l 
	$(LEX) lexsrc.l
	mv lex.yy.c lexsrc.c
#	( $(LEX) -t lexsrc.l | $(AWK) $(awkprog) > lexsrc.c )

yaccsrc.o : yaccsrc.c defs.h $(HFILES)
	$(CC) $(OTHERCOPT) -c -DYYMAXDEPTH=10000 yaccsrc.c

yaccsrc.c : yaccsrc.y
	@echo 'Please expect 9 shift/reduce conflicts'
	$(YACC) -dv yaccsrc.y
	mv y.tab.h symbols.h
	mv y.tab.c yaccsrc.c

symbols.h : yaccsrc.c

maths.o : maths.c cmath.c $(HFILES)
	$(CC) $(COPT) -c maths.c

.c.o : $(HFILES)
	$(CC) $(COPT) -c $*.c

flags.h : defs.h 
	echo 'struct ' > flags.h
	cat defs.h |\
	tr -s '\011' '\040' |\
	sed s/X_// |\
	awk - '{printf("   { %s, \"%s\" },\n",$$3,$$2)}' >> flags.h
	echo '  "dummy", 9999 } ;' >> flags.h



install: rexx
	strip rexx 
	cp rexx $(BINDIR)/rexx


backup : 
	tar -cvf rexx-bck.tar $(ALLSRC) RCS code trip contrib misc
	compress -f rexx-bck.tar
	rm -f $(BACKUP)/rexx-bck.tar.Z.old
	touch $(BACKUP)/rexx-bck.tar.Z
	mv -f $(BACKUP)/rexx-bck.tar.Z $(BACKUP)/rexx-bck.tar.Z.old
	cp rexx-bck.tar.Z $(BACKUP)/rexx-bck.tar.Z
	rm -f rexx-bck.tar.Z


dist: 
	tar -cvf rexx.tar $(ALLSRC) $(TRIPFILES) $(DEMOS)
	compress -f rexx.tar


clean: 
	rm -f $(JUNK) \#*\#


rcsdiff:
	for var in $(CODESRC) ; \
		do echo -n "`$(RCSDIFF) $$var 2>/dev/null | wc -l`" ; \
		echo ' '$$var ; \
	done
#	rcsdiff $(CODESRC) | wc -l
