LEX = flex SED = sed CPP = gcc -E -dD GHC = ghc HSFFIG = hsffig FFIPKG = ffipkg HSC2HS = hsc2hs -t /dev/null GHCLIB = `$(GHC) --print-libdir` LEX_OPT = --header-file=../include/lex.yy.h -8 --nounistd -I INCLUDE = ../include LEX_C = lex.yy.c LEX_H = $(INCLUDE)/lex.yy.h LEXER_H = $(INCLUDE)/lexer.h PARSER_H = $(INCLUDE)/parser.h LEXER_HS = lexer-tmp/HS_LEXER_H.hs all: @echo "Do not run make directly: run cabal configure" @exit -1 # remove some c++isms $(LEX_C) $(LEX_H): lexer.ll $(LEXER_H) $(LEX) $(LEX_OPT) $< $(SED) -i 's/extern *\"C\"/extern /g' $(LEX_C) $(SED) -i 's/for *(char\* s/char *s; for (s/g' $(LEX_C) $(SED) -i 's/yyinput/input/g' $(LEX_C) $(SED) -i 's/Node::getBaseObjectName()/\"Object\"/g' $(LEX_C) # Using ffipkg, build and install the LEXER package. lexer-pkg: $(LEX_C) $(LEX_H) $(LEXER_HS) $(LEXER_HS): $(LEX_C) $(LEX_H) $(LEXER_H) $(PARSER_H) rm -rf lexer-tmp mkdir lexer-tmp cd lexer-tmp; $(FFIPKG) -I ../$(INCLUDE) -I $(GHCLIB)/include lexer.h && cabal install