#!/bin/sh
#
# Makefile for Cost CLG v 1.0
#


####### FLAGS

TYPE	= 
ADDONS	= 

CC      = gcc
GCC     = g++

CFLAGS	= -Wall -O3 -g -pg -static -ansi  $(TYPE) $(ADDONS) 
# -g -pg -fomit-frame-pointer 

LIBS    = -lm -lz


####### Files

PDDL_PARSER_SRC	= scan-fct_pddl.tab.c \
	scan-ops_pddl.tab.c \
	scan-probname.tab.c \
	lex.fct_pddl.c \
	lex.ops_pddl.c 

PDDL_PARSER_OBJ = scan-fct_pddl.tab.o \
	scan-ops_pddl.tab.o 


SOURCES = main.c \
	memory.c \
	output.c \
	parse.c \
	inst_pre.c \
	inst_easy.c \
	inst_hard.c \
	inst_final.c \
	orderings.c \
	relax.c \
	search.c \
        list_multiset.c \
        utility.c \
        heuristics.c \
        preprocess.c \
        distances.c 

SOURCES_ALL = main.c \
	memory.c \
	output.c \
	parse.c \
	inst_pre.c \
	inst_easy.c \
	inst_hard.c \
	inst_final.c \
	orderings.c \
	relax.c \
	search.c \
        list_multiset.c \
        heuristics.c \
        preprocess.c \
        distances.c \
        utility.c \
	minisat.h \
	minisat.C \
	Solver.C \
	Solver.h

OBJECTS 	= $(SOURCES:.c=.o)

MINISAT_OBJS = minisat.o Solver.o
####### Implicit rules

.SUFFIXES: .c .o

.c.o:; $(CC) -c $(CFLAGS) $<

####### Build rules


ff: $(OBJECTS) $(PDDL_PARSER_OBJ) $(MINISAT_OBJS)
	$(GCC) -o cclg $(OBJECTS) $(PDDL_PARSER_OBJ) $(MINISAT_OBJS) $(CFLAGS) $(LIBS)

minisat: $(MINISAT_OBJS)
	$(GCC) -O3 -o minisat -I mtl $(MINISAT_OBJS) -lz

minisat.o: minisat.h minisat.C Solver.h mtl/Heap.h mtl/Vec.h mtl/Alg.h SolverTypes.h
	$(GCC) -O3 -c -g -I mtl minisat.C

Solver.o: Solver.C Solver.h mtl/Heap.h mtl/Vec.h mtl/Alg.h SolverTypes.h mtl/Sort.h
	$(GCC) -O3 -c -g -I mtl Solver.C

# pddl syntax
scan-fct_pddl.tab.c: scan-fct_pddl.y lex.fct_pddl.c
	bison -pfct_pddl -bscan-fct_pddl scan-fct_pddl.y

scan-ops_pddl.tab.c: scan-ops_pddl.y lex.ops_pddl.c
	bison -pops_pddl -bscan-ops_pddl scan-ops_pddl.y

lex.fct_pddl.c: lex-fct_pddl.l
	flex -Pfct_pddl lex-fct_pddl.l

lex.ops_pddl.c: lex-ops_pddl.l
	flex -Pops_pddl lex-ops_pddl.l


# misc
etags: $(SOURCES_ALL)
	etags *.c *.h *.y *.l *.C

clean:
	rm -f *.o *.bak *~ *% core *_pure_p9_c0_400.o.warnings \
        \#*\# $(RES_PARSER_SRC) $(PDDL_PARSER_SRC)

veryclean: clean
	rm -f cclg H* J* K* L* O* *.symbex gmon.out \
	$(PDDL_PARSER_SRC) \
	lex.fct_pddl.c lex.ops_pddl.c lex.probname.c \
	*.output

clean2: veryclean

depend:
	makedepend -Y -- $(SOURCES) $(PDDL_PARSER_SRC)

lint:
	lclint -booltype Bool $(SOURCES) 2> output.lint

# DO NOT DELETE

main.o: ff.h minisat.h memory.h output.h parse.h inst_pre.h inst_easy.h
main.o: inst_hard.h inst_final.h orderings.h relax.h search.h heuristics.h
main.o: list_multiset.h preprocess.h distances.h utility.h
memory.o: ff.h minisat.h memory.h
output.o: ff.h minisat.h output.h
parse.o: ff.h minisat.h memory.h output.h parse.h
inst_pre.o: ff.h minisat.h output.h memory.h inst_pre.h
inst_easy.o: ff.h minisat.h output.h memory.h inst_pre.h inst_easy.h
inst_hard.o: ff.h minisat.h output.h memory.h inst_pre.h inst_hard.h
inst_final.o: ff.h minisat.h output.h memory.h inst_pre.h inst_final.h
orderings.o: ff.h minisat.h output.h memory.h orderings.h
relax.o: ff.h minisat.h output.h memory.h utility.h relax.h search.h
search.o: ff.h minisat.h output.h memory.h utility.h relax.h heuristics.h
search.o: list_multiset.h search.h
list_multiset.o: list_multiset.h
utility.o: utility.h ff.h minisat.h output.h
heuristics.o: heuristics.h ff.h minisat.h list_multiset.h utility.h output.h
preprocess.o: preprocess.h ff.h minisat.h output.h utility.h
distances.o: distances.h ff.h minisat.h utility.h memory.h output.h
