# Makefile for psail
# P. Lemkin, NCI/FCRF, Frederick, MD 21701
# COPYRIGHT NOTICE - Copyright (c) 1981-1988 by Peter F. Lemkin
#
# December 29, 1987
# Revised January 6, 1988

#
# --	INTRODUCTION
# This Makefile is used to create a  psail executable file and
# documentation for UNIX and UNIX-like systems.
#

# --	BUILDING psail
# Read instructions below before proceeding, then rename this file to
# "makefile" or "Makefile". Then run 'make <keyword>' from the
# following list.
#
# Note that there is also other 'make' operations possible:
#
#	make  		        - to compile all library modules.
#	make backup             - to copy this directory to BKUPHOST
#	make doc                - to make documentation
#	make cleanup		- to remove all .o files.
#	make lint		- to run lint on all .c files.
#	make print		- to list all .c and .h files.
#	make psail		- to build psail executable program
#	make saber		- to make saber.ld file for debugging
#


DESTDIR =
CONFDIR = /usr/local/bin
DOCDIR = /usr/local/doc
AUXDIR = /usr/local/lib

# NOTE: This HOME variable must be set via a
#	make all "HOME=/users/opus/lemkin"
# etc., or set in this location by the following explicit assignment.
HOME = /users/opus/lemkin


# -- PSAIL runtime library
PSDIR = ${HOME}/psail/runtim
PSHDR =  ${PSDIR}/config.h ${PSDIR}/sairun.h ${PSDIR}/psrung.h \
	 ${PSDIR}/gogtab.h
PSLIB = ${PSDIR}/libPSAIL.a

# -- PSAIL modules (this) directory
P = ${HOME}/psail/module
BKUPDIR = psail/module
BKUPHOST = uvip.peter

# -- Lint flags
LINTFLAGS =

# -- When debugging use the -g CFLAGS line.
INCLUDES = -I${PSDIR}

#CFLAGS = -O ${INCLUDES}
CFLAGS = -g ${INCLUDES}

LIBS = $(PSLIB) -lm
LFLAGS = -g

# NOTE: don't include (psailr.h) in INCP since now in pshead.h&psfcts.h
INCP =  psfcts.h psglbv.h pshead.h psmacros.h psparam.h

SRCS =  add_builtin.c add_gc_push.c build_tables.c \
	chk_32bit_integer.c chk_c_keyword.c chk_expr_list.c \
	chk_iconst.c chk_id.c chk_integer.c chk_leap_optimize.c \
	chk_number.c chk_real.c chk_sail_keywords.c chk_sconst.c \
	chk_str_dryrot.c chk_switches.c chk_type.c copy_either.c \
	copy_omit.c cv5hash.c cv5int.c cv_print_arglist.c \
	cvactual_to_expected.c cvdummy_arg.c cvdwi.c cvevalquote.c \
	cvidw.c cvlower.c cvltypep.c cvptypel.c cvstype.c \
	cvt_any_to_char.c cvt_sail_to_c.c cvtypes.c cvupcase.c \
	dbug_it.c emit_cleanup_code.c emit_loc_code.c \
	emit_main_code.c err_deathwish.c err_hlr.c err_n_p.c \
	err_report.c err_undf.c err_warning.c expand_macro.c \
	find_rc_symbol.c find_symbol.c fold_const_expr.c \
	fsm0.c fsm1.c fsm10.c fsm11.c fsm12.c fsm13.c fsm14.c fsm15.c \
	fsm16.c fsm17.c fsm18.c fsm19.c fsm2.c fsm20.c fsm21.c fsm22.c \
	fsm23.c fsm24.c fsm25.c fsm26.c fsm27.c fsm28.c fsm29.c fsm3.c \
	fsm30.c fsm31.c fsm32.c fsm33.c fsm34.c fsm35.c fsm36.c fsm37.c \
	fsm38.c fsm39.c fsm4.c fsm40.c fsm41.c fsm42.c fsm43.cfsm44.c \
	fsm45.c fsm46.c fsm47.c fsm48.c fsm49.c fsm4a.c fsm5.c fsm50.c \
	fsm51.c fsm52.c fsm53.c fsm54.c fsm55.c fsm56.c fsm57.c \
	fsm58.c fsm59.c fsm6.c fsm60.c fsm61.c fsm62.c fsm63.c fsm64.c \
	fsm65.c fsm66.c fsm67.c fsm68.c fsm69.c fsm7.c fsm70.c fsm71.c \
	fsm72.c fsm73.c fsm8.c fsm9.c get_c_token.c get_input.c \
	get_next_statement.c get_number.c get_token.c getid.c \
	ggdw_ptype.c hash_c.c infix_to_prefix.c insert_before_white.c \
	issaideclar.c isscalartype.c left_expr.c left_id.c \
	mak_blk_exit.c map_be.c map_bkslash_str.c map_ck_args.c \
	map_declar.c map_embedded_comments.c map_expr.c map_inf.c \
	map_leap_triple.c map_quotes.c map_whitespace.c \
	map_ws_comments.c out_both.c pop.c pop_block_name.c \
	popnumber.c ppdw_ptype.c process_token.c prt_node.c psmain.c \
	pspprt.c push.c push_block_name.c pushnumber.c put_hash_c.c \
	r_d_expr_map.c readfile.c readtrash_graphics.c rem_symbols.c \
	remove_white_ends.c rightexpr.c rightid.c rightstatement.c \
	run_time.c set_extensions.c set_preface.c simple_map.c \
	stop_time.c todays_date.c uniqdeclarations.c watch_print.c

OBJS =  add_builtin.o add_gc_push.o build_tables.o \
	chk_32bit_integer.o chk_c_keyword.o chk_expr_list.o \
	chk_iconst.o chk_id.o chk_integer.o chk_leap_optimize.o \
	chk_number.o chk_real.o chk_sail_keywords.o chk_sconst.o \
	chk_str_dryrot.o chk_switches.o chk_type.o copy_either.o \
	copy_omit.o cv5hash.o cv5int.o cv_print_arglist.o \
	cvactual_to_expected.o cvdummy_arg.o cvdwi.o cvevalquote.o \
	cvidw.o cvlower.o cvltypep.o cvptypel.o cvstype.o \
	cvt_any_to_char.o cvt_sail_to_c.o cvtypes.o cvupcase.o \
	dbug_it.o emit_cleanup_code.o emit_loc_code.o \
	emit_main_code.o err_deathwish.o err_hlr.o err_n_p.o \
	err_report.o err_undf.o err_warning.o expand_macro.o \
	find_rc_symbol.o find_symbol.o fold_const_expr.o \
	fsm0.o fsm1.o fsm10.o fsm11.o fsm12.o fsm13.o fsm14.o fsm15.o \
	fsm16.o fsm17.o fsm18.o fsm19.o fsm2.o fsm20.o fsm21.o fsm22.o \
	fsm23.o fsm24.o fsm25.o fsm26.o fsm27.o fsm28.o fsm29.o fsm3.o \
	fsm30.o fsm31.o fsm32.o fsm33.o fsm34.o fsm35.o fsm36.o fsm37.o \
	fsm38.o fsm39.o fsm4.o fsm40.o fsm41.o fsm42.o fsm43.o fsm44.o \
	fsm45.o fsm46.o fsm47.o fsm48.o fsm49.o fsm4a.o fsm5.o fsm50.o \
	fsm51.o fsm52.o fsm53.o fsm54.o fsm55.o fsm56.o fsm57.o \
	fsm58.o fsm59.o fsm6.o fsm60.o fsm61.o fsm62.o fsm63.o fsm64.o \
	fsm65.o fsm66.o fsm67.o fsm68.o fsm69.o fsm7.o fsm70.o fsm71.o \
	fsm72.o fsm73.o fsm8.o fsm9.o get_c_token.o get_input.o \
	get_next_statement.o get_number.o get_token.o getid.o \
	ggdw_ptype.o hash_c.o infix_to_prefix.o insert_before_white.o \
	issaideclar.o isscalartype.o left_expr.o left_id.o \
	mak_blk_exit.o map_be.o map_bkslash_str.o map_ck_args.o \
	map_declar.o map_embedded_comments.o map_expr.o map_inf.o \
	map_leap_triple.o map_quotes.o map_whitespace.o \
	map_ws_comments.o out_both.o pop.o pop_block_name.o \
	popnumber.o ppdw_ptype.o process_token.o prt_node.o psmain.o \
	pspprt.o push.o push_block_name.o pushnumber.o put_hash_c.o \
	r_d_expr_map.o readfile.o readtrash_graphics.o rem_symbols.o \
	remove_white_ends.o rightexpr.o rightid.o rightstatement.o \
	run_time.o set_extensions.o set_preface.o simple_map.o \
	stop_time.o todays_date.o uniqdeclarations.o watch_print.o

DOC = psuser.tex

PROGRAM = psail


# -- Source code dependencies. NEEDS WORK...
${OBJS}:    ${INCP} pshead.h
pshead.h:   ${PSHDR} psfcts.h psglbv.h psmacros.h psparam.h
psfcts.h:   ${PSHDR} psparam.h
psglbv.h:   ${PSHDR} psmacros.h psparam.h
psmacros.h: ${PSHDR} psparam.h
psparam.h:  ${PSHDR}


# -- [ALL] build the whole enchelada.
# all: psail install doc
all: psail 


psail: $(OBJS) ${PSLIB}
	cc $(LFLAGS) $(OBJS) -o $(PROGRAM) $(LIBS)
	echo 'Done building psail'


# -- [BACKUP] backup $HOME/psail to BKUP host system.
backup:
	rcp -r $(P) $(BKUPHOST):$(BKUPDIR)
	echo "Finished Backup of $(P) to $(BKUPHOST):$(BKUPDIR)"


# -- [CLEANUP] Cleanup all .o files and other trash;
cleanup:
	rm -f core a.out #* *~
	rm $(OBJS)
	echo "Finished CLEANUP"


# -- [DOC] Documentation is done in TeX.
# --- convert TeX dvi file to postscript file suitable for printing.
doc: psuser.ps psref.ps

psuser.ps:  psuser.dvi
	dvi2ps psuser.dvi > psuser.ps

psuser.dvi: psuser.tex
	tex psuser.tex

psref.ps:  psref.dvi
	dvi2ps psref.dvi > psref.ps

psref.dvi: psref.tex
	tex psref.tex


# -- [INSTALL] executable program and documentation
install: psail doc ${DESTDIR}${PROGRAM}
	install -c -s -m 755 psail ${DESTDIR}${AUXDIR}/${CONFDIR}
	install -c -m 644 *.ini ${DESTDIR}${AUXDIR}/${PROGRAM}
	install -c -m 644 *.tgf ${DESTDIR}${AUXDIR}/${PROGRAM}
	install -c -m 644 *.cod ${DESTDIR}${AUXDIR}/${PROGRAM}
	install -c -m 644 *.txt ${DESTDIR}${AUXDIR}/${PROGRAM}
	install -c -m 644 *.map ${DESTDIR}${AUXDIR}/${PROGRAM}
	install -c -m 644 *.ps ${DESTDIR}${DOCDIR}
	install -c -m 644 *.dvi ${DESTDIR}${DOCDIR}

${DESTDIR}${AUXDIR}/${PROGRAM}:
	mkdir ${DESTDIR}${AUXDIR}/${PROGRAM}
	chmod 755 ${DESTDIR}${AUXDIR}/${PROGRAM}


# -- [LINT] Lint all the source files
lint:
	cp /dev/null psail.lint;
	lint $(LINTFLAGS) $(SRCS) >> psail.lint


# -- [PRINT] Create a sorted numbered titled set of listings in one file.
print: 
	cat /dev/null > psail.lst
	for x in Makefile $(SRCS) $(INCS) $(DOC); do \
		 cat -nv '$x' | pr -f -h '$x' >> psail.lst; \
	done


# -- [SABER] Create saber.ld to load into Saber-C C debugger using
#       #include "saber.ld"    C statement.
saber.ld: $(SRCS) $(INCS)
saber:  saber.ld
	rm -rf saber.ld
	echo "setopt(\"load_options\", \"$(CFLAGS)\");" > saber.ld
	echo "load( \"$(SRCS)\" ); " >> saber.ld
	echo "load( \"$(PSHDR)\" ); " >> saber.ld
	echo "load( \"$(LIBS)\" ); " >> saber.ld
	echo "load( \"-lc\" ); " >> saber.ld
	echo "Script 'saber.ld' for Saber-C is finished."

# -- End of Makefile --
