# on batit la librairie

include ../configuration

ZFLAGS=-f #-C -K
#ZFLAGS=-g -C -K #-i

PROJET=..

Z2K2=$(PROJET)/Compiler/z2k2
CAMLOT=$(PROJET)/camlot.local

RM= rm -f

LIB_INTF_FAST= io.ki eq.ki int.ki float.ki ref.ki pair.ki list.ki fvect.ki \
	       fchar.ki fstring.ki bool.ki exc.ki stream.ki

LIB_INTF_CAUTIOUS= string.ki char.ki vect.ki

LIB_INTF_DIVERS= arg.ki filename.ki hashtbl.ki lexing.ki obj.ki parsing.ki \
		 printexc.ki sort.ki sys.ki printf.ki stack.ki queue.ki \
		 random.ki iparsing.ki

LIB_INTF= $(LIB_INTF_FAST) $(LIB_INTF_CAUTIOUS) $(LIB_INTF_DIVERS)

LIB_IMPL_FAST= eq.o exc.o int.o float.o fstring.o fchar.o list.o fvect.o \
	       io.o pair.o stream.o

LIB_IMPL_CAUTIOUS= string.o char.o vect.o

LIB_IMPL_DIVERS= arg.o hashtbl.o printf.o sort.o lexing.o sys.o \
	         parsing.o filename.o printexc.o stack.o queue.o random.o

LIB_IMPL= $(LIB_IMPL_FAST) $(LIB_IMPL_CAUTIOUS) $(LIB_IMPL_DIVERS)

CAUTIOUS= cautious.a

ALL= lib.a # fast+divers

work: $(LIB_INTF) $(CAUTIOUS) $(ALL)
	
$(LIB_INTF): %.ki : %.mli # $(Z2K2)
	$(Z2K2) -O none $<

$(CAUTIOUS): $(LIB_IMPL_CAUTIOUS)
	ar rc $@ $(LIB_IMPL_CAUTIOUS)
	ranlib $@

$(ALL): $(LIB_IMPL_FAST) $(LIB_IMPL_DIVERS)
	ar rc $@ $(LIB_IMPL_FAST) $(LIB_IMPL_DIVERS)
	ranlib $@

$(LIB_IMPL_CAUTIOUS) $(LIB_IMPL_FAST): %.o : %.ml %.ki $(Z2K2)
	$(CAMLOT) -c $(ZFLAGS) -O none $<
	
$(LIB_IMPL_DIVERS): %.o : %.ml %.ki $(Z2K2) $(LIB_INTF_FAST)
	$(CAMLOT) -c $(ZFLAGS) -O fast $<

install :
	cp $(CAUTIOUS) $(ALL) $(LIB_INTF) $(LIBDIR)

clean : ; - $(RM) $(LIB_IMPL) $(LIB_IMPL:.o=.k2) $(LIB_IMPL:.o=.c)

scratch : ; - $(RM) $(CAUTIOUS) $(ALL) $(LIB_INTF) $(LIB_IMPL) \
           	  $(LIB_IMPL:.o=.k2) $(LIB_IMPL:.o=.c)

### Dependances

char.o: int.ki exc.ki fchar.ki
eq.o: bool.ki
exc.o:
fchar.o: int.ki fstring.ki
float.o:
fstring.o: eq.ki int.ki ref.ki fchar.ki
fvect.o: eq.ki int.ki list.ki
int.o:
io.ki: sys.ki
io.o: eq.ki exc.ki int.ki fstring.ki float.ki ref.ki sys.ki
list.o: int.ki exc.ki eq.ki
pair.o: exc.ki
stream.ki: io.ki
stream.o: exc.ki fstring.ki io.ki ref.ki int.ki obj.ki
string.o: int.ki exc.ki fstring.ki
vect.o: int.ki exc.ki fvect.ki

arg.o: eq.ki exc.ki sys.ki fchar.ki fstring.ki list.ki io.ki float.ki \
       fvect.ki int.ki
filename.ki: sys.ki
filename.o: exc.ki eq.ki fstring.ki int.ki
#handler.o: obj.ki unix.ki
hashtbl.o: eq.ki exc.ki fvect.ki ref.ki int.ki
iparsing.ki: parsing.ki obj.ki
iparsing.o: parsing.ki obj.ki
lexing.ki: io.ki obj.ki
lexing.o: obj.ki io.ki exc.ki fstring.ki ref.ki int.ki
parsing.o: obj.ki lexing.ki exc.ki eq.ki iparsing.ki fvect.ki int.ki
printexc.o: eq.ki exc.ki sys.ki io.ki fvect.ki obj.ki int.ki
printf.ki: io.ki 
printf.o: eq.ki exc.ki bool.ki fchar.ki fstring.ki io.ki obj.ki float.ki int.ki
queue.o: exc.ki exc.ki ref.ki int.ki
random.o: eq.ki float.ki fvect.ki ref.ki int.ki
#signal.o: exc.ki
sort.o:
stack.o: exc.ki list.ki
sys.o:

$(LIB_IMPL) $(LIB_INTF): $(PROJET)/Include/z2k2.h $(Z2K2) $(PROJET)/Include/public.h
