From 6a3e43dbc5d861510eec81e6db5ad5c766228ded Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Tue, 2 Jun 2020 18:42:10 +0300 Subject: [PATCH] Template cabal-install.cabal using zinza --- .github/workflows/quick-jobs.yml | 1 + .github/workflows/windows.yml | 2 +- Makefile | 19 +- boot/ci-quick-jobs.template.yml | 1 + boot/ci-windows.template.yml | 2 +- cabal-dev-scripts/cabal-dev-scripts.cabal | 11 + cabal-dev-scripts/src/GenCabalInstallCabal.hs | 49 ++ ...stall.cabal.pp => cabal-install.cabal.dev} | 436 ++++++------- cabal-install/cabal-install.cabal.prod | 398 +++++++++++ cabal-install/cabal-install.cabal.zinza | 616 ++++++++++++++++++ validate.sh | 2 +- 11 files changed, 1292 insertions(+), 245 deletions(-) create mode 100644 cabal-dev-scripts/src/GenCabalInstallCabal.hs rename cabal-install/{cabal-install.cabal.pp => cabal-install.cabal.dev} (95%) create mode 100644 cabal-install/cabal-install.cabal.prod create mode 100644 cabal-install/cabal-install.cabal.zinza diff --git a/.github/workflows/quick-jobs.yml b/.github/workflows/quick-jobs.yml index d53658c575e..a96eae8efe6 100644 --- a/.github/workflows/quick-jobs.yml +++ b/.github/workflows/quick-jobs.yml @@ -44,6 +44,7 @@ jobs: make spdx make templates make github-actions + make cabal-install-cabal - name: Check that diff is clean run: | git status > /dev/null diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index d06066507e7..26a16baaf24 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -49,7 +49,7 @@ jobs: run: cabal v2-update - uses: actions/checkout@v2 - name: make cabal-install-dev - run: runghc cabal-dev-scripts/src/Preprocessor.hs -o cabal-install/cabal-install.cabal -f CABAL_FLAG_LIB cabal-install/cabal-install.cabal.pp + run: cp cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal # We cannot ask for all dependencies, but we can for Cabal. - name: cabal v2-build Cabal --only-dependencies run: cabal v2-build Cabal --only-dependencies diff --git a/Makefile b/Makefile index 886e8810150..4ece5020c31 100644 --- a/Makefile +++ b/Makefile @@ -64,12 +64,19 @@ Cabal/doc/buildinfo-fields-reference.rst : phony # cabal-install.cabal file generation -cabal-install-prod : cabal-install/cabal-install.cabal.pp - runghc -package-env=- cabal-dev-scripts/src/Preprocessor.hs -o cabal-install/cabal-install.cabal cabal-install/cabal-install.cabal.pp - git update-index --no-assume-unchanged cabal-install/cabal-install.cabal +cabal-install-cabal : phony cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal.prod -cabal-install-dev : cabal-install/cabal-install.cabal.pp - runghc -package-env=- cabal-dev-scripts/src/Preprocessor.hs -o cabal-install/cabal-install.cabal -f CABAL_FLAG_LIB cabal-install/cabal-install.cabal.pp +cabal-install/cabal-install.cabal.dev : cabal-install/cabal-install.cabal.zinza + 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 + +cabal-install/cabal-install.cabal.prod : cabal-install/cabal-install.cabal.zinza + 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 + +cabal-install-prod : cabal-install/cabal-install.cabal.prod + cp cabal-install/cabal-install.cabal.prod cabal-install/cabal-install.cabal + +cabal-install-dev : cabal-install/cabal-install.cabal.dev + cp cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal @echo "tell git to ignore changes to cabal-install.cabal:" @echo "git update-index --assume-unchanged cabal-install/cabal-install.cabal" @@ -98,7 +105,7 @@ github-actions : .github/workflows/windows.yml # We need to generate cabal-install-dev so the test modules are in .cabal file! gen-extra-source-files-cli : $(MAKE) cabal-install-dev - cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-extra-source-files -- $$(pwd)/cabal-install/cabal-install.cabal.pp $$(pwd)/cabal-install/cabal-install.cabal + cabal v2-run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-extra-source-files -- $$(pwd)/cabal-install/cabal-install.cabal.zinza $$(pwd)/cabal-install/cabal-install.cabal $(MAKE) cabal-install-prod # ghcid diff --git a/boot/ci-quick-jobs.template.yml b/boot/ci-quick-jobs.template.yml index d53658c575e..a96eae8efe6 100644 --- a/boot/ci-quick-jobs.template.yml +++ b/boot/ci-quick-jobs.template.yml @@ -44,6 +44,7 @@ jobs: make spdx make templates make github-actions + make cabal-install-cabal - name: Check that diff is clean run: | git status > /dev/null diff --git a/boot/ci-windows.template.yml b/boot/ci-windows.template.yml index fb99918f2cc..c46ff00a357 100644 --- a/boot/ci-windows.template.yml +++ b/boot/ci-windows.template.yml @@ -56,7 +56,7 @@ jobs: run: cabal v2-update - uses: actions/checkout@v2 - name: make cabal-install-dev - run: runghc cabal-dev-scripts/src/Preprocessor.hs -o cabal-install/cabal-install.cabal -f CABAL_FLAG_LIB cabal-install/cabal-install.cabal.pp + run: cp cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal # We cannot ask for all dependencies, but we can for Cabal. - name: cabal v2-build Cabal --only-dependencies run: cabal v2-build Cabal --only-dependencies diff --git a/cabal-dev-scripts/cabal-dev-scripts.cabal b/cabal-dev-scripts/cabal-dev-scripts.cabal index f73d02879e5..1df2d5c9bfd 100644 --- a/cabal-dev-scripts/cabal-dev-scripts.cabal +++ b/cabal-dev-scripts/cabal-dev-scripts.cabal @@ -81,6 +81,17 @@ executable gen-cabal-macros , template-haskell , zinza ^>=0.2 +executable gen-cabal-install-cabal + default-language: Haskell2010 + main-is: GenCabalInstallCabal.hs + hs-source-dirs: src + ghc-options: -Wall + build-depends: + , base + , bytestring + , Cabal + , zinza ^>=0.2 + executable analyse-imports default-language: Haskell2010 main-is: AnalyseImports.hs diff --git a/cabal-dev-scripts/src/GenCabalInstallCabal.hs b/cabal-dev-scripts/src/GenCabalInstallCabal.hs new file mode 100644 index 00000000000..6a6c1ce9be6 --- /dev/null +++ b/cabal-dev-scripts/src/GenCabalInstallCabal.hs @@ -0,0 +1,49 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE ScopedTypeVariables #-} +module Main (main) where + +import Control.Exception (SomeException (..), catch, displayException) +import GHC.Generics (Generic) +import System.Environment (getArgs) +import System.Exit (exitFailure) + +import qualified Zinza as Z + +withIO :: (Bool -> FilePath -> FilePath -> IO a) -> IO a +withIO k = do + args <- getArgs + case args of + [dev',src,tgt] + | Just dev <- parseBool dev' + -> k dev src tgt `catch` \(SomeException e) -> do + putStrLn $ "Exception: " ++ displayException e + exitFailure + _ -> do + putStrLn "Usage cabal v2-run ... source.temeplate.ext target.ext" + exitFailure + where + parseBool "True" = Just True + parseBool "False" = Just False + parseBool _ = Nothing + + +main :: IO () +main = withIO $ \dev src tgt -> do + render <- Z.parseAndCompileTemplateIO src + contents <- render $ Z dev () + writeFile tgt contents + +------------------------------------------------------------------------------- +-- Data +------------------------------------------------------------------------------- + +data Z = Z + { zDev :: Bool + , zUnused :: () + } + deriving (Generic) + +instance Z.Zinza Z where + toType = Z.genericToTypeSFP + toValue = Z.genericToValueSFP + fromValue = Z.genericFromValueSFP diff --git a/cabal-install/cabal-install.cabal.pp b/cabal-install/cabal-install.cabal.dev similarity index 95% rename from cabal-install/cabal-install.cabal.pp rename to cabal-install/cabal-install.cabal.dev index cba8f88c8d1..0f6a5080069 100644 --- a/cabal-install/cabal-install.cabal.pp +++ b/cabal-install/cabal-install.cabal.dev @@ -1,76 +1,134 @@ -# lib enabled means that we have internal library: cabal-lib-client -%if CABAL_FLAG_LIB Cabal-Version: 2.0 -%else -Cabal-Version: >= 1.10 -%endif - $variable -- NOTE: This file is autogenerated from 'cabal-install.cabal.pp'. -- DO NOT EDIT MANUALLY. -- To update this file, edit 'cabal-install.cabal.pp' and run -- 'make cabal-install-prod' in the project's root folder. Name: cabal-install Version: 3.3.0.0 -# -# NOTE: when updating build-depends, don't forget to update version regexps in bootstrap.sh. -# -%def CABAL_BUILDDEPENDS - build-depends: - async >= 2.0 && < 2.3, - array >= 0.4 && < 0.6, - base >= 4.8 && < 4.15, - base16-bytestring >= 0.1.1 && < 0.2, - binary >= 0.7.3 && < 0.9, - bytestring >= 0.10.6.0 && < 0.11, - Cabal == 3.3.*, - containers >= 0.5.6.2 && < 0.7, - cryptohash-sha256 >= 0.11 && < 0.12, - deepseq >= 1.4.1.1 && < 1.5, - directory >= 1.2.2.0 && < 1.4, - echo >= 0.1.3 && < 0.2, - edit-distance >= 0.2.2 && < 0.3, - filepath >= 1.4.0.0 && < 1.5, - hashable >= 1.0 && < 1.4, - HTTP >= 4000.1.5 && < 4000.4, - mtl >= 2.0 && < 2.3, - network-uri >= 2.6.0.2 && < 2.7, - network >= 2.6 && < 3.2, - pretty >= 1.1 && < 1.2, - process >= 1.2.3.0 && < 1.7, - random >= 1 && < 1.2, - stm >= 2.0 && < 2.6, - tar >= 0.5.0.3 && < 0.6, - time >= 1.5.0.1 && < 1.11, - transformers >= 0.4.2.0 && < 0.6, - zlib >= 0.5.3 && < 0.7, - hackage-security >= 0.6.0.1 && < 0.7, - text >= 1.2.3 && < 1.3, - parsec >= 3.1.13.0 && < 3.2, - regex-base >= 0.94.0.0 && <0.95, - regex-posix >= 0.96.0.0 && <0.97 +Synopsis: The command-line interface for Cabal and Hackage. +Description: + The \'cabal\' command-line program simplifies the process of managing + Haskell software by automating the fetching, configuration, compilation + and installation of Haskell libraries and programs. +homepage: http://www.haskell.org/cabal/ +bug-reports: https://github.com/haskell/cabal/issues +License: BSD3 +License-File: LICENSE +Author: Cabal Development Team (see AUTHORS file) +Maintainer: Cabal Development Team +Copyright: 2003-2020, Cabal Development Team +Category: Distribution +Build-type: Simple +Extra-Source-Files: + README.md bash-completion/cabal bootstrap.sh changelog - if !impl(ghc >= 8.0) - build-depends: fail == 4.9.* - build-depends: semigroups >= 0.18.3 && <0.20 + -- Generated with 'make gen-extra-source-files' + -- Do NOT edit this section manually; instead, run the script. + -- BEGIN gen-extra-source-files + tests/IntegrationTests2/build/keep-going/cabal.project + tests/IntegrationTests2/build/keep-going/p/P.hs + tests/IntegrationTests2/build/keep-going/p/p.cabal + tests/IntegrationTests2/build/keep-going/q/Q.hs + tests/IntegrationTests2/build/keep-going/q/q.cabal + tests/IntegrationTests2/build/local-tarball/cabal.project + tests/IntegrationTests2/build/local-tarball/q/Q.hs + tests/IntegrationTests2/build/local-tarball/q/q.cabal + tests/IntegrationTests2/build/setup-custom1/A.hs + tests/IntegrationTests2/build/setup-custom1/Setup.hs + tests/IntegrationTests2/build/setup-custom1/a.cabal + tests/IntegrationTests2/build/setup-custom2/A.hs + tests/IntegrationTests2/build/setup-custom2/Setup.hs + tests/IntegrationTests2/build/setup-custom2/a.cabal + tests/IntegrationTests2/build/setup-simple/A.hs + tests/IntegrationTests2/build/setup-simple/Setup.hs + tests/IntegrationTests2/build/setup-simple/a.cabal + tests/IntegrationTests2/exception/bad-config/cabal.project + tests/IntegrationTests2/exception/build/Main.hs + tests/IntegrationTests2/exception/build/a.cabal + tests/IntegrationTests2/exception/configure/a.cabal + tests/IntegrationTests2/exception/no-pkg/empty.in + tests/IntegrationTests2/exception/no-pkg2/cabal.project + tests/IntegrationTests2/regression/3324/cabal.project + tests/IntegrationTests2/regression/3324/p/P.hs + tests/IntegrationTests2/regression/3324/p/p.cabal + tests/IntegrationTests2/regression/3324/q/Q.hs + tests/IntegrationTests2/regression/3324/q/q.cabal + tests/IntegrationTests2/targets/all-disabled/cabal.project + tests/IntegrationTests2/targets/all-disabled/p.cabal + tests/IntegrationTests2/targets/benchmarks-disabled/cabal.project + tests/IntegrationTests2/targets/benchmarks-disabled/p.cabal + tests/IntegrationTests2/targets/benchmarks-disabled/q/q.cabal + tests/IntegrationTests2/targets/complex/cabal.project + tests/IntegrationTests2/targets/complex/q/Q.hs + tests/IntegrationTests2/targets/complex/q/q.cabal + tests/IntegrationTests2/targets/empty-pkg/cabal.project + tests/IntegrationTests2/targets/empty-pkg/p.cabal + tests/IntegrationTests2/targets/empty/cabal.project + tests/IntegrationTests2/targets/empty/foo.hs + tests/IntegrationTests2/targets/exes-disabled/cabal.project + tests/IntegrationTests2/targets/exes-disabled/p/p.cabal + tests/IntegrationTests2/targets/exes-disabled/q/q.cabal + tests/IntegrationTests2/targets/lib-only/p.cabal + tests/IntegrationTests2/targets/libs-disabled/cabal.project + tests/IntegrationTests2/targets/libs-disabled/p/p.cabal + tests/IntegrationTests2/targets/libs-disabled/q/q.cabal + tests/IntegrationTests2/targets/multiple-exes/cabal.project + tests/IntegrationTests2/targets/multiple-exes/p.cabal + tests/IntegrationTests2/targets/multiple-libs/cabal.project + tests/IntegrationTests2/targets/multiple-libs/p/p.cabal + tests/IntegrationTests2/targets/multiple-libs/q/q.cabal + tests/IntegrationTests2/targets/multiple-tests/cabal.project + tests/IntegrationTests2/targets/multiple-tests/p.cabal + tests/IntegrationTests2/targets/simple/P.hs + tests/IntegrationTests2/targets/simple/app/Main.hs + tests/IntegrationTests2/targets/simple/cabal.project + tests/IntegrationTests2/targets/simple/p.cabal + tests/IntegrationTests2/targets/simple/q/Q.hs + tests/IntegrationTests2/targets/simple/q/QQ.hs + tests/IntegrationTests2/targets/simple/q/q.cabal + tests/IntegrationTests2/targets/test-only/p.cabal + tests/IntegrationTests2/targets/tests-disabled/cabal.project + tests/IntegrationTests2/targets/tests-disabled/p.cabal + tests/IntegrationTests2/targets/tests-disabled/q/q.cabal + tests/IntegrationTests2/targets/variety/cabal.project + tests/IntegrationTests2/targets/variety/p.cabal + -- END gen-extra-source-files - if flag(native-dns) - if os(windows) - build-depends: windns >= 0.1.0 && < 0.2 - else - build-depends: resolv >= 0.1.1 && < 0.2 + -- Additional manual extra-source-files: + tests/IntegrationTests2/build/local-tarball/p-0.1.tar.gz - if os(windows) - -- newer directory for symlinks - build-depends: Win32 >= 2 && < 3, directory >=1.3.1.0 - else - build-depends: unix >= 2.5 && < 2.9 - if flag(lukko) - build-depends: lukko >= 0.1 && <0.2 - else - build-depends: base >= 4.10 -%enddef -%def CABAL_COMPONENTCOMMON +source-repository head + type: git + location: https://github.com/haskell/cabal/ + subdir: cabal-install + +Flag native-dns + description: Enable use of the [resolv](https://hackage.haskell.org/package/resolv) & [windns](https://hackage.haskell.org/package/windns) packages for performing DNS lookups + default: True + manual: True + +Flag debug-expensive-assertions + description: Enable expensive assertions for testing or debugging + default: False + manual: True + +Flag debug-conflict-sets + description: Add additional information to ConflictSets + default: False + manual: True + +Flag debug-tracetree + description: Compile in support for tracetree (used to debug the solver) + default: False + manual: True + +Flag lukko + description: Use @lukko@ for file-locking + default: True + manual: True + +library cabal-lib-client default-language: Haskell2010 ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns if impl(ghc >= 8.0) @@ -79,13 +137,8 @@ if impl(ghc < 8.8) ghc-options: -Wnoncanonical-monadfail-instances -%enddef -%def CABAL_BUILDINFO -%if CABAL_FLAG_LIB + hs-source-dirs: . exposed-modules: -%else - other-modules: -%endif -- this modules are moved from Cabal -- they are needed for as long until cabal-install moves to parsec parser Distribution.Deprecated.ParseUtils @@ -270,11 +323,62 @@ Distribution.Solver.Types.Variable Paths_cabal_install -%if CABAL_FLAG_LIB autogen-modules: Paths_cabal_install -%endif - $CABAL_BUILDDEPENDS + build-depends: + async >= 2.0 && < 2.3, + array >= 0.4 && < 0.6, + base >= 4.8 && < 4.15, + base16-bytestring >= 0.1.1 && < 0.2, + binary >= 0.7.3 && < 0.9, + bytestring >= 0.10.6.0 && < 0.11, + Cabal == 3.3.*, + containers >= 0.5.6.2 && < 0.7, + cryptohash-sha256 >= 0.11 && < 0.12, + deepseq >= 1.4.1.1 && < 1.5, + directory >= 1.2.2.0 && < 1.4, + echo >= 0.1.3 && < 0.2, + edit-distance >= 0.2.2 && < 0.3, + filepath >= 1.4.0.0 && < 1.5, + hashable >= 1.0 && < 1.4, + HTTP >= 4000.1.5 && < 4000.4, + mtl >= 2.0 && < 2.3, + network-uri >= 2.6.0.2 && < 2.7, + network >= 2.6 && < 3.2, + pretty >= 1.1 && < 1.2, + process >= 1.2.3.0 && < 1.7, + random >= 1 && < 1.2, + stm >= 2.0 && < 2.6, + tar >= 0.5.0.3 && < 0.6, + time >= 1.5.0.1 && < 1.11, + transformers >= 0.4.2.0 && < 0.6, + zlib >= 0.5.3 && < 0.7, + hackage-security >= 0.6.0.1 && < 0.7, + text >= 1.2.3 && < 1.3, + parsec >= 3.1.13.0 && < 3.2, + regex-base >= 0.94.0.0 && <0.95, + regex-posix >= 0.96.0.0 && <0.97 + + if !impl(ghc >= 8.0) + build-depends: fail == 4.9.* + build-depends: semigroups >= 0.18.3 && <0.20 + + if flag(native-dns) + if os(windows) + build-depends: windns >= 0.1.0 && < 0.2 + else + build-depends: resolv >= 0.1.1 && < 0.2 + + if os(windows) + -- newer directory for symlinks + build-depends: Win32 >= 2 && < 3, directory >=1.3.1.0 + else + build-depends: unix >= 2.5 && < 2.9 + + if flag(lukko) + build-depends: lukko >= 0.1 && <0.2 + else + build-depends: base >= 4.10 if flag(debug-expensive-assertions) cpp-options: -DDEBUG_EXPENSIVE_ASSERTIONS @@ -286,144 +390,16 @@ if flag(debug-tracetree) cpp-options: -DDEBUG_TRACETREE build-depends: tracetree >= 0.1 && < 0.2 -%enddef -# -# Package Description -# -Synopsis: The command-line interface for Cabal and Hackage. -Description: - The \'cabal\' command-line program simplifies the process of managing - Haskell software by automating the fetching, configuration, compilation - and installation of Haskell libraries and programs. -homepage: http://www.haskell.org/cabal/ -bug-reports: https://github.com/haskell/cabal/issues -License: BSD3 -License-File: LICENSE -Author: Cabal Development Team (see AUTHORS file) -Maintainer: Cabal Development Team -Copyright: 2003-2020, Cabal Development Team -Category: Distribution -Build-type: Simple -Extra-Source-Files: - README.md bash-completion/cabal bootstrap.sh changelog - - -- Generated with 'make gen-extra-source-files' - -- Do NOT edit this section manually; instead, run the script. - -- BEGIN gen-extra-source-files - tests/IntegrationTests2/build/keep-going/cabal.project - tests/IntegrationTests2/build/keep-going/p/P.hs - tests/IntegrationTests2/build/keep-going/p/p.cabal - tests/IntegrationTests2/build/keep-going/q/Q.hs - tests/IntegrationTests2/build/keep-going/q/q.cabal - tests/IntegrationTests2/build/local-tarball/cabal.project - tests/IntegrationTests2/build/local-tarball/q/Q.hs - tests/IntegrationTests2/build/local-tarball/q/q.cabal - tests/IntegrationTests2/build/setup-custom1/A.hs - tests/IntegrationTests2/build/setup-custom1/Setup.hs - tests/IntegrationTests2/build/setup-custom1/a.cabal - tests/IntegrationTests2/build/setup-custom2/A.hs - tests/IntegrationTests2/build/setup-custom2/Setup.hs - tests/IntegrationTests2/build/setup-custom2/a.cabal - tests/IntegrationTests2/build/setup-simple/A.hs - tests/IntegrationTests2/build/setup-simple/Setup.hs - tests/IntegrationTests2/build/setup-simple/a.cabal - tests/IntegrationTests2/exception/bad-config/cabal.project - tests/IntegrationTests2/exception/build/Main.hs - tests/IntegrationTests2/exception/build/a.cabal - tests/IntegrationTests2/exception/configure/a.cabal - tests/IntegrationTests2/exception/no-pkg/empty.in - tests/IntegrationTests2/exception/no-pkg2/cabal.project - tests/IntegrationTests2/regression/3324/cabal.project - tests/IntegrationTests2/regression/3324/p/P.hs - tests/IntegrationTests2/regression/3324/p/p.cabal - tests/IntegrationTests2/regression/3324/q/Q.hs - tests/IntegrationTests2/regression/3324/q/q.cabal - tests/IntegrationTests2/targets/all-disabled/cabal.project - tests/IntegrationTests2/targets/all-disabled/p.cabal - tests/IntegrationTests2/targets/benchmarks-disabled/cabal.project - tests/IntegrationTests2/targets/benchmarks-disabled/p.cabal - tests/IntegrationTests2/targets/benchmarks-disabled/q/q.cabal - tests/IntegrationTests2/targets/complex/cabal.project - tests/IntegrationTests2/targets/complex/q/Q.hs - tests/IntegrationTests2/targets/complex/q/q.cabal - tests/IntegrationTests2/targets/empty-pkg/cabal.project - tests/IntegrationTests2/targets/empty-pkg/p.cabal - tests/IntegrationTests2/targets/empty/cabal.project - tests/IntegrationTests2/targets/empty/foo.hs - tests/IntegrationTests2/targets/exes-disabled/cabal.project - tests/IntegrationTests2/targets/exes-disabled/p/p.cabal - tests/IntegrationTests2/targets/exes-disabled/q/q.cabal - tests/IntegrationTests2/targets/lib-only/p.cabal - tests/IntegrationTests2/targets/libs-disabled/cabal.project - tests/IntegrationTests2/targets/libs-disabled/p/p.cabal - tests/IntegrationTests2/targets/libs-disabled/q/q.cabal - tests/IntegrationTests2/targets/multiple-exes/cabal.project - tests/IntegrationTests2/targets/multiple-exes/p.cabal - tests/IntegrationTests2/targets/multiple-libs/cabal.project - tests/IntegrationTests2/targets/multiple-libs/p/p.cabal - tests/IntegrationTests2/targets/multiple-libs/q/q.cabal - tests/IntegrationTests2/targets/multiple-tests/cabal.project - tests/IntegrationTests2/targets/multiple-tests/p.cabal - tests/IntegrationTests2/targets/simple/P.hs - tests/IntegrationTests2/targets/simple/app/Main.hs - tests/IntegrationTests2/targets/simple/cabal.project - tests/IntegrationTests2/targets/simple/p.cabal - tests/IntegrationTests2/targets/simple/q/Q.hs - tests/IntegrationTests2/targets/simple/q/QQ.hs - tests/IntegrationTests2/targets/simple/q/q.cabal - tests/IntegrationTests2/targets/test-only/p.cabal - tests/IntegrationTests2/targets/tests-disabled/cabal.project - tests/IntegrationTests2/targets/tests-disabled/p.cabal - tests/IntegrationTests2/targets/tests-disabled/q/q.cabal - tests/IntegrationTests2/targets/variety/cabal.project - tests/IntegrationTests2/targets/variety/p.cabal - -- END gen-extra-source-files - - -- Additional manual extra-source-files: - tests/IntegrationTests2/build/local-tarball/p-0.1.tar.gz - - -source-repository head - type: git - location: https://github.com/haskell/cabal/ - subdir: cabal-install - -Flag native-dns - description: Enable use of the [resolv](https://hackage.haskell.org/package/resolv) & [windns](https://hackage.haskell.org/package/windns) packages for performing DNS lookups - default: True - manual: True - -Flag debug-expensive-assertions - description: Enable expensive assertions for testing or debugging - default: False - manual: True - -Flag debug-conflict-sets - description: Add additional information to ConflictSets - default: False - manual: True - -Flag debug-tracetree - description: Compile in support for tracetree (used to debug the solver) - default: False - manual: True - -Flag lukko - description: Use @lukko@ for file-locking - default: True - manual: True - -# -# Libraries, if CABAL_FLAG_LIB -# -%if CABAL_FLAG_LIB -library cabal-lib-client - $CABAL_COMPONENTCOMMON - hs-source-dirs: . - $CABAL_BUILDINFO library cabal-install-solver-dsl - $CABAL_COMPONENTCOMMON + default-language: Haskell2010 + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns + if impl(ghc >= 8.0) + ghc-options: -Wcompat + -Wnoncanonical-monad-instances + if impl(ghc < 8.8) + ghc-options: -Wnoncanonical-monadfail-instances + hs-source-dirs: solver-dsl exposed-modules: UnitTests.Distribution.Solver.Modular.DSL @@ -433,21 +409,23 @@ containers, -- TODO: depend on cabal-install-solver only cabal-lib-client -%endif -# -# Executable -# executable cabal main-is: Main.hs hs-source-dirs: main - $CABAL_COMPONENTCOMMON + default-language: Haskell2010 + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns + if impl(ghc >= 8.0) + ghc-options: -Wcompat + -Wnoncanonical-monad-instances + if impl(ghc < 8.8) + ghc-options: -Wnoncanonical-monadfail-instances + ghc-options: -rtsopts -threaded -- On AIX, some legacy BSD operations such as flock(2) are provided by libbsd.a if os(aix) extra-libraries: bsd -%if CABAL_FLAG_LIB build-depends: cabal-lib-client, Cabal, @@ -456,18 +434,8 @@ filepath other-modules: Paths_cabal_install -%else - hs-source-dirs: . - $CABAL_BUILDINFO -%endif -# -# Test-suites -# disable if we don't configure with an (internal) libs -# -%if CABAL_FLAG_LIB -# -# Small, fast running tests. -# +-- Small, fast running tests. +-- Test-Suite unit-tests type: exitcode-stdio-1.0 main-is: UnitTests.hs @@ -534,9 +502,8 @@ default-language: Haskell2010 -# -# Tests to run with a limited stack and heap size -# +-- Tests to run with a limited stack and heap size +-- Test-Suite memory-usage-tests type: exitcode-stdio-1.0 main-is: MemoryUsageTests.hs @@ -562,9 +529,8 @@ default-language: Haskell2010 -# -# Slow solver tests -# +-- Slow solver tests +-- Test-Suite solver-quickcheck type: exitcode-stdio-1.0 main-is: SolverQuickCheck.hs @@ -593,10 +559,9 @@ default-language: Haskell2010 -# -# Integration tests that use the cabal-install code directly -# but still build whole projects -# + +-- Integration tests that use the cabal-install code directly +-- but still build whole projects test-suite integration-tests2 type: exitcode-stdio-1.0 main-is: IntegrationTests2.hs @@ -620,4 +585,3 @@ ghc-options: -threaded default-language: Haskell2010 -%endif diff --git a/cabal-install/cabal-install.cabal.prod b/cabal-install/cabal-install.cabal.prod new file mode 100644 index 00000000000..24081e7346e --- /dev/null +++ b/cabal-install/cabal-install.cabal.prod @@ -0,0 +1,398 @@ +Cabal-Version: >= 1.10 +-- NOTE: This file is autogenerated from 'cabal-install.cabal.pp'. +-- DO NOT EDIT MANUALLY. +-- To update this file, edit 'cabal-install.cabal.pp' and run +-- 'make cabal-install-prod' in the project's root folder. +Name: cabal-install +Version: 3.3.0.0 +Synopsis: The command-line interface for Cabal and Hackage. +Description: + The \'cabal\' command-line program simplifies the process of managing + Haskell software by automating the fetching, configuration, compilation + and installation of Haskell libraries and programs. +homepage: http://www.haskell.org/cabal/ +bug-reports: https://github.com/haskell/cabal/issues +License: BSD3 +License-File: LICENSE +Author: Cabal Development Team (see AUTHORS file) +Maintainer: Cabal Development Team +Copyright: 2003-2020, Cabal Development Team +Category: Distribution +Build-type: Simple +Extra-Source-Files: + README.md bash-completion/cabal bootstrap.sh changelog + + -- Generated with 'make gen-extra-source-files' + -- Do NOT edit this section manually; instead, run the script. + -- BEGIN gen-extra-source-files + tests/IntegrationTests2/build/keep-going/cabal.project + tests/IntegrationTests2/build/keep-going/p/P.hs + tests/IntegrationTests2/build/keep-going/p/p.cabal + tests/IntegrationTests2/build/keep-going/q/Q.hs + tests/IntegrationTests2/build/keep-going/q/q.cabal + tests/IntegrationTests2/build/local-tarball/cabal.project + tests/IntegrationTests2/build/local-tarball/q/Q.hs + tests/IntegrationTests2/build/local-tarball/q/q.cabal + tests/IntegrationTests2/build/setup-custom1/A.hs + tests/IntegrationTests2/build/setup-custom1/Setup.hs + tests/IntegrationTests2/build/setup-custom1/a.cabal + tests/IntegrationTests2/build/setup-custom2/A.hs + tests/IntegrationTests2/build/setup-custom2/Setup.hs + tests/IntegrationTests2/build/setup-custom2/a.cabal + tests/IntegrationTests2/build/setup-simple/A.hs + tests/IntegrationTests2/build/setup-simple/Setup.hs + tests/IntegrationTests2/build/setup-simple/a.cabal + tests/IntegrationTests2/exception/bad-config/cabal.project + tests/IntegrationTests2/exception/build/Main.hs + tests/IntegrationTests2/exception/build/a.cabal + tests/IntegrationTests2/exception/configure/a.cabal + tests/IntegrationTests2/exception/no-pkg/empty.in + tests/IntegrationTests2/exception/no-pkg2/cabal.project + tests/IntegrationTests2/regression/3324/cabal.project + tests/IntegrationTests2/regression/3324/p/P.hs + tests/IntegrationTests2/regression/3324/p/p.cabal + tests/IntegrationTests2/regression/3324/q/Q.hs + tests/IntegrationTests2/regression/3324/q/q.cabal + tests/IntegrationTests2/targets/all-disabled/cabal.project + tests/IntegrationTests2/targets/all-disabled/p.cabal + tests/IntegrationTests2/targets/benchmarks-disabled/cabal.project + tests/IntegrationTests2/targets/benchmarks-disabled/p.cabal + tests/IntegrationTests2/targets/benchmarks-disabled/q/q.cabal + tests/IntegrationTests2/targets/complex/cabal.project + tests/IntegrationTests2/targets/complex/q/Q.hs + tests/IntegrationTests2/targets/complex/q/q.cabal + tests/IntegrationTests2/targets/empty-pkg/cabal.project + tests/IntegrationTests2/targets/empty-pkg/p.cabal + tests/IntegrationTests2/targets/empty/cabal.project + tests/IntegrationTests2/targets/empty/foo.hs + tests/IntegrationTests2/targets/exes-disabled/cabal.project + tests/IntegrationTests2/targets/exes-disabled/p/p.cabal + tests/IntegrationTests2/targets/exes-disabled/q/q.cabal + tests/IntegrationTests2/targets/lib-only/p.cabal + tests/IntegrationTests2/targets/libs-disabled/cabal.project + tests/IntegrationTests2/targets/libs-disabled/p/p.cabal + tests/IntegrationTests2/targets/libs-disabled/q/q.cabal + tests/IntegrationTests2/targets/multiple-exes/cabal.project + tests/IntegrationTests2/targets/multiple-exes/p.cabal + tests/IntegrationTests2/targets/multiple-libs/cabal.project + tests/IntegrationTests2/targets/multiple-libs/p/p.cabal + tests/IntegrationTests2/targets/multiple-libs/q/q.cabal + tests/IntegrationTests2/targets/multiple-tests/cabal.project + tests/IntegrationTests2/targets/multiple-tests/p.cabal + tests/IntegrationTests2/targets/simple/P.hs + tests/IntegrationTests2/targets/simple/app/Main.hs + tests/IntegrationTests2/targets/simple/cabal.project + tests/IntegrationTests2/targets/simple/p.cabal + tests/IntegrationTests2/targets/simple/q/Q.hs + tests/IntegrationTests2/targets/simple/q/QQ.hs + tests/IntegrationTests2/targets/simple/q/q.cabal + tests/IntegrationTests2/targets/test-only/p.cabal + tests/IntegrationTests2/targets/tests-disabled/cabal.project + tests/IntegrationTests2/targets/tests-disabled/p.cabal + tests/IntegrationTests2/targets/tests-disabled/q/q.cabal + tests/IntegrationTests2/targets/variety/cabal.project + tests/IntegrationTests2/targets/variety/p.cabal + -- END gen-extra-source-files + + -- Additional manual extra-source-files: + tests/IntegrationTests2/build/local-tarball/p-0.1.tar.gz + + +source-repository head + type: git + location: https://github.com/haskell/cabal/ + subdir: cabal-install + +Flag native-dns + description: Enable use of the [resolv](https://hackage.haskell.org/package/resolv) & [windns](https://hackage.haskell.org/package/windns) packages for performing DNS lookups + default: True + manual: True + +Flag debug-expensive-assertions + description: Enable expensive assertions for testing or debugging + default: False + manual: True + +Flag debug-conflict-sets + description: Add additional information to ConflictSets + default: False + manual: True + +Flag debug-tracetree + description: Compile in support for tracetree (used to debug the solver) + default: False + manual: True + +Flag lukko + description: Use @lukko@ for file-locking + default: True + manual: True + +executable cabal + main-is: Main.hs + hs-source-dirs: main + default-language: Haskell2010 + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns + if impl(ghc >= 8.0) + ghc-options: -Wcompat + -Wnoncanonical-monad-instances + if impl(ghc < 8.8) + ghc-options: -Wnoncanonical-monadfail-instances + + + ghc-options: -rtsopts -threaded + + -- On AIX, some legacy BSD operations such as flock(2) are provided by libbsd.a + if os(aix) + extra-libraries: bsd + hs-source-dirs: . + other-modules: + -- this modules are moved from Cabal + -- they are needed for as long until cabal-install moves to parsec parser + Distribution.Deprecated.ParseUtils + Distribution.Deprecated.ReadP + Distribution.Deprecated.ViewAsFieldDescr + + Distribution.Client.BuildReports.Anonymous + Distribution.Client.BuildReports.Lens + Distribution.Client.BuildReports.Storage + Distribution.Client.BuildReports.Types + Distribution.Client.BuildReports.Upload + Distribution.Client.Check + Distribution.Client.CmdBench + Distribution.Client.CmdBuild + Distribution.Client.CmdClean + Distribution.Client.CmdConfigure + Distribution.Client.CmdUpdate + Distribution.Client.CmdErrorMessages + Distribution.Client.CmdExec + Distribution.Client.CmdFreeze + Distribution.Client.CmdHaddock + Distribution.Client.CmdInstall + Distribution.Client.CmdInstall.ClientInstallFlags + Distribution.Client.CmdInstall.ClientInstallTargetSelector + Distribution.Client.CmdRepl + Distribution.Client.CmdRun + Distribution.Client.CmdRun.ClientRunFlags + Distribution.Client.CmdTest + Distribution.Client.CmdLegacy + Distribution.Client.CmdSdist + Distribution.Client.Compat.Directory + Distribution.Client.Compat.ExecutablePath + Distribution.Client.Compat.FilePerms + Distribution.Client.Compat.Orphans + Distribution.Client.Compat.Prelude + Distribution.Client.Compat.Process + Distribution.Client.Compat.Semaphore + Distribution.Client.Config + Distribution.Client.Configure + Distribution.Client.Dependency + Distribution.Client.Dependency.Types + Distribution.Client.DistDirLayout + Distribution.Client.Exec + Distribution.Client.Fetch + Distribution.Client.FetchUtils + Distribution.Client.FileMonitor + Distribution.Client.Freeze + Distribution.Client.GZipUtils + Distribution.Client.GenBounds + Distribution.Client.Get + Distribution.Client.Glob + Distribution.Client.GlobalFlags + Distribution.Client.Haddock + Distribution.Client.HashValue + Distribution.Client.HttpUtils + Distribution.Client.IndexUtils + Distribution.Client.IndexUtils.ActiveRepos + Distribution.Client.IndexUtils.IndexState + Distribution.Client.IndexUtils.Timestamp + Distribution.Client.Init + Distribution.Client.Init.Command + Distribution.Client.Init.Defaults + Distribution.Client.Init.FileCreators + Distribution.Client.Init.Heuristics + Distribution.Client.Init.Licenses + Distribution.Client.Init.Prompt + Distribution.Client.Init.Types + Distribution.Client.Init.Utils + Distribution.Client.Install + Distribution.Client.InstallPlan + Distribution.Client.InstallSymlink + Distribution.Client.JobControl + Distribution.Client.List + Distribution.Client.Manpage + Distribution.Client.ManpageFlags + Distribution.Client.Nix + Distribution.Client.NixStyleOptions + Distribution.Client.Outdated + Distribution.Client.PackageHash + Distribution.Client.PackageUtils + Distribution.Client.ParseUtils + Distribution.Client.ProjectBuilding + Distribution.Client.ProjectBuilding.Types + Distribution.Client.ProjectConfig + Distribution.Client.ProjectConfig.Legacy + Distribution.Client.ProjectConfig.Types + Distribution.Client.ProjectFlags + Distribution.Client.ProjectOrchestration + Distribution.Client.ProjectPlanOutput + Distribution.Client.ProjectPlanning + Distribution.Client.ProjectPlanning.Types + Distribution.Client.RebuildMonad + Distribution.Client.Reconfigure + Distribution.Client.Run + Distribution.Client.Sandbox + Distribution.Client.Sandbox.PackageEnvironment + Distribution.Client.SavedFlags + Distribution.Client.Security.DNS + Distribution.Client.Security.HTTP + Distribution.Client.Setup + Distribution.Client.SetupWrapper + Distribution.Client.SolverInstallPlan + Distribution.Client.SourceFiles + Distribution.Client.SrcDist + Distribution.Client.Store + Distribution.Client.Tar + Distribution.Client.TargetProblem + Distribution.Client.TargetSelector + Distribution.Client.Targets + Distribution.Client.Types + Distribution.Client.Types.AllowNewer + Distribution.Client.Types.BuildResults + Distribution.Client.Types.ConfiguredId + Distribution.Client.Types.ConfiguredPackage + Distribution.Client.Types.Credentials + Distribution.Client.Types.InstallMethod + Distribution.Client.Types.OverwritePolicy + Distribution.Client.Types.PackageLocation + Distribution.Client.Types.PackageSpecifier + Distribution.Client.Types.ReadyPackage + Distribution.Client.Types.Repo + Distribution.Client.Types.RepoName + Distribution.Client.Types.SourcePackageDb + Distribution.Client.Types.SourceRepo + Distribution.Client.Types.WriteGhcEnvironmentFilesPolicy + Distribution.Client.Update + Distribution.Client.Upload + Distribution.Client.Utils + Distribution.Client.Utils.Assertion + Distribution.Client.Utils.Json + Distribution.Client.Utils.Parsec + Distribution.Client.VCS + Distribution.Client.Win32SelfUpgrade + Distribution.Client.World + Distribution.Solver.Compat.Prelude + Distribution.Solver.Modular + Distribution.Solver.Modular.Assignment + Distribution.Solver.Modular.Builder + Distribution.Solver.Modular.Configured + Distribution.Solver.Modular.ConfiguredConversion + Distribution.Solver.Modular.ConflictSet + Distribution.Solver.Modular.Cycles + Distribution.Solver.Modular.Dependency + Distribution.Solver.Modular.Explore + Distribution.Solver.Modular.Flag + Distribution.Solver.Modular.Index + Distribution.Solver.Modular.IndexConversion + Distribution.Solver.Modular.LabeledGraph + Distribution.Solver.Modular.Linking + Distribution.Solver.Modular.Log + Distribution.Solver.Modular.Message + Distribution.Solver.Modular.PSQ + Distribution.Solver.Modular.Package + Distribution.Solver.Modular.Preference + Distribution.Solver.Modular.RetryLog + Distribution.Solver.Modular.Solver + Distribution.Solver.Modular.Tree + Distribution.Solver.Modular.Validate + Distribution.Solver.Modular.Var + Distribution.Solver.Modular.Version + Distribution.Solver.Modular.WeightedPSQ + Distribution.Solver.Types.ComponentDeps + Distribution.Solver.Types.ConstraintSource + Distribution.Solver.Types.DependencyResolver + Distribution.Solver.Types.Flag + Distribution.Solver.Types.InstSolverPackage + Distribution.Solver.Types.InstalledPreference + Distribution.Solver.Types.LabeledPackageConstraint + Distribution.Solver.Types.OptionalStanza + Distribution.Solver.Types.PackageConstraint + Distribution.Solver.Types.PackageFixedDeps + Distribution.Solver.Types.PackageIndex + Distribution.Solver.Types.PackagePath + Distribution.Solver.Types.PackagePreferences + Distribution.Solver.Types.PkgConfigDb + Distribution.Solver.Types.Progress + Distribution.Solver.Types.ResolverPackage + Distribution.Solver.Types.Settings + Distribution.Solver.Types.SolverId + Distribution.Solver.Types.SolverPackage + Distribution.Solver.Types.SourcePackage + Distribution.Solver.Types.Variable + Paths_cabal_install + + build-depends: + async >= 2.0 && < 2.3, + array >= 0.4 && < 0.6, + base >= 4.8 && < 4.15, + base16-bytestring >= 0.1.1 && < 0.2, + binary >= 0.7.3 && < 0.9, + bytestring >= 0.10.6.0 && < 0.11, + Cabal == 3.3.*, + containers >= 0.5.6.2 && < 0.7, + cryptohash-sha256 >= 0.11 && < 0.12, + deepseq >= 1.4.1.1 && < 1.5, + directory >= 1.2.2.0 && < 1.4, + echo >= 0.1.3 && < 0.2, + edit-distance >= 0.2.2 && < 0.3, + filepath >= 1.4.0.0 && < 1.5, + hashable >= 1.0 && < 1.4, + HTTP >= 4000.1.5 && < 4000.4, + mtl >= 2.0 && < 2.3, + network-uri >= 2.6.0.2 && < 2.7, + network >= 2.6 && < 3.2, + pretty >= 1.1 && < 1.2, + process >= 1.2.3.0 && < 1.7, + random >= 1 && < 1.2, + stm >= 2.0 && < 2.6, + tar >= 0.5.0.3 && < 0.6, + time >= 1.5.0.1 && < 1.11, + transformers >= 0.4.2.0 && < 0.6, + zlib >= 0.5.3 && < 0.7, + hackage-security >= 0.6.0.1 && < 0.7, + text >= 1.2.3 && < 1.3, + parsec >= 3.1.13.0 && < 3.2, + regex-base >= 0.94.0.0 && <0.95, + regex-posix >= 0.96.0.0 && <0.97 + + if !impl(ghc >= 8.0) + build-depends: fail == 4.9.* + build-depends: semigroups >= 0.18.3 && <0.20 + + if flag(native-dns) + if os(windows) + build-depends: windns >= 0.1.0 && < 0.2 + else + build-depends: resolv >= 0.1.1 && < 0.2 + + if os(windows) + -- newer directory for symlinks + build-depends: Win32 >= 2 && < 3, directory >=1.3.1.0 + else + build-depends: unix >= 2.5 && < 2.9 + + if flag(lukko) + build-depends: lukko >= 0.1 && <0.2 + else + build-depends: base >= 4.10 + + if flag(debug-expensive-assertions) + cpp-options: -DDEBUG_EXPENSIVE_ASSERTIONS + + if flag(debug-conflict-sets) + cpp-options: -DDEBUG_CONFLICT_SETS + build-depends: base >= 4.8 + + if flag(debug-tracetree) + cpp-options: -DDEBUG_TRACETREE + build-depends: tracetree >= 0.1 && < 0.2 diff --git a/cabal-install/cabal-install.cabal.zinza b/cabal-install/cabal-install.cabal.zinza new file mode 100644 index 00000000000..f3418526262 --- /dev/null +++ b/cabal-install/cabal-install.cabal.zinza @@ -0,0 +1,616 @@ +{# lib enabled means that we have internal library: cabal-lib-client #} +{% if dev %} +Cabal-Version: 2.0 +{% else %} +Cabal-Version: >= 1.10 +{% endif %} +-- NOTE: This file is autogenerated from 'cabal-install.cabal.pp'. +-- DO NOT EDIT MANUALLY. +-- To update this file, edit 'cabal-install.cabal.pp' and run +-- 'make cabal-install-prod' in the project's root folder. +Name: cabal-install +Version: 3.3.0.0 +{# NOTE: when updating build-depends, don't forget to update version regexps in bootstrap.sh. #} +{% defblock buildDepends %} + build-depends: + async >= 2.0 && < 2.3, + array >= 0.4 && < 0.6, + base >= 4.8 && < 4.15, + base16-bytestring >= 0.1.1 && < 0.2, + binary >= 0.7.3 && < 0.9, + bytestring >= 0.10.6.0 && < 0.11, + Cabal == 3.3.*, + containers >= 0.5.6.2 && < 0.7, + cryptohash-sha256 >= 0.11 && < 0.12, + deepseq >= 1.4.1.1 && < 1.5, + directory >= 1.2.2.0 && < 1.4, + echo >= 0.1.3 && < 0.2, + edit-distance >= 0.2.2 && < 0.3, + filepath >= 1.4.0.0 && < 1.5, + hashable >= 1.0 && < 1.4, + HTTP >= 4000.1.5 && < 4000.4, + mtl >= 2.0 && < 2.3, + network-uri >= 2.6.0.2 && < 2.7, + network >= 2.6 && < 3.2, + pretty >= 1.1 && < 1.2, + process >= 1.2.3.0 && < 1.7, + random >= 1 && < 1.2, + stm >= 2.0 && < 2.6, + tar >= 0.5.0.3 && < 0.6, + time >= 1.5.0.1 && < 1.11, + transformers >= 0.4.2.0 && < 0.6, + zlib >= 0.5.3 && < 0.7, + hackage-security >= 0.6.0.1 && < 0.7, + text >= 1.2.3 && < 1.3, + parsec >= 3.1.13.0 && < 3.2, + regex-base >= 0.94.0.0 && <0.95, + regex-posix >= 0.96.0.0 && <0.97 + + if !impl(ghc >= 8.0) + build-depends: fail == 4.9.* + build-depends: semigroups >= 0.18.3 && <0.20 + + if flag(native-dns) + if os(windows) + build-depends: windns >= 0.1.0 && < 0.2 + else + build-depends: resolv >= 0.1.1 && < 0.2 + + if os(windows) + -- newer directory for symlinks + build-depends: Win32 >= 2 && < 3, directory >=1.3.1.0 + else + build-depends: unix >= 2.5 && < 2.9 + + if flag(lukko) + build-depends: lukko >= 0.1 && <0.2 + else + build-depends: base >= 4.10 +{% endblock %} +{% defblock componentCommon %} + default-language: Haskell2010 + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns + if impl(ghc >= 8.0) + ghc-options: -Wcompat + -Wnoncanonical-monad-instances + if impl(ghc < 8.8) + ghc-options: -Wnoncanonical-monadfail-instances + +{% endblock %} +{% defblock buildInfo %} +{% if dev %} + exposed-modules: +{% else %} + other-modules: +{% endif %} + -- this modules are moved from Cabal + -- they are needed for as long until cabal-install moves to parsec parser + Distribution.Deprecated.ParseUtils + Distribution.Deprecated.ReadP + Distribution.Deprecated.ViewAsFieldDescr + + Distribution.Client.BuildReports.Anonymous + Distribution.Client.BuildReports.Lens + Distribution.Client.BuildReports.Storage + Distribution.Client.BuildReports.Types + Distribution.Client.BuildReports.Upload + Distribution.Client.Check + Distribution.Client.CmdBench + Distribution.Client.CmdBuild + Distribution.Client.CmdClean + Distribution.Client.CmdConfigure + Distribution.Client.CmdUpdate + Distribution.Client.CmdErrorMessages + Distribution.Client.CmdExec + Distribution.Client.CmdFreeze + Distribution.Client.CmdHaddock + Distribution.Client.CmdInstall + Distribution.Client.CmdInstall.ClientInstallFlags + Distribution.Client.CmdInstall.ClientInstallTargetSelector + Distribution.Client.CmdRepl + Distribution.Client.CmdRun + Distribution.Client.CmdRun.ClientRunFlags + Distribution.Client.CmdTest + Distribution.Client.CmdLegacy + Distribution.Client.CmdSdist + Distribution.Client.Compat.Directory + Distribution.Client.Compat.ExecutablePath + Distribution.Client.Compat.FilePerms + Distribution.Client.Compat.Orphans + Distribution.Client.Compat.Prelude + Distribution.Client.Compat.Process + Distribution.Client.Compat.Semaphore + Distribution.Client.Config + Distribution.Client.Configure + Distribution.Client.Dependency + Distribution.Client.Dependency.Types + Distribution.Client.DistDirLayout + Distribution.Client.Exec + Distribution.Client.Fetch + Distribution.Client.FetchUtils + Distribution.Client.FileMonitor + Distribution.Client.Freeze + Distribution.Client.GZipUtils + Distribution.Client.GenBounds + Distribution.Client.Get + Distribution.Client.Glob + Distribution.Client.GlobalFlags + Distribution.Client.Haddock + Distribution.Client.HashValue + Distribution.Client.HttpUtils + Distribution.Client.IndexUtils + Distribution.Client.IndexUtils.ActiveRepos + Distribution.Client.IndexUtils.IndexState + Distribution.Client.IndexUtils.Timestamp + Distribution.Client.Init + Distribution.Client.Init.Command + Distribution.Client.Init.Defaults + Distribution.Client.Init.FileCreators + Distribution.Client.Init.Heuristics + Distribution.Client.Init.Licenses + Distribution.Client.Init.Prompt + Distribution.Client.Init.Types + Distribution.Client.Init.Utils + Distribution.Client.Install + Distribution.Client.InstallPlan + Distribution.Client.InstallSymlink + Distribution.Client.JobControl + Distribution.Client.List + Distribution.Client.Manpage + Distribution.Client.ManpageFlags + Distribution.Client.Nix + Distribution.Client.NixStyleOptions + Distribution.Client.Outdated + Distribution.Client.PackageHash + Distribution.Client.PackageUtils + Distribution.Client.ParseUtils + Distribution.Client.ProjectBuilding + Distribution.Client.ProjectBuilding.Types + Distribution.Client.ProjectConfig + Distribution.Client.ProjectConfig.Legacy + Distribution.Client.ProjectConfig.Types + Distribution.Client.ProjectFlags + Distribution.Client.ProjectOrchestration + Distribution.Client.ProjectPlanOutput + Distribution.Client.ProjectPlanning + Distribution.Client.ProjectPlanning.Types + Distribution.Client.RebuildMonad + Distribution.Client.Reconfigure + Distribution.Client.Run + Distribution.Client.Sandbox + Distribution.Client.Sandbox.PackageEnvironment + Distribution.Client.SavedFlags + Distribution.Client.Security.DNS + Distribution.Client.Security.HTTP + Distribution.Client.Setup + Distribution.Client.SetupWrapper + Distribution.Client.SolverInstallPlan + Distribution.Client.SourceFiles + Distribution.Client.SrcDist + Distribution.Client.Store + Distribution.Client.Tar + Distribution.Client.TargetProblem + Distribution.Client.TargetSelector + Distribution.Client.Targets + Distribution.Client.Types + Distribution.Client.Types.AllowNewer + Distribution.Client.Types.BuildResults + Distribution.Client.Types.ConfiguredId + Distribution.Client.Types.ConfiguredPackage + Distribution.Client.Types.Credentials + Distribution.Client.Types.InstallMethod + Distribution.Client.Types.OverwritePolicy + Distribution.Client.Types.PackageLocation + Distribution.Client.Types.PackageSpecifier + Distribution.Client.Types.ReadyPackage + Distribution.Client.Types.Repo + Distribution.Client.Types.RepoName + Distribution.Client.Types.SourcePackageDb + Distribution.Client.Types.SourceRepo + Distribution.Client.Types.WriteGhcEnvironmentFilesPolicy + Distribution.Client.Update + Distribution.Client.Upload + Distribution.Client.Utils + Distribution.Client.Utils.Assertion + Distribution.Client.Utils.Json + Distribution.Client.Utils.Parsec + Distribution.Client.VCS + Distribution.Client.Win32SelfUpgrade + Distribution.Client.World + Distribution.Solver.Compat.Prelude + Distribution.Solver.Modular + Distribution.Solver.Modular.Assignment + Distribution.Solver.Modular.Builder + Distribution.Solver.Modular.Configured + Distribution.Solver.Modular.ConfiguredConversion + Distribution.Solver.Modular.ConflictSet + Distribution.Solver.Modular.Cycles + Distribution.Solver.Modular.Dependency + Distribution.Solver.Modular.Explore + Distribution.Solver.Modular.Flag + Distribution.Solver.Modular.Index + Distribution.Solver.Modular.IndexConversion + Distribution.Solver.Modular.LabeledGraph + Distribution.Solver.Modular.Linking + Distribution.Solver.Modular.Log + Distribution.Solver.Modular.Message + Distribution.Solver.Modular.PSQ + Distribution.Solver.Modular.Package + Distribution.Solver.Modular.Preference + Distribution.Solver.Modular.RetryLog + Distribution.Solver.Modular.Solver + Distribution.Solver.Modular.Tree + Distribution.Solver.Modular.Validate + Distribution.Solver.Modular.Var + Distribution.Solver.Modular.Version + Distribution.Solver.Modular.WeightedPSQ + Distribution.Solver.Types.ComponentDeps + Distribution.Solver.Types.ConstraintSource + Distribution.Solver.Types.DependencyResolver + Distribution.Solver.Types.Flag + Distribution.Solver.Types.InstSolverPackage + Distribution.Solver.Types.InstalledPreference + Distribution.Solver.Types.LabeledPackageConstraint + Distribution.Solver.Types.OptionalStanza + Distribution.Solver.Types.PackageConstraint + Distribution.Solver.Types.PackageFixedDeps + Distribution.Solver.Types.PackageIndex + Distribution.Solver.Types.PackagePath + Distribution.Solver.Types.PackagePreferences + Distribution.Solver.Types.PkgConfigDb + Distribution.Solver.Types.Progress + Distribution.Solver.Types.ResolverPackage + Distribution.Solver.Types.Settings + Distribution.Solver.Types.SolverId + Distribution.Solver.Types.SolverPackage + Distribution.Solver.Types.SourcePackage + Distribution.Solver.Types.Variable + Paths_cabal_install + +{% if dev %} + autogen-modules: + Paths_cabal_install +{% endif %} +{% useblock buildDepends %} + + if flag(debug-expensive-assertions) + cpp-options: -DDEBUG_EXPENSIVE_ASSERTIONS + + if flag(debug-conflict-sets) + cpp-options: -DDEBUG_CONFLICT_SETS + build-depends: base >= 4.8 + + if flag(debug-tracetree) + cpp-options: -DDEBUG_TRACETREE + build-depends: tracetree >= 0.1 && < 0.2 +{% endblock %} +{############################################################################} +{# Package Description #} +{############################################################################} +Synopsis: The command-line interface for Cabal and Hackage. +Description: + The \'cabal\' command-line program simplifies the process of managing + Haskell software by automating the fetching, configuration, compilation + and installation of Haskell libraries and programs. +homepage: http://www.haskell.org/cabal/ +bug-reports: https://github.com/haskell/cabal/issues +License: BSD3 +License-File: LICENSE +Author: Cabal Development Team (see AUTHORS file) +Maintainer: Cabal Development Team +Copyright: 2003-2020, Cabal Development Team +Category: Distribution +Build-type: Simple +Extra-Source-Files: + README.md bash-completion/cabal bootstrap.sh changelog + + -- Generated with 'make gen-extra-source-files' + -- Do NOT edit this section manually; instead, run the script. + -- BEGIN gen-extra-source-files + tests/IntegrationTests2/build/keep-going/cabal.project + tests/IntegrationTests2/build/keep-going/p/P.hs + tests/IntegrationTests2/build/keep-going/p/p.cabal + tests/IntegrationTests2/build/keep-going/q/Q.hs + tests/IntegrationTests2/build/keep-going/q/q.cabal + tests/IntegrationTests2/build/local-tarball/cabal.project + tests/IntegrationTests2/build/local-tarball/q/Q.hs + tests/IntegrationTests2/build/local-tarball/q/q.cabal + tests/IntegrationTests2/build/setup-custom1/A.hs + tests/IntegrationTests2/build/setup-custom1/Setup.hs + tests/IntegrationTests2/build/setup-custom1/a.cabal + tests/IntegrationTests2/build/setup-custom2/A.hs + tests/IntegrationTests2/build/setup-custom2/Setup.hs + tests/IntegrationTests2/build/setup-custom2/a.cabal + tests/IntegrationTests2/build/setup-simple/A.hs + tests/IntegrationTests2/build/setup-simple/Setup.hs + tests/IntegrationTests2/build/setup-simple/a.cabal + tests/IntegrationTests2/exception/bad-config/cabal.project + tests/IntegrationTests2/exception/build/Main.hs + tests/IntegrationTests2/exception/build/a.cabal + tests/IntegrationTests2/exception/configure/a.cabal + tests/IntegrationTests2/exception/no-pkg/empty.in + tests/IntegrationTests2/exception/no-pkg2/cabal.project + tests/IntegrationTests2/regression/3324/cabal.project + tests/IntegrationTests2/regression/3324/p/P.hs + tests/IntegrationTests2/regression/3324/p/p.cabal + tests/IntegrationTests2/regression/3324/q/Q.hs + tests/IntegrationTests2/regression/3324/q/q.cabal + tests/IntegrationTests2/targets/all-disabled/cabal.project + tests/IntegrationTests2/targets/all-disabled/p.cabal + tests/IntegrationTests2/targets/benchmarks-disabled/cabal.project + tests/IntegrationTests2/targets/benchmarks-disabled/p.cabal + tests/IntegrationTests2/targets/benchmarks-disabled/q/q.cabal + tests/IntegrationTests2/targets/complex/cabal.project + tests/IntegrationTests2/targets/complex/q/Q.hs + tests/IntegrationTests2/targets/complex/q/q.cabal + tests/IntegrationTests2/targets/empty-pkg/cabal.project + tests/IntegrationTests2/targets/empty-pkg/p.cabal + tests/IntegrationTests2/targets/empty/cabal.project + tests/IntegrationTests2/targets/empty/foo.hs + tests/IntegrationTests2/targets/exes-disabled/cabal.project + tests/IntegrationTests2/targets/exes-disabled/p/p.cabal + tests/IntegrationTests2/targets/exes-disabled/q/q.cabal + tests/IntegrationTests2/targets/lib-only/p.cabal + tests/IntegrationTests2/targets/libs-disabled/cabal.project + tests/IntegrationTests2/targets/libs-disabled/p/p.cabal + tests/IntegrationTests2/targets/libs-disabled/q/q.cabal + tests/IntegrationTests2/targets/multiple-exes/cabal.project + tests/IntegrationTests2/targets/multiple-exes/p.cabal + tests/IntegrationTests2/targets/multiple-libs/cabal.project + tests/IntegrationTests2/targets/multiple-libs/p/p.cabal + tests/IntegrationTests2/targets/multiple-libs/q/q.cabal + tests/IntegrationTests2/targets/multiple-tests/cabal.project + tests/IntegrationTests2/targets/multiple-tests/p.cabal + tests/IntegrationTests2/targets/simple/P.hs + tests/IntegrationTests2/targets/simple/app/Main.hs + tests/IntegrationTests2/targets/simple/cabal.project + tests/IntegrationTests2/targets/simple/p.cabal + tests/IntegrationTests2/targets/simple/q/Q.hs + tests/IntegrationTests2/targets/simple/q/QQ.hs + tests/IntegrationTests2/targets/simple/q/q.cabal + tests/IntegrationTests2/targets/test-only/p.cabal + tests/IntegrationTests2/targets/tests-disabled/cabal.project + tests/IntegrationTests2/targets/tests-disabled/p.cabal + tests/IntegrationTests2/targets/tests-disabled/q/q.cabal + tests/IntegrationTests2/targets/variety/cabal.project + tests/IntegrationTests2/targets/variety/p.cabal + -- END gen-extra-source-files + + -- Additional manual extra-source-files: + tests/IntegrationTests2/build/local-tarball/p-0.1.tar.gz + + +source-repository head + type: git + location: https://github.com/haskell/cabal/ + subdir: cabal-install + +Flag native-dns + description: Enable use of the [resolv](https://hackage.haskell.org/package/resolv) & [windns](https://hackage.haskell.org/package/windns) packages for performing DNS lookups + default: True + manual: True + +Flag debug-expensive-assertions + description: Enable expensive assertions for testing or debugging + default: False + manual: True + +Flag debug-conflict-sets + description: Add additional information to ConflictSets + default: False + manual: True + +Flag debug-tracetree + description: Compile in support for tracetree (used to debug the solver) + default: False + manual: True + +Flag lukko + description: Use @lukko@ for file-locking + default: True + manual: True + +{############################################################################} +{# Libraries, if dev #} +{############################################################################} +{% if dev %} +library cabal-lib-client +{% useblock componentCommon %} + hs-source-dirs: . +{% useblock buildInfo %} + +library cabal-install-solver-dsl +{% useblock componentCommon %} + hs-source-dirs: solver-dsl + exposed-modules: + UnitTests.Distribution.Solver.Modular.DSL + build-depends: + base, + Cabal, + containers, + -- TODO: depend on cabal-install-solver only + cabal-lib-client +{% endif %} +{############################################################################} +{# Executable #} +{############################################################################} +executable cabal + main-is: Main.hs + hs-source-dirs: main +{% useblock componentCommon %} + + ghc-options: -rtsopts -threaded + + -- On AIX, some legacy BSD operations such as flock(2) are provided by libbsd.a + if os(aix) + extra-libraries: bsd +{% if dev %} + build-depends: + cabal-lib-client, + Cabal, + base, + directory, + filepath + + other-modules: Paths_cabal_install +{% else %} + hs-source-dirs: . +{% useblock buildInfo %} +{% endif %} +{############################################################################} +{# Test-suites #} +{# disable if we don't configure with an (internal) libs #} +{############################################################################} +{% if dev %} +-- Small, fast running tests. +-- +Test-Suite unit-tests + type: exitcode-stdio-1.0 + main-is: UnitTests.hs + hs-source-dirs: tests + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns -main-is UnitTests + other-modules: + UnitTests.Distribution.Client.ArbitraryInstances + UnitTests.Distribution.Client.BuildReport + UnitTests.Distribution.Client.Described + UnitTests.Distribution.Client.DescribedInstances + UnitTests.Distribution.Client.Targets + UnitTests.Distribution.Client.FileMonitor + UnitTests.Distribution.Client.Get + UnitTests.Distribution.Client.Glob + UnitTests.Distribution.Client.GZipUtils + UnitTests.Distribution.Client.Init.FileCreators + UnitTests.Distribution.Client.Store + UnitTests.Distribution.Client.Tar + UnitTests.Distribution.Client.TreeDiffInstances + UnitTests.Distribution.Client.UserConfig + UnitTests.Distribution.Client.ProjectConfig + UnitTests.Distribution.Client.JobControl + UnitTests.Distribution.Client.IndexUtils.Timestamp + UnitTests.Distribution.Client.InstallPlan + UnitTests.Distribution.Client.VCS + UnitTests.Distribution.Solver.Modular.Builder + UnitTests.Distribution.Solver.Modular.RetryLog + UnitTests.Distribution.Solver.Modular.Solver + UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils + UnitTests.Distribution.Solver.Modular.WeightedPSQ + UnitTests.Options + UnitTests.TempTestDir + build-depends: + array, + base, + async, + bytestring, + cabal-lib-client, + cabal-install-solver-dsl, + Cabal, + Cabal-described, + Cabal-tree-diff, + Cabal-QuickCheck, + containers, + deepseq, + mtl, + random, + directory, + filepath, + tar, + time, + zlib, + network-uri >= 2.6.2.0 && <2.6.4.0, + network, + tasty >= 1.2.3 && <1.4, + tasty-golden >=2.3.1.1 && <2.4, + tasty-hunit >= 0.10, + tasty-quickcheck, + tagged, + tree-diff, + QuickCheck >= 2.14 && <2.15 + + ghc-options: -threaded + + default-language: Haskell2010 + +-- Tests to run with a limited stack and heap size +-- +Test-Suite memory-usage-tests + type: exitcode-stdio-1.0 + main-is: MemoryUsageTests.hs + hs-source-dirs: tests + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns "-with-rtsopts=-M4M -K1K" -main-is MemoryUsageTests + other-modules: + UnitTests.Distribution.Solver.Modular.DSL.TestCaseUtils + UnitTests.Distribution.Solver.Modular.MemoryUsage + UnitTests.Options + build-depends: + base, + async, + Cabal, + cabal-lib-client, + cabal-install-solver-dsl, + containers, + deepseq, + tagged, + tasty >= 1.2.3 && <1.4, + tasty-hunit >= 0.10 + + ghc-options: -threaded + + default-language: Haskell2010 + +-- Slow solver tests +-- +Test-Suite solver-quickcheck + type: exitcode-stdio-1.0 + main-is: SolverQuickCheck.hs + hs-source-dirs: tests + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns -main-is SolverQuickCheck + other-modules: + UnitTests.Distribution.Solver.Modular.QuickCheck + UnitTests.Distribution.Solver.Modular.QuickCheck.Utils + build-depends: + base, + async, + Cabal, + cabal-lib-client, + cabal-install-solver-dsl, + containers, + deepseq >= 1.2, + hashable, + random, + tagged, + tasty >= 1.2.3 && <1.4, + tasty-quickcheck, + QuickCheck >= 2.14 && <2.15, + pretty-show >= 1.6.15 + + ghc-options: -threaded + + default-language: Haskell2010 + + +-- Integration tests that use the cabal-install code directly +-- but still build whole projects +test-suite integration-tests2 + type: exitcode-stdio-1.0 + main-is: IntegrationTests2.hs + hs-source-dirs: tests + ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns -main-is IntegrationTests2 + other-modules: + build-depends: + base, + bytestring, + Cabal, + cabal-lib-client, + containers, + deepseq, + directory, + edit-distance, + filepath, + tasty >= 1.2.3 && <1.4, + tasty-hunit >= 0.10, + tagged + + ghc-options: -threaded + default-language: Haskell2010 + +{% endif %} diff --git a/validate.sh b/validate.sh index 785b55d3f50..0ec0e5c250c 100755 --- a/validate.sh +++ b/validate.sh @@ -361,7 +361,7 @@ step_time_summary() { step_make_cabal_install_dev() { print_header "make cabal-install-dev" -timed ${RUNHASKELL} cabal-dev-scripts/src/Preprocessor.hs -o cabal-install/cabal-install.cabal -f CABAL_FLAG_LIB cabal-install/cabal-install.cabal.pp +timed cp cabal-install/cabal-install.cabal.dev cabal-install/cabal-install.cabal } step_build() {