HC = ghc
AR = ar
LD = ld
INSTALL = install

LIBRARY = /usr/local/lib

PREFIXE = Codec/Encryption
PREFIXA = Codec/ASN1

LIBPREFIXE = Codec.Encryption
LIBPREFIXA = Codec.ASN1

HC_OPTS= -package text -i$(PREFIXE) -i$(PREFIXA) -fglasgow-exts
  
SRCSE = BlowfishAux.hs Modes.hs Blowfish.hs Padding.hs DESAux.hs \
        Utils.hs DES.hs SHA1.hs SHA1Aux.hs MGF.hs NumberTheory.hs \
        EMEOAEP.hs RSA.hs PKCS8.hs
SRCSA = ASN1.hs

PRESRCSE = $(foreach src, $(SRCSE), $(PREFIXE)/$(src))
PRESRCSA = $(foreach src, $(SRCSA), $(PREFIXA)/$(src))

HTMLSE = $(patsubst %.hs, %.html, $(SRCSE))
HTMLSA = $(patsubst %.hs, %.html, $(SRCSA))

PREHTMLSE = $(foreach html, $(HTMLSE), $(LIBPREFIXE).$(html))
PREHTMLSA = $(foreach html, $(HTMLSA), $(LIBPREFIXA).$(html))

HISRCSE  = $(patsubst %.hs, %.hi, $(PRESRCSE))
HISRCSA  = $(patsubst %.hs, %.hi, $(PRESRCSA))
HISRCS   = $(HISRCSA) $(HISRCSE)

OBJSE = $(patsubst %.hs, %.o, $(PRESRCSE))
OBJSA = $(patsubst %.hs, %.o, $(PRESRCSA))

.SUFFIXES: .o .hs .hi

package: $(OBJSE) $(OBJSA)
	rm -f libHScrypto.a
	$(AR) -q libHScrypto.a $^
	$(LD) -r -o HScrypto.o $^

install: libHScrypto.a HScrypto.o
	$(INSTALL) libHScrypto.a $(LIBRARY)/libHScrypto.a
	$(INSTALL) HScrypto.o $(LIBRARY)/HScrypto.o
	$(INSTALL) -d $(LIBRARY)/imports/HScrypto
	for i in $(HISRCS); do \
	   $(INSTALL) -d $(LIBRARY)/imports/HScrypto/`dirname $$i`; \
	   $(INSTALL) -c $$i $(LIBRARY)/imports/HScrypto/`dirname $$i`; \
	done

Test:	$(OBJSE) Test.o
	$(HC) -o $@ $(HC_OPTS) $(OBJSE) Test.o

RSATest: $(OBJSE) RSATest.o
	$(HC) -o $@ $(HC_OPTS) $(OBJSE) RSATest.o

.o.hi:
	@

.hs.o:
	$(HC) -c $< $(HC_OPTS) -package-name crypto

doc: 
	haddock -h $(PRESRCSE) $(PRESRCSA)

clean:
	rm -f $(OBJSE) $(HISRCSE) $(PREHTMLSE) \
	      $(OBJSA) $(HISRCSA) $(PREHTMLSA) \
	      *.css *.gif *.html \
	      libHScrypto.a HScrypto.o *index.html Test.o Test \
	      RSATest.o RSATest

depend:
	ghc -M $(HC_OPTS) $(PRESRCSE) $(PRESRCSA) RSATest.hs
# DO NOT DELETE: Beginning of Haskell dependencies
Codec/Encryption/BlowfishAux.o : Codec/Encryption/BlowfishAux.hs
Codec/Encryption/Modes.o : Codec/Encryption/Modes.hs
Codec/Encryption/Blowfish.o : Codec/Encryption/Blowfish.hs
Codec/Encryption/Blowfish.o : Codec/Encryption/BlowfishAux.hi
Codec/Encryption/Blowfish.o : Codec/Encryption/Utils.hi
Codec/Encryption/Padding.o : Codec/Encryption/Padding.hs
Codec/Encryption/Padding.o : Codec/Encryption/Utils.hi
Codec/Encryption/DESAux.o : Codec/Encryption/DESAux.hs
Codec/Encryption/Utils.o : Codec/Encryption/Utils.hs
Codec/Encryption/DES.o : Codec/Encryption/DES.hs
Codec/Encryption/DES.o : Codec/Encryption/DESAux.hi
Codec/Encryption/SHA1.o : Codec/Encryption/SHA1.hs
Codec/Encryption/SHA1.o : Codec/Encryption/Utils.hi
Codec/Encryption/SHA1.o : Codec/Encryption/SHA1Aux.hi
Codec/Encryption/SHA1Aux.o : Codec/Encryption/SHA1Aux.hs
Codec/Encryption/MGF.o : Codec/Encryption/MGF.hs
Codec/Encryption/MGF.o : Codec/Encryption/Utils.hi
Codec/Encryption/NumberTheory.o : Codec/Encryption/NumberTheory.hs
Codec/Encryption/EMEOAEP.o : Codec/Encryption/EMEOAEP.hs
Codec/Encryption/EMEOAEP.o : Codec/Encryption/Utils.hi
Codec/Encryption/RSA.o : Codec/Encryption/RSA.hs
Codec/Encryption/RSA.o : Codec/Encryption/NumberTheory.hi
Codec/Encryption/RSA.o : Codec/Encryption/Utils.hi
Codec/Encryption/PKCS8.o : Codec/Encryption/PKCS8.hs
Codec/Encryption/PKCS8.o : Codec/Encryption/Utils.hi
Codec/Encryption/PKCS8.o : Codec/ASN1/ASN1.hi
Codec/ASN1/ASN1.o : Codec/ASN1/ASN1.hs
RSATest.o : RSATest.hs
RSATest.o : Codec/Encryption/RSA.hi
RSATest.o : Codec/Encryption/EMEOAEP.hi
RSATest.o : Codec/Encryption/MGF.hi
RSATest.o : Codec/Encryption/SHA1.hi
RSATest.o : Codec/Encryption/Utils.hi
# DO NOT DELETE: End of Haskell dependencies
