OBJ  =  error.o concargs.o Psel.o bin.o enum.o array.o Array.o fltcode.o encode_M.o decode_M.o misc.o Main_main.o \
	dialog_c.o dialog_M.o bignum.o apm.o Integer.o readchan.o \
	C_Eq.o C_Ord.o C_Num.o C_Real.o C_Integral.o C_Fractional.o \
	C_Floating.o C_RealFrac.o C_RealFloat.o C_Ix.o C_Enum.o C_Binary.o \
	P_IO.o P_List.o P_Text.o P_Prel.o P_extra.o P_Array.o P_Ratio.o P_Complex.o \
	I_Int_z.o I_Int.o I_Integer_z.o I_Integer.o I_Char_z.o I_Char.o \
	I_Float.o I_Double.o I_Float_z.o I_Double_z.o I_Float_y.o I_Double_y.o \
	I_List.o I_P2.o I_P3.o I_P4.o I_P5.o I_Bool.o

FOBJ =	Float_dir/Float.o Float_dir/stof.o Float_dir/stof_c.o \
	Float_dir/ftos.o Float_dir/ftos_c.o Float_dir/itof.o \
	Float_dir/ftoi.o Float_dir/ftosf.o Float_dir/ftosf_c.o \
	Float_dir/func.o Float_dir/func_c.o Float_dir/fmtf.o Float_dir/fmtf_c.o

OBJX =  ../lib/trace*.o

PREL = Prelude.p PreludeCore.p PreludeRT.p PreludeMini.p PreludeType.p

# some machines does not support floating point, remove FOBJ in that case
AOBJ = $(OBJ) $(FOBJ)
INCLUDE = hlib/include
LIBS = lib.a ${PREL} PreludeEmpty.hi runtime.o
#LIBS = lib.index lib.a lib_p.a
LIB = hlib
DST = /usr/local/lib/lmlc
LMLC = lmlc
HBC = hbc
ASM = ../../bin/asm
LMLFLAGS =
ASMFLAGS =
HBCFLAGS = -z -fallow-redef -fno-export-check
HBCFLAGSI = -z -fallow-redef -fno-export-check -fno-toprec
PARSEP = ../bin/curryp -z -p
PHI = P_List.hi P_IO.hi P_Text.hi P_Prel.hi

.SUFFIXES:
.SUFFIXES:	.o .M .m .c .hs .has .p .hi

.M.o:
	$(ASM) $(ASMFLAGS) $*.M

.m.o:
	$(LMLC) $(LMLFLAGS) -c -Z $*.m

.hs.o:
	$(HBC) $(HBCFLAGS) -c $*.hs

.has.o:
	$(HBC) $(HBCFLAGSI) -c $*.has

.c.o:
	$(CC) $(CFLAGS) -c $*.c

.hi.p:
	$(PARSEP) $*.hi > $*.p

lib.a: 	${AOBJ} ${PREL}
	rm -f lib.a
	ar cr lib.a ${AOBJ} ${OBJX}
	ranlib lib.a

install:
	-ln -s ../lib/runtime.o
	-mkdir $(DST)/$(LIB) $(DST)/$(INCLUDE)
	cp $(LIBS) $(DST)/$(LIB)
	ranlib $(DST)/$(LIB)/lib.a
#
Prelude.hi:	Prelude.phi ${PHI}
	cp Prelude.phi Prelude.hi
	sed -e 's/;$$//' -e 's/{$$//' -e 's/^ *}$$//' -e 's/^interface\(.*\)where.*/--- \1/' ${PHI} | grep -v infix >> Prelude.hi

#
PreludeRT.p:	PreludeRT.hi
	$(PARSEP) -Z PreludeRT.hi >PreludeRT.p

Float_dir/Float.o:	Float_dir/Float.M
	$(ASM) $(ASMFLAGS) Float_dir/Float.M && $(ADDINDEX) -Z <Float_dir/Float.t

# cc is brain damaged, thus we need these rules
Float_dir/func_c.o:	Float_dir/func_c.c
	$(CC) $(CFLAGS) -c Float_dir/func_c.c; mv func_c.o Float_dir
Float_dir/stof_c.o:	Float_dir/stof_c.c
	$(CC) $(CFLAGS) -c Float_dir/stof_c.c; mv stof_c.o Float_dir
Float_dir/ftos_c.o:	Float_dir/ftos_c.c
	$(CC) $(CFLAGS) -c Float_dir/ftos_c.c; mv ftos_c.o Float_dir
Float_dir/ftosf_c.o:	Float_dir/ftosf_c.c
	$(CC) $(CFLAGS) -c Float_dir/ftosf_c.c; mv ftosf_c.o Float_dir
Float_dir/fmtf_c.o:	Float_dir/fmtf_c.c
	$(CC) $(CFLAGS) -c Float_dir/fmtf_c.c; mv fmtf_c.o Float_dir

clean:
	rm -f *.o lib.a lib_p.a
oosave:
	mv *.o lib.a saveoo
	mv saveoo/runtime* .
unosave:
	mv saveoo/* .
osave:
	mv *.o lib.a saveo
	mv saveo/runtime* .
unsave:
	mv saveo/* .
