1 .PHONY
: all lexer sdpx lib exe doctest
4 CABALBUILD
:= cabal build
12 $(CABALBUILD
) Cabal
:libs
15 $(CABALBUILD
) cabal-install
:exes
17 init
: ## Set up git hooks and ignored revisions
18 @git config core.hooksPath .githooks
21 style
: ## Run the code styler
22 @fourmolu
-q
-i Cabal Cabal-syntax cabal-install
24 style-modified
: ## Run the code styler on modified files
25 @git ls-files
--modified Cabal Cabal-syntax cabal-install \
26 | grep
'.hs$$' | xargs
-P
$(PROCS
) -I
{} fourmolu
-q
-i
{}
28 style-commit
: ## Run the code styler on the previous commit
29 @git diff
--name-only HEAD
$(COMMIT
) Cabal Cabal-syntax cabal-install \
30 | grep
'.hs$$' | xargs
-P
$(PROCS
) -I
{} fourmolu
-q
-i
{}
32 # source generation: SPDX
34 SPDX_LICENSE_HS
:=Cabal-syntax
/src
/Distribution
/SPDX
/LicenseId.hs
35 SPDX_EXCEPTION_HS
:=Cabal-syntax
/src
/Distribution
/SPDX
/LicenseExceptionId.hs
37 spdx
: $(SPDX_LICENSE_HS
) $(SPDX_EXCEPTION_HS
)
39 SPDX_LICENSE_VERSIONS
:=3.0 3.2 3.6 3.9 3.10 3.16
41 $(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
42 cabal run
--builddir
=dist-newstyle-meta
--project-file
=cabal.project.meta gen-spdx
-- templates
/SPDX.LicenseId.template.hs
$(SPDX_LICENSE_VERSIONS
:%=license-list-data
/licenses-
%.json
) $(SPDX_LICENSE_HS
)
44 $(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
45 cabal run
--builddir
=dist-newstyle-meta
--project-file
=cabal.project.meta gen-spdx-exc
-- templates
/SPDX.LicenseExceptionId.template.hs
$(SPDX_LICENSE_VERSIONS
:%=license-list-data
/exceptions-
%.json
) $(SPDX_EXCEPTION_HS
)
47 # source generation: templates
49 TEMPLATE_MACROS
:=Cabal
/src
/Distribution
/Simple
/Build
/Macros
/Z.hs
50 TEMPLATE_PATHS
:=Cabal
/src
/Distribution
/Simple
/Build
/PathsModule
/Z.hs
52 templates
: phony
$(TEMPLATE_MACROS
) $(TEMPLATE_PATHS
)
54 $(TEMPLATE_MACROS
) : templates
/cabal_macros.template.h cabal-dev-scripts
/src
/GenCabalMacros.hs
55 cabal run
--builddir
=dist-newstyle-meta
--project-file
=cabal.project.meta gen-cabal-macros
-- $< $@
57 $(TEMPLATE_PATHS
) : templates
/Paths_pkg.template.hs cabal-dev-scripts
/src
/GenPathsModule.hs
58 cabal run
--builddir
=dist-newstyle-meta
--project-file
=cabal.project.meta gen-paths-module
-- $< $@
62 buildinfo-fields-reference
: phony
63 cabal build
--builddir
=dist-newstyle-bi
--project-file
=cabal.project.buildinfo buildinfo-reference-generator
64 $$(cabal list-bin
--builddir
=dist-newstyle-bi buildinfo-reference-generator
) buildinfo-reference-generator
/template.zinza | tee
$@
67 analyse-imports
: phony
68 find Cabal-syntax
/src Cabal
/src cabal-install
/src
-type f
-name
'*.hs' | xargs cabal run
--builddir
=dist-newstyle-meta
--project-file
=cabal.project.meta analyse-imports
--
73 ghcid
-c
'cabal repl Cabal'
76 ghcid
-c
'cabal repl cabal-install'
78 # Artem, 2023-02-03, https://github.com/haskell/cabal/issues/8504
79 # The new and prefered way to call the doctest tool (as of now) is based on cabal repl --with-ghc=doctest.
80 # The call below reflects the current documentation of the doctest tool except one caveat,
81 # which is https://github.com/haskell/cabal/issues/6859, i.e. we have to hide allow-newer in our project
82 # file from cabal/doctest. This is easy: we just select a project file with no allow-newer (e.g. cabal.project.libonly).
84 # TODO: Cabal-described should be added here but its doctests currently broken, see:
85 # https://github.com/haskell/cabal/issues/8734
86 # Just as well, cabal-install(-solver) doctests (the target below) bitrotted and need some care.
88 cabal repl
--with-ghc
=doctest
--build-depends
=QuickCheck
--build-depends
=template-haskell
--repl-options
="-w" --project-file
="cabal.project.doctest" Cabal-syntax
89 cabal repl
--with-ghc
=doctest
--build-depends
=QuickCheck
--build-depends
=template-haskell
--repl-options
="-w" --project-file
="cabal.project.doctest" Cabal
92 # This is not run as part of validate.sh (we need hackage-security, which is tricky to get).
94 doctest
-D__DOCTEST__
--fast cabal-install
/src cabal-install-solver
/src cabal-install-solver
/src-assertion
97 cabal
install doctest
--overwrite-policy
=always
--ignore-project
102 $(CABALRUN
) check-tests
-- --cwd Cabal-tests
${TEST}
105 $(CABALRUN
) parser-tests
-- --cwd Cabal-tests
${TEST}
107 parser-tests-accept
:
108 $(CABALRUN
) parser-tests
-- --cwd Cabal-tests
--accept
${TEST}
111 $(CABALRUN
) custom-setup-tests
--
113 hackage-parsec-tests
:
114 $(CABALRUN
) hackage-tests
-- parsec
+RTS
-s
-qg
-I0
-A64M
-N
${THREADS} -RTS
${TEST}
116 hackage-roundtrip-tests
:
117 $(CABALRUN
) hackage-tests
-- roundtrip
+RTS
-s
-qg
-I0
-A64M
-N
${THREADS} -RTS
${TEST}
120 $(CABALBUILD
) -j3 cabal-tests cabal
121 rm -rf .ghc.environment.
*
122 cd cabal-testsuite
&& `cabal list-bin cabal-tests` --with-cabal
=`cabal list-bin cabal` --hide-successes
-j3
${TEST}
124 # hackage-benchmarks (solver)
126 hackage-benchmarks-run
:
127 $(CABALBUILD
) -j3 hackage-benchmark cabal
128 rm -rf .ghc.environment.
*
129 $$(cabal list-bin hackage-benchmark
) --cabal1
=cabal
--cabal2
=$$(cabal list-bin cabal
) --packages
="hakyll servant-auth-server" --print-trials
--concurrently
132 # This doesn't run build, as you first need to test with cabal-install-test :)
133 cabal-install-test-accept
:
134 rm -rf .ghc.environment.
*
135 cd cabal-testsuite
&& `cabal list-bin cabal-tests` --with-cabal
=`cabal list-bin cabal` --hide-successes
-j3
--accept
${TEST}
139 # Use this carefully, on big machine you can say
141 # make validate-via-docker-all -j4 -O
143 validate-via-docker-all
: validate-via-docker-8.2
.2
144 validate-via-docker-all
: validate-via-docker-8.4
.4
145 validate-via-docker-all
: validate-via-docker-8.6
.5
146 validate-via-docker-all
: validate-via-docker-8.8
.4
147 validate-via-docker-all
: validate-via-docker-8.10
.4
149 validate-dockerfiles
: .docker
/validate-8.10
.4.dockerfile
150 validate-dockerfiles
: .docker
/validate-8.8
.4.dockerfile
151 validate-dockerfiles
: .docker
/validate-8.6
.5.dockerfile
152 validate-dockerfiles
: .docker
/validate-8.4
.4.dockerfile
153 validate-dockerfiles
: .docker
/validate-8.2
.2.dockerfile
155 .docker
/validate-
%.dockerfile
: .docker
/validate.dockerfile.zinza cabal-dev-scripts
/src
/GenValidateDockerfile.hs
156 cabal run
--builddir
=dist-newstyle-meta
--project-file
=cabal.project.meta gen-validate-dockerfile
-- $* $< $@
158 # This is good idea anyway
159 # and we have a test relying on this limit being sufficiently small
160 DOCKERARGS
:=--ulimit nofile
=1024:1024
162 validate-via-docker-8.2
.2:
163 docker build
$(DOCKERARGS
) -t cabal-validate
:8.2.2 -f .docker
/validate-8.2
.2.dockerfile .
165 validate-via-docker-8.4
.4:
166 docker build
$(DOCKERARGS
) -t cabal-validate
:8.4.4 -f .docker
/validate-8.4
.4.dockerfile .
168 validate-via-docker-8.6
.5:
169 docker build
$(DOCKERARGS
) -t cabal-validate
:8.6.5 -f .docker
/validate-8.6
.5.dockerfile .
171 validate-via-docker-8.8
.4:
172 docker build
$(DOCKERARGS
) -t cabal-validate
:8.8.4 -f .docker
/validate-8.8
.4.dockerfile .
174 validate-via-docker-8.10
.4:
175 docker build
$(DOCKERARGS
) -t cabal-validate
:8.10.4 -f .docker
/validate-8.10
.4.dockerfile .
177 validate-via-docker-old
:
178 docker build
$(DOCKERARGS
) -t cabal-validate
:older
-f .docker
/validate-old.dockerfile .
182 cabal build
all --project-file
=cabal.project.weeder
188 hasktags
-b Cabal-syntax
/src Cabal
/src Cabal-described
/src cabal-install
/src cabal-testsuite
/src
191 ##############################################################################
193 bootstrap-json-
%: phony
194 cabal build
--project
=cabal.project.release
--with-compiler
=ghc-
$* --dry-run cabal-install
:exe
:cabal
195 cp dist-newstyle
/cache
/plan.json bootstrap
/linux-
$*.plan.json
196 @
# -v0 to avoid build output on stdout
197 cd bootstrap
&& cabal run
-v0 cabal-bootstrap-gen
-- linux-
$*.plan.json \
198 | python3
-m json.tool
> linux-
$*.json
200 BOOTSTRAP_GHC_VERSIONS
:= 8.10.7 9.0.2 9.2.7 9.4.4
202 bootstrap-jsons
: $(BOOTSTRAP_GHC_VERSIONS
:%=bootstrap-json-
%)
205 ##############################################################################
209 $(MAKE
) -C doc users-guide
211 .PHONY
: users-guide-requirements
212 users-guide-requirements
:
213 $(MAKE
) -C doc users-guide-requirements
215 ifeq ($(shell uname
), Darwin
)
216 PROCS
:= $(shell sysctl
-n hw.logicalcpu
)
218 PROCS
:= $(shell nproc
)