1VERSION=3.4.0.0
2
3#KIND=devel
4KIND=rc
5#KIND=cabal-latest
6
7PREFIX=/usr/local
8HC=ghc
9GHCFLAGS=-Wall -threaded
10SSH_USER=$(USER)
11
12all: build
13
14# build the library itself
15
16SOURCES=Distribution/*.hs Distribution/Simple/*.hs \
17	Distribution/PackageDescription/*.hs Distribution/Simple/GHC/*.hs \
18	Distribution/Simple/Build/*.hs Distribution/Compat/*.hs \
19	Distribution/Simple/Program/*.hs
20CONFIG_STAMP=dist/setup-config
21BUILD_STAMP=dist/build/libHSCabal-$(VERSION).a
22HADDOCK_STAMP=dist/doc/html/Cabal/index.html
23USERGUIDE_STAMP=dist/doc/users-guide/index.html
24SDIST_STAMP=dist/Cabal-$(VERSION).tar.gz
25DISTLOC=dist/release
26DIST_STAMP=$(DISTLOC)/Cabal-$(VERSION).tar.gz
27
28# TODO: when we have sphinx-build2 ?
29SPHINXCMD:=sphinx-build
30
31COMMA=,
32
33setup: $(SOURCES) Setup.hs
34	-mkdir -p dist/setup
35	$(HC) $(GHCFLAGS) --make -i. -odir dist/setup -hidir dist/setup Setup.hs \
36		-o setup
37
38$(CONFIG_STAMP): setup Cabal.cabal
39	./setup configure --with-compiler=$(HC) --prefix=$(PREFIX)
40
41build: $(BUILD_STAMP)
42$(BUILD_STAMP): $(CONFIG_STAMP) $(SOURCES)
43	./setup build
44
45install: $(BUILD_STAMP)
46	./setup install
47
48# documentation...
49
50haddock: $(HADDOCK_STAMP)
51$(HADDOCK_STAMP) : $(CONFIG_STAMP) $(BUILD_STAMP)
52	./setup haddock
53
54SPHINX_HTML_OUTDIR=dist/doc/users-guide
55
56# do pip install everytime so we have up to date requirements when we build
57users-guide: .python-sphinx-virtualenv $(USERGUIDE_STAMP)
58$(USERGUIDE_STAMP) : doc/*.rst
59	mkdir -p $(SPHINX_HTML_OUTDIR)
60	(. ./.python-sphinx-virtualenv/bin/activate && pip install -r doc/requirements.txt && $(SPHINXCMD) doc $(SPHINX_HTML_OUTDIR))
61
62docs: haddock users-guide
63
64.python-sphinx-virtualenv:
65	python3 -m venv .python-sphinx-virtualenv
66	(. ./.python-sphinx-virtualenv/bin/activate)
67
68clean:
69	rm -rf dist/
70	rm -f setup
71
72# testing...
73
74moduleTest: tests/ModuleTest.hs tests/PackageDescriptionTests.hs
75	mkdir -p dist/test
76	$(HC) --make -Wall -DDEBUG -odir dist/test -hidir dist/test \
77		-itests tests/ModuleTest.hs -o moduleTest
78
79#tests: moduleTest clean
80#	cd tests/A && $(MAKE) clean
81#	cd tests/HUnit-1.0 && $(MAKE) clean
82#	cd tests/A && $(MAKE)
83#	cd tests/HUnit-1.0 && $(MAKE)
84
85#check:
86#	rm -f moduleTest
87#	$(MAKE) moduleTest
88#	./moduleTest
89
90# distribution...
91
92$(SDIST_STAMP) : $(BUILD_STAMP)
93	./setup sdist
94
95dist: $(DIST_STAMP)
96$(DIST_STAMP) : $(HADDOCK_STAMP) $(USERGUIDE_STAMP) $(SDIST_STAMP)
97	rm -rf $(DISTLOC)
98	mkdir $(DISTLOC)
99	tar -xzf $(SDIST_STAMP) -C $(DISTLOC)/
100	mkdir -p $(DISTLOC)/Cabal-$(VERSION)/doc
101	cp -r dist/doc/html $(DISTLOC)/Cabal-$(VERSION)/doc/API
102	cp -r dist/doc/users-guide $(DISTLOC)/Cabal-$(VERSION)/doc/
103	cp ChangeLog.md $(DISTLOC)/Cabal-$(VERSION)/
104	tar --format=ustar -C $(DISTLOC) -czf $(DISTLOC)/Cabal-$(VERSION).tar.gz Cabal-$(VERSION)
105	mkdir $(DISTLOC)/doc
106	mv $(DISTLOC)/Cabal-$(VERSION)/doc/users-guide $(DISTLOC)/doc
107	mv $(DISTLOC)/Cabal-$(VERSION)/doc/API $(DISTLOC)/doc
108	mv $(DISTLOC)/Cabal-$(VERSION)/ChangeLog.md $(DISTLOC)/
109	rm -r $(DISTLOC)/Cabal-$(VERSION)/
110	@echo "Cabal tarball built: $(DIST_STAMP)"
111	@echo "Release fileset prepared: $(DISTLOC)/"
112
113# Out of date, use SFTP
114#release: $(DIST_STAMP)
115#	scp -r $(DISTLOC) $(SSH_USER)@haskell.org:/home/web/haskell.org/cabal/release/cabal-$(VERSION)
116#	ssh $(SSH_USER)@haskell.org 'cd /home/web/haskell.org/cabal/release && rm -f $(KIND) && ln -s cabal-$(VERSION) $(KIND)'
117
118# tags...
119
120TAGSSRCDIRS = Distribution Language
121tags TAGS: $(SOURCES)
122	find $(TAGSSRCDIRS) -name \*.\*hs | xargs hasktags
123