#NDEBUG=-DNDEBUG
#ARCH=-march=pentium-m 
ARCH2=$(NDEBUG)
CC	= gcc $(ARCH2) $(ARCH)
C++     = g++ $(ARCH2) $(ARCH)
CC	= $(C++)
YACC	= yacc
FLEX	= flex
#LC_ALL = C
#OPT	= -O3
#PROFILE = -pg -O
#CHECK=-D_GLIBCXX_DEBUG -D_GLIBCXX_CONCEPT_CHECKS -D_GLIBCXX_DEBUG_PEDANTIC
#EFENCE = -lefence
GDB=-ggdb3
ZCHAFF	= ../../zChaff
NNF	= ../nnf
HMETIS	= ../../hmetis-1.5-linux
CFLAGS	= -Wall $(GDB) -I$(NNF) -I$(ZCHAFF) $(PROFILE) $(CHECK) $(OPT) $(EFENCE) $(X_CFLAGS)

cf2cs:			main.o cf2cs.o parser.o pddl.o $(NNF)/libnnf.a clauses.o prime-impl.o 
			$(C++) $(EFENCE) -static $(CFLAGS) -o ccf2cs main.o cf2cs.o parser.o clauses.o prime-impl.o pddl.o -L$(NNF) -L$(ZCHAFF) -L$(HMETIS) -lnnf -lsat -lhmetis

depend:
	make -k cf2cs X_CFLAGS='-MM -MG'

etags: cf2cs.h planner.h cartesian.hpp parser.h planner.h clauses.hpp prime-impl.hpp parser-global.hpp main.hpp cf2cs.cc lxi_dnf.cc t0c.cc t0c_cont.cc parser.y prime-impl.cc clauses.cc pddl.lex main.cc
	etags --members `cat SOURCES`

CF2CS_HEADER=cf2cs.h planner.h cartesian.hpp parser.h clauses.hpp prime-impl.hpp parser-global.hpp main.hpp

main.o:			main.cc parser.h cf2cs.h parser-global.hpp planner.h clauses.hpp main.hpp
			$(C++) $(CFLAGS) -c main.cc

cf2cs.o:		cf2cs.cc lxi_dnf.cc t0c.cc t0c_cont.cc $(CF2CS_HEADER)
			$(C++) $(CFLAGS) -c cf2cs.cc

tokens.h parser.cc:	parser.y
			$(YACC) -v -d -t parser.y
			mv y.tab.c parser.cc
			mv y.tab.h tokens.h

prime-impl:		prime-impl-test.cc prime-impl.o clauses.o
			$(C++) $(CFLAGS) -o prime-impl prime-impl-test.cc prime-impl.o clauses.o

prime-impl.o:		prime-impl.cc prime-impl.hpp clauses.hpp
			$(CC) $(CFLAGS) -c prime-impl.cc

clauses.o:		clauses.cc clauses.hpp
			$(CC) $(CFLAGS) -c clauses.cc

parser.o:		parser.cc parser.h planner.h clauses.hpp
			$(CC) -DUSE_CLAUSE $(CFLAGS) -c parser.cc

pddl.o:			pddl.cc parser.h tokens.h
			$(CC) $(CFLAGS) -c pddl.cc

pddl.cc:		pddl.lex
			$(FLEX) -i -t pddl.lex > pddl.cc

clean:
			rm -f core cf2cs *.o *.gch y.output *~ pddl.cc parser.cc tokens.h prime-impl
			cd ~/work/simple-conformant/test-cf2cs; ./clean-trans
			rcsclean

gz:			cf2cs
			gzip cf2cs
			scp cf2cs.gz hpalacio@rigel.upf.edu:
			gunzip cf2cs.gz


clg:			cf2cs
			@echo ==========================================================================
			@echo "Testing clg t0 and cleaning .... "
			@cd test-clg
			@~/work/simple-conformant/planner/cf2cs-prime-impl/test-clg/test
			@~/work/simple-conformant/planner/cf2cs-prime-impl/test-clg/clean
			@cd ..

clgs:			cf2cs
			@echo ==========================================================================
			@echo "Testing clg t0 .... "
			@cd test-clg
			@~/work/simple-conformant/planner/cf2cs-prime-impl/test-clg/test
			@cd ..

t0:			cf2cs
			@echo ==========================================================================
			@echo -n "Testing t0 and cleaning .... "
			~/work/simple-conformant/test-cf2cs/test-t0
			cd ~/work/simple-conformant/test-cf2cs; ./clean-trans

t0s:			cf2cs
			@echo ==========================================================================
			@echo -n "Testing t0 .... "
			~/work/simple-conformant/test-cf2cs/test-t0

t0old:			cf2cs
			@echo ==========================================================================
			@echo -n "Testing t0s .... "
			~/work/simple-conformant/test-cf2cs/test-t0s

s0:			cf2cs
			@echo ==========================================================================
			@echo -n "Testing s0.... "
			~/work/simple-conformant/test-cf2cs/test-s0

