#!/bin/sh
#
# Makefile for FF v 1.0
#


####### FLAGS

TYPE	= 
ADDONS	= -static

CC      = gcc
GCC     = g++

CFLAGS	=  -ggdb -O3 -Wall -g -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

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 \
	minisat.h \
	minisat.C \
	Solver.C \
	Solver.h

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

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

.SUFFIXES:

.SUFFIXES: .c .o

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

####### Build rules


ff: $(OBJECTS) $(PDDL_PARSER_OBJ) $(MINISAT_OBJS)
	$(GCC) -o clg $(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 ff H* J* K* L* O* graph.* *.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 memory.h output.h parse.h inst_pre.h inst_easy.h inst_hard.h
main.o: inst_final.h orderings.h relax.h search.h minisat.h
memory.o: ff.h memory.h
output.o: ff.h output.h
parse.o: ff.h memory.h output.h parse.h
inst_pre.o: ff.h output.h memory.h inst_pre.h
inst_easy.o: ff.h output.h memory.h inst_pre.h inst_easy.h
inst_hard.o: ff.h output.h memory.h inst_pre.h inst_hard.h
inst_final.o: ff.h output.h memory.h inst_pre.h inst_final.h
orderings.o: ff.h output.h memory.h orderings.h
relax.o: ff.h output.h memory.h relax.h search.h
search.o: ff.h output.h memory.h relax.h search.h
scan-fct_pddl.tab.o: ff.h memory.h parse.h lex.fct_pddl.c
scan-ops_pddl.tab.o: ff.h memory.h parse.h lex.ops_pddl.c
lex.fct_pddl.o: ff.h parse.h
lex.ops_pddl.o: ff.h parse.h
