ifeq ($(target), win32)
PLATFORMFLAGS = --host=i586-unknown-linux --target=i386-unknown-win32
endif

INC_DIR =	../../include

CC =		gcc -I$(INC_DIR) 

CFLAGS =	-Wall -O2

AR =		ar rc

LIB =		../../lib

INCLUDES =	$(INC_DIR)/int-inf.h		\
		$(INC_DIR)/my-lib.h		\
		$(INC_DIR)/gc.h			\
		$(INC_DIR)/mlton-lib.h		\
		$(INC_DIR)/mlton-posix.h

OBJS =		my-lib.o	\
		mlton-lib.o	\
		mlton-posix.o 

all: gmp libmlton-gdb libmlton

.PHONY: libmlton
libmlton: $(LIB)/libmlton.a
	
$(LIB)/libmlton.a: $(OBJS) int-inf.o gc.o
	/bin/rm -f libmlton.a
	$(AR) $(LIB)/libmlton.a $(OBJS) int-inf.o gc.o

.PHONY: libmlton-gdb
libmlton-gdb: $(LIB)/libmlton-gdb.a

$(LIB)/libmlton-gdb.a: $(OBJS) int-inf-gdb.o gc-gdb.o
	/bin/rm -f libmlton-gdb.a
	$(AR) $(LIB)/libmlton-gdb.a $(OBJS) int-inf-gdb.o gc-gdb.o

gc.o: $(INCLUDES) gc.c
	$(CC) $(CFLAGS) -c -DNODEBUG gc.c

gc-gdb.o: $(INCLUDES) gc.c
	$(CC) -Wall -g -c -o gc-gdb.o gc.c

int-inf.o: $(INCLUDES) int-inf.c
	$(CC) $(CFLAGS) -c -o int-inf.o int-inf.c

int-inf-gdb.o: $(INCLUDES) int-inf.c
	$(CC) -Wall -g -c -o int-inf-gdb.o int-inf.c

mlton-lib.o: $(INCLUDES)
mlton-posix.o: $(INCLUDES)

gmp:
	{ [ gmp.h -nt gmp-2.0.2.tgz ]						\
		&& [ ../../lib/libgmp.a -nt gmp-2.0.2.tgz ]; } || {		\
			rm -rf gmp.h ../lib/libgmp.a gmp-stuff &&		\
			mkdir gmp-stuff gmp-stuff/info &&			\
			echo 'a' | tr 'a' '\037' >gmp-stuff/info/dir &&		\
			{ [ -d gmp-2.0.2 ] ||					\
				zcat <gmp-2.0.2.tgz | tar xf -; } &&		\
				cd gmp-2.0.2 &&					\
				./configure $(PLATFORMFLAGS) --prefix=`pwd`/../gmp-stuff && \
				make CFLAGS=-O install distclean &&		\
				cd .. &&					\
				rm -rf gmp-2.0.2 &&				\
				mv gmp-stuff/include/gmp.h . &&			\
				mv gmp-stuff/lib/libgmp.a ../../lib;		\
	}

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

.PHONY: clean
clean:
	/bin/rm -rf *.o *.a gmp.h gmp-2.0.2 gmp-stuff
