# Default definitions filled in by config script, included from Makefile.inc
include Makefile.inc
.SUFFIXES: 		# To remove default rules like .cpp -> C++

BASIC = Makefile.inc Makefile README INSTALL COPYRIGHT configure

HATSCRIPT = script/harch script/hat-trans.inst script/hat-template.inst \
		script/echo.c script/confhat script/confhc-hat script/fixghc \
		script/hat-graph.inst script/pkgdirlist \
		src/Makefile.inc include/*.h
HATLIB  = src/hatlib/Makefile* src/hatlib/*.[ch] \
	  src/hatlib/*.hs      src/hatlib/*.hx     src/hatlib/hat.cabal \
	  src/hatlib/Hat/*.hs  src/hatlib/hat-package.conf \
          src/hatlib/Data/*.h[sx]        src/hatlib/Hat/Data/*.hs \
          src/hatlib/Control/*.hs        src/hatlib/Control/Monad/*.hs \
          src/hatlib/System/*.hs         src/hatlib/System/IO/*.hs \
          src/hatlib/System/Console/*.hs src/hatlib/Debug/*.hs \
          src/hatlib/Text/*.hs           src/hatlib/Text/PrettyPrint/*.hs \
          src/hatlib/Text/ParserCombinators/*.hs \
          src/hatlib/Text/ParserCombinators/Parsec/*.hs \
	  src/hatlib/Test/*.hs \
          src/hatlib/Foreign/*.h[sx]     src/hatlib/Hat/Foreign/*.hs \
          src/hatlib/Foreign/Marshal/*.hs #src/hat/lib/Foreign/C/*.hs
HATUI	= src/hattools/Makefile* src/hattools/*.[ch] src/hattools/*.hs
HATTRANS= src/hattrans/Makefile* \
	$(shell hmake -package lang -M HatTrans.hs \
		-Isrc/hattrans -Isrc/compiler98 \
		| cut -d':' -f1 | sed -e 's/\.o$$/.hs/' | sed -e '/^. /d' )
DOC = docs/*
MAN = man/*.1.in man/*.1
HATTOOLSET= hat-stack hat-check hat-detect hat-delta hat-anim hat-observe hat-trail hat-view 
HATTOOLS= $(patsubst %, lib/$(MACHINE)/%, $(HATTOOLSET))

TARGDIR= targets
TARGETS= hat-trans-ghc hat-trans-nhc \
	 hat-lib-nhc hat-lib-ghc \
	 hat-tools-ghc hat-tools-nhc

.PHONY: default all hat help config install hat-trans hat-lib hat-tools


##### build + install scripts

default: hat
hat:     hat-$(BUILDCOMP)
all:     hat-$(BUILDCOMP) hat-lib-ghc hat-lib-nhc
hat-$(BUILDCOMP): hat-trans-$(BUILDCOMP) hat-tools-$(BUILDCOMP) \
			hat-lib-$(BUILDCOMP)
hat-trans: hat-trans-${BUILDCOMP}
hat-lib:   hat-lib-${BUILDCOMP}
hat-tools: hat-tools-${BUILDCOMP}
help:
	@echo "Default target is:     hat"
	@echo "Main targets include:  hat hat-trans hat-lib hat-tools "
	@echo "                       all (= for ghc + nhc98)"
	@echo "                       config install clean realclean"
	@echo "For a specific build-compiler: hat-ghc hat-nhc"

config:
	./configure --config
install:
	./configure --install



$(TARGETS): % : $(TARGDIR)/$(MACHINE)/%

$(TARGDIR)/$(MACHINE)/hat-trans-nhc: $(HATTRANS)
	cd src/hattrans;     $(MAKE) HC=$(BUILDWITH) all
	touch $(TARGDIR)/$(MACHINE)/hat-trans-nhc
$(TARGDIR)/$(MACHINE)/hat-trans-ghc: $(HATTRANS)
	cd src/hattrans;     $(MAKE) HC=$(BUILDWITH) all
	touch $(TARGDIR)/$(MACHINE)/hat-trans-ghc

$(TARGDIR)/$(MACHINE)/hat-lib-nhc: $(HATLIB)
	cd src/hatlib;	       $(MAKE) HC=$(BUILDWITH) all
	touch $(TARGDIR)/$(MACHINE)/hat-lib-nhc
$(TARGDIR)/$(MACHINE)/hat-lib-ghc: $(HATLIB)
	cd src/hatlib;	       $(MAKE) HC=$(BUILDWITH) all
	touch $(TARGDIR)/$(MACHINE)/hat-lib-ghc

$(TARGDIR)/$(MACHINE)/hat-tools-nhc: $(HATUI)
	cd src/hattools;      $(MAKE) HC=$(BUILDWITH) all
	touch $(TARGDIR)/$(MACHINE)/hat-tools-nhc
$(TARGDIR)/$(MACHINE)/hat-tools-ghc: $(HATUI)
	cd src/hattools;      $(MAKE) HC=$(BUILDWITH) all
	touch $(TARGDIR)/$(MACHINE)/hat-tools-ghc



##### scripts for packaging various distribution formats

binDist:


srcDist:
	rm -f hat-$(HATVERSION).tar hat-$(HATVERSION).tar.gz
	tar cf hat-$(HATVERSION).tar $(BASIC)
	tar rf hat-$(HATVERSION).tar $(HATSCRIPT)
	tar rf hat-$(HATVERSION).tar $(HATTRANS)
	tar rf hat-$(HATVERSION).tar $(HATLIB)
	tar rf hat-$(HATVERSION).tar $(HATUI)
	tar rf hat-$(HATVERSION).tar $(MAN)
	tar rf hat-$(HATVERSION).tar $(DOC)
	mkdir hat-$(HATVERSION)
	cd hat-$(HATVERSION); tar xf ../hat-$(HATVERSION).tar
	tar cf hat-$(HATVERSION).tar hat-$(HATVERSION)
	rm -r hat-$(HATVERSION)
	gzip hat-$(HATVERSION).tar


##### cleanup

clean:
	cd src/hattrans;       $(MAKE) clean
	cd src/hatlib;         $(MAKE) clean
	cd src/hattools;       $(MAKE) clean
	rm -rf $(BUILDDIR)/obj*			# all object files

realclean: clean
	cd src/hattrans;          $(MAKE) realclean
	cd $(TARGDIR)/$(MACHINE);  rm -f $(TARGETS)
	cd $(TARGDIR)/$(MACHINE);  rm -f config.cache
	rm -rf $(LIBDIR)/$(MACHINE)


syntax highlighted by Code2HTML, v. 0.9.1