GHCVER = 6.4
PERLVER = 5.8.4

CFLAGS = `perl -MExtUtils::Embed -e ccopts` -I/usr/lib/ghc-$(GHCVER)/include
LDFLAGS = `perl -MExtUtils::Embed -e ldopts` -L/usr/lib/ghc-$(GHCVER) -lHSrts
CC = gcc
GHC = ghc
DYNALOADER := $(shell perl -MProbe -e 'print dynaloader')
PERLLD = -rdynamic $(DYNALOADER) -L/usr/lib/perl/$(PERLVER)/CORE -lperl -ldl -lm -lc -lcrypt
LD = $(GHC) 
PWD := $(shell pwd)

CLEANDIRS = . Perl
CLEANGLOBS = *_hsc.c *_hsc.h *_stub.c *_stub.h *~ *.o *.hi *_hsc_make.c

all: libHSperl.a

test/main: test/Main.o Perl/Core.o Perl/Core_hsc.o Perl/Embed.o perlxsi.o
	$(LD) -o test/main test/Main.o Perl/Core.o Perl/Core_stub.o Perl/Embed_stub.o Perl/Core_hsc.o Perl/Embed.o perlxsi.o $(PERLLD)

DynaLoader.o: $(DYNALOADER)
	ar x $<

libDynaLoader.so: DynaLoader.o
	gcc -shared $< -o $@

libHSperl.a: Perl/Core.o Perl/Core_hsc.o Perl/Embed.o perlxsi.o DynaLoader.o
	ar cqs libHSperl.a Perl/Core.o Perl/Core_hsc.o Perl/Core_stub.o Perl/Embed.o Perl/Embed_stub.o # perlxsi.o DynaLoader.o

HSperl.o: libHSperl.a
	ld -r --whole-archive $< -o $@

clean:
	rm -f Perl.hs Perl/Core.hsc Perl/Core.hs *_hsc.c *_hsc.h Perl/*_hsc.c Perl/*_hsc.h *.hi */*.hi *.o */*.o perlxsi.c setup Perl.buildinfo libHSperl.a HSperl.o DynaLoader.o libDynaLoader.so
	for d in $(CLEANDIRS) ; \
	   do for suffix in $(CLEANGLOBS) ; \
	      do rm -f $$d/$$suffix ; \
	   done ; \
	done

#%.hsc: %.hscp hscp2hsc
#	./hscp2hsc < $< > $@ || rm $@
#%.hs %_hsc.c: %.hsc
#	hsc2hs --cc=$(CC) --cflag="$(CFLAGS)" $<

%.hs %_hsc.c: %.hscp
	./hscp2hsc $< ${<:.hscp=_hsc.c} ${<:.hscp=.hs}

%.o: %.hs
	$(GHC) -c $<

%_hsc.o: %_hsc.c
	$(CC) `perl -MExtUtils::Embed -e ccopts` -c $< -o $@

perlxsi.o: perlxsi.c
	$(CC) `perl -MExtUtils::Embed -e ccopts` -c $< -o $@

%.o: %.c
	$(CC) -c $< -o $@

perlxsi.c: 
	perl -MExtUtils::Embed -e xsinit -- -o $@

test/Main.o: Perl/Embed.o
Perl/Embed.o: Perl/Core.o