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
6 CABALBUILD
:= cabal v2-build
7 CABALRUN
:= cabal v2-run
14 $(CABALBUILD
) Cabal
:libs
17 $(CABALBUILD
) cabal-install
:exes
19 # Build library with oldest supported GHC
21 $(CABALBUILD
) --project-file
=cabal.project.libonly
--with-compiler
=ghc-7.6
.3 Cabal
:libs
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
32 $(LEXER_HS
) : templates
/Lexer.x
33 alex
--latin1
--ghc
-o
$@
$^
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
-- $< $@
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
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
--
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
-- $< $@
112 ghcid
-c
'cabal v2-repl Cabal'
115 ghcid
-c
'cabal v2-repl cabal-install'
117 # doctests (relies on .ghc.environment files)
120 doctest
--fast Cabal
/src
122 # This is not run as part of validate.sh (we need hackage-security, which is tricky to get).
124 doctest
-D__DOCTEST__
--fast cabal-install
/src
129 $(CABALRUN
) check-tests
-- --cwd Cabal
${TEST}
132 $(CABALRUN
) parser-tests
-- --cwd Cabal
${TEST}
134 parser-tests-accept
:
135 $(CABALRUN
) parser-tests
-- --cwd Cabal
--accept
${TEST}
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}
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
:
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}
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 .
223 cabal build
all --project-file
=cabal.project.weeder
229 hasktags
-b Cabal
/src Cabal
/Cabal-described
/src cabal-install
/src cabal-testsuite
/src
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
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
)