# Copyright 1989-93 GROUPE BULL -- See license conditions in file COPYRIGHT
#
#			      #####################
#                             ## KLONE  makefile ##
#			      #####################

OBJS =  kly.tab.o kllex.yy.o klone.o \
	kl_atom.o kl_coll.o kl_func.o kl_link.o kl_list.o kl_hash.o \
	kl_number.o kl_string.o kl_stream.o kl_struct.o \
	klmalloc.o klmachine.o klreference.o klgeneric.o klerror.o \
	klregexp.o klos.o klmalloc2.o kldload.o klko.o \
	klclean.o klend.o klerrorh.o klstp.o kltoplevel.o kldebug.o \
        $(EXTRA_OBJS)

SRCS = 	klone.c \
	kl_atom.c kl_coll.c kl_func.c kl_link.c kl_list.c kl_hash.c \
	kl_number.c kl_string.c kl_stream.c kl_struct.c \
	klmalloc.c klmachine.c klreference.c klgeneric.c klerror.c \
	klregexp.c klos.c klmalloc2.c kldload.c klko.c \
	klclean.c klend.c klerrorh.c klstp.c kltoplevel.c kldebug.c

OBJ = main.o
SRC = main.c

LIBKLONE = libklone.a

INCLUDE	= -I.
LIBDIR	= 
KLONECFLAGS = $(DEFINES) $(INCLUDE) -DKLPATH=$(KLONEPATH) -DLOCATORS -DKLONE -DMACHINE_TYPE=\"$(MACHINE_TYPE)\"
CFLAGS=
REV=
CC=./klone_cc

all	: makefile klone

sun4 sgi aix alpha dec mips solaris sony linux : # Config for a SUNOS 4.x sparc
	cp Configs/$@ Config.$@;echo "$@">.dir;rm -f makefile;make -f Makefile


$(LIBKLONE) : $(OBJS)
	rm -f $@
	ar cq $@ $(OBJS)
	-ranlib $@

klone 	: $(CC) $(LIBKLONE) $(OBJ)
	rm -f klone
	$(CC) $(LFLAGS) $(LIBDIR) $(OBJ) -o klone $(LIBKLONE) $(LIBS)
	@$(POSTPROCESSING) klone

# globally optimized version
kloneo	: $(CC) $(SRCS)
	$(CC) $(GLOBOPT) $(LFLAGS) $(LIBDIR) kllex.yy.c kly.tab.c $(SRCS) \
	      -o kloneo $(LIBS)

# PURIFY-ed version
$(CC)_pf : makefile
	/bin/echo -n "purify " > $(CC)_pf
	echo purify $(C_COMPILER) '$(FLAGS) $(GWMCFLAGS)' '$$*' > $(CC)_pf
	- chmod a+x $(CC)_pf

klonep	: $(CC) $(LIBKLONE) $(OBJ) $(CC)_pf
	rm -f klonep
	$(CC)_pf $(LFLAGS) $(LIBDIR) $(OBJ) -o klonep $(LIBKLONE) $(LIBS)

$(CC)_qf : makefile
	/bin/echo -n "quantify " > $(CC)_qf
	echo quantify $(C_COMPILER) '$(FLAGS) $(GWMCFLAGS)' '$$*' > $(CC)_qf
	- chmod a+x $(CC)_qf

kloneqf  : $(CC) $(LIBKLONE) $(OBJ) $(CC)_qf
	rm -f kloneqf
	$(CC)_qf $(LFLAGS) $(LIBDIR) $(OBJ) -o kloneqf $(LIBKLONE) $(LIBS)

#math version
klonem   : $(CC) $(LIBKLONE) klmath.o
	$(CC) $(CFLAGS) -DKLMATH $(LFLAGS) $(LIBDIR) $(SRC) -o klonem klmath.o $(LIBKLONE) $(LIBS) -lm
	@$(POSTPROCESSING) klonem

$(CC)	: makefile
	echo $(C_COMPILER) '$(FLAGS) $(KLONECFLAGS)' '$$*' > $(CC)
	- chmod a+x $(CC)

klone2ic: klone2ic.c
	$(CC) klone2ic.c -o klone2ic

klone-ic.h : klone2ic klstartup.kl
	./klone2ic KlStartupCode klstartup.kl > klone-ic.h

kl_evalorder: kl_evalorder.c
	$(CC) kl_evalorder.c -o kl_evalorder

kl_evalorder.h : kl_evalorder $(CC)
	./kl_evalorder>kl_evalorder.h

kllex.yy.c : klparser.l klparser.h
## IF NO LEX IN YOUR SYSTEM, DO: cp amiga/kllex.yy.c .
	lex -t klparser.l > klparser.c
	cat klparser.h klparser.c > kllex.yy.c
	rm -f klparser.c
	-if grep FLEX kllex.yy.c;then cp amiga/kllex.yy.c .; fi

kly.tab.c : klparser.y klparser.h
## IF NO YACC IN YOUR SYSTEM, DO: cp amiga/kly.tab.c amiga/y.tab.h .
	yacc -d klparser.y
	mv y.tab.c kly.tab.c
	-if grep YYBYACC kly.tab.c;then cp amiga/kly.tab.c amiga/y.tab.h .;fi

kly.tab.o : kly.tab.c y.tab.h
kllex.yy.o : kllex.yy.c y.tab.h

bg	: 
	trap "" 1;make -k >LOG 2>&1&

depend: 
	makedep -s "# DO NOT DELETE" $(KLONECFLAGS) $(SRCS)

makefile: Makefile .dir $(LOCAL_MAKE)
	echo 'LOCAL_MAKE=Config.'`cat .dir`|cat Makefile.first Config.`cat .dir` - Makefile \
	     > makefile
	make
	     
.dir	:
	@echo "********* TRY NOT TO MAKE KLONE IN THE SOURCE DIRECTORY *********"
	@echo "However, for a quick install, you can type \"make config\" here,"
	@echo "where config is one of:"
	@grep '^#: ' Configs/*|grep -v TEMPLATE|sed 's/^Configs\//    /'|sed 's/#: /	/'
	@echo "For another config foo, copy Configs/TEMPLATE into Configs/foo"
	@echo "edit Configs/foo, and type \"make foo\""
	@exit 1

doc	:
	cd doc; make

lint	: $(SRCS) makefile # was: -axz
	lint -hz -DLINT $(KLONECFLAGS) $(SRCS)  2>&1 |\
fgrep -v ': warning: long assignment may lose accuracy' |\
fgrep -v ': warning: questionable conversion of function pointer' \
>lint
	-fgrep '#' lint

LINT	: $(SRCS) makefile 
	lint -hvz $(KLONECFLAGS) $(SRCS)  2>&1 |\
fgrep -v ': warning: long assignment may lose accuracy' |\
fgrep -v ': warning: questionable conversion of function pointer' \
>lint

clean:
	rm -f *.o *lex.yy.c *y.tab.c makefile klone_cc kl_evalorder \
	   kl_evalorder.h
	-if test ! -r SRC; then rm -f .dir; fi   # removes .dir if compil in src

dir:
	./klone\_util dir ${DIR}

sdir:
	./klone\_util sdir ${DIR}

install:libklone.a klone
	-mkdir $(KLONEDIR)
	cp klone $(KLONEBINDIR)
	cp -r kl $(KLONEDIR)

.SUFFIXES: .i
.c.i: ; $(CC) -E $(CFLAGS) $*.c > $*.i

# DO NOT DELETE

klone.o: INTERN.h klone.h klmachine.h EXTERN.h kl_atom.h kl_coll.h kl_list.h
klone.o: kl_func.h kl_evalorder.h kl_number.h kl_string.h kl_hash.h
klone.o: kl_stream.h kl_struct.h
kl_atom.o: EXTERN.h klone.h klmachine.h kl_coll.h kl_number.h kl_list.h
kl_atom.o: kl_string.h kl_stream.h INTERN.h kl_atom.h kl_func.h
kl_atom.o: kl_evalorder.h klversion.h
kl_coll.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_list.h
kl_coll.o: kl_string.h kl_stream.h kl_func.h kl_evalorder.h INTERN.h
kl_coll.o: kl_coll.h
kl_func.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_string.h kl_number.h
kl_func.o: kl_list.h kl_hash.h kl_stream.h kl_coll.h INTERN.h kl_func.h
kl_func.o: kl_evalorder.h
kl_link.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h INTERN.h
kl_link.o: kl_link.h
kl_list.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_coll.h
kl_list.o: kl_func.h kl_evalorder.h kl_string.h kl_hash.h klgeneric.h
kl_list.o: kl_stream.h INTERN.h kl_list.h
kl_hash.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_list.h
kl_hash.o: kl_func.h kl_evalorder.h INTERN.h kl_hash.h
kl_number.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_string.h kl_list.h
kl_number.o: INTERN.h kl_number.h
kl_string.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_list.h
kl_string.o: klgeneric.h INTERN.h kl_string.h klregexp.h
kl_stream.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_list.h
kl_stream.o: kl_string.h kl_func.h kl_evalorder.h klgeneric.h INTERN.h
kl_stream.o: kl_stream.h
kl_struct.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_string.h
kl_struct.o: kl_list.h kl_hash.h kl_stream.h INTERN.h kl_struct.h
klmalloc.o: EXTERN.h klone.h klmachine.h kl_list.h
klmachine.o: klmachine.h
klreference.o: EXTERN.h klone.h klmachine.h
klgeneric.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_number.h kl_list.h
klgeneric.o: kl_func.h kl_evalorder.h kl_hash.h kl_string.h INTERN.h
klgeneric.o: klgeneric.h
klerror.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_string.h kl_stream.h
klerror.o: kl_number.h kl_list.h kl_func.h kl_evalorder.h kl_hash.h
klregexp.o: klregexp.h klmachine.h
klos.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_number.h kl_list.h
klos.o: kl_func.h kl_evalorder.h kl_string.h kl_hash.h kl_stream.h
klos.o: kl_struct.h klregexp.h INTERN.h
klko.o: EXTERN.h klone.h klmachine.h kl_number.h kl_atom.h kl_list.h
klko.o: kl_coll.h kl_string.h kl_stream.h INTERN.h klko.h
kltoplevel.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_coll.h kl_func.h
kltoplevel.o: kl_evalorder.h kl_list.h kl_number.h kl_string.h kl_stream.h
kldebug.o: EXTERN.h klone.h klmachine.h kl_atom.h kl_coll.h kl_list.h
kldebug.o: kl_func.h kl_evalorder.h kl_number.h kl_string.h kl_hash.h
kldebug.o: kl_stream.h kl_struct.h
