#-----------------------------------------------------
# Dynamic linking of C code with Lucky
# 
#-----------------------------------------------------

# Directories
SRCDIR=.
OBJDIR=./obj

MAIN=foo


#settings for Linux (and other posix systems ?)
DLEXT=so
EXE=
CC=gcc
MKDLLFLAGS=
LFLAGS=
SOFLAGS=-shared


#settings for WIN32
ifeq ($(HOSTTYPE),win32)
	DLEXT=dll
	EXE=.exe
	CC=$(GCC)
	MKDLLFLAGS=-Wl,--out-implib,$(OBJDIR)/$(MAIN).a
	LFLAGS=-lm
	LD_ARCH=-DWIN32
endif
ifeq ($(HOSTTYPE),cygwin)
	DLEXT=dll
	EXE=.exe
	LD=gcc -DWIN32 
	CC=gcc -DWIN32 
	MKDLLFLAGS=-Wl,--out-implib,$(OBJDIR)/$(MAIN).a
	LFLAGS=-lm
	LD_ARCH=-DWIN32
endif

ifeq ($(HOSTTYPE),mac)
	LD=g++
	CC=gcc
	SOFLAGS = -dynamiclib 
	LD_ARCH=-DMAC
endif

all: $(OBJDIR)/$(MAIN).$(DLEXT) 

$(OBJDIR):
	mkdir $(OBJDIR)

$(OBJDIR)/$(MAIN).$(DLEXT) : $(OBJDIR)/$(MAIN).o
	$(LD) $(LFLAGS) $(SOFLAGS) -o $(OBJDIR)/$(MAIN).$(DLEXT) \
         $(OBJDIR)/$(MAIN).o \
			$(MKDLLFLAGS)

$(OBJDIR)/%.o : $(OBJDIR) $(SRCDIR)/%.c
	$(CC) -c $(CFLAGS) $(SRCDIR)/$*.c -o $(OBJDIR)/$*.o


call_external_c_code.luc_pp:call_external_c_code.luc
	../../../bin/lucky_cpp call_external_c_code.luc call_external_c_code.luc_pp $(LD_ARCH)

EXPDIR=`../../../bin/lutin$(EXE) --ocaml-version`
$(EXPDIR):
	[ -d $(EXPDIR) ] || mkdir -p $(EXPDIR) ; make utest

test: clean $(OBJDIR)/$(MAIN).$(DLEXT) call_external_c_code.luc_pp $(EXPDIR)
	rm -f test.rif0 && \
	../../../bin/lucky$(EXE)  -l 10 $(OPT) -seed 834966010 \
	call_external_c_code.luc_pp | sed -e "s/^M//"  | grep -v " Lucky Version"  > test.rif
	rm -f test.res && diff -u -i  $(EXPDIR)/test.rif.exp test.rif   > test.res 
	[ ! -s test.res ] && make clean 


utest:
	cp test.rif $(EXPDIR)/test.rif.exp

clean:
	rm -rf $(OBJDIR) *.rif *.rif0 call_external_c_code.luc_pp 



