# FILE. . . . . d:/hak/hlt/src/hlt/osf/hoot/Makefile
# EDIT BY . . . Hassan Ait-Kaci
# ON MACHINE. . Hak-Laptop
# STARTED ON. . Sat May  4 05:01:40 2019

# Last modified on Tue May 07 04:46:52 2019 by hak

########################################################################

APPLICATION	= Hoot

########################################################################

# NB: make does not understand /cygdrive/d - its needs D:
WIN_HOME	= D:/hak
# same reason since $PWD and $CURDIR under cygwin start with /cygdrive/d instead of D:
HERE		= D:/hak/hlt/src/hlt/osf/hoot

HLT_HOME	= ${WIN_HOME}/hlt

HLT_CLASSES	= ${HLT_HOME}/classes
JDOM_CLASSES	= ${HLT_CLASSES}/jdom.jar

SHARED_CLASSES	= ${HLT_CLASSES};${JDOM_CLASSES}

RESOURCES	= ${HLT_CLASSES}/resources
LOCAL_CLASSES	= $(HERE)/classes
SOURCES		= $(HERE)/sources
DOCS		= $(HERE)/docs
CLASSPATH	= ${LOCAL_CLASSES};${SHARED_CLASSES}

TRASH	= ,* ,.* *~ @*@ .*~ */,* */,.* */*~ */@*@ */.*~

JAVAC	= @javac -O -d "${LOCAL_CLASSES}" -classpath "${CLASSPATH}" -Xlint:deprecation #-Xlint:unchecked
JAVA	= @java -classpath "${CLASSPATH}" -Xmx16g
JACC	= ${JAVA} hlt.language.syntax.Jacc #-v4
LOG	= ${JACC} -n -v4
DOC	= ${JACC} -doc

MK	= @make
ND	= @mkdir -p
CP	= @cp -f
CD	= @cd
LS	= @ls
MV	= @mv -f
RM	= @rm -rf
SAY	= @echo "***"

HL_OPS	= -! -c "${RESOURCES}/Hilite.Configuration"
HL	= @java -classpath "$(HLT_CLASSES)" hlt.language.tools.HiliteCommand \
	  -css $(HLT_CLASSES)/resources/Hilite.Style.css \
	  -con $(HLT_CLASSES)/resources/Hilite.Configuration.Jacc -s /

DOCDIR  = ${DOCS}/${APPLICATION}Doc
IMAGES	= ${DOCDIR}/images

########################################################################

# test:
# 	${SAY} Compiling TestSortExpression.java
# 	${JAVAC} TestSortExpression.java
# 	${SAY} Running TestSortExpression
# 	${JAVA} TestSortExpression

########################################################################

help:
	@${SAY}
	@${SAY} "This makefile manages the ${APPLICATION} Jacc application."
	@${SAY} "You can 'make ...' where '...' is one of:"
	@${SAY}
	@${SAY} "    all:      same as 'basic ; run'"
	@${SAY} "    basic:    same as 'gen ; classes'"
	@${SAY} "    full:     same as 'basic ; doc ; log ; run'"
	@${SAY}
	@${SAY} "where:"
	@${SAY}
	@${SAY} "    gen:      generates the ${APPLICATION} parser"
	@${SAY} "    classes:  compiles the java source files"
	@${SAY} "    run:      runs the ${APPLICATION} application"
	@${SAY} "    doc:      generates the ${APPLICATION} documentation"
	@${SAY} "    log:      generates a grammar analysis log file"
	@${SAY} "    clean:    erases regeneratable files"
	@${SAY} "    help:     prints this message"
	@${SAY}

########################################################################

all:	basic run
basic:	gen classes
full:	basic doc log run

########################################################################

gen: tidy ${SOURCES}/${APPLICATION}.grm
	${SAY} Make gen:
	${SAY} Generating the ${APPLICATION} parser...
	${JACC} -base ${SOURCES} \
                -dest ${SOURCES} \
                -p ${APPLICATION}Parser \
                ${SOURCES}/${APPLICATION}.grm

########################################################################

classes: tidy
	${SAY} Make classes:
	${SAY} Compiling java files...
	${JAVAC} ${SOURCES}/*.java
	${SAY} Wrote class files in ${LOCAL_CLASSES}/

########################################################################

run:
	${SAY} Running ${APPLICATION}
	${JAVA} hlt.osf.hoot.${APPLICATION}Main

########################################################################

doc: rmdoc hyper hl

########################################################################

rmdoc:
#	${SAY} Make rmdoc:
	${SAY} Removing old ${DOCDIR} documentation ...
	${RM} ${DOCDIR}/*.*

########################################################################

hyper: rmdoc tidy
#	${SAY} Make hyper:
	${SAY} Generating the ${APPLICATION} grammar hyperdocumentation ...
	${JACC} -doc -base ${SOURCES} ${SOURCES}/${APPLICATION}.grm
	${MV} ${APPLICATION}Doc/*.* ${DOCS}/${APPLICATION}Doc/
#	${MV} ${APPLICATION}Doc/*.* ${DOCS}/
	${RM} ${APPLICATION}Doc
	${MK} images
	${MV} ${DOCDIR}/index.html ${DOCDIR}/000StartHere.html
#	${MV} ${DOCDIR}/index.html ${DOCDIR}/000StartHere.html
	${SAY} Visit ${DOCDIR}/000StartHere.html to navigate the grammar documentation

########################################################################

images:
#	${SAY} Make images:
	${SAY} Copying image files ...
	${ND} ${IMAGES}
	${ND} ${IMAGES}/hlt
	${ND} ${IMAGES}/arrows
	${ND} ${IMAGES}/arrows/misc/
	${CP} ${RESOURCES}/images/hlt/*.gif ${IMAGES}/hlt/
	${CP} ${RESOURCES}/images/arrows/misc/*.gif ${IMAGES}/arrows/misc/

########################################################################

hl: tidy
#	${SAY} Make hl:
	${SAY} Hiliting HTML for Java and Jacc sources files ...
	${HL} -d ${DOCDIR} ${SOURCES}/*.grm ${SOURCES}/*.java
	${SAY} See hilited HTML source code in ${DOCDIR}/index.html.

########################################################################

log: tidy
#	${SAY} Make log:
	${SAY} Generating complete analysis log for ${SOURCES}/${APPLICATION}.grm...
	${LOG} -o ${APPLICATION}.log -base ${SOURCES} ${SOURCES}/${APPLICATION}
	${MV} ${APPLICATION}.log ${SOURCES}/${APPLICATION}.log
	${SAY} See grammar log in file ${SOURCES}/${APPLICATION}.log

########################################################################

clean: tidy
	${SAY} Make clean:
	${SAY} Removing the old parser Java sources...
	${RM} ${SOURCES}/${APPLICATION}Parser.java
	${SAY} Removing the old grammar analysis log...
	${RM} ${SOURCES}/${APPLICATION}.log
	${SAY} Removing the old documentation
	${RM} ${DOCDIR}

########################################################################

tidy:
	${SAY} Make tidy:
	${SAY} "Tidying up trash (if any) ..."
#	${LS} ${TRASH} 2> /dev/null ; true
	${RM} ${TRASH}

########################################################################
