# precompile all modules of the library
# to avoid recompilation when they are used:

PARSECURRY=`pwd`/../bin/parsecurry
PAKCS=`pwd`/../bin/pakcs

# directory for documentation files:
DOCDIR=CDOC
# the currydoc program:
CURRYDOC=`pwd`/../bin/currydoc

LIB_CURRY = Prelude.curry \
	    AllSolutions.curry Array.curry Assertion.curry CategorizedHtmlList.curry \
            Char.curry CLPFD.curry CLPR.curry CLPB.curry \
	    CSV.curry Combinatorial.curry \
            DaVinci.curry Dequeue.curry Directory.curry Distribution.curry \
	    Dynamic.curry \
            FileGoodies.curry FiniteMap.curry Float.curry \
	    GraphInductive.curry GUI.curry \
	    HTML.curry HtmlServer.curry HtmlParser.curry \
	    IO.curry IOExts.curry Integer.curry \
            KeyDB.curry List.curry Maybe.curry \
	    Parser.curry PlProfileData.curry Ports.curry PropertyFile.curry \
            Random.curry Read.curry ReadNumeric.curry ReadShowTerm.curry \
            RedBlackTree.curry SetRBT.curry SetRBT0.curry \
	    Socket.curry Sort.curry System.curry \
            TableRBT.curry TableRBT0.curry \
            Time.curry Tk.curry \
            Unsafe.curry URL.curry WUI.curry XML.curry XmlConv.curry \
            meta/AbsCurry.curry meta/AbsCurryIO.curry \
	    meta/AbstractCurry.curry meta/AbstractCurryPrinter.curry \
	    meta/CurryStringClassifier.curry \
	    meta/Flat.curry meta/FlatTools.curry meta/Flat2Fcy.curry \
            meta/FlatCurry.curry \
	    meta/FlatCurryRead.curry meta/FlatCurryShow.curry \
	    meta/FlatCurryGoodies.curry meta/FlatCurryTools.curry \
	    meta/FlatXML.curry meta/FlatCurryXML.curry \
	    meta/FlexRigid.curry

LIB_MFCY  = $(LIB_CURRY:.curry=.mfcy)  # for making all .fcy files
LIB_ACY   = $(LIB_CURRY:.curry=.acy)
LIB_FL    = $(LIB_CURRY:.curry=.fl)
LIB_PL    = $(LIB_CURRY:.curry=.pl)
LIB_HTML  = $(LIB_CURRY:.curry=.html)
LIB_NAMES = `echo $(LIB_CURRY) | sed 's|meta/||g'` # lib names without meta/ prefix

.PHONY: all
all: fcy acy

.PHONY: fcy
fcy:
	@${MAKE} makefcy 2>&1 | sed '/^skipping/d' # suppress "skipping" messages

.PHONY: makefcy
makefcy: $(LIB_MFCY)

.PHONY: acy
acy: $(LIB_ACY)

.PHONY: fl
fl: $(LIB_FL)

.PHONY: pl
pl: $(LIB_PL)

Prelude.fl: Prelude.curry ../tastecurry/prelude.flpreface
	${PARSECURRY} -fl Prelude
	cat Prelude.fl | sed -e "/<var/D" | sed -e "/^if_then_else/D"  \
                       | sed -e "/^show/D" | sed -e "/^error/D" > Prelude.flgen
	rm Prelude.fl
	cat ../tastecurry/prelude.flpreface Prelude.flgen > Prelude.fl
	cp -p Prelude.fl prelude.fl # for backward compatibility
	rm Prelude.flgen
	# Generating new interface for prelude:
	echo "exit." | ../bin/tastecurry


# generate all TasteCurry files:
%.fl: %.curry
	rm -f $@ && ${PARSECURRY} -fl $*

# generate all FlatCurry files in .fcy representation:
%.mfcy:
	${PARSECURRY} -fcy -quiet $*

# generate single FlatCurry files in .fcy representation:
%.fcy: %.curry
	${PARSECURRY} -fcy -quiet $*

# generation of AbstractCurry files in .acy impossible with current front end:
XmlConv.acy: XmlConv.fcy
	touch XmlConv.acy

# generate all AbstractCurry files in .acy representation:
%.acy: %.fcy
	${PARSECURRY} -acy $*

# generate all Prolog translations:
%.pl: %.fcy
	rm -f $@ && ${PAKCS} -c $*


# create documentation files for system libraries
.PHONY: doc
doc: $(LIB_CURRY)
	@mkdir -p ${DOCDIR}
	@cd ${DOCDIR} && rm -f meta DOINDEX && ln -s . meta
	@cd ${DOCDIR} && ${MAKE} -f ../Makefile $(LIB_HTML)
	@if [ -f ${DOCDIR}/DOINDEX ] ; then ${MAKE} htmlindex ; fi
	@cd ${DOCDIR} && rm -f meta DOINDEX

.PHONY: htmlindex
htmlindex:
	@echo "Generating index pages for Curry libraries:"
	@echo $(LIB_NAMES)
	@${CURRYDOC} onlyindex ${DOCDIR} $(LIB_NAMES)

# generate individual documentations for libraries:
%.html: ../%.curry
	@touch DOINDEX
	cd .. && ${CURRYDOC} noindex ${DOCDIR} $*

meta/%.html: ../meta/%.curry
	@touch DOINDEX
	cd .. && ${CURRYDOC} noindex ${DOCDIR} $*

# clean all generated files
.PHONY: clean
clean:
	rm -f ${DOCDIR}/*
	${MAKE} cleanfl
	../bin/cleancurry -r

# clean all generated Prolog files
.PHONY: cleanpl
cleanpl:
	rm -f *.pl *.po meta/*.pl meta/*.po

# clean all generated files for TasteCurry interpreter
.PHONY: cleanfl
cleanfl:
	rm -f *.fl meta/*.fl prelude.int prelude.int.bak
