diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml index 1b1a1922c9b..dcf64c2a735 100644 --- a/.github/workflows/bootstrap.yml +++ b/.github/workflows/bootstrap.yml @@ -49,8 +49,8 @@ jobs: # without this the caches of branches with different local package # versions (e.g. master vs a release branch) collide and a stale # _build/packages.conf gets restored. See #12311. - key: bootstrap-${{ steps.get-osver.outputs.osver }}-${{ matrix.ghc }}-${{ hashFiles(format('bootstrap/linux-{0}.json', matrix.ghc), 'Cabal/Cabal.cabal', 'Cabal-syntax/Cabal-syntax.cabal', 'Cabal-hooks/Cabal-hooks.cabal', 'hooks-exe/hooks-exe.cabal', 'cabal-install-solver/cabal-install-solver.cabal', 'cabal-install/cabal-install.cabal') }}-${{ github.sha }} - restore-keys: bootstrap-${{ steps.get-osver.outputs.osver }}-${{ matrix.ghc }}-${{ hashFiles(format('bootstrap/linux-{0}.json', matrix.ghc), 'Cabal/Cabal.cabal', 'Cabal-syntax/Cabal-syntax.cabal', 'Cabal-hooks/Cabal-hooks.cabal', 'hooks-exe/hooks-exe.cabal', 'cabal-install-solver/cabal-install-solver.cabal', 'cabal-install/cabal-install.cabal') }}- + key: bootstrap-${{ steps.get-osver.outputs.osver }}-${{ matrix.ghc }}-${{ hashFiles(format('bootstrap/linux-{0}.json', matrix.ghc), 'Cabal/Cabal.cabal', 'Cabal-syntax/Cabal-syntax.cabal', 'Cabal-hooks/Cabal-hooks.cabal', 'hooks-exe/hooks-exe.cabal', 'cabal-install-solver/cabal-install-solver.cabal', 'cabal-install-internal/cabal-install-internal.cabal', 'cabal-install/cabal-install.cabal') }}-${{ github.sha }} + restore-keys: bootstrap-${{ steps.get-osver.outputs.osver }}-${{ matrix.ghc }}-${{ hashFiles(format('bootstrap/linux-{0}.json', matrix.ghc), 'Cabal/Cabal.cabal', 'Cabal-syntax/Cabal-syntax.cabal', 'Cabal-hooks/Cabal-hooks.cabal', 'hooks-exe/hooks-exe.cabal', 'cabal-install-solver/cabal-install-solver.cabal', 'cabal-install-internal/cabal-install-internal.cabal', 'cabal-install/cabal-install.cabal') }}- - uses: haskell-actions/setup@v2 with: diff --git a/.github/workflows/check-sdist.yml b/.github/workflows/check-sdist.yml index 0152f17f325..4234e7c12e6 100644 --- a/.github/workflows/check-sdist.yml +++ b/.github/workflows/check-sdist.yml @@ -38,7 +38,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ matrix.ghc }} - cabal-version: latest + cabal-version: 3.18.1.0 - uses: actions/checkout@v7 diff --git a/.github/workflows/cmd-help.yml b/.github/workflows/cmd-help.yml index bf2148c49ad..e236eafb7bc 100644 --- a/.github/workflows/cmd-help.yml +++ b/.github/workflows/cmd-help.yml @@ -16,7 +16,9 @@ on: - doc/cmd-v2-hidden-help/** - doc/setup-help/** - cabal-install/src/Distribution/Client/Cmd*.hs + - cabal-install-internal/src/Distribution/Client/Cmd*.hs - cabal-install/src/Distribution/Client/Main.hs + - cabal-install-internal/src/Distribution/Client/Main.hs - cabal-install/src/Distribution/Client/Setup.hs - Cabal/src/Distribution/Simple.hs - Cabal/src/Distribution/Simple/Setup/** @@ -33,7 +35,8 @@ jobs: - uses: haskell-actions/setup@v2 with: ghc-version: 9.12.2 - cabal-version: latest + # must satisfy the setup-depends of cabal-testsuite, see PR #10251 + cabal-version: 3.18.1.0 - run: cabal v2-update - name: Cache dependencies uses: actions/cache@v6 diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index c1ea498b280..da7fb0d3441 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -17,4 +17,5 @@ jobs: Cabal/**/*.hs Cabal-syntax/**/*.hs cabal-install/**/*.hs + cabal-install-internal/**/*.hs cabal-validate/**/*.hs diff --git a/.github/workflows/quick-jobs.yml b/.github/workflows/quick-jobs.yml index 7ef67df2bb8..debb0b7795a 100644 --- a/.github/workflows/quick-jobs.yml +++ b/.github/workflows/quick-jobs.yml @@ -34,7 +34,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ env.GHC_FOR_QUICK_JOBS }} - cabal-version: latest + cabal-version: 3.18.1.0 - name: Haskell versions run: | ghc --version @@ -80,7 +80,8 @@ jobs: id: setup-haskell with: ghc-version: ${{ env.GHC_FOR_QUICK_JOBS }} - cabal-version: latest + # must satisfy the setup-depends of cabal-testsuite, see PR #10251 + cabal-version: 3.18.1.0 - name: Haskell versions run: | ghc --version @@ -128,7 +129,8 @@ jobs: id: setup-haskell with: ghc-version: ${{ env.GHC_FOR_QUICK_JOBS }} - cabal-version: latest + # must satisfy the setup-depends of cabal-testsuite, see PR #10251 + cabal-version: 3.18.1.0 - name: Haskell versions run: | ghc --version @@ -168,7 +170,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ env.GHC_FOR_QUICK_JOBS }} - cabal-version: latest + cabal-version: 3.18.1.0 - name: Haskell versions run: | ghc --version diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index ab168010648..bf6eee57938 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -99,7 +99,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ matrix.ghc }} - cabal-version: 3.12.1.0 # see https://github.com/haskell/cabal/pull/10251 + cabal-version: 3.18.1.0 # see https://github.com/haskell/cabal/pull/10251 ghcup-release-channel: https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.9.yaml # runner.os isn't sufficient for binary compatible caches @@ -267,7 +267,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ env.GHC_FOR_RELEASE }} - cabal-version: latest + cabal-version: 3.18.1.0 - name: GHC versions run: | @@ -331,7 +331,9 @@ jobs: id: setup-haskell with: ghc-version: ${{ env.GHC_FOR_RELEASE }} - cabal-version: latest # latest is mandatory for cabal-testsuite, see https://github.com/haskell/cabal/issues/8133 + # must satisfy the setup-depends of cabal-testsuite, see PR #10251 + # (issue #8133 asks for the latest release; this is it as of 2026-09) + cabal-version: 3.18.1.0 # See the following link for a breakdown of the following step # https://github.com/haskell/actions/issues/7#issuecomment-745697160 @@ -418,7 +420,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ matrix.ghc }} - cabal-version: latest # default, we are not using it in this job + cabal-version: 3.18.1.0 - name: Download cabal executable from workflow artifacts uses: actions/download-artifact@v8 diff --git a/Makefile b/Makefile index 9268d18e562..cf4cf989df6 100644 --- a/Makefile +++ b/Makefile @@ -53,6 +53,7 @@ FORMAT_DIRS_TODO := \ check: @cd Cabal && cabal check | grep -q "No errors or warnings could be found in the package." @cd cabal-install && cabal check | grep -q "No errors or warnings could be found in the package." + @cd cabal-install-internal && cabal check | grep -q "No errors or warnings could be found in the package." @cd Cabal-syntax && cabal check | grep -q "No errors or warnings could be found in the package." @cd Cabal-hooks && cabal check | grep -q "No errors or warnings could be found in the package." @cd hooks-exe && cabal check | grep -q "No errors or warnings could be found in the package." @@ -271,7 +272,7 @@ validate-via-docker-old: # tags .PHONY : tags tags: ## Generate editor tags, vim ctags and emacs etags. - hasktags -b Cabal-syntax/src Cabal/src Cabal-described/src cabal-install/src cabal-testsuite/src + hasktags -b Cabal-syntax/src Cabal/src Cabal-described/src cabal-install/src cabal-install-internal/src cabal-testsuite/src # bootstrapping ############################################################################## diff --git a/bootstrap/bootstrap.py b/bootstrap/bootstrap.py index 30dcd9044d7..cc2e0b698e3 100755 --- a/bootstrap/bootstrap.py +++ b/bootstrap/bootstrap.py @@ -89,6 +89,7 @@ class PackageSource(Enum): , "Cabal-tests" , "Cabal-tree-diff" , "cabal-install-solver" + , "cabal-install-internal" , "cabal-install" , "hooks-exe" ] diff --git a/bootstrap/linux-9.10.3.json b/bootstrap/linux-9.10.3.json index 140b38d0f40..62c2cde0c85 100644 --- a/bootstrap/linux-9.10.3.json +++ b/bootstrap/linux-9.10.3.json @@ -515,31 +515,29 @@ }, { "cabal_sha256": null, - "component": "lib:cabal-install", + "component": "lib:cabal-install-internal", "flags": [ "-git-rev", "-legacy-comparison", "+native-dns" ], - "package": "cabal-install", + "package": "cabal-install-internal", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" }, { "cabal_sha256": null, "component": "exe:cabal", "flags": [ - "-git-rev", - "-legacy-comparison", - "+native-dns" + "-git-rev" ], "package": "cabal-install", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" } ] } diff --git a/bootstrap/linux-9.12.4.json b/bootstrap/linux-9.12.4.json index 2b2203ec259..f94318a3869 100644 --- a/bootstrap/linux-9.12.4.json +++ b/bootstrap/linux-9.12.4.json @@ -506,31 +506,29 @@ }, { "cabal_sha256": null, - "component": "lib:cabal-install", + "component": "lib:cabal-install-internal", "flags": [ "-git-rev", "-legacy-comparison", "+native-dns" ], - "package": "cabal-install", + "package": "cabal-install-internal", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" }, { "cabal_sha256": null, "component": "exe:cabal", "flags": [ - "-git-rev", - "-legacy-comparison", - "+native-dns" + "-git-rev" ], "package": "cabal-install", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" } ] } diff --git a/bootstrap/linux-9.6.7.json b/bootstrap/linux-9.6.7.json index 842d5572401..9ee0c7ccddf 100644 --- a/bootstrap/linux-9.6.7.json +++ b/bootstrap/linux-9.6.7.json @@ -517,31 +517,29 @@ }, { "cabal_sha256": null, - "component": "lib:cabal-install", + "component": "lib:cabal-install-internal", "flags": [ "-git-rev", "-legacy-comparison", "+native-dns" ], - "package": "cabal-install", + "package": "cabal-install-internal", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" }, { "cabal_sha256": null, "component": "exe:cabal", "flags": [ - "-git-rev", - "-legacy-comparison", - "+native-dns" + "-git-rev" ], "package": "cabal-install", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" } ] } diff --git a/bootstrap/linux-9.8.4.json b/bootstrap/linux-9.8.4.json index 56be7837098..24c67625865 100644 --- a/bootstrap/linux-9.8.4.json +++ b/bootstrap/linux-9.8.4.json @@ -517,31 +517,29 @@ }, { "cabal_sha256": null, - "component": "lib:cabal-install", + "component": "lib:cabal-install-internal", "flags": [ "-git-rev", "-legacy-comparison", "+native-dns" ], - "package": "cabal-install", + "package": "cabal-install-internal", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" }, { "cabal_sha256": null, "component": "exe:cabal", "flags": [ - "-git-rev", - "-legacy-comparison", - "+native-dns" + "-git-rev" ], "package": "cabal-install", "revision": null, "source": "local", "src_sha256": null, - "version": "3.18.1.0" + "version": "3.19.0.0" } ] } diff --git a/cabal-install-internal/ChangeLog.md b/cabal-install-internal/ChangeLog.md new file mode 100644 index 00000000000..65fd756c746 --- /dev/null +++ b/cabal-install-internal/ChangeLog.md @@ -0,0 +1,5 @@ +# Revision history for cabal-install-internal + +## 3.19.0.0 + +* Split the internal implementation modules out of `cabal-install` (mirroring the earlier `cabal-install-solver` split). This package provides no stability guarantees. diff --git a/cabal-install-internal/LICENSE b/cabal-install-internal/LICENSE new file mode 100644 index 00000000000..3fb6214dad1 --- /dev/null +++ b/cabal-install-internal/LICENSE @@ -0,0 +1,34 @@ +Copyright (c) 2003-2026, Cabal Development Team. +See the AUTHORS file for the full list of copyright holders. + +See */LICENSE for the copyright holders of the subcomponents. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Isaac Jones nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cabal-install-internal/Setup.hs b/cabal-install-internal/Setup.hs new file mode 100644 index 00000000000..00bfe1fe441 --- /dev/null +++ b/cabal-install-internal/Setup.hs @@ -0,0 +1,4 @@ +import Distribution.Simple + +main :: IO () +main = defaultMain diff --git a/cabal-install-internal/cabal-install-internal.cabal b/cabal-install-internal/cabal-install-internal.cabal new file mode 100644 index 00000000000..27255370514 --- /dev/null +++ b/cabal-install-internal/cabal-install-internal.cabal @@ -0,0 +1,251 @@ +cabal-version: 3.6 +name: cabal-install-internal +version: 3.19.0.0 +synopsis: The internal implementation of cabal-install +description: + The internal implementation modules of the cabal-install command-line + program. This package is NOT a stable API: modules may be added, changed + or removed in any release without notice. Third-party tools should depend + on the public API exposed by the @cabal-install@ package instead. + +homepage: http://www.haskell.org/cabal/ +bug-reports: https://github.com/haskell/cabal/issues +license: BSD-3-Clause +license-file: LICENSE +author: Cabal Development Team (see AUTHORS file) +maintainer: Cabal Development Team +copyright: 2003-2026, Cabal Development Team +category: Distribution +build-type: Simple +extra-doc-files: + ChangeLog.md + +source-repository head + type: git + location: https://github.com/haskell/cabal/ + subdir: cabal-install-internal + +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 git-rev + description: include Git revision hash in version + default: False + manual: True + +flag legacy-comparison + description: Enable comparison between the new and legacy cabal.project parser + default: False + manual: True + +library + default-language: GHC2021 + -- Disabling ImportQualifiedPost, otherwise fourmolu jumps ahead to apply it everywhere + default-extensions: TypeOperators + NoImportQualifiedPost + hs-source-dirs: src + ghc-options: + -Wall + -Wcompat + -Wnoncanonical-monad-instances + -Wincomplete-uni-patterns + -Wincomplete-record-updates + -Wno-unticked-promoted-constructors + + if impl(ghc < 8.8) + ghc-options: -Wnoncanonical-monadfail-instances + + if impl(ghc >= 9.14) + ghc-options: -Wno-pattern-namespace-specifier -Wno-incomplete-record-selectors + + autogen-modules: + Paths_cabal_install_internal + other-modules: + Paths_cabal_install_internal + exposed-modules: + 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.CmdInstall.ClientInstallFlags + Distribution.Client.Compat.Orphans + Distribution.Client.Compat.Prelude + Distribution.Client.Compat.Semaphore + Distribution.Client.Compat.Tar + Distribution.Client.Config + Distribution.Client.Configure + Distribution.Client.Dependency + Distribution.Client.Dependency.Types + Distribution.Client.DistDirLayout + Distribution.Client.Errors + Distribution.Client.Errors.Parser + 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.InLibrary + Distribution.Client.IndexUtils + Distribution.Client.IndexUtils.ActiveRepos + Distribution.Client.IndexUtils.IndexState + Distribution.Client.IndexUtils.Timestamp + Distribution.Client.Init + Distribution.Client.Init.Defaults + Distribution.Client.Init.FileCreators + Distribution.Client.Init.FlagExtractors + Distribution.Client.Init.Format + Distribution.Client.Init.Interactive.Command + Distribution.Client.Init.Licenses + Distribution.Client.Init.NonInteractive.Command + Distribution.Client.Init.NonInteractive.Heuristics + Distribution.Client.Init.Prompt + Distribution.Client.Init.Simple + 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.NixStyleOptions + Distribution.Client.PackageHash + Distribution.Client.ParseUtils + Distribution.Client.ProjectBuilding + Distribution.Client.ProjectBuilding.PackageFileMonitor + Distribution.Client.ProjectBuilding.Types + Distribution.Client.ProjectBuilding.UnpackedPackage + Distribution.Client.ProjectConfig + Distribution.Client.ProjectConfig.FieldGrammar + Distribution.Client.ProjectConfig.Import + Distribution.Client.ProjectConfig.Legacy + Distribution.Client.ProjectConfig.Lens + Distribution.Client.ProjectConfig.Parsec + Distribution.Client.ProjectConfig.Types + Distribution.Client.ProjectFlags + Distribution.Client.ProjectOrchestration + Distribution.Client.ProjectPlanOutput + Distribution.Client.ProjectPlanning + Distribution.Client.ProjectPlanning.SetupPolicy + Distribution.Client.ProjectPlanning.Types + Distribution.Client.RebuildMonad + Distribution.Client.Reconfigure + Distribution.Client.ReplFlags + Distribution.Client.Run + Distribution.Client.Sandbox + Distribution.Client.Sandbox.PackageEnvironment + Distribution.Client.SavedFlags + Distribution.Client.ScriptUtils + Distribution.Client.Security.DNS + Distribution.Client.Security.HTTP + Distribution.Client.Setup + Distribution.Client.SetupWrapper + Distribution.Client.Signal + 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.Upload + Distribution.Client.Utils + Distribution.Client.Utils.Json + Distribution.Client.Utils.Newtypes + Distribution.Client.Utils.Parsec + Distribution.Client.VCS + Distribution.Client.Version + Distribution.Client.Win32SelfUpgrade + Distribution.Deprecated.ParseUtils + Distribution.Deprecated.ProjectParseUtils + Distribution.Deprecated.ReadP + Distribution.Deprecated.ViewAsFieldDescr + + build-depends: + Cabal ^>=3.19 + , Cabal-syntax ^>=3.19 + , cabal-install-solver ^>=3.19 + , async >= 2.0 && < 2.3 + , array >= 0.4 && < 0.6 + , base16-bytestring >= 1.0 && < 1.1 + , binary >= 0.7.3 && < 0.9 + , bytestring >= 0.10.6.0 && < 0.13 + , containers >= 0.5.6.2 && < 0.9 + , cryptohash-sha256 >= 0.11 && < 0.12 + , directory >= 1.3.7.0 && < 1.4 + , echo >= 0.1.3 && < 0.2 + , edit-distance >= 0.2.2 && < 0.3 + , exceptions >= 0.10.4 && < 0.11 + , filepath >= 1.4.0.0 && < 1.6 + , hooks-exe ^>= 3.19 + , HTTP >= 4000.1.5 && < 4000.6 + , mtl >= 2.0 && < 2.4 + , network-uri >= 2.6.2.0 && < 2.7 + , pretty >= 1.1 && < 1.2 + , process >= 1.6.29.0 && < 1.7 + , random >= 1.2 && < 1.4 + , stm >= 2.0 && < 2.6 + , tar >= 0.5.0.3 && < 0.8 + , time >= 1.5.0.1 && < 1.17 + , zlib >= 0.6 && < 0.8 + , hackage-security >= 0.6.2.0 && < 0.7 + , parsec >= 3.1.13.0 && < 3.2 + , open-browser >= 0.2.1.0 && < 0.6 + , regex-base >= 0.94.0.0 && <0.95 + , regex-posix >= 0.96.0.0 && <0.97 + , safe-exceptions >= 0.1.7.0 && < 0.2 + , semaphore-compat >= 2.0.1 && < 2.1 + , base >=4.17 && <4.24 + + if flag(native-dns) + if os(windows) + build-depends: windns >= 0.1.0 && < 0.2 + else + build-depends: resolv >= 0.1.1 && < 0.3 + + if os(windows) + -- newer directory for symlinks + build-depends: + , Win32 >= 2.8 && < 3 + , directory >=1.3.1.0 + else + build-depends: + , unix >= 2.5 && < 2.8 || >= 2.8.6.0 && < 2.9 + + if flag(git-rev) + build-depends: githash ^>= 0.1.7.0 + cpp-options: -DGIT_REV + + if flag(legacy-comparison) + cpp-options: -DLEGACY_COMPARISON diff --git a/cabal-install/src/Distribution/Client/BuildReports/Anonymous.hs b/cabal-install-internal/src/Distribution/Client/BuildReports/Anonymous.hs similarity index 100% rename from cabal-install/src/Distribution/Client/BuildReports/Anonymous.hs rename to cabal-install-internal/src/Distribution/Client/BuildReports/Anonymous.hs diff --git a/cabal-install/src/Distribution/Client/BuildReports/Lens.hs b/cabal-install-internal/src/Distribution/Client/BuildReports/Lens.hs similarity index 100% rename from cabal-install/src/Distribution/Client/BuildReports/Lens.hs rename to cabal-install-internal/src/Distribution/Client/BuildReports/Lens.hs diff --git a/cabal-install/src/Distribution/Client/BuildReports/Storage.hs b/cabal-install-internal/src/Distribution/Client/BuildReports/Storage.hs similarity index 100% rename from cabal-install/src/Distribution/Client/BuildReports/Storage.hs rename to cabal-install-internal/src/Distribution/Client/BuildReports/Storage.hs diff --git a/cabal-install/src/Distribution/Client/BuildReports/Types.hs b/cabal-install-internal/src/Distribution/Client/BuildReports/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/BuildReports/Types.hs rename to cabal-install-internal/src/Distribution/Client/BuildReports/Types.hs diff --git a/cabal-install/src/Distribution/Client/BuildReports/Upload.hs b/cabal-install-internal/src/Distribution/Client/BuildReports/Upload.hs similarity index 100% rename from cabal-install/src/Distribution/Client/BuildReports/Upload.hs rename to cabal-install-internal/src/Distribution/Client/BuildReports/Upload.hs diff --git a/cabal-install/src/Distribution/Client/Check.hs b/cabal-install-internal/src/Distribution/Client/Check.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Check.hs rename to cabal-install-internal/src/Distribution/Client/Check.hs diff --git a/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs b/cabal-install-internal/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs similarity index 100% rename from cabal-install/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs rename to cabal-install-internal/src/Distribution/Client/CmdInstall/ClientInstallFlags.hs diff --git a/cabal-install/src/Distribution/Client/Compat/Orphans.hs b/cabal-install-internal/src/Distribution/Client/Compat/Orphans.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Compat/Orphans.hs rename to cabal-install-internal/src/Distribution/Client/Compat/Orphans.hs diff --git a/cabal-install/src/Distribution/Client/Compat/Prelude.hs b/cabal-install-internal/src/Distribution/Client/Compat/Prelude.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Compat/Prelude.hs rename to cabal-install-internal/src/Distribution/Client/Compat/Prelude.hs diff --git a/cabal-install/src/Distribution/Client/Compat/Semaphore.hs b/cabal-install-internal/src/Distribution/Client/Compat/Semaphore.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Compat/Semaphore.hs rename to cabal-install-internal/src/Distribution/Client/Compat/Semaphore.hs diff --git a/cabal-install/src/Distribution/Client/Compat/Tar.hs b/cabal-install-internal/src/Distribution/Client/Compat/Tar.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Compat/Tar.hs rename to cabal-install-internal/src/Distribution/Client/Compat/Tar.hs diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install-internal/src/Distribution/Client/Config.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Config.hs rename to cabal-install-internal/src/Distribution/Client/Config.hs diff --git a/cabal-install/src/Distribution/Client/Configure.hs b/cabal-install-internal/src/Distribution/Client/Configure.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Configure.hs rename to cabal-install-internal/src/Distribution/Client/Configure.hs diff --git a/cabal-install/src/Distribution/Client/Dependency.hs b/cabal-install-internal/src/Distribution/Client/Dependency.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Dependency.hs rename to cabal-install-internal/src/Distribution/Client/Dependency.hs diff --git a/cabal-install/src/Distribution/Client/Dependency/Types.hs b/cabal-install-internal/src/Distribution/Client/Dependency/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Dependency/Types.hs rename to cabal-install-internal/src/Distribution/Client/Dependency/Types.hs diff --git a/cabal-install/src/Distribution/Client/DistDirLayout.hs b/cabal-install-internal/src/Distribution/Client/DistDirLayout.hs similarity index 100% rename from cabal-install/src/Distribution/Client/DistDirLayout.hs rename to cabal-install-internal/src/Distribution/Client/DistDirLayout.hs diff --git a/cabal-install/src/Distribution/Client/Errors.hs b/cabal-install-internal/src/Distribution/Client/Errors.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Errors.hs rename to cabal-install-internal/src/Distribution/Client/Errors.hs diff --git a/cabal-install/src/Distribution/Client/Errors/Parser.hs b/cabal-install-internal/src/Distribution/Client/Errors/Parser.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Errors/Parser.hs rename to cabal-install-internal/src/Distribution/Client/Errors/Parser.hs diff --git a/cabal-install/src/Distribution/Client/Fetch.hs b/cabal-install-internal/src/Distribution/Client/Fetch.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Fetch.hs rename to cabal-install-internal/src/Distribution/Client/Fetch.hs diff --git a/cabal-install/src/Distribution/Client/FetchUtils.hs b/cabal-install-internal/src/Distribution/Client/FetchUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/FetchUtils.hs rename to cabal-install-internal/src/Distribution/Client/FetchUtils.hs diff --git a/cabal-install/src/Distribution/Client/FileMonitor.hs b/cabal-install-internal/src/Distribution/Client/FileMonitor.hs similarity index 100% rename from cabal-install/src/Distribution/Client/FileMonitor.hs rename to cabal-install-internal/src/Distribution/Client/FileMonitor.hs diff --git a/cabal-install/src/Distribution/Client/Freeze.hs b/cabal-install-internal/src/Distribution/Client/Freeze.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Freeze.hs rename to cabal-install-internal/src/Distribution/Client/Freeze.hs diff --git a/cabal-install/src/Distribution/Client/GZipUtils.hs b/cabal-install-internal/src/Distribution/Client/GZipUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/GZipUtils.hs rename to cabal-install-internal/src/Distribution/Client/GZipUtils.hs diff --git a/cabal-install/src/Distribution/Client/GenBounds.hs b/cabal-install-internal/src/Distribution/Client/GenBounds.hs similarity index 100% rename from cabal-install/src/Distribution/Client/GenBounds.hs rename to cabal-install-internal/src/Distribution/Client/GenBounds.hs diff --git a/cabal-install/src/Distribution/Client/Get.hs b/cabal-install-internal/src/Distribution/Client/Get.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Get.hs rename to cabal-install-internal/src/Distribution/Client/Get.hs diff --git a/cabal-install/src/Distribution/Client/Glob.hs b/cabal-install-internal/src/Distribution/Client/Glob.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Glob.hs rename to cabal-install-internal/src/Distribution/Client/Glob.hs diff --git a/cabal-install/src/Distribution/Client/GlobalFlags.hs b/cabal-install-internal/src/Distribution/Client/GlobalFlags.hs similarity index 100% rename from cabal-install/src/Distribution/Client/GlobalFlags.hs rename to cabal-install-internal/src/Distribution/Client/GlobalFlags.hs diff --git a/cabal-install/src/Distribution/Client/Haddock.hs b/cabal-install-internal/src/Distribution/Client/Haddock.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Haddock.hs rename to cabal-install-internal/src/Distribution/Client/Haddock.hs diff --git a/cabal-install/src/Distribution/Client/HashValue.hs b/cabal-install-internal/src/Distribution/Client/HashValue.hs similarity index 100% rename from cabal-install/src/Distribution/Client/HashValue.hs rename to cabal-install-internal/src/Distribution/Client/HashValue.hs diff --git a/cabal-install/src/Distribution/Client/HttpUtils.hs b/cabal-install-internal/src/Distribution/Client/HttpUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/HttpUtils.hs rename to cabal-install-internal/src/Distribution/Client/HttpUtils.hs diff --git a/cabal-install/src/Distribution/Client/InLibrary.hs b/cabal-install-internal/src/Distribution/Client/InLibrary.hs similarity index 100% rename from cabal-install/src/Distribution/Client/InLibrary.hs rename to cabal-install-internal/src/Distribution/Client/InLibrary.hs diff --git a/cabal-install/src/Distribution/Client/IndexUtils.hs b/cabal-install-internal/src/Distribution/Client/IndexUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/IndexUtils.hs rename to cabal-install-internal/src/Distribution/Client/IndexUtils.hs diff --git a/cabal-install/src/Distribution/Client/IndexUtils/ActiveRepos.hs b/cabal-install-internal/src/Distribution/Client/IndexUtils/ActiveRepos.hs similarity index 100% rename from cabal-install/src/Distribution/Client/IndexUtils/ActiveRepos.hs rename to cabal-install-internal/src/Distribution/Client/IndexUtils/ActiveRepos.hs diff --git a/cabal-install/src/Distribution/Client/IndexUtils/IndexState.hs b/cabal-install-internal/src/Distribution/Client/IndexUtils/IndexState.hs similarity index 100% rename from cabal-install/src/Distribution/Client/IndexUtils/IndexState.hs rename to cabal-install-internal/src/Distribution/Client/IndexUtils/IndexState.hs diff --git a/cabal-install/src/Distribution/Client/IndexUtils/Timestamp.hs b/cabal-install-internal/src/Distribution/Client/IndexUtils/Timestamp.hs similarity index 100% rename from cabal-install/src/Distribution/Client/IndexUtils/Timestamp.hs rename to cabal-install-internal/src/Distribution/Client/IndexUtils/Timestamp.hs diff --git a/cabal-install/src/Distribution/Client/Init.hs b/cabal-install-internal/src/Distribution/Client/Init.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init.hs rename to cabal-install-internal/src/Distribution/Client/Init.hs diff --git a/cabal-install/src/Distribution/Client/Init/Defaults.hs b/cabal-install-internal/src/Distribution/Client/Init/Defaults.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Defaults.hs rename to cabal-install-internal/src/Distribution/Client/Init/Defaults.hs diff --git a/cabal-install/src/Distribution/Client/Init/FileCreators.hs b/cabal-install-internal/src/Distribution/Client/Init/FileCreators.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/FileCreators.hs rename to cabal-install-internal/src/Distribution/Client/Init/FileCreators.hs diff --git a/cabal-install/src/Distribution/Client/Init/FlagExtractors.hs b/cabal-install-internal/src/Distribution/Client/Init/FlagExtractors.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/FlagExtractors.hs rename to cabal-install-internal/src/Distribution/Client/Init/FlagExtractors.hs diff --git a/cabal-install/src/Distribution/Client/Init/Format.hs b/cabal-install-internal/src/Distribution/Client/Init/Format.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Format.hs rename to cabal-install-internal/src/Distribution/Client/Init/Format.hs diff --git a/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs b/cabal-install-internal/src/Distribution/Client/Init/Interactive/Command.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Interactive/Command.hs rename to cabal-install-internal/src/Distribution/Client/Init/Interactive/Command.hs diff --git a/cabal-install/src/Distribution/Client/Init/Licenses.hs b/cabal-install-internal/src/Distribution/Client/Init/Licenses.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Licenses.hs rename to cabal-install-internal/src/Distribution/Client/Init/Licenses.hs diff --git a/cabal-install/src/Distribution/Client/Init/NonInteractive/Command.hs b/cabal-install-internal/src/Distribution/Client/Init/NonInteractive/Command.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/NonInteractive/Command.hs rename to cabal-install-internal/src/Distribution/Client/Init/NonInteractive/Command.hs diff --git a/cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs b/cabal-install-internal/src/Distribution/Client/Init/NonInteractive/Heuristics.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/NonInteractive/Heuristics.hs rename to cabal-install-internal/src/Distribution/Client/Init/NonInteractive/Heuristics.hs diff --git a/cabal-install/src/Distribution/Client/Init/Prompt.hs b/cabal-install-internal/src/Distribution/Client/Init/Prompt.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Prompt.hs rename to cabal-install-internal/src/Distribution/Client/Init/Prompt.hs diff --git a/cabal-install/src/Distribution/Client/Init/Simple.hs b/cabal-install-internal/src/Distribution/Client/Init/Simple.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Simple.hs rename to cabal-install-internal/src/Distribution/Client/Init/Simple.hs diff --git a/cabal-install/src/Distribution/Client/Init/Types.hs b/cabal-install-internal/src/Distribution/Client/Init/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Types.hs rename to cabal-install-internal/src/Distribution/Client/Init/Types.hs diff --git a/cabal-install/src/Distribution/Client/Init/Utils.hs b/cabal-install-internal/src/Distribution/Client/Init/Utils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Init/Utils.hs rename to cabal-install-internal/src/Distribution/Client/Init/Utils.hs diff --git a/cabal-install/src/Distribution/Client/Install.hs b/cabal-install-internal/src/Distribution/Client/Install.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Install.hs rename to cabal-install-internal/src/Distribution/Client/Install.hs diff --git a/cabal-install/src/Distribution/Client/InstallPlan.hs b/cabal-install-internal/src/Distribution/Client/InstallPlan.hs similarity index 100% rename from cabal-install/src/Distribution/Client/InstallPlan.hs rename to cabal-install-internal/src/Distribution/Client/InstallPlan.hs diff --git a/cabal-install/src/Distribution/Client/InstallSymlink.hs b/cabal-install-internal/src/Distribution/Client/InstallSymlink.hs similarity index 100% rename from cabal-install/src/Distribution/Client/InstallSymlink.hs rename to cabal-install-internal/src/Distribution/Client/InstallSymlink.hs diff --git a/cabal-install/src/Distribution/Client/JobControl.hs b/cabal-install-internal/src/Distribution/Client/JobControl.hs similarity index 100% rename from cabal-install/src/Distribution/Client/JobControl.hs rename to cabal-install-internal/src/Distribution/Client/JobControl.hs diff --git a/cabal-install/src/Distribution/Client/List.hs b/cabal-install-internal/src/Distribution/Client/List.hs similarity index 100% rename from cabal-install/src/Distribution/Client/List.hs rename to cabal-install-internal/src/Distribution/Client/List.hs diff --git a/cabal-install/src/Distribution/Client/Manpage.hs b/cabal-install-internal/src/Distribution/Client/Manpage.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Manpage.hs rename to cabal-install-internal/src/Distribution/Client/Manpage.hs diff --git a/cabal-install/src/Distribution/Client/ManpageFlags.hs b/cabal-install-internal/src/Distribution/Client/ManpageFlags.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ManpageFlags.hs rename to cabal-install-internal/src/Distribution/Client/ManpageFlags.hs diff --git a/cabal-install/src/Distribution/Client/NixStyleOptions.hs b/cabal-install-internal/src/Distribution/Client/NixStyleOptions.hs similarity index 100% rename from cabal-install/src/Distribution/Client/NixStyleOptions.hs rename to cabal-install-internal/src/Distribution/Client/NixStyleOptions.hs diff --git a/cabal-install/src/Distribution/Client/PackageHash.hs b/cabal-install-internal/src/Distribution/Client/PackageHash.hs similarity index 100% rename from cabal-install/src/Distribution/Client/PackageHash.hs rename to cabal-install-internal/src/Distribution/Client/PackageHash.hs diff --git a/cabal-install/src/Distribution/Client/ParseUtils.hs b/cabal-install-internal/src/Distribution/Client/ParseUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ParseUtils.hs rename to cabal-install-internal/src/Distribution/Client/ParseUtils.hs diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding.hs b/cabal-install-internal/src/Distribution/Client/ProjectBuilding.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectBuilding.hs rename to cabal-install-internal/src/Distribution/Client/ProjectBuilding.hs diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/PackageFileMonitor.hs b/cabal-install-internal/src/Distribution/Client/ProjectBuilding/PackageFileMonitor.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectBuilding/PackageFileMonitor.hs rename to cabal-install-internal/src/Distribution/Client/ProjectBuilding/PackageFileMonitor.hs diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/Types.hs b/cabal-install-internal/src/Distribution/Client/ProjectBuilding/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectBuilding/Types.hs rename to cabal-install-internal/src/Distribution/Client/ProjectBuilding/Types.hs diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs b/cabal-install-internal/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs rename to cabal-install-internal/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/FieldGrammar.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig/FieldGrammar.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig/FieldGrammar.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig/FieldGrammar.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Import.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig/Import.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig/Import.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig/Import.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig/Legacy.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig/Legacy.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Lens.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig/Lens.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig/Lens.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig/Lens.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Parsec.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig/Parsec.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig/Parsec.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig/Parsec.hs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install-internal/src/Distribution/Client/ProjectConfig/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectConfig/Types.hs rename to cabal-install-internal/src/Distribution/Client/ProjectConfig/Types.hs diff --git a/cabal-install/src/Distribution/Client/ProjectFlags.hs b/cabal-install-internal/src/Distribution/Client/ProjectFlags.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectFlags.hs rename to cabal-install-internal/src/Distribution/Client/ProjectFlags.hs diff --git a/cabal-install/src/Distribution/Client/ProjectOrchestration.hs b/cabal-install-internal/src/Distribution/Client/ProjectOrchestration.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectOrchestration.hs rename to cabal-install-internal/src/Distribution/Client/ProjectOrchestration.hs diff --git a/cabal-install/src/Distribution/Client/ProjectPlanOutput.hs b/cabal-install-internal/src/Distribution/Client/ProjectPlanOutput.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectPlanOutput.hs rename to cabal-install-internal/src/Distribution/Client/ProjectPlanOutput.hs diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install-internal/src/Distribution/Client/ProjectPlanning.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectPlanning.hs rename to cabal-install-internal/src/Distribution/Client/ProjectPlanning.hs diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning/SetupPolicy.hs b/cabal-install-internal/src/Distribution/Client/ProjectPlanning/SetupPolicy.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectPlanning/SetupPolicy.hs rename to cabal-install-internal/src/Distribution/Client/ProjectPlanning/SetupPolicy.hs diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs b/cabal-install-internal/src/Distribution/Client/ProjectPlanning/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs rename to cabal-install-internal/src/Distribution/Client/ProjectPlanning/Types.hs diff --git a/cabal-install/src/Distribution/Client/RebuildMonad.hs b/cabal-install-internal/src/Distribution/Client/RebuildMonad.hs similarity index 100% rename from cabal-install/src/Distribution/Client/RebuildMonad.hs rename to cabal-install-internal/src/Distribution/Client/RebuildMonad.hs diff --git a/cabal-install/src/Distribution/Client/Reconfigure.hs b/cabal-install-internal/src/Distribution/Client/Reconfigure.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Reconfigure.hs rename to cabal-install-internal/src/Distribution/Client/Reconfigure.hs diff --git a/cabal-install/src/Distribution/Client/ReplFlags.hs b/cabal-install-internal/src/Distribution/Client/ReplFlags.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ReplFlags.hs rename to cabal-install-internal/src/Distribution/Client/ReplFlags.hs diff --git a/cabal-install/src/Distribution/Client/Run.hs b/cabal-install-internal/src/Distribution/Client/Run.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Run.hs rename to cabal-install-internal/src/Distribution/Client/Run.hs diff --git a/cabal-install/src/Distribution/Client/Sandbox.hs b/cabal-install-internal/src/Distribution/Client/Sandbox.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Sandbox.hs rename to cabal-install-internal/src/Distribution/Client/Sandbox.hs diff --git a/cabal-install/src/Distribution/Client/Sandbox/PackageEnvironment.hs b/cabal-install-internal/src/Distribution/Client/Sandbox/PackageEnvironment.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Sandbox/PackageEnvironment.hs rename to cabal-install-internal/src/Distribution/Client/Sandbox/PackageEnvironment.hs diff --git a/cabal-install/src/Distribution/Client/SavedFlags.hs b/cabal-install-internal/src/Distribution/Client/SavedFlags.hs similarity index 100% rename from cabal-install/src/Distribution/Client/SavedFlags.hs rename to cabal-install-internal/src/Distribution/Client/SavedFlags.hs diff --git a/cabal-install/src/Distribution/Client/ScriptUtils.hs b/cabal-install-internal/src/Distribution/Client/ScriptUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/ScriptUtils.hs rename to cabal-install-internal/src/Distribution/Client/ScriptUtils.hs diff --git a/cabal-install/src/Distribution/Client/Security/DNS.hs b/cabal-install-internal/src/Distribution/Client/Security/DNS.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Security/DNS.hs rename to cabal-install-internal/src/Distribution/Client/Security/DNS.hs diff --git a/cabal-install/src/Distribution/Client/Security/HTTP.hs b/cabal-install-internal/src/Distribution/Client/Security/HTTP.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Security/HTTP.hs rename to cabal-install-internal/src/Distribution/Client/Security/HTTP.hs diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install-internal/src/Distribution/Client/Setup.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Setup.hs rename to cabal-install-internal/src/Distribution/Client/Setup.hs diff --git a/cabal-install/src/Distribution/Client/SetupWrapper.hs b/cabal-install-internal/src/Distribution/Client/SetupWrapper.hs similarity index 100% rename from cabal-install/src/Distribution/Client/SetupWrapper.hs rename to cabal-install-internal/src/Distribution/Client/SetupWrapper.hs diff --git a/cabal-install/src/Distribution/Client/Signal.hs b/cabal-install-internal/src/Distribution/Client/Signal.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Signal.hs rename to cabal-install-internal/src/Distribution/Client/Signal.hs diff --git a/cabal-install/src/Distribution/Client/SolverInstallPlan.hs b/cabal-install-internal/src/Distribution/Client/SolverInstallPlan.hs similarity index 100% rename from cabal-install/src/Distribution/Client/SolverInstallPlan.hs rename to cabal-install-internal/src/Distribution/Client/SolverInstallPlan.hs diff --git a/cabal-install/src/Distribution/Client/SourceFiles.hs b/cabal-install-internal/src/Distribution/Client/SourceFiles.hs similarity index 100% rename from cabal-install/src/Distribution/Client/SourceFiles.hs rename to cabal-install-internal/src/Distribution/Client/SourceFiles.hs diff --git a/cabal-install/src/Distribution/Client/SrcDist.hs b/cabal-install-internal/src/Distribution/Client/SrcDist.hs similarity index 100% rename from cabal-install/src/Distribution/Client/SrcDist.hs rename to cabal-install-internal/src/Distribution/Client/SrcDist.hs diff --git a/cabal-install/src/Distribution/Client/Store.hs b/cabal-install-internal/src/Distribution/Client/Store.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Store.hs rename to cabal-install-internal/src/Distribution/Client/Store.hs diff --git a/cabal-install/src/Distribution/Client/Tar.hs b/cabal-install-internal/src/Distribution/Client/Tar.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Tar.hs rename to cabal-install-internal/src/Distribution/Client/Tar.hs diff --git a/cabal-install/src/Distribution/Client/TargetProblem.hs b/cabal-install-internal/src/Distribution/Client/TargetProblem.hs similarity index 100% rename from cabal-install/src/Distribution/Client/TargetProblem.hs rename to cabal-install-internal/src/Distribution/Client/TargetProblem.hs diff --git a/cabal-install/src/Distribution/Client/TargetSelector.hs b/cabal-install-internal/src/Distribution/Client/TargetSelector.hs similarity index 100% rename from cabal-install/src/Distribution/Client/TargetSelector.hs rename to cabal-install-internal/src/Distribution/Client/TargetSelector.hs diff --git a/cabal-install/src/Distribution/Client/Targets.hs b/cabal-install-internal/src/Distribution/Client/Targets.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Targets.hs rename to cabal-install-internal/src/Distribution/Client/Targets.hs diff --git a/cabal-install/src/Distribution/Client/Types.hs b/cabal-install-internal/src/Distribution/Client/Types.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types.hs rename to cabal-install-internal/src/Distribution/Client/Types.hs diff --git a/cabal-install/src/Distribution/Client/Types/AllowNewer.hs b/cabal-install-internal/src/Distribution/Client/Types/AllowNewer.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/AllowNewer.hs rename to cabal-install-internal/src/Distribution/Client/Types/AllowNewer.hs diff --git a/cabal-install/src/Distribution/Client/Types/BuildResults.hs b/cabal-install-internal/src/Distribution/Client/Types/BuildResults.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/BuildResults.hs rename to cabal-install-internal/src/Distribution/Client/Types/BuildResults.hs diff --git a/cabal-install/src/Distribution/Client/Types/ConfiguredId.hs b/cabal-install-internal/src/Distribution/Client/Types/ConfiguredId.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/ConfiguredId.hs rename to cabal-install-internal/src/Distribution/Client/Types/ConfiguredId.hs diff --git a/cabal-install/src/Distribution/Client/Types/ConfiguredPackage.hs b/cabal-install-internal/src/Distribution/Client/Types/ConfiguredPackage.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/ConfiguredPackage.hs rename to cabal-install-internal/src/Distribution/Client/Types/ConfiguredPackage.hs diff --git a/cabal-install/src/Distribution/Client/Types/Credentials.hs b/cabal-install-internal/src/Distribution/Client/Types/Credentials.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/Credentials.hs rename to cabal-install-internal/src/Distribution/Client/Types/Credentials.hs diff --git a/cabal-install/src/Distribution/Client/Types/InstallMethod.hs b/cabal-install-internal/src/Distribution/Client/Types/InstallMethod.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/InstallMethod.hs rename to cabal-install-internal/src/Distribution/Client/Types/InstallMethod.hs diff --git a/cabal-install/src/Distribution/Client/Types/OverwritePolicy.hs b/cabal-install-internal/src/Distribution/Client/Types/OverwritePolicy.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/OverwritePolicy.hs rename to cabal-install-internal/src/Distribution/Client/Types/OverwritePolicy.hs diff --git a/cabal-install/src/Distribution/Client/Types/PackageLocation.hs b/cabal-install-internal/src/Distribution/Client/Types/PackageLocation.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/PackageLocation.hs rename to cabal-install-internal/src/Distribution/Client/Types/PackageLocation.hs diff --git a/cabal-install/src/Distribution/Client/Types/PackageSpecifier.hs b/cabal-install-internal/src/Distribution/Client/Types/PackageSpecifier.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/PackageSpecifier.hs rename to cabal-install-internal/src/Distribution/Client/Types/PackageSpecifier.hs diff --git a/cabal-install/src/Distribution/Client/Types/ReadyPackage.hs b/cabal-install-internal/src/Distribution/Client/Types/ReadyPackage.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/ReadyPackage.hs rename to cabal-install-internal/src/Distribution/Client/Types/ReadyPackage.hs diff --git a/cabal-install/src/Distribution/Client/Types/Repo.hs b/cabal-install-internal/src/Distribution/Client/Types/Repo.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/Repo.hs rename to cabal-install-internal/src/Distribution/Client/Types/Repo.hs diff --git a/cabal-install/src/Distribution/Client/Types/RepoName.hs b/cabal-install-internal/src/Distribution/Client/Types/RepoName.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/RepoName.hs rename to cabal-install-internal/src/Distribution/Client/Types/RepoName.hs diff --git a/cabal-install/src/Distribution/Client/Types/SourcePackageDb.hs b/cabal-install-internal/src/Distribution/Client/Types/SourcePackageDb.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/SourcePackageDb.hs rename to cabal-install-internal/src/Distribution/Client/Types/SourcePackageDb.hs diff --git a/cabal-install/src/Distribution/Client/Types/SourceRepo.hs b/cabal-install-internal/src/Distribution/Client/Types/SourceRepo.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/SourceRepo.hs rename to cabal-install-internal/src/Distribution/Client/Types/SourceRepo.hs diff --git a/cabal-install/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs b/cabal-install-internal/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs rename to cabal-install-internal/src/Distribution/Client/Types/WriteGhcEnvironmentFilesPolicy.hs diff --git a/cabal-install/src/Distribution/Client/Upload.hs b/cabal-install-internal/src/Distribution/Client/Upload.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Upload.hs rename to cabal-install-internal/src/Distribution/Client/Upload.hs diff --git a/cabal-install/src/Distribution/Client/Utils.hs b/cabal-install-internal/src/Distribution/Client/Utils.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Utils.hs rename to cabal-install-internal/src/Distribution/Client/Utils.hs diff --git a/cabal-install/src/Distribution/Client/Utils/Json.hs b/cabal-install-internal/src/Distribution/Client/Utils/Json.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Utils/Json.hs rename to cabal-install-internal/src/Distribution/Client/Utils/Json.hs diff --git a/cabal-install/src/Distribution/Client/Utils/Newtypes.hs b/cabal-install-internal/src/Distribution/Client/Utils/Newtypes.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Utils/Newtypes.hs rename to cabal-install-internal/src/Distribution/Client/Utils/Newtypes.hs diff --git a/cabal-install/src/Distribution/Client/Utils/Parsec.hs b/cabal-install-internal/src/Distribution/Client/Utils/Parsec.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Utils/Parsec.hs rename to cabal-install-internal/src/Distribution/Client/Utils/Parsec.hs diff --git a/cabal-install/src/Distribution/Client/VCS.hs b/cabal-install-internal/src/Distribution/Client/VCS.hs similarity index 100% rename from cabal-install/src/Distribution/Client/VCS.hs rename to cabal-install-internal/src/Distribution/Client/VCS.hs diff --git a/cabal-install/src/Distribution/Client/Version.hs b/cabal-install-internal/src/Distribution/Client/Version.hs similarity index 74% rename from cabal-install/src/Distribution/Client/Version.hs rename to cabal-install-internal/src/Distribution/Client/Version.hs index 3718f67cf40..f510c246b30 100644 --- a/cabal-install/src/Distribution/Client/Version.hs +++ b/cabal-install-internal/src/Distribution/Client/Version.hs @@ -9,13 +9,9 @@ module Distribution.Client.Version , cabalInstallGitInfo ) where -import Data.List (intercalate) -import qualified Data.Version as DV -import qualified Distribution.Compat.SysInfo as SIC import Distribution.Version -import qualified System.Info as SI -import qualified Paths_cabal_install as PackageInfo +import qualified Paths_cabal_install_internal as PackageInfo #ifdef GIT_REV import Data.Either (isLeft) @@ -32,20 +28,6 @@ import GitHash cabalInstallVersion :: Version cabalInstallVersion = mkVersion' PackageInfo.version --- | --- `cabal-install` compiler information. -cabalInstallCompilerInfo :: String -cabalInstallCompilerInfo = - concat - [ SI.compilerName - , " " - , intercalate "." (map show (DV.versionBranch SIC.fullCompilerVersion)) - , " on " - , SI.os - , " " - , SI.arch - ] - -- | -- `cabal-install` Git information. Only filled in if built in a Git tree in -- development mode and Template Haskell is available. diff --git a/cabal-install/src/Distribution/Client/Win32SelfUpgrade.hs b/cabal-install-internal/src/Distribution/Client/Win32SelfUpgrade.hs similarity index 100% rename from cabal-install/src/Distribution/Client/Win32SelfUpgrade.hs rename to cabal-install-internal/src/Distribution/Client/Win32SelfUpgrade.hs diff --git a/cabal-install/src/Distribution/Deprecated/ParseUtils.hs b/cabal-install-internal/src/Distribution/Deprecated/ParseUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Deprecated/ParseUtils.hs rename to cabal-install-internal/src/Distribution/Deprecated/ParseUtils.hs diff --git a/cabal-install/src/Distribution/Deprecated/ProjectParseUtils.hs b/cabal-install-internal/src/Distribution/Deprecated/ProjectParseUtils.hs similarity index 100% rename from cabal-install/src/Distribution/Deprecated/ProjectParseUtils.hs rename to cabal-install-internal/src/Distribution/Deprecated/ProjectParseUtils.hs diff --git a/cabal-install/src/Distribution/Deprecated/ReadP.hs b/cabal-install-internal/src/Distribution/Deprecated/ReadP.hs similarity index 100% rename from cabal-install/src/Distribution/Deprecated/ReadP.hs rename to cabal-install-internal/src/Distribution/Deprecated/ReadP.hs diff --git a/cabal-install/src/Distribution/Deprecated/ViewAsFieldDescr.hs b/cabal-install-internal/src/Distribution/Deprecated/ViewAsFieldDescr.hs similarity index 100% rename from cabal-install/src/Distribution/Deprecated/ViewAsFieldDescr.hs rename to cabal-install-internal/src/Distribution/Deprecated/ViewAsFieldDescr.hs diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 83628ab03d1..088ac911f7d 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -27,23 +27,11 @@ source-repository head 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 git-rev description: include Git revision hash in version default: False manual: True -flag legacy-comparison - description: Enable comparison between the new and legacy cabal.project parser - default: False - manual: True - common warnings ghc-options: -Wall @@ -75,229 +63,79 @@ common cabal-install-solver-dep build-depends: , cabal-install-solver ^>=3.19 +common cabal-install-internal-dep + build-depends: + , cabal-install-internal ^>=3.19 + library - import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep, cabal-install-internal-dep default-language: GHC2021 -- Disabling ImportQualifiedPost, otherwise fourmolu jumps ahead to apply it everywhere default-extensions: TypeOperators NoImportQualifiedPost + PatternSynonyms + LambdaCase + BlockArguments hs-source-dirs: src autogen-modules: Paths_cabal_install other-modules: Paths_cabal_install + exposed-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.ProjectParseUtils - 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.CmdErrorMessages - Distribution.Client.CmdExec - Distribution.Client.CmdFreeze - Distribution.Client.CmdHaddock - Distribution.Client.CmdHaddockProject - Distribution.Client.CmdInstall - Distribution.Client.CmdInstall.ClientInstallFlags - Distribution.Client.CmdInstall.ClientInstallTargetSelector - Distribution.Client.CmdLegacy - Distribution.Client.CmdListBin - Distribution.Client.CmdPath - Distribution.Client.CmdOutdated - Distribution.Client.CmdRepl - Distribution.Client.CmdRun - Distribution.Client.CmdSdist - Distribution.Client.CmdTarget - Distribution.Client.CmdTest - Distribution.Client.CmdUpdate - Distribution.Client.CmdGenBounds - Distribution.Client.Compat.Orphans - Distribution.Client.Compat.Prelude - Distribution.Client.Compat.Semaphore - Distribution.Client.Compat.Tar - Distribution.Client.Config - Distribution.Client.Configure - Distribution.Client.Dependency - Distribution.Client.Dependency.Types - Distribution.Client.DistDirLayout - Distribution.Client.Errors - Distribution.Client.Errors.Parser - 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.Defaults - Distribution.Client.Init.FileCreators - Distribution.Client.Init.FlagExtractors - Distribution.Client.Init.Format - Distribution.Client.Init.Interactive.Command - Distribution.Client.Init.NonInteractive.Command - Distribution.Client.Init.NonInteractive.Heuristics - Distribution.Client.Init.Licenses - Distribution.Client.Init.Prompt - Distribution.Client.Init.Simple - Distribution.Client.Init.Types - Distribution.Client.Init.Utils - Distribution.Client.InLibrary - Distribution.Client.Install - Distribution.Client.InstallPlan - Distribution.Client.InstallSymlink - Distribution.Client.JobControl - Distribution.Client.List - Distribution.Client.Main - Distribution.Client.Manpage - Distribution.Client.ManpageFlags - Distribution.Client.NixStyleOptions - Distribution.Client.PackageHash - Distribution.Client.ParseUtils - Distribution.Client.ProjectBuilding - Distribution.Client.ProjectBuilding.UnpackedPackage - Distribution.Client.ProjectBuilding.PackageFileMonitor - Distribution.Client.ProjectBuilding.Types - Distribution.Client.ProjectConfig - Distribution.Client.ProjectConfig.FieldGrammar - Distribution.Client.ProjectConfig.Import - Distribution.Client.ProjectConfig.Legacy - Distribution.Client.ProjectConfig.Lens - Distribution.Client.ProjectConfig.Parsec - Distribution.Client.ProjectConfig.Types - Distribution.Client.ProjectFlags - Distribution.Client.ProjectOrchestration - Distribution.Client.ProjectPlanOutput - Distribution.Client.ProjectPlanning - Distribution.Client.ProjectPlanning.SetupPolicy - Distribution.Client.ProjectPlanning.Types - Distribution.Client.RebuildMonad - Distribution.Client.Reconfigure - Distribution.Client.ReplFlags - Distribution.Client.Run - Distribution.Client.Sandbox - Distribution.Client.Sandbox.PackageEnvironment - Distribution.Client.SavedFlags - Distribution.Client.ScriptUtils - Distribution.Client.Security.DNS - Distribution.Client.Security.HTTP - Distribution.Client.Setup - Distribution.Client.SetupWrapper - Distribution.Client.Signal - 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.Upload - Distribution.Client.Utils - Distribution.Client.Utils.Json - Distribution.Client.Utils.Newtypes - Distribution.Client.Utils.Parsec - Distribution.Client.VCS - Distribution.Client.Version - Distribution.Client.Win32SelfUpgrade + Distribution.Client.API.Build + Distribution.Client.API.Config + Distribution.Client.API.PackageIndex + Distribution.Client.API.Project + Distribution.Client.API.Command.CmdBench + Distribution.Client.API.Command.CmdBuild + Distribution.Client.API.Command.CmdClean + Distribution.Client.API.Command.CmdConfigure + Distribution.Client.API.Command.CmdErrorMessages + Distribution.Client.API.Command.CmdExec + Distribution.Client.API.Command.CmdFreeze + Distribution.Client.API.Command.CmdGenBounds + Distribution.Client.API.Command.CmdHaddock + Distribution.Client.API.Command.CmdHaddockProject + Distribution.Client.API.Command.CmdInstall + Distribution.Client.API.Command.CmdInstall.ClientInstallTargetSelector + Distribution.Client.API.Command.CmdLegacy + Distribution.Client.API.Command.CmdListBin + Distribution.Client.API.Command.CmdOutdated + Distribution.Client.API.Command.CmdPath + Distribution.Client.API.Command.CmdRepl + Distribution.Client.API.Command.CmdRun + Distribution.Client.API.Command.CmdSdist + Distribution.Client.API.Command.CmdTarget + Distribution.Client.API.Command.CmdTest + Distribution.Client.API.Command.CmdUpdate build-depends: - , async >= 2.0 && < 2.3 - , array >= 0.4 && < 0.6 - , base16-bytestring >= 1.0 && < 1.1 - , binary >= 0.7.3 && < 0.9 - , bytestring >= 0.10.6.0 && < 0.13 + bytestring >= 0.10.6.0 && < 0.13 , containers >= 0.5.6.2 && < 0.9 - , cryptohash-sha256 >= 0.11 && < 0.12 , directory >= 1.3.7.0 && < 1.4 - , echo >= 0.1.3 && < 0.2 - , edit-distance >= 0.2.2 && < 0.3 - , exceptions >= 0.10.4 && < 0.11 , filepath >= 1.4.0.0 && < 1.6 - , hooks-exe ^>= 3.19 - , HTTP >= 4000.1.5 && < 4000.6 - , mtl >= 2.0 && < 2.4 , network-uri >= 2.6.2.0 && < 2.7 , pretty >= 1.1 && < 1.2 , process >= 1.6.29.0 && < 1.7 - , random >= 1.2 && < 1.4 - , stm >= 2.0 && < 2.6 - , tar >= 0.5.0.3 && < 0.8 , time >= 1.5.0.1 && < 1.17 - , zlib >= 0.6 && < 0.8 , hackage-security >= 0.6.2.0 && < 0.7 , text >= 1.2.3 && < 1.3 || >= 2.0 && < 2.2 - , parsec >= 3.1.13.0 && < 3.2 - , open-browser >= 0.2.1.0 && < 0.6 - , regex-base >= 0.94.0.0 && <0.95 - , regex-posix >= 0.96.0.0 && <0.97 - , safe-exceptions >= 0.1.7.0 && < 0.2 - , semaphore-compat >= 2.0.1 && < 2.1 - - if flag(native-dns) - if os(windows) - build-depends: windns >= 0.1.0 && < 0.2 - else - build-depends: resolv >= 0.1.1 && < 0.3 - - if os(windows) - -- newer directory for symlinks - build-depends: - , Win32 >= 2.8 && < 3 - , directory >=1.3.1.0 - else - build-depends: - , unix >= 2.5 && < 2.8 || >= 2.8.6.0 && < 2.9 - - if flag(git-rev) - build-depends: githash ^>= 0.1.7.0 - cpp-options: -DGIT_REV - - if flag(legacy-comparison) - cpp-options: -DLEGACY_COMPARISON executable cabal - import: warnings, base-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-internal-dep main-is: Main.hs + other-modules: + Distribution.Client.Main hs-source-dirs: main + + build-depends: + , cabal-install + , directory >= 1.3.7.0 && < 1.4 + , filepath >= 1.4.0.0 && < 1.6 + , process >= 1.6.29.0 && < 1.7 + default-language: GHC2021 -- Disabling ImportQualifiedPost, otherwise fourmolu jumps ahead to apply it everywhere default-extensions: NoImportQualifiedPost @@ -311,13 +149,10 @@ executable cabal if flag(git-rev) cpp-options: -DGIT_REV - build-depends: - cabal-install - -- Small, fast running tests. -- test-suite unit-tests - import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep, cabal-install-internal-dep default-language: GHC2021 -- Disabling ImportQualifiedPost, otherwise fourmolu jumps ahead to apply it everywhere default-extensions: TypeOperators @@ -390,7 +225,7 @@ test-suite unit-tests -- Tests for the project file parser test-suite parser-tests - import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep, cabal-install-internal-dep default-language: GHC2021 -- Disabling ImportQualifiedPost, otherwise fourmolu jumps ahead to apply it everywhere default-extensions: NoImportQualifiedPost @@ -400,7 +235,6 @@ test-suite parser-tests main-is: Tests.hs hs-source-dirs: parser-tests build-depends: - , cabal-install , containers , directory , filepath @@ -415,7 +249,7 @@ test-suite parser-tests -- could make the build generating paths which exceeds the windows -- max path limit (still a problem for some ghc versions) test-suite mem-use-tests - import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep, cabal-install-internal-dep type: exitcode-stdio-1.0 main-is: MemoryUsageTests.hs hs-source-dirs: tests @@ -432,7 +266,6 @@ test-suite mem-use-tests UnitTests.Options build-depends: - , cabal-install , containers , tasty >= 1.2.3 && <1.6 , tasty-hunit >= 0.10 @@ -441,7 +274,7 @@ test-suite mem-use-tests -- Integration tests that use the cabal-install code directly -- but still build whole projects test-suite integration-tests2 - import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep, cabal-install-internal-dep ghc-options: -rtsopts -threaded type: exitcode-stdio-1.0 main-is: IntegrationTests2.hs @@ -464,7 +297,7 @@ test-suite integration-tests2 , tagged test-suite long-tests - import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep + import: warnings, base-dep, cabal-dep, cabal-syntax-dep, cabal-install-solver-dep, cabal-install-internal-dep ghc-options: -rtsopts -threaded type: exitcode-stdio-1.0 hs-source-dirs: tests @@ -488,7 +321,6 @@ test-suite long-tests , Cabal-QuickCheck , Cabal-described , Cabal-tests - , cabal-install , containers , directory , filepath diff --git a/cabal-install/src/Distribution/Client/Main.hs b/cabal-install/main/Distribution/Client/Main.hs similarity index 97% rename from cabal-install/src/Distribution/Client/Main.hs rename to cabal-install/main/Distribution/Client/Main.hs index 2dd8fed4a4a..2ec97ec9200 100644 --- a/cabal-install/src/Distribution/Client/Main.hs +++ b/cabal-install/main/Distribution/Client/Main.hs @@ -119,26 +119,26 @@ import Distribution.Client.Targets ( readUserTargets ) -import qualified Distribution.Client.CmdBench as CmdBench -import qualified Distribution.Client.CmdBuild as CmdBuild -import qualified Distribution.Client.CmdClean as CmdClean -import qualified Distribution.Client.CmdConfigure as CmdConfigure -import qualified Distribution.Client.CmdExec as CmdExec -import qualified Distribution.Client.CmdFreeze as CmdFreeze -import qualified Distribution.Client.CmdGenBounds as CmdGenBounds -import qualified Distribution.Client.CmdHaddock as CmdHaddock -import qualified Distribution.Client.CmdHaddockProject as CmdHaddockProject -import qualified Distribution.Client.CmdInstall as CmdInstall -import Distribution.Client.CmdLegacy -import qualified Distribution.Client.CmdListBin as CmdListBin -import qualified Distribution.Client.CmdOutdated as CmdOutdated -import qualified Distribution.Client.CmdPath as CmdPath -import qualified Distribution.Client.CmdRepl as CmdRepl -import qualified Distribution.Client.CmdRun as CmdRun -import qualified Distribution.Client.CmdSdist as CmdSdist -import qualified Distribution.Client.CmdTarget as CmdTarget -import qualified Distribution.Client.CmdTest as CmdTest -import qualified Distribution.Client.CmdUpdate as CmdUpdate +import qualified Distribution.Client.API.Command.CmdBench as CmdBench +import qualified Distribution.Client.API.Command.CmdBuild as CmdBuild +import qualified Distribution.Client.API.Command.CmdClean as CmdClean +import qualified Distribution.Client.API.Command.CmdConfigure as CmdConfigure +import qualified Distribution.Client.API.Command.CmdExec as CmdExec +import qualified Distribution.Client.API.Command.CmdFreeze as CmdFreeze +import qualified Distribution.Client.API.Command.CmdGenBounds as CmdGenBounds +import qualified Distribution.Client.API.Command.CmdHaddock as CmdHaddock +import qualified Distribution.Client.API.Command.CmdHaddockProject as CmdHaddockProject +import qualified Distribution.Client.API.Command.CmdInstall as CmdInstall +import Distribution.Client.API.Command.CmdLegacy +import qualified Distribution.Client.API.Command.CmdListBin as CmdListBin +import qualified Distribution.Client.API.Command.CmdOutdated as CmdOutdated +import qualified Distribution.Client.API.Command.CmdPath as CmdPath +import qualified Distribution.Client.API.Command.CmdRepl as CmdRepl +import qualified Distribution.Client.API.Command.CmdRun as CmdRun +import qualified Distribution.Client.API.Command.CmdSdist as CmdSdist +import qualified Distribution.Client.API.Command.CmdTarget as CmdTarget +import qualified Distribution.Client.API.Command.CmdTest as CmdTest +import qualified Distribution.Client.API.Command.CmdUpdate as CmdUpdate import Distribution.Client.Check as Check (check) import Distribution.Client.Configure (configure, writeConfigFlags) @@ -512,7 +512,7 @@ mainWorker args = do type Action = GlobalFlags -> IO () --- Duplicated in Distribution.Client.CmdLegacy. Any changes must be +-- Duplicated in Distribution.Client.API.Command.CmdLegacy. Any changes must be -- reflected there, as well. regularCmd :: CommandUI flags diff --git a/cabal-install/src/Distribution/Client/API/Build.hs b/cabal-install/src/Distribution/Client/API/Build.hs new file mode 100644 index 00000000000..bbd0ba29685 --- /dev/null +++ b/cabal-install/src/Distribution/Client/API/Build.hs @@ -0,0 +1,203 @@ +-- | Tier-0 stable API: building project targets. +-- +-- Thin wrapper over the internal @Distribution.Client.API.Command.CmdBuild@ and the +-- orchestration layer (@Distribution.Client.ProjectOrchestration@, +-- @Distribution.Client.ScriptUtils@). +-- +-- This is the stable replacement for third-party tools that used to import +-- the orchestration layer and @buildAction@ directly (see cabal-hoogle). +module Distribution.Client.API.Build + ( BuildOptions -- Note: cabal-hoogle + , buildOptBuildDir -- Note: cabal-hoogle + , buildOptNoOptimisation -- Note: cabal-hoogle + , buildOptDocumentation -- Note: cabal-hoogle + , buildOptHaddockHoogle -- Note: cabal-hoogle + , buildOptHaddockHtml -- Note: cabal-hoogle + , buildOptHaddockLinkedSource -- Note: cabal-hoogle + , buildOptHaddockQuickJump -- Note: cabal-hoogle + , defaultBuildOptions -- Note: cabal-hoogle + , runBuild -- Note: cabal-hoogle + , BuildTarget -- Note: cabal-hoogle + , buildTargetDistDir -- Note: cabal-hoogle + , buildTargetsAndDirs -- Note: cabal-hoogle + ) where + +import qualified Data.Map as Map +import Distribution.Client.API.Command.CmdBuild + ( BuildFlags + , buildAction + , defaultBuildFlags + , selectComponentTarget + , selectPackageTargets + ) +import Distribution.Client.API.Command.CmdErrorMessages (reportTargetProblems) +import Distribution.Client.DistDirLayout (distBuildDirectory) +import qualified Distribution.Client.InstallPlan as InstallPlan +import Distribution.Client.NixStyleOptions (NixStyleFlags (..), defaultNixStyleFlags) +import Distribution.Client.ProjectOrchestration + ( CurrentCommand (..) + , ProjectBaseContext (..) + , ProjectBuildContext (..) + , TargetAction (..) + , TargetsMap + , pruneInstallPlanToTargets + , resolveTargetsFromSolver + , runProjectPreBuildPhase + ) +import Distribution.Client.ProjectPlanning.Types (ElaboratedInstallPlan, elabDistDirParams) +import Distribution.Client.ScriptUtils + ( AcceptNoTargets (..) + , TargetContext (..) + , updateContextAndWriteProjectFile + , withContextAndSelectors + ) +import Distribution.Client.Setup (InstallFlags (..), defaultGlobalFlags) +import Distribution.Client.TargetSelector (TargetSelector) +import Distribution.Simple.Compiler (OptimisationLevel (..)) +import Distribution.Simple.Flag (maybeToFlag, toFlag) +import Distribution.Simple.Setup + ( CommonSetupFlags (..) + , ConfigFlags (..) + , HaddockFlags (..) + ) +import Distribution.Utils.Path (makeSymbolicPath) +import Distribution.Verbosity (Verbosity) + +-- | Options controlling a build, mirroring the subset of @cabal build@ / +-- @cabal haddock@ flags that known consumers need. +data BuildOptions = BuildOptions + { buildOptBuildDir :: Maybe FilePath + -- ^ Override for @--builddir@. + , buildOptNoOptimisation :: Bool + -- ^ Build with @-O0@. + , buildOptDocumentation :: Bool + -- ^ Generate documentation (@installDocumentation@). + , buildOptHaddockHoogle :: Bool + -- ^ Run haddock with @--hoogle@. + , buildOptHaddockHtml :: Bool + -- ^ Run haddock with @--html@. + , buildOptHaddockLinkedSource :: Bool + -- ^ Run haddock with @--hyperlinked-source@. + , buildOptHaddockQuickJump :: Bool + -- ^ Run haddock with @--quickjump@. + } + +defaultBuildOptions :: BuildOptions +defaultBuildOptions = + BuildOptions + { buildOptBuildDir = Nothing + , buildOptNoOptimisation = False + , buildOptDocumentation = False + , buildOptHaddockHoogle = False + , buildOptHaddockHtml = False + , buildOptHaddockLinkedSource = False + , buildOptHaddockQuickJump = False + } + +mkNixStyleFlags :: BuildOptions -> NixStyleFlags BuildFlags +mkNixStyleFlags opts = + base + { configFlags = configFlags' + , haddockFlags = haddockFlags' + , installFlags = installFlags' + } + where + base :: NixStyleFlags BuildFlags + base = defaultNixStyleFlags defaultBuildFlags + + configFlags' :: ConfigFlags + configFlags' = + (configFlags base) + { configCommonFlags = + (configCommonFlags (configFlags base)) + { setupDistPref = maybeToFlag (makeSymbolicPath <$> buildOptBuildDir opts) + } + , configOptimization = + if buildOptNoOptimisation opts + then toFlag NoOptimisation + else configOptimization (configFlags base) + } + + haddockFlags' :: HaddockFlags + haddockFlags' = + (haddockFlags base) + { haddockHoogle = toFlag (buildOptHaddockHoogle opts) + , haddockHtml = toFlag (buildOptHaddockHtml opts) + , haddockLinkedSource = toFlag (buildOptHaddockLinkedSource opts) + , haddockQuickJump = toFlag (buildOptHaddockQuickJump opts) + } + + installFlags' :: InstallFlags + installFlags' = (installFlags base){installDocumentation = toFlag (buildOptDocumentation opts)} + +-- | Build the given targets, like @cabal build@. Target strings use the +-- usual cabal target syntax; an empty list means @all@. +runBuild :: BuildOptions -> [String] -> IO () +runBuild opts targetStrings = buildAction (mkNixStyleFlags opts) targetStrings defaultGlobalFlags + +-- | A resolved build target together with its build directory. +data BuildTarget = BuildTarget + { buildTargetDistDir :: FilePath + } + +-- | Resolve the given target strings against the project and return the +-- build directory of every target package, without building anything. +-- +-- This is the read-only part of @cabal build@'s context setup: target +-- selection, solving and plan pruning. +buildTargetsAndDirs :: Verbosity -> BuildOptions -> [String] -> IO [BuildTarget] +buildTargetsAndDirs verbosity opts targetStrings = do + withContextAndSelectors + verbosity + RejectNoTargets + Nothing + (mkNixStyleFlags opts) + (if null targetStrings then ["all"] else targetStrings) + defaultGlobalFlags + BuildCommand + (targetsAction verbosity) + +targetsAction :: Verbosity -> TargetContext -> ProjectBaseContext -> [TargetSelector] -> IO [BuildTarget] +targetsAction verbosity targetCtx projectBaseContext targetSelectors = do + ctx <- case targetCtx of + ProjectContext -> pure projectBaseContext + GlobalContext -> pure projectBaseContext + ScriptContext scriptPath scriptExe -> + updateContextAndWriteProjectFile projectBaseContext scriptPath scriptExe + buildCtx <- + runProjectPreBuildPhase + verbosity + ctx + (runElaboratedInstallPlan verbosity targetSelectors) + pure + [ BuildTarget + { buildTargetDistDir = + distBuildDirectory + (distDirLayout ctx) + (elabDistDirParams (elaboratedShared buildCtx) elab) + } + | (unitId, _) <- Map.toList (targetsMap buildCtx) + , Just planPkg <- [InstallPlan.lookup (elaboratedPlanToExecute buildCtx) unitId] + , elab <- case planPkg of + InstallPlan.Configured e -> [e] + InstallPlan.Installed e -> [e] + InstallPlan.PreExisting _InstalledPackageInfo -> [] + ] + +runElaboratedInstallPlan :: Verbosity -> [TargetSelector] -> ElaboratedInstallPlan -> IO (ElaboratedInstallPlan, TargetsMap) +runElaboratedInstallPlan verbosity targetSelectors elaboratedPlan = do + targets <- + either + (reportTargetProblems verbosity "build") + pure + ( resolveTargetsFromSolver + selectPackageTargets + selectComponentTarget + elaboratedPlan + Nothing + targetSelectors + ) + pure + ( pruneInstallPlanToTargets TargetActionBuild targets elaboratedPlan + , targets + ) diff --git a/cabal-install/src/Distribution/Client/CmdBench.hs b/cabal-install/src/Distribution/Client/API/Command/CmdBench.hs similarity index 98% rename from cabal-install/src/Distribution/Client/CmdBench.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdBench.hs index f9adc80432b..384a63e93f8 100644 --- a/cabal-install/src/Distribution/Client/CmdBench.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdBench.hs @@ -1,5 +1,5 @@ -- | cabal-install CLI command: bench -module Distribution.Client.CmdBench +module Distribution.Client.API.Command.CmdBench ( -- * The @bench@ CLI and action benchCommand , benchAction @@ -15,7 +15,7 @@ module Distribution.Client.CmdBench import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages ( plural , renderTargetProblem , renderTargetProblemNoTargets diff --git a/cabal-install/src/Distribution/Client/CmdBuild.hs b/cabal-install/src/Distribution/Client/API/Command/CmdBuild.hs similarity index 98% rename from cabal-install/src/Distribution/Client/CmdBuild.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdBuild.hs index 7314187b815..a7b2d8aec00 100644 --- a/cabal-install/src/Distribution/Client/CmdBuild.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdBuild.hs @@ -1,5 +1,5 @@ -- | cabal-install CLI command: build -module Distribution.Client.CmdBuild +module Distribution.Client.API.Command.CmdBuild ( -- * The @build@ CLI and action buildCommand , buildAction @@ -14,7 +14,7 @@ module Distribution.Client.CmdBuild import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages import Distribution.Client.ProjectFlags ( removeIgnoreProjectOption ) diff --git a/cabal-install/src/Distribution/Client/CmdClean.hs b/cabal-install/src/Distribution/Client/API/Command/CmdClean.hs similarity index 98% rename from cabal-install/src/Distribution/Client/CmdClean.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdClean.hs index 8bdfb345a96..83411e8699b 100644 --- a/cabal-install/src/Distribution/Client/CmdClean.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdClean.hs @@ -2,7 +2,7 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RecordWildCards #-} -module Distribution.Client.CmdClean (cleanCommand, cleanAction) where +module Distribution.Client.API.Command.CmdClean (cleanCommand, cleanAction) where import Distribution.Client.Compat.Prelude import Prelude () diff --git a/cabal-install/src/Distribution/Client/CmdConfigure.hs b/cabal-install/src/Distribution/Client/API/Command/CmdConfigure.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdConfigure.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdConfigure.hs index 7ae08db60d8..789b296f311 100644 --- a/cabal-install/src/Distribution/Client/CmdConfigure.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdConfigure.hs @@ -1,7 +1,7 @@ {-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: configure -module Distribution.Client.CmdConfigure +module Distribution.Client.API.Command.CmdConfigure ( configureCommand , configureAction , configureAction' diff --git a/cabal-install/src/Distribution/Client/CmdErrorMessages.hs b/cabal-install/src/Distribution/Client/API/Command/CmdErrorMessages.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdErrorMessages.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdErrorMessages.hs index 8504b4926a6..1f2e58008cb 100644 --- a/cabal-install/src/Distribution/Client/CmdErrorMessages.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdErrorMessages.hs @@ -1,6 +1,6 @@ -- | Utilities to help format error messages for the various CLI commands. -module Distribution.Client.CmdErrorMessages - ( module Distribution.Client.CmdErrorMessages +module Distribution.Client.API.Command.CmdErrorMessages + ( module Distribution.Client.API.Command.CmdErrorMessages , module Distribution.Client.TargetSelector ) where diff --git a/cabal-install/src/Distribution/Client/CmdExec.hs b/cabal-install/src/Distribution/Client/API/Command/CmdExec.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdExec.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdExec.hs index f750e439341..6cbc113f286 100644 --- a/cabal-install/src/Distribution/Client/CmdExec.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdExec.hs @@ -9,7 +9,7 @@ -- -- Implementation of the 'v2-exec' command for running an arbitrary executable -- in an environment suited to the part of the store built for a project. -module Distribution.Client.CmdExec +module Distribution.Client.API.Command.CmdExec ( execAction , execCommand ) where diff --git a/cabal-install/src/Distribution/Client/CmdFreeze.hs b/cabal-install/src/Distribution/Client/API/Command/CmdFreeze.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdFreeze.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdFreeze.hs index ebe11b56ea4..a9e058001b5 100644 --- a/cabal-install/src/Distribution/Client/CmdFreeze.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdFreeze.hs @@ -1,7 +1,7 @@ {-# LANGUAGE PatternSynonyms #-} -- | cabal-install CLI command: freeze -module Distribution.Client.CmdFreeze +module Distribution.Client.API.Command.CmdFreeze ( freezeCommand , freezeAction ) where diff --git a/cabal-install/src/Distribution/Client/CmdGenBounds.hs b/cabal-install/src/Distribution/Client/API/Command/CmdGenBounds.hs similarity index 98% rename from cabal-install/src/Distribution/Client/CmdGenBounds.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdGenBounds.hs index 1aa2b286910..ba2009bb9a3 100644 --- a/cabal-install/src/Distribution/Client/CmdGenBounds.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdGenBounds.hs @@ -1,4 +1,4 @@ -module Distribution.Client.CmdGenBounds +module Distribution.Client.API.Command.CmdGenBounds ( genBounds , genBoundsCommand , genBoundsAction @@ -29,7 +29,7 @@ import Distribution.Client.Setup (GlobalFlags (..)) -- Project orchestration imports -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages import Distribution.Client.GenBounds import qualified Distribution.Client.InstallPlan as InstallPlan import Distribution.Client.NixStyleOptions diff --git a/cabal-install/src/Distribution/Client/CmdHaddock.hs b/cabal-install/src/Distribution/Client/API/Command/CmdHaddock.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdHaddock.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdHaddock.hs index f9be5763b3b..221f772b815 100644 --- a/cabal-install/src/Distribution/Client/CmdHaddock.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdHaddock.hs @@ -2,7 +2,7 @@ {-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: haddock -module Distribution.Client.CmdHaddock +module Distribution.Client.API.Command.CmdHaddock ( -- * The @haddock@ CLI and action haddockCommand , haddockAction @@ -17,7 +17,7 @@ import Distribution.Client.Compat.Prelude import System.Directory (makeAbsolute) import Prelude () -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages import Distribution.Client.NixStyleOptions ( NixStyleFlags (..) , cfgVerbosity diff --git a/cabal-install/src/Distribution/Client/CmdHaddockProject.hs b/cabal-install/src/Distribution/Client/API/Command/CmdHaddockProject.hs similarity index 98% rename from cabal-install/src/Distribution/Client/CmdHaddockProject.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdHaddockProject.hs index 2b0caff2262..8ea5864ea18 100644 --- a/cabal-install/src/Distribution/Client/CmdHaddockProject.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdHaddockProject.hs @@ -1,7 +1,7 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE PatternSynonyms #-} -module Distribution.Client.CmdHaddockProject +module Distribution.Client.API.Command.CmdHaddockProject ( haddockProjectCommand , haddockProjectAction ) where @@ -10,8 +10,8 @@ import Control.Monad (mapM) import Distribution.Client.Compat.Prelude hiding (get) import Prelude () -import qualified Distribution.Client.CmdBuild as CmdBuild -import qualified Distribution.Client.CmdHaddock as CmdHaddock +import qualified Distribution.Client.API.Command.CmdBuild as CmdBuild +import qualified Distribution.Client.API.Command.CmdHaddock as CmdHaddock import Distribution.Client.DistDirLayout ( CabalDirLayout (..) diff --git a/cabal-install/src/Distribution/Client/CmdInstall.hs b/cabal-install/src/Distribution/Client/API/Command/CmdInstall.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdInstall.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdInstall.hs index 1215af9fc7b..a27c860ab2b 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdInstall.hs @@ -3,7 +3,7 @@ {-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: install -module Distribution.Client.CmdInstall +module Distribution.Client.API.Command.CmdInstall ( -- * The @install@ CLI and action installCommand , installAction @@ -20,16 +20,16 @@ module Distribution.Client.CmdInstall import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.CmdErrorMessages -import Distribution.Client.CmdSdist +import Distribution.Client.API.Command.CmdErrorMessages +import Distribution.Client.API.Command.CmdSdist import Distribution.Client.ProjectOrchestration import Distribution.Client.TargetProblem ( TargetProblem (..) , TargetProblem' ) +import Distribution.Client.API.Command.CmdInstall.ClientInstallTargetSelector import Distribution.Client.CmdInstall.ClientInstallFlags -import Distribution.Client.CmdInstall.ClientInstallTargetSelector import Distribution.Client.Config ( SavedConfig (..) diff --git a/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs b/cabal-install/src/Distribution/Client/API/Command/CmdInstall/ClientInstallTargetSelector.hs similarity index 96% rename from cabal-install/src/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdInstall/ClientInstallTargetSelector.hs index 7879602a913..d52829dc26b 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall/ClientInstallTargetSelector.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdInstall/ClientInstallTargetSelector.hs @@ -1,4 +1,4 @@ -module Distribution.Client.CmdInstall.ClientInstallTargetSelector +module Distribution.Client.API.Command.CmdInstall.ClientInstallTargetSelector ( WithoutProjectTargetSelector (..) , parseWithoutProjectTargetSelector , woPackageNames diff --git a/cabal-install/src/Distribution/Client/CmdLegacy.hs b/cabal-install/src/Distribution/Client/API/Command/CmdLegacy.hs similarity index 98% rename from cabal-install/src/Distribution/Client/CmdLegacy.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdLegacy.hs index d329ca3b769..bc03d0b0a8b 100644 --- a/cabal-install/src/Distribution/Client/CmdLegacy.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdLegacy.hs @@ -2,7 +2,7 @@ {-# LANGUAGE RecordWildCards #-} {-# OPTIONS_GHC -Wno-redundant-constraints #-} -module Distribution.Client.CmdLegacy (legacyCmd, legacyWrapperCmd, newCmd) where +module Distribution.Client.API.Command.CmdLegacy (legacyCmd, legacyWrapperCmd, newCmd) where import Distribution.Client.Compat.Prelude import Prelude () diff --git a/cabal-install/src/Distribution/Client/CmdListBin.hs b/cabal-install/src/Distribution/Client/API/Command/CmdListBin.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdListBin.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdListBin.hs index 5e13515c960..59bc05d2c77 100644 --- a/cabal-install/src/Distribution/Client/CmdListBin.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdListBin.hs @@ -1,6 +1,6 @@ {-# LANGUAGE OverloadedStrings #-} -module Distribution.Client.CmdListBin +module Distribution.Client.API.Command.CmdListBin ( listbinCommand , listbinAction @@ -16,7 +16,7 @@ module Distribution.Client.CmdListBin import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages ( plural , renderListCommaAnd , renderTargetProblem diff --git a/cabal-install/src/Distribution/Client/CmdOutdated.hs b/cabal-install/src/Distribution/Client/API/Command/CmdOutdated.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdOutdated.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdOutdated.hs index e0d65c78fdb..155d0bb8e71 100644 --- a/cabal-install/src/Distribution/Client/CmdOutdated.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdOutdated.hs @@ -3,13 +3,13 @@ {-# LANGUAGE RecordWildCards #-} -- | --- Module : Distribution.Client.CmdOutdated +-- Module : Distribution.Client.API.Command.CmdOutdated -- Maintainer : cabal-devel@haskell.org -- Portability : portable -- -- Implementation of the 'outdated' command. Checks for outdated -- dependencies in the package description file or freeze file. -module Distribution.Client.CmdOutdated +module Distribution.Client.API.Command.CmdOutdated ( outdatedCommand , outdatedAction , ListOutdatedSettings (..) @@ -75,7 +75,7 @@ import Distribution.Types.PackageVersionConstraint import Distribution.Verbosity import qualified Data.Map.Strict as Map -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages import Distribution.Client.ProjectPlanning.Types import Distribution.Client.TargetProblem import Distribution.Client.Types.PackageSpecifier diff --git a/cabal-install/src/Distribution/Client/CmdPath.hs b/cabal-install/src/Distribution/Client/API/Command/CmdPath.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdPath.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdPath.hs index 6307cc30c64..026aaa0687f 100644 --- a/cabal-install/src/Distribution/Client/CmdPath.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdPath.hs @@ -2,13 +2,13 @@ {-# LANGUAGE PatternSynonyms #-} -- | --- Module : Distribution.Client.CmdPath +-- Module : Distribution.Client.API.Command.CmdPath -- Maintainer : cabal-devel@haskell.org -- Portability : portable -- -- Implementation of the 'path' command. Query for project configuration -- information. -module Distribution.Client.CmdPath +module Distribution.Client.API.Command.CmdPath ( pathCommand , pathAction ) where diff --git a/cabal-install/src/Distribution/Client/CmdRepl.hs b/cabal-install/src/Distribution/Client/API/Command/CmdRepl.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdRepl.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdRepl.hs index 1cc23b3321b..1a1ab246ce4 100644 --- a/cabal-install/src/Distribution/Client/CmdRepl.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdRepl.hs @@ -3,7 +3,7 @@ {-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: repl -module Distribution.Client.CmdRepl +module Distribution.Client.API.Command.CmdRepl ( -- * The @repl@ CLI and action replCommand , replAction @@ -22,7 +22,7 @@ import Prelude () import Distribution.Compat.Lens import qualified Distribution.Types.Lens as L -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages ( Plural (..) , componentKind , renderComponentKind diff --git a/cabal-install/src/Distribution/Client/CmdRun.hs b/cabal-install/src/Distribution/Client/API/Command/CmdRun.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdRun.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdRun.hs index 237858f7b19..1afba57d946 100644 --- a/cabal-install/src/Distribution/Client/CmdRun.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdRun.hs @@ -1,7 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} -- | cabal-install CLI command: run -module Distribution.Client.CmdRun +module Distribution.Client.API.Command.CmdRun ( -- * The @run@ CLI and action runCommand , runAction @@ -19,7 +19,7 @@ import Distribution.Client.Compat.Prelude hiding (toList) import Prelude () import qualified Data.Set as Set -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages ( plural , renderListCommaAnd , renderListPretty diff --git a/cabal-install/src/Distribution/Client/CmdSdist.hs b/cabal-install/src/Distribution/Client/API/Command/CmdSdist.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdSdist.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdSdist.hs index 6ac25d527c1..693b6486c17 100644 --- a/cabal-install/src/Distribution/Client/CmdSdist.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdSdist.hs @@ -4,7 +4,7 @@ {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE RecordWildCards #-} -module Distribution.Client.CmdSdist +module Distribution.Client.API.Command.CmdSdist ( sdistCommand , sdistAction , packageToSdist @@ -14,7 +14,7 @@ module Distribution.Client.CmdSdist import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages ( Plural (..) , renderComponentKind ) diff --git a/cabal-install/src/Distribution/Client/CmdTarget.hs b/cabal-install/src/Distribution/Client/API/Command/CmdTarget.hs similarity index 97% rename from cabal-install/src/Distribution/Client/CmdTarget.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdTarget.hs index 84e39e9925f..82fb447c5b8 100644 --- a/cabal-install/src/Distribution/Client/CmdTarget.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdTarget.hs @@ -1,7 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} -module Distribution.Client.CmdTarget +module Distribution.Client.API.Command.CmdTarget ( targetCommand , targetAction ) where @@ -10,8 +10,8 @@ import Distribution.Client.Compat.Prelude import Prelude () import qualified Data.Map as Map -import Distribution.Client.CmdBuild (selectComponentTarget, selectPackageTargets) -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdBuild (selectComponentTarget, selectPackageTargets) +import Distribution.Client.API.Command.CmdErrorMessages import Distribution.Client.InstallPlan import qualified Distribution.Client.InstallPlan as InstallPlan import Distribution.Client.NixStyleOptions diff --git a/cabal-install/src/Distribution/Client/CmdTest.hs b/cabal-install/src/Distribution/Client/API/Command/CmdTest.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdTest.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdTest.hs index 6ad41678849..26386b8eadb 100644 --- a/cabal-install/src/Distribution/Client/CmdTest.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdTest.hs @@ -2,7 +2,7 @@ {-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: test -module Distribution.Client.CmdTest +module Distribution.Client.API.Command.CmdTest ( -- * The @test@ CLI and action testCommand , testAction @@ -18,7 +18,7 @@ module Distribution.Client.CmdTest import Distribution.Client.Compat.Prelude import Prelude () -import Distribution.Client.CmdErrorMessages +import Distribution.Client.API.Command.CmdErrorMessages ( plural , renderTargetProblem , renderTargetProblemNoTargets diff --git a/cabal-install/src/Distribution/Client/CmdUpdate.hs b/cabal-install/src/Distribution/Client/API/Command/CmdUpdate.hs similarity index 99% rename from cabal-install/src/Distribution/Client/CmdUpdate.hs rename to cabal-install/src/Distribution/Client/API/Command/CmdUpdate.hs index 99d35a4e415..1b4ec2ce9fb 100644 --- a/cabal-install/src/Distribution/Client/CmdUpdate.hs +++ b/cabal-install/src/Distribution/Client/API/Command/CmdUpdate.hs @@ -1,7 +1,7 @@ {-# LANGUAGE RecordWildCards #-} -- | cabal-install CLI command: update -module Distribution.Client.CmdUpdate +module Distribution.Client.API.Command.CmdUpdate ( updateCommand , updateAction ) where diff --git a/cabal-install/src/Distribution/Client/API/Config.hs b/cabal-install/src/Distribution/Client/API/Config.hs new file mode 100644 index 00000000000..4384a5dfac5 --- /dev/null +++ b/cabal-install/src/Distribution/Client/API/Config.hs @@ -0,0 +1,35 @@ +-- | Tier-0 stable API: the user-level cabal configuration. +-- +-- Thin wrapper over the internal @Distribution.Client.Config@ and +-- @Distribution.Client.GlobalFlags@. Third-party tools must import only +-- this module, not the underlying ones. +module Distribution.Client.API.Config + ( GlobalConfig -- Note: hackage-revdeps, cabal-matrix + , globalCacheDir -- Note: hackage-revdeps + , globalSavedConfig -- Note: cabal-install + , loadGlobalConfig -- Note: hackage-revdeps, cabal-matrix + ) where + +import Distribution.Client.Config (SavedConfig, loadConfig, savedGlobalFlags) +import qualified Distribution.Client.GlobalFlags as GF +import Distribution.Simple.Flag (flagToMaybe, pattern Flag) +import Distribution.Verbosity (Verbosity) + +-- | The contents of @~/.cabal/config@ plus the process-global settings. +data GlobalConfig = GlobalConfig + { globalCacheDir :: Maybe FilePath + -- ^ The directory where downloaded packages and the Hackage index are cached. + , globalSavedConfig :: SavedConfig + -- ^ The full parsed configuration. Not intended for third-party use: + -- it is the internal representation and may change. + } + +-- | Load the user config from @~/.cabal/config@ (or the given override). +loadGlobalConfig :: Verbosity -> Maybe FilePath -> IO GlobalConfig +loadGlobalConfig verbosity configFile = do + saved <- loadConfig verbosity (maybe mempty Flag configFile) + pure + GlobalConfig + { globalCacheDir = flagToMaybe (GF.globalCacheDir (savedGlobalFlags saved)) + , globalSavedConfig = saved + } diff --git a/cabal-install/src/Distribution/Client/API/PackageIndex.hs b/cabal-install/src/Distribution/Client/API/PackageIndex.hs new file mode 100644 index 00000000000..8d42e84ee16 --- /dev/null +++ b/cabal-install/src/Distribution/Client/API/PackageIndex.hs @@ -0,0 +1,39 @@ +-- | Tier-0 stable API: reading the local Hackage package index. +-- +-- Thin wrapper over the internal @Distribution.Client.IndexUtils@ and +-- @Distribution.Client.Types.SourcePackageDb@. +module Distribution.Client.API.PackageIndex + ( PackageIndex -- Note: cabal-matrix + , withPackageIndex -- Note: cabal-matrix + , lookupPackageName -- Note: cabal-matrix + ) where + +import Distribution.Client.API.Config (GlobalConfig (..)) +import Distribution.Client.Config (savedGlobalFlags) +import Distribution.Client.GlobalFlags (withRepoContext) +import Distribution.Client.IndexUtils (getSourcePackages) +import Distribution.Client.Types.SourcePackageDb (SourcePackageDb (..)) +import qualified Distribution.Client.Types.SourcePackageDb as SourcePackageDb +import Distribution.Package (Package (..), PackageId) +import Distribution.Types.PackageName (PackageName) +import Distribution.Verbosity (Verbosity) + +-- | All packages known from the local Hackage index +-- (the data behind @~/.cabal/packages/hackage.haskell.org@). +data PackageIndex = PackageIndex + { packageIndexSourceDb :: SourcePackageDb + -- ^ The internal package database. Not part of the public API. + } + +-- | Open the package index configured by the user's global config +-- and run the continuation with it. +withPackageIndex :: Verbosity -> GlobalConfig -> (PackageIndex -> IO a) -> IO a +withPackageIndex verbosity cfg action = + withRepoContext verbosity (savedGlobalFlags (globalSavedConfig cfg)) \repoContext -> do + packageDb <- getSourcePackages verbosity repoContext + action PackageIndex{packageIndexSourceDb = packageDb} + +-- | All versions of the given package in the index, preferred versions first. +lookupPackageName :: PackageIndex -> PackageName -> [PackageId] +lookupPackageName PackageIndex{packageIndexSourceDb = db} = + map packageId . SourcePackageDb.lookupPackageName db diff --git a/cabal-install/src/Distribution/Client/API/Project.hs b/cabal-install/src/Distribution/Client/API/Project.hs new file mode 100644 index 00000000000..d5f689f857b --- /dev/null +++ b/cabal-install/src/Distribution/Client/API/Project.hs @@ -0,0 +1,61 @@ +-- | Tier-0 stable API: loading a cabal project. +-- +-- Thin wrapper over the internal @Distribution.Client.ProjectConfig@, +-- @Distribution.Client.DistDirLayout@ and @Distribution.Client.RebuildMonad@. +module Distribution.Client.API.Project + ( projectLocalCabalFiles -- Note: cabal-add + ) where + +import Control.Exception (throwIO) +import Control.Monad.IO.Class (liftIO) +import Distribution.Client.DistDirLayout (DistDirLayout (..), defaultDistDirLayout) +import Distribution.Client.HttpUtils (configureTransport) +import Distribution.Client.ProjectConfig + ( ProjectFileParser (..) + , ProjectPackageLocation (..) + , findProjectPackages + , findProjectRoot + , readProjectConfig + ) +import Distribution.Client.RebuildMonad (runRebuild) +import Distribution.Types.CondTree (ignoreConditions) +import Distribution.Verbosity (Verbosity) +import System.FilePath (splitFileName, ()) + +-- | Enumerate the local @.cabal@ files that make up the project given by a +-- @cabal.project@ file (or, more generally, any project file path). +-- +-- Only project-local package locations are returned; tarballs, remote +-- repositories and other exotic locations are filtered out. The result paths +-- are absolute. +-- +-- This is the stable replacement for third-party tools that used +-- @findProjectRoot@ + @readProjectConfig@ + @findProjectPackages@ directly +-- (see cabal-add). +projectLocalCabalFiles :: Verbosity -> FilePath -> IO [FilePath] +projectLocalCabalFiles verbosity projectFile = do + let (projectDir, projFile) = splitFileName projectFile + badOrRoot <- findProjectRoot verbosity (Just projectDir) (Just projFile) + case badOrRoot of + Left problem -> throwIO problem + Right projectRoot -> do + let dirLayout = defaultDistDirLayout projectRoot Nothing Nothing + rootDir = distProjectRootDirectory dirLayout + projectFiles verbosity dirLayout rootDir + +projectFiles :: Verbosity -> DistDirLayout -> FilePath -> IO [FilePath] +projectFiles verbosity dirLayout rootDir = runRebuild rootDir do + httpTransport <- liftIO $ configureTransport verbosity [] Nothing + skeleton <- readProjectConfig verbosity ParsecParser httpTransport mempty mempty dirLayout + let (_, projectConfig) = ignoreConditions skeleton + locations <- findProjectPackages dirLayout projectConfig + pure [rootDir path | Just path <- map toLocalCabalFile locations] + +toLocalCabalFile :: ProjectPackageLocation -> Maybe FilePath +toLocalCabalFile = \case + ProjectPackageLocalCabalFile path -> Just path + ProjectPackageLocalDirectory _dir path -> Just path + ProjectPackageLocalTarball _path -> Nothing + ProjectPackageRemoteTarball _uri -> Nothing + ProjectPackageRemoteRepo _sourceRepoList -> Nothing + ProjectPackageNamed _packageVersionConstraint -> Nothing diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs index a3d9e20820a..5551768c586 100644 --- a/cabal-install/tests/IntegrationTests2.hs +++ b/cabal-install/tests/IntegrationTests2.hs @@ -42,15 +42,15 @@ import Distribution.Solver.Types.PackageConstraint ) import Distribution.Solver.Types.SourcePackage as SP -import qualified Distribution.Client.CmdBench as CmdBench -import qualified Distribution.Client.CmdBuild as CmdBuild -import qualified Distribution.Client.CmdHaddock as CmdHaddock -import qualified Distribution.Client.CmdListBin as CmdListBin -import qualified Distribution.Client.CmdRepl as CmdRepl -import qualified Distribution.Client.CmdRun as CmdRun -import qualified Distribution.Client.CmdTest as CmdTest - -import qualified Distribution.Client.CmdHaddockProject as CmdHaddockProject +import qualified Distribution.Client.API.Command.CmdBench as CmdBench +import qualified Distribution.Client.API.Command.CmdBuild as CmdBuild +import qualified Distribution.Client.API.Command.CmdHaddock as CmdHaddock +import qualified Distribution.Client.API.Command.CmdListBin as CmdListBin +import qualified Distribution.Client.API.Command.CmdRepl as CmdRepl +import qualified Distribution.Client.API.Command.CmdRun as CmdRun +import qualified Distribution.Client.API.Command.CmdTest as CmdTest + +import qualified Distribution.Client.API.Command.CmdHaddockProject as CmdHaddockProject import Distribution.Client.Config (createDefaultConfigFile) import Distribution.Client.GlobalFlags (defaultGlobalFlags) import Distribution.Client.Setup (globalStoreDir) diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs b/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs index 21a6bcabb46..34fb2402934 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs @@ -2,7 +2,7 @@ module UnitTests.Distribution.Client.Configure (tests) where -import Distribution.Client.CmdConfigure +import Distribution.Client.API.Command.CmdConfigure import qualified Data.Map as Map import Distribution.Client.NixStyleOptions diff --git a/cabal-testsuite/Setup.hs b/cabal-testsuite/Setup.hs index fa07806b9c5..04e68220494 100644 --- a/cabal-testsuite/Setup.hs +++ b/cabal-testsuite/Setup.hs @@ -11,9 +11,10 @@ import Distribution.Simple.Utils import Distribution.Types.LocalBuildInfo import Distribution.Types.ModuleRenaming import Distribution.Types.UnqualComponentName -import Distribution.Utils.Path (getSymbolicPath) -import Distribution.Verbosity +import Distribution.Utils.Path (getSymbolicPath, makeSymbolicPath) +import Distribution.Verbosity (Verbosity, defaultVerbosityHandles, mkVerbosity, normal) +import Data.List (intercalate, isPrefixOf) import System.Directory import System.FilePath @@ -21,7 +22,9 @@ main :: IO () main = defaultMainWithHooks simpleUserHooks { confHook = \args flags -> do lbi <- confHook simpleUserHooks args flags - generateScriptEnvModule lbi (fromFlagOrDefault minBound (configVerbosity flags)) + generateScriptEnvModule lbi + $ mkVerbosity defaultVerbosityHandles + $ fromFlagOrDefault normal (configVerbosity flags) pure lbi } @@ -46,7 +49,7 @@ generateScriptEnvModule lbi verbosity = do , "import Distribution.Utils.Path" , "" , "lbiPackageDbStack :: PackageDBStackCWD" - , "lbiPackageDbStack = " ++ show lbiPackageDbStack + , "lbiPackageDbStack = " ++ renderPackageDBStack lbiPackageDbStack , "" , "lbiPlatform :: Platform" , "lbiPlatform = " ++ show (hostPlatform lbi) @@ -56,7 +59,7 @@ generateScriptEnvModule lbi verbosity = do -- to make sure that it is always defined, -- even if the test suite is being built with an older Cabal #if MIN_VERSION_Cabal(3,15,0) - , "lbiCompiler = " ++ show (compiler lbi) + , "lbiCompiler = " ++ fixupCompilerShow (show (compiler lbi)) #else , "lbiCompiler = " ++ init (show (compiler lbi)) ++ ", compilerWiredInUnitIds = Nothing}" #endif @@ -76,15 +79,46 @@ generateScriptEnvModule lbi verbosity = do where moduledir = libAutogenDir "Test" "Cabal" -- fixme: use component-specific folder - libAutogenDir = autogenPackageModulesDir lbi + libAutogenDir = getSymbolicPath (autogenPackageModulesDir lbi) -- | Convert package database into absolute path, so that -- if we change working directories in a subprocess we get the correct database. canonicalizePackageDB :: PackageDB -> IO PackageDB canonicalizePackageDB (SpecificPackageDB path) - = SpecificPackageDB `fmap` canonicalizePath path + = SpecificPackageDB . makeSymbolicPath <$> canonicalizePath (getSymbolicPath path) canonicalizePackageDB x = return x +-- | Render a package database stack as Haskell source code. +-- +-- 'PackageDBStackCWD' holds plain 'FilePath's (unlike the 'PackageDB' stack in +-- 'LocalBuildInfo', whose paths are 'SymbolicPath's with an abstract +-- constructor, so we cannot use 'show' on it). +renderPackageDBStack :: PackageDBStack -> String +renderPackageDBStack pdbs = "[" ++ intercalate "," (map renderPackageDB pdbs) ++ "]" + +renderPackageDB :: PackageDB -> String +renderPackageDB GlobalPackageDB = "GlobalPackageDB" +renderPackageDB UserPackageDB = "UserPackageDB" +renderPackageDB (SpecificPackageDB path) = "SpecificPackageDB " ++ show (getSymbolicPath path) + +-- | The 'Show' instance of 'Compiler' renders wired-in unit ids as +-- @PackageName \"ghc@ and @UnitId \"ghc-9.14.1\"@, but neither constructor is +-- exported (GHC >= 9.14 populates 'compilerWiredInUnitIds', older compilers +-- yield 'Nothing'), so the raw output is not valid source code. Use the +-- exported 'mkPackageName' / 'mkUnitId' instead. +fixupCompilerShow :: String -> String +fixupCompilerShow = go + where + fixes = + [ ("PackageName \"", "mkPackageName \"") + , ("UnitId \"", "mkUnitId \"") + ] + go s = case [ (repl, drop (length needle) s) | (needle, repl) <- fixes, needle `isPrefixOf` s ] of + ((repl, rest) : _) -> repl ++ go rest + [] -> case s of + (c : cs) -> c : go cs + [] -> [] + -- | Compute the set of @-package-id@ flags which would be passed when -- building the public library. Assumes that the public library is -- non-Backpack. diff --git a/cabal-testsuite/cabal-testsuite.cabal b/cabal-testsuite/cabal-testsuite.cabal index e531b41859f..78ab4000630 100644 --- a/cabal-testsuite/cabal-testsuite.cabal +++ b/cabal-testsuite/cabal-testsuite.cabal @@ -153,6 +153,6 @@ custom-setup -- we only depend on even stable releases of lib:Cabal -- and must match the release used in validate.yml (see -- https://github.com/haskell/cabal/pull/10251) - setup-depends: Cabal ^>= 3.12.1.0, - Cabal-syntax ^>= 3.12.1.0, + setup-depends: Cabal ^>= 3.18.1.0, + Cabal-syntax ^>= 3.18.1.0, base, filepath, directory diff --git a/cabal.bootstrap.project b/cabal.bootstrap.project index e159b984057..160dcf637a0 100644 --- a/cabal.bootstrap.project +++ b/cabal.bootstrap.project @@ -5,6 +5,7 @@ packages: , Cabal-syntax , Cabal-hooks , cabal-install + , cabal-install-internal , cabal-install-solver , hooks-exe diff --git a/cabal.project b/cabal.project index 76b4dccb6c9..1329e27e47a 100644 --- a/cabal.project +++ b/cabal.project @@ -10,6 +10,9 @@ tests: True package cabal-install flags: +git-rev +package cabal-install-internal + flags: +git-rev + package Cabal flags: +git-rev diff --git a/doc/Makefile b/doc/Makefile index b7b7cff5717..d9c81cd116e 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -127,32 +127,41 @@ SETUP_COMMANDS := \ # NOTE: To silence the following warning, redirect stderr to /dev/null: # Warning: this is a debug build of cabal-install with assertions enabled. -cmd-v1-help/%.txt: + +# Build the cabal binary before capturing any help output: with a cold +# dependency cache, `cabal run` would otherwise interleave the configure +# logs of freshly built dependencies (process, resolv, network, ...) into +# the captured stdout and pollute the generated .txt files. +.PHONY: cmd-help-build +cmd-help-build: + @cabal build -v0 cabal-install:exe:cabal > /dev/null 2>&1 + +cmd-v1-help/%.txt: | cmd-help-build @mkdir -p $(@D) @cabal run -v0 cabal-install:exe:cabal -- v1-$* --help > $@ 2>/dev/null -cmd-v2-help/%.txt: +cmd-v2-help/%.txt: | cmd-help-build @mkdir -p $(@D) @cabal run -v0 cabal-install:exe:cabal -- $* --help > $@ 2>/dev/null # The "You can edit the cabal configuration file..." footer embeds an # absolute, machine-specific config path, so strip it for reproducibility. -cmd-v2-help/help.txt: +cmd-v2-help/help.txt: | cmd-help-build @mkdir -p $(@D) @cabal run -v0 cabal-install:exe:cabal -- --help 2>/dev/null \ | sed '/^You can edit the cabal configuration file to set defaults:$$/,$$d' > $@ -cmd-v2-hidden-help/%.txt: +cmd-v2-hidden-help/%.txt: | cmd-help-build @mkdir -p $(@D) @cabal run -v0 cabal-install:exe:cabal -- $* --help > $@ 2>/dev/null # act-as-setup runs Distribution.Simple.defaultMainArgs directly; the "--" # forwards args after it verbatim instead of being parsed by cabal itself. -setup-help/%.txt: +setup-help/%.txt: | cmd-help-build @mkdir -p $(@D) @cabal run -v0 cabal-install:exe:cabal -- act-as-setup -- $* --help > $@ 2>/dev/null -setup-help/help.txt: +setup-help/help.txt: | cmd-help-build @mkdir -p $(@D) @cabal run -v0 cabal-install:exe:cabal -- act-as-setup -- --help > $@ 2>/dev/null diff --git a/project-cabal/pkgs/install.config b/project-cabal/pkgs/install.config index 328b95385d4..26c3758e49a 100644 --- a/project-cabal/pkgs/install.config +++ b/project-cabal/pkgs/install.config @@ -1,4 +1,5 @@ packages: cabal-install + , cabal-install-internal , cabal-install-solver , hooks-exe