#
#
# requires: g++, flex, bison
#
#


DEBUGPARAMS   := -fPIC -g -O0 -Wall
RELEASEPARAMS := -fPIC -O3 -fexpensive-optimizations

OBJECTS     :=  encoding.o \
                txp/txp.o \
                parser/txp_parser.o \
                parser/txp_lexer.o \
                backends/backends.o \
                backends/postscript.o \
                backends/postscriptglyphs.o \
                backends/portabledocumentformat.o \
                middleend.o \
                latexpp.o

OBJECTS_DBG := $(foreach obj,$(OBJECTS),obj/debug/$(obj))
OBJECTS_RLS := $(foreach obj,$(OBJECTS),obj/release/$(obj))
ZIPFILES := include src makefile test.txp test2.txp




bin/latexpp: $(OBJECTS_RLS)
	mkdir -p $(@D)
	g++ $(RELEASEPARAMS) -o $@ $(OBJECTS_RLS)

bin/latexppdbg: $(OBJECTS_DBG)
	mkdir -p $(@D)
	g++ $(DEBUGPARAMS) -o $@ $(OBJECTS_DBG)

obj/debug/%.o: src/%.cpp
	mkdir -p $(@D)
	g++ $(DEBUGPARAMS) -o $@ -c $<

obj/release/%.o: src/%.cpp
	mkdir -p $(@D)
	g++ $(RELEASEPARAMS) -o $@ -c $<




.PRECIOUS: src/%.cpp
src/%.cpp: src/%.yy
	mkdir -p $(@D)
	bison -v -o $@ $<
	mv src/parser/txp_parser.output ./bison.log

src/%.cpp: src/%.l
	mkdir -p $(@D)
	flex -o $@ $<

src/backends/postscriptglyphs.cpp: src/backends/postscriptglyphs.html
	echo '#include <string>' > $@
	echo '#include "../../include/backends/postscript.h"' >> $@
	echo '// http://www.jdawiseman.com/papers/trivia/character-entities.html' >> $@
	echo "    const std::string TXPBackendPostscript::GlyphName(wchar_t UnicodeCodepoint)" >> $@
	echo "    {" >> $@
	echo "        switch(UnicodeCodepoint)" >> $@
	echo "        {" >> $@
	cat $< \
	| grep '<tr>' \
	| grep -v '^<tr>$$' \
	| grep -v '<th' \
	| sed        's/.*<td class="hex">&#x/            case 0x/g' \
	| sed 's/;<\/td>.*<td class="ps">/: return "/g' \
	| sed  's/<\/td>.*/";/g' \
	| sed 's/".*<br>/"/g' \
	| sed 's/"spacehackarabic"/"space"/g' \
	| grep -v ';";$$' \
	>> $@
	echo '            default: return "block";' >> $@
	echo "        }" >> $@
	echo "    }" >> $@

src/backends/postscriptglyphs.html:
	wget -O $@ http://www.jdawiseman.com/papers/trivia/character-entities.html




.PHONY:clean
clean:
	rm -rf bin
	rm -rf obj
	rm -f src/parser/txp_lexer.cpp src/parser/txp_parser.cpp src/parser/stack.hh src/parser/txp_parser.hpp
	rm -f bison.log

latexpp.zip: $(ZIPFILES)
	zip -r -u latexpp.zip $(ZIPFILES)















