
OBJECT_DIR    := build/$(shell uname -s)-$(shell uname -m)
INTERFACE_DIR := build/Interface

MODULES = $(wildcard src/*.hs) \
          $(wildcard src/NumericPrelude/*.hs) \
          $(wildcard src/Algebra/*.hs) \
          $(wildcard src/Algebra/NormedSpace/*.hs) \
          $(wildcard src/Number/*.hs) \
          $(wildcard src/Number/Physical/*.hs) \
          $(wildcard src/Number/DimensionTerm/*.hs) \
          $(wildcard src/Number/SI/*.hs) \
          $(wildcard src/Number/ResidueClass/*.hs) \
          $(wildcard src/Number/FixedPoint/*.hs) \
          $(wildcard src/Number/Positional/*.hs) \
          $(wildcard src/MathObj/*hs) \
          $(wildcard src/MathObj/Permutation/*.hs) \
          $(wildcard src/MathObj/Permutation/CycleList/*.hs) \
          $(wildcard src/MathObj/PowerSeries/*.hs)

GHC_OPTIONS = -Wall -odir$(OBJECT_DIR) -hidir$(INTERFACE_DIR)


# names of literate modules after removing literary information
UNLIT_MODULES = $(patsubst %.lhs, %.hs, $(patsubst %.hs, , $(MODULES)))

# names of all modules without literary information
HS_MODULES = $(patsubst %.lhs, %.hs, $(MODULES))

STDINTERFACES = base/base.haddock parsec/parsec.haddock

HADDOCK_INCL = $(patsubst %, -i /usr/local/share/ghc-6.2/html/libraries/%, \
                    $(STDINTERFACES))

HC = ghc

HCI = ghci



.INTERMEDIATE:	$(UNLIT_MODULES)

.PHONY:	all doc clean build test ghci publish

all:	build

clean:
	-rm `find $(OBJECT_DIR) -name "*.o"`
	-rm `find $(INTERFACE_DIR) -name "*.hi"`

test:	build
#	$(HC) -Wall -i:$(INTERFACE_DIR) -hide-package NumericPrelude -c test/Test.hs
	$(HC) $(GHC_OPTIONS) -i:src:test --make -hide-package numeric-prelude -o testsuite test/Test/Run.hs
	./testsuite

ghci:
	$(HCI) -Wall -i:src:test +RTS -M256m -c30 -RTS test/Test.hs

build:
	-mkdir $(OBJECT_DIR)
	$(HC) $(GHC_OPTIONS) -hide-package numeric-prelude --make -O $(MODULES)

doc:	$(HS_MODULES)
	haddock -o docs/html --dump-interface=docs/numericprelude.haddock $(HADDOCK_INCL) -h $(HS_MODULES)

%.hs:	%.lhs
	unlit $< $@

HASKELLORG_HTMLDIR = /home/darcs/numericprelude/docs/html

publish:
	scp -r dist/doc/html/* cvs.haskell.org:$(HASKELLORG_HTMLDIR)/
	#scp -r docs/html/* cvs.haskell.org:$(HASKELLORG_HTMLDIR)/
	ssh cvs.haskell.org chmod -R o+r $(HASKELLORG_HTMLDIR)
	#ssh cvs.haskell.org chmod o+x `find $(HASKELLORG_HTMLDIR) -type d`
