Make Cabal agnostic about working directory
commit7b9058328e162a4cb707b5d5b25cd1d2df66680e
authorsheaf <sam.derbyshire@gmail.com>
Fri, 29 Mar 2024 14:19:27 +0000 (29 15:19 +0100)
committersheaf <sam.derbyshire@gmail.com>
Wed, 3 Apr 2024 13:26:50 +0000 (3 15:26 +0200)
tree640bc36eb0d78ae9b0081d98558a59e87a18c2f5
parente125959e66713c2649f8dc1a9afdbde2fc4983a5
Make Cabal agnostic about working directory

This commit makes the library functions in Cabal agnostic of the working
directory. In practice, this means that we distinguish `FilePath`s
from un-interpreted `SymbolicPath`s. The latter may be paths that are
relative to the working directory, and need to be interpreted with
respect to a passed-in argument specifying the working directory,
instead of using the working directory of the current process.
See Note [Symbolic paths] in Distribution.Utils.Path.

In particular, paths in the package description now use the SymbolicPath
abstraction, which allows specifying whether they are allowed to be
absolute, and, if they are relative, what they are relative to.
For example, source files are relative to a source search directory,
data files are relative to the data directory, and doc files are
relative to the package root.

Fixes #9702
236 files changed:
Cabal-described/src/Distribution/Described.hs
Cabal-syntax/Cabal-syntax.cabal
Cabal-syntax/src/Distribution/FieldGrammar/Newtypes.hs
Cabal-syntax/src/Distribution/PackageDescription/Configuration.hs
Cabal-syntax/src/Distribution/PackageDescription/FieldGrammar.hs
Cabal-syntax/src/Distribution/Types/BenchmarkInterface.hs
Cabal-syntax/src/Distribution/Types/BuildInfo.hs
Cabal-syntax/src/Distribution/Types/BuildInfo/Lens.hs
Cabal-syntax/src/Distribution/Types/Executable.hs
Cabal-syntax/src/Distribution/Types/Executable/Lens.hs
Cabal-syntax/src/Distribution/Types/ForeignLib.hs
Cabal-syntax/src/Distribution/Types/ForeignLib/Lens.hs
Cabal-syntax/src/Distribution/Types/PackageDescription.hs
Cabal-syntax/src/Distribution/Types/PackageDescription/Lens.hs
Cabal-syntax/src/Distribution/Types/TestSuiteInterface.hs
Cabal-syntax/src/Distribution/Utils/Path.hs
Cabal-tests/Cabal-tests.cabal
Cabal-tests/lib/Test/Utils/TempTestDir.hs
Cabal-tests/tests/NoThunks.hs
Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr
Cabal-tests/tests/ParserTests/regressions/anynone.expr
Cabal-tests/tests/ParserTests/regressions/big-version.expr
Cabal-tests/tests/ParserTests/regressions/common-conditional.expr
Cabal-tests/tests/ParserTests/regressions/common.expr
Cabal-tests/tests/ParserTests/regressions/common2.expr
Cabal-tests/tests/ParserTests/regressions/common3.expr
Cabal-tests/tests/ParserTests/regressions/denormalised-paths.cabal
Cabal-tests/tests/ParserTests/regressions/denormalised-paths.check
Cabal-tests/tests/ParserTests/regressions/elif.expr [copied from Cabal-tests/tests/ParserTests/regressions/common.expr with 52% similarity]
Cabal-tests/tests/ParserTests/regressions/elif2.expr
Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr [copied from Cabal-tests/tests/ParserTests/regressions/anynone.expr with 69% similarity]
Cabal-tests/tests/ParserTests/regressions/generics-sop.expr
Cabal-tests/tests/ParserTests/regressions/hasktorch.expr
Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr [copied from Cabal-tests/tests/ParserTests/regressions/anynone.expr with 94% similarity]
Cabal-tests/tests/ParserTests/regressions/indentation.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 90% similarity]
Cabal-tests/tests/ParserTests/regressions/indentation2.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 93% similarity]
Cabal-tests/tests/ParserTests/regressions/indentation3.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 92% similarity]
Cabal-tests/tests/ParserTests/regressions/issue-5055.expr
Cabal-tests/tests/ParserTests/regressions/issue-5846.expr
Cabal-tests/tests/ParserTests/regressions/issue-6083-a.expr
Cabal-tests/tests/ParserTests/regressions/issue-6083-b.expr
Cabal-tests/tests/ParserTests/regressions/issue-6083-c.expr
Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr
Cabal-tests/tests/ParserTests/regressions/issue-774.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 79% similarity]
Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr
Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr [copied from Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr with 64% similarity]
Cabal-tests/tests/ParserTests/regressions/leading-comma.expr [copied from Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr with 67% similarity]
Cabal-tests/tests/ParserTests/regressions/libpq1.expr
Cabal-tests/tests/ParserTests/regressions/libpq2.expr
Cabal-tests/tests/ParserTests/regressions/mixin-1.expr
Cabal-tests/tests/ParserTests/regressions/mixin-2.expr
Cabal-tests/tests/ParserTests/regressions/mixin-3.expr
Cabal-tests/tests/ParserTests/regressions/monad-param.expr
Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr [copied from Cabal-tests/tests/ParserTests/regressions/issue-6083-c.expr with 82% similarity]
Cabal-tests/tests/ParserTests/regressions/noVersion.expr [copied from Cabal-tests/tests/ParserTests/regressions/anynone.expr with 88% similarity]
Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr [copied from Cabal-tests/tests/ParserTests/regressions/common.expr with 50% similarity]
Cabal-tests/tests/ParserTests/regressions/shake.expr
Cabal-tests/tests/ParserTests/regressions/spdx-1.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 91% similarity]
Cabal-tests/tests/ParserTests/regressions/spdx-2.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 88% similarity]
Cabal-tests/tests/ParserTests/regressions/spdx-3.expr [copied from Cabal-tests/tests/ParserTests/regressions/big-version.expr with 88% similarity]
Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr
Cabal-tests/tests/ParserTests/regressions/version-sets.expr
Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr [copied from Cabal-tests/tests/ParserTests/regressions/common3.expr with 69% similarity]
Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
Cabal-tests/tests/custom-setup/CabalDoctestSetup.hs
Cabal-tests/tests/custom-setup/IdrisSetup.hs
Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs
Cabal/Cabal.cabal
Cabal/src/Distribution/Compat/Internal/TempFile.hs
Cabal/src/Distribution/Compat/Time.hs
Cabal/src/Distribution/Make.hs
Cabal/src/Distribution/PackageDescription/Check.hs
Cabal/src/Distribution/PackageDescription/Check/Target.hs
Cabal/src/Distribution/PackageDescription/Check/Warning.hs
Cabal/src/Distribution/Simple.hs
Cabal/src/Distribution/Simple/Bench.hs
Cabal/src/Distribution/Simple/Build.hs
Cabal/src/Distribution/Simple/Build/Inputs.hs
Cabal/src/Distribution/Simple/BuildPaths.hs
Cabal/src/Distribution/Simple/BuildTarget.hs
Cabal/src/Distribution/Simple/Command.hs
Cabal/src/Distribution/Simple/Compiler.hs
Cabal/src/Distribution/Simple/Configure.hs
Cabal/src/Distribution/Simple/ConfigureScript.hs
Cabal/src/Distribution/Simple/Errors.hs
Cabal/src/Distribution/Simple/GHC.hs
Cabal/src/Distribution/Simple/GHC/Build.hs
Cabal/src/Distribution/Simple/GHC/Build/ExtraSources.hs
Cabal/src/Distribution/Simple/GHC/Build/Link.hs
Cabal/src/Distribution/Simple/GHC/Build/Modules.hs
Cabal/src/Distribution/Simple/GHC/Build/Utils.hs
Cabal/src/Distribution/Simple/GHC/Internal.hs
Cabal/src/Distribution/Simple/GHCJS.hs
Cabal/src/Distribution/Simple/Glob.hs
Cabal/src/Distribution/Simple/Haddock.hs
Cabal/src/Distribution/Simple/HaskellSuite.hs
Cabal/src/Distribution/Simple/Hpc.hs
Cabal/src/Distribution/Simple/Install.hs
Cabal/src/Distribution/Simple/InstallDirs.hs
Cabal/src/Distribution/Simple/LocalBuildInfo.hs
Cabal/src/Distribution/Simple/PackageDescription.hs
Cabal/src/Distribution/Simple/PreProcess.hs
Cabal/src/Distribution/Simple/PreProcess/Types.hs
Cabal/src/Distribution/Simple/Program.hs
Cabal/src/Distribution/Simple/Program/Ar.hs
Cabal/src/Distribution/Simple/Program/GHC.hs
Cabal/src/Distribution/Simple/Program/HcPkg.hs
Cabal/src/Distribution/Simple/Program/Hpc.hs
Cabal/src/Distribution/Simple/Program/Ld.hs
Cabal/src/Distribution/Simple/Program/ResponseFile.hs
Cabal/src/Distribution/Simple/Program/Run.hs
Cabal/src/Distribution/Simple/Register.hs
Cabal/src/Distribution/Simple/Setup.hs
Cabal/src/Distribution/Simple/Setup/Benchmark.hs
Cabal/src/Distribution/Simple/Setup/Build.hs
Cabal/src/Distribution/Simple/Setup/Clean.hs
Cabal/src/Distribution/Simple/Setup/Common.hs
Cabal/src/Distribution/Simple/Setup/Config.hs
Cabal/src/Distribution/Simple/Setup/Copy.hs
Cabal/src/Distribution/Simple/Setup/Global.hs
Cabal/src/Distribution/Simple/Setup/Haddock.hs
Cabal/src/Distribution/Simple/Setup/Hscolour.hs
Cabal/src/Distribution/Simple/Setup/Install.hs
Cabal/src/Distribution/Simple/Setup/Register.hs
Cabal/src/Distribution/Simple/Setup/Repl.hs
Cabal/src/Distribution/Simple/Setup/SDist.hs
Cabal/src/Distribution/Simple/Setup/Test.hs
Cabal/src/Distribution/Simple/ShowBuildInfo.hs
Cabal/src/Distribution/Simple/SrcDist.hs
Cabal/src/Distribution/Simple/Test.hs
Cabal/src/Distribution/Simple/Test/ExeV10.hs
Cabal/src/Distribution/Simple/Test/LibV09.hs
Cabal/src/Distribution/Simple/UHC.hs
Cabal/src/Distribution/Simple/Utils.hs
Cabal/src/Distribution/Types/LocalBuildConfig.hs
Cabal/src/Distribution/Types/LocalBuildInfo.hs
cabal-install/cabal-install.cabal
cabal-install/src/Distribution/Client/Check.hs
cabal-install/src/Distribution/Client/CmdBench.hs
cabal-install/src/Distribution/Client/CmdBuild.hs
cabal-install/src/Distribution/Client/CmdClean.hs
cabal-install/src/Distribution/Client/CmdConfigure.hs
cabal-install/src/Distribution/Client/CmdExec.hs
cabal-install/src/Distribution/Client/CmdFreeze.hs
cabal-install/src/Distribution/Client/CmdHaddock.hs
cabal-install/src/Distribution/Client/CmdHaddockProject.hs
cabal-install/src/Distribution/Client/CmdInstall.hs
cabal-install/src/Distribution/Client/CmdLegacy.hs
cabal-install/src/Distribution/Client/CmdListBin.hs
cabal-install/src/Distribution/Client/CmdOutdated.hs
cabal-install/src/Distribution/Client/CmdRepl.hs
cabal-install/src/Distribution/Client/CmdRun.hs
cabal-install/src/Distribution/Client/CmdSdist.hs
cabal-install/src/Distribution/Client/CmdTest.hs
cabal-install/src/Distribution/Client/CmdUpdate.hs
cabal-install/src/Distribution/Client/Config.hs
cabal-install/src/Distribution/Client/Configure.hs
cabal-install/src/Distribution/Client/DistDirLayout.hs
cabal-install/src/Distribution/Client/GenBounds.hs
cabal-install/src/Distribution/Client/IndexUtils.hs
cabal-install/src/Distribution/Client/Init/Format.hs
cabal-install/src/Distribution/Client/Init/Utils.hs
cabal-install/src/Distribution/Client/Install.hs
cabal-install/src/Distribution/Client/InstallSymlink.hs
cabal-install/src/Distribution/Client/Main.hs
cabal-install/src/Distribution/Client/NixStyleOptions.hs
cabal-install/src/Distribution/Client/ProjectBuilding.hs
cabal-install/src/Distribution/Client/ProjectBuilding/UnpackedPackage.hs
cabal-install/src/Distribution/Client/ProjectConfig.hs
cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs
cabal-install/src/Distribution/Client/ProjectOrchestration.hs
cabal-install/src/Distribution/Client/ProjectPlanOutput.hs
cabal-install/src/Distribution/Client/ProjectPlanning.hs
cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs
cabal-install/src/Distribution/Client/RebuildMonad.hs
cabal-install/src/Distribution/Client/Reconfigure.hs
cabal-install/src/Distribution/Client/Run.hs
cabal-install/src/Distribution/Client/Sandbox.hs
cabal-install/src/Distribution/Client/Sandbox/PackageEnvironment.hs
cabal-install/src/Distribution/Client/ScriptUtils.hs
cabal-install/src/Distribution/Client/Setup.hs
cabal-install/src/Distribution/Client/SetupWrapper.hs
cabal-install/src/Distribution/Client/SourceFiles.hs
cabal-install/src/Distribution/Client/SrcDist.hs
cabal-install/src/Distribution/Client/Store.hs
cabal-install/src/Distribution/Client/TargetSelector.hs
cabal-install/src/Distribution/Client/Targets.hs
cabal-install/src/Distribution/Client/Utils.hs
cabal-install/tests/IntegrationTests2.hs
cabal-install/tests/UnitTests/Distribution/Client/Configure.hs
cabal-install/tests/UnitTests/Distribution/Solver/Modular/DSL.hs
cabal-testsuite/PackageTests/AutoconfBadPaths/cabal.test.hs
cabal-testsuite/PackageTests/AutogenModules/SrcDist/setup.test.hs
cabal-testsuite/PackageTests/BenchmarkStanza/setup.test.hs
cabal-testsuite/PackageTests/CCompilerOverride/custom-cc-clang.bat
cabal-testsuite/PackageTests/Check/ConfiguredPackage/Paths/InvalidWin/cabal.out
cabal-testsuite/PackageTests/CustomPreProcess/Setup.hs
cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out
cabal-testsuite/PackageTests/ExternalCommand/cabal.test.hs
cabal-testsuite/PackageTests/ExternalCommandEnv/cabal.test.hs
cabal-testsuite/PackageTests/ExternalCommandHelp/cabal.test.hs
cabal-testsuite/PackageTests/ExtraProgPath/setup.out
cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/setup.cabal.out
cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectory/setup.out
cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/setup.cabal.out
cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryGhcVersion/setup.out
cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/setup.cabal.out
cabal-testsuite/PackageTests/GhcPkgGuess/SameDirectoryVersion/setup.out
cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/setup.cabal.out
cabal-testsuite/PackageTests/GhcPkgGuess/Symlink/setup.out
cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/setup.cabal.out
cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkGhcVersion/setup.out
cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/setup.cabal.out
cabal-testsuite/PackageTests/GhcPkgGuess/SymlinkVersion/setup.out
cabal-testsuite/PackageTests/HaddockArgs/hoogle.out
cabal-testsuite/PackageTests/HaddockArgs/quickjump.out
cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.out
cabal-testsuite/PackageTests/HaddockProject/haddock-project.out
cabal-testsuite/PackageTests/InternalLibraries/Executable/setup-static.test.hs
cabal-testsuite/PackageTests/NewBuild/CmdRun/Terminate/cabal.test.hs
cabal-testsuite/PackageTests/NewHaddock/ImplyDependencies/cabal.out
cabal-testsuite/PackageTests/ShowBuildInfo/Complex/single.out
cabal-testsuite/PackageTests/TestStanza/setup.test.hs
cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/setup-no-markup.test.hs
cabal-testsuite/PackageTests/TestSuiteTests/ExeV10/setup-no-tix.test.hs
cabal-testsuite/Setup.hs
cabal-testsuite/cabal-testsuite.cabal
cabal-testsuite/main/cabal-tests.hs
cabal-testsuite/src/Test/Cabal/Monad.hs
cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs
cabal-testsuite/src/Test/Cabal/Prelude.hs
cabal-testsuite/src/Test/Cabal/Run.hs
cabal-testsuite/src/Test/Cabal/Script.hs
cabal-testsuite/src/Test/Cabal/Server.hs
cabal-testsuite/src/Test/Cabal/Workdir.hs
changelog.d/issue-9702 [new file with mode: 0644]