Bump Win32 bound to <2.11
[cabal.git] / Makefile
blobc5f8443cf46ed85278a6c6161abce7bcc38aa6a5
1 .PHONY : all lexer sdpx lib exe doctest
2 .PHONY : gen-extra-source-files gen-extra-source-files-lib gen-extra-source-files-cli
3 .PHONY : cabal-install-dev cabal-install-prod
4 .PHONY : phony
6 CABALBUILD := cabal v2-build
7 CABALRUN := cabal v2-run
9 # default rules
11 all : exe lib
13 lib : $(LEXER_HS)
14 $(CABALBUILD) Cabal:libs
16 exe : $(LEXER_HS)
17 $(CABALBUILD) cabal-install:exes
19 # Build library with oldest supported GHC
20 lib-ghc-7.6 :
21 $(CABALBUILD) --project-file=cabal.project.libonly --with-compiler=ghc-7.6.3 Cabal:libs
23 lib-ghc-7.8 :
24 $(CABALBUILD) --project-file=cabal.project.libonly --with-compiler=ghc-7.8.4 Cabal:libs
26 # source generation: Lexer
28 LEXER_HS:=Cabal/src/Distribution/Fields/Lexer.hs
30 lexer : $(LEXER_HS)
32 $(LEXER_HS) : templates/Lexer.x
33 alex --latin1 --ghc -o $@ $^
34 cat -s $@ > Lexer.tmp
35 mv Lexer.tmp $@
37 # source generation: SPDX
39 SPDX_LICENSE_HS:=Cabal/src/Distribution/SPDX/LicenseId.hs
40 SPDX_EXCEPTION_HS:=Cabal/src/Distribution/SPDX/LicenseExceptionId.hs
42 spdx : $(SPDX_LICENSE_HS) $(SPDX_EXCEPTION_HS)
44 $(SPDX_LICENSE_HS) : templates/SPDX.LicenseId.template.hs cabal-dev-scripts/src/GenUtils.hs cabal-dev-scripts/src/GenSPDX.hs license-list-data/licenses-3.0.json license-list-data/licenses-3.2.json
45 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-spdx -- templates/SPDX.LicenseId.template.hs license-list-data/licenses-3.0.json license-list-data/licenses-3.2.json license-list-data/licenses-3.6.json license-list-data/licenses-3.9.json $(SPDX_LICENSE_HS)
47 $(SPDX_EXCEPTION_HS) : templates/SPDX.LicenseExceptionId.template.hs cabal-dev-scripts/src/GenUtils.hs cabal-dev-scripts/src/GenSPDXExc.hs license-list-data/exceptions-3.0.json license-list-data/exceptions-3.2.json
48 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-spdx-exc -- templates/SPDX.LicenseExceptionId.template.hs license-list-data/exceptions-3.0.json license-list-data/exceptions-3.2.json license-list-data/exceptions-3.6.json license-list-data/exceptions-3.9.json $(SPDX_EXCEPTION_HS)
50 # source generation: templates
52 TEMPLATE_MACROS:=Cabal/src/Distribution/Simple/Build/Macros/Z.hs
53 TEMPLATE_PATHS:=Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs
55 templates : phony $(TEMPLATE_MACROS) $(TEMPLATE_PATHS)
57 $(TEMPLATE_MACROS) : templates/cabal_macros.template.h cabal-dev-scripts/src/GenCabalMacros.hs
58 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-cabal-macros -- $< $@
60 $(TEMPLATE_PATHS) : templates/Paths_pkg.template.hs cabal-dev-scripts/src/GenPathsModule.hs
61 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-paths-module -- $< $@
63 # generated docs
65 buildinfo-fields-reference : phony
66 cabal build --builddir=dist-newstyle-bi --project-file=cabal.project.buildinfo buildinfo-reference-generator
67 $$(cabal-plan list-bin --builddir=dist-newstyle-bi buildinfo-reference-generator) buildinfo-reference-generator/template.zinza | tee $@
69 # cabal-install.cabal file generation
71 cabal-install-cabal : phony cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal.prod
73 cabal-install/cabal-install.cabal.dev : cabal-install/cabal-install.cabal.zinza
74 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-cabal-install-cabal -- True cabal-install/cabal-install.cabal.zinza cabal-install/cabal-install.cabal.dev
76 cabal-install/cabal-install.cabal.prod : cabal-install/cabal-install.cabal.zinza
77 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-cabal-install-cabal -- False cabal-install/cabal-install.cabal.zinza cabal-install/cabal-install.cabal.prod
79 cabal-install-prod : cabal-install/cabal-install.cabal.prod
80 cp cabal-install/cabal-install.cabal.prod cabal-install/cabal-install.cabal
82 cabal-install-dev : cabal-install/cabal-install.cabal.dev
83 cp cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal
84 @echo "tell git to ignore changes to cabal-install.cabal:"
85 @echo "git update-index --assume-unchanged cabal-install/cabal-install.cabal"
87 # extra-source-files generation
89 gen-extra-source-files : gen-extra-source-files-lib
91 gen-extra-source-files-lib :
92 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-extra-source-files -- $$(pwd)/Cabal/Cabal.cabal
94 # analyse-imports
95 analyse-imports : phony
96 find Cabal/src cabal-install/src -type f -name '*.hs' | xargs cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta analyse-imports --
98 # github actions
99 github-actions : .github/workflows/artifacts.yml
100 github-actions : .github/workflows/quick-jobs.yml
101 github-actions : .github/workflows/bootstrap.yml
102 github-actions : .github/workflows/linux.yml
103 github-actions : .github/workflows/macos.yml
104 github-actions : .github/workflows/windows.yml
106 .github/workflows/%.yml : templates/ci-%.template.yml cabal-dev-scripts/src/GenValidate.hs
107 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-validate -- $< $@
109 # ghcid
111 ghcid-lib :
112 ghcid -c 'cabal v2-repl Cabal'
114 ghcid-cli :
115 ghcid -c 'cabal v2-repl cabal-install'
117 # doctests (relies on .ghc.environment files)
119 doctest :
120 doctest --fast Cabal/src
122 # This is not run as part of validate.sh (we need hackage-security, which is tricky to get).
123 doctest-cli :
124 doctest -D__DOCTEST__ --fast cabal-install/src
126 # tests
128 check-tests :
129 $(CABALRUN) check-tests -- --cwd Cabal ${TEST}
131 parser-tests :
132 $(CABALRUN) parser-tests -- --cwd Cabal ${TEST}
134 parser-tests-accept :
135 $(CABALRUN) parser-tests -- --cwd Cabal --accept ${TEST}
137 custom-setup-tests :
138 $(CABALRUN) custom-setup-tests --
140 hackage-parsec-tests :
141 $(CABALRUN) hackage-tests -- parsec +RTS -s -qg -I0 -A64M -N${THREADS} -RTS ${TEST}
143 hackage-roundtrip-tests :
144 $(CABALRUN) hackage-tests -- roundtrip +RTS -s -qg -I0 -A64M -N${THREADS} -RTS ${TEST}
146 cabal-install-test:
147 @which cabal-plan
148 $(CABALBUILD) -j3 cabal-tests cabal
149 rm -rf .ghc.environment.*
150 cd cabal-testsuite && `cabal-plan list-bin cabal-tests` --with-cabal=`cabal-plan list-bin cabal` --hide-successes -j3 ${TEST}
152 # This doesn't run build, as you first need to test with cabal-install-test :)
153 cabal-install-test-accept:
154 @which cabal-plan
155 rm -rf .ghc.environment.*
156 cd cabal-testsuite && `cabal-plan list-bin cabal-tests` --with-cabal=`cabal-plan list-bin cabal` --hide-successes -j3 --accept ${TEST}
158 # Docker validation
160 # Use this carefully, on big machine you can say
162 # make validate-via-docker-all -j4 -O
164 validate-via-docker-all : validate-via-docker-7.6.3
165 validate-via-docker-all : validate-via-docker-7.8.4
166 validate-via-docker-all : validate-via-docker-7.10.3
167 validate-via-docker-all : validate-via-docker-8.0.2
168 validate-via-docker-all : validate-via-docker-8.2.2
169 validate-via-docker-all : validate-via-docker-8.4.4
170 validate-via-docker-all : validate-via-docker-8.6.5
171 validate-via-docker-all : validate-via-docker-8.8.3
172 validate-via-docker-all : validate-via-docker-8.10.1
174 validate-dockerfiles : .docker/validate-8.10.1.dockerfile
175 validate-dockerfiles : .docker/validate-8.8.3.dockerfile
176 validate-dockerfiles : .docker/validate-8.6.5.dockerfile
177 validate-dockerfiles : .docker/validate-8.4.4.dockerfile
178 validate-dockerfiles : .docker/validate-8.2.2.dockerfile
179 validate-dockerfiles : .docker/validate-8.6.5.dockerfile
180 validate-dockerfiles : .docker/validate-7.10.3.dockerfile
181 validate-dockerfiles : .docker/validate-7.8.4.dockerfile
182 validate-dockerfiles : .docker/validate-7.6.3.dockerfile
184 .docker/validate-%.dockerfile : .docker/validate.dockerfile.zinza cabal-dev-scripts/src/GenValidateDockerfile.hs
185 cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-validate-dockerfile -- $* $< $@
187 # This is good idea anyway
188 # and we have a test relying on this limit being sufficiently small
189 DOCKERARGS:=--ulimit nofile=1024:1024
191 validate-via-docker-7.6.3:
192 docker build $(DOCKERARGS) -t cabal-validate:7.6.3 -f .docker/validate-7.6.3.dockerfile .
194 validate-via-docker-7.8.4:
195 docker build $(DOCKERARGS) -t cabal-validate:7.8.4 -f .docker/validate-7.8.4.dockerfile .
197 validate-via-docker-7.10.3:
198 docker build $(DOCKERARGS) -t cabal-validate:7.10.3 -f .docker/validate-7.10.3.dockerfile .
200 validate-via-docker-8.0.2:
201 docker build $(DOCKERARGS) -t cabal-validate:8.0.2 -f .docker/validate-8.0.2.dockerfile .
203 validate-via-docker-8.2.2:
204 docker build $(DOCKERARGS) -t cabal-validate:8.2.2 -f .docker/validate-8.2.2.dockerfile .
206 validate-via-docker-8.4.4:
207 docker build $(DOCKERARGS) -t cabal-validate:8.4.4 -f .docker/validate-8.4.4.dockerfile .
209 validate-via-docker-8.6.5:
210 docker build $(DOCKERARGS) -t cabal-validate:8.6.5 -f .docker/validate-8.6.5.dockerfile .
212 validate-via-docker-8.8.3:
213 docker build $(DOCKERARGS) -t cabal-validate:8.8.3 -f .docker/validate-8.8.3.dockerfile .
215 validate-via-docker-8.10.1:
216 docker build $(DOCKERARGS) -t cabal-validate:8.10.1 -f .docker/validate-8.10.1.dockerfile .
218 validate-via-docker-old:
219 docker build $(DOCKERARGS) -t cabal-validate:older -f .docker/validate-old.dockerfile .
221 # Weeder
222 weeder :
223 cabal build all --project-file=cabal.project.weeder
224 weeder | less
226 # tags
227 .PHONY : tags
228 tags :
229 hasktags -b Cabal/src Cabal/Cabal-described/src cabal-install/src cabal-testsuite/src
231 # boostrapping
232 ##############################################################################
234 bootstrap-plans-linux: phony
235 @if [ $$(uname) != "Linux" ]; then echo "Not Linux"; false; fi
236 cabal v2-build --project=cabal.project.release --with-compiler ghc-8.6.5 --dry-run cabal-install:exe:cabal
237 cp dist-newstyle/cache/plan.json bootstrap/linux-8.6.5.plan.json
238 cabal v2-build --project=cabal.project.release --with-compiler ghc-8.8.3 --dry-run cabal-install:exe:cabal
239 cp dist-newstyle/cache/plan.json bootstrap/linux-8.8.3.plan.json
240 cabal v2-build --project=cabal.project.release --with-compiler ghc-8.10.1 --dry-run cabal-install:exe:cabal
241 cp dist-newstyle/cache/plan.json bootstrap/linux-8.10.1.plan.json
243 bootstrap-jsons-linux: phony
244 @if [ $$(uname) != "Linux" ]; then echo "Not Linux"; false; fi
245 cabal v2-build --builddir=dist-newstyle-bootstrap --project=cabal.project.bootstrap cabal-bootstrap-gen
246 cabal v2-run -vnormal+stderr --builddir=dist-newstyle-bootstrap --project=cabal.project.bootstrap cabal-bootstrap-gen -- bootstrap/linux-8.6.5.plan.json | python -m json.tool | tee bootstrap/linux-8.6.5.json
247 cabal v2-run -vnormal+stderr --builddir=dist-newstyle-bootstrap --project=cabal.project.bootstrap cabal-bootstrap-gen -- bootstrap/linux-8.8.3.plan.json | python -m json.tool | tee bootstrap/linux-8.8.3.json
248 cabal v2-run -vnormal+stderr --builddir=dist-newstyle-bootstrap --project=cabal.project.bootstrap cabal-bootstrap-gen -- bootstrap/linux-8.10.1.plan.json | python -m json.tool | tee bootstrap/linux-8.10.1.json
250 # documentation
251 ##############################################################################
253 # TODO: when we have sphinx-build2 ?
254 SPHINXCMD:=sphinx-build
255 SPHINX_HTML_OUTDIR:=dist-newstyle/doc/users-guide
256 USERGUIDE_STAMP:=$(SPHINX_HTML_OUTDIR)/index.html
258 # do pip install everytime so we have up to date requirements when we build
259 users-guide: .python-sphinx-virtualenv $(USERGUIDE_STAMP)
260 $(USERGUIDE_STAMP) : doc/*.rst
261 mkdir -p $(SPHINX_HTML_OUTDIR)
262 (. ./.python-sphinx-virtualenv/bin/activate && pip install -r doc/requirements.txt && $(SPHINXCMD) doc $(SPHINX_HTML_OUTDIR))
264 .python-sphinx-virtualenv:
265 python3 -m venv .python-sphinx-virtualenv
266 (. ./.python-sphinx-virtualenv/bin/activate)