Correctly provision build tools in all situations
commitee11ac6c7badc452def79116729bd16aea15c0df
authorsheaf <sam.derbyshire@gmail.com>
Wed, 24 Apr 2024 15:23:47 +0000 (24 17:23 +0200)
committerMikolaj <281893+Mikolaj@users.noreply.github.com>
Thu, 2 May 2024 07:35:42 +0000 (2 07:35 +0000)
treedd9c9cbe903aedc605d089c66bc6ba8bf1ea1b28
parenteef6bcc6ef0c5b42b2ebf874914eb89546d2dc5c
Correctly provision build tools in all situations

This patch ensures that we correctly provision executables declared
in the build-tool-depends fields in all circumstances:

  - whether the build tool is external (from another package) or
    internal (declared in the current package)
  - whether the build tool is used at compile time (e.g. in a pre-build
    rule or in a Template Haskell splice) or at run time (e.g. when
    running a test-suite, benchmark or executable).

Note that correctly provisioning a build tool requires two pieces of
information:

  - making it available in PATH,
  - ensuring it has the correct environment variables overrides;
    in particular, the build tool needs to be able to find its own
    data directory.

The test case BuildToolPaths checks all of these situations are handled
correctly.
37 files changed:
Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
Cabal/src/Distribution/Simple/Bench.hs
Cabal/src/Distribution/Simple/Build.hs
Cabal/src/Distribution/Simple/Configure.hs
Cabal/src/Distribution/Simple/ConfigureScript.hs
Cabal/src/Distribution/Simple/Haddock.hs
Cabal/src/Distribution/Simple/Program/Db.hs
Cabal/src/Distribution/Simple/Program/Find.hs
Cabal/src/Distribution/Simple/Program/Types.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/Utils.hs
cabal-install/src/Distribution/Client/CmdExec.hs
cabal-install/src/Distribution/Client/CmdInstall.hs
cabal-install/src/Distribution/Client/CmdRun.hs
cabal-install/src/Distribution/Client/HttpUtils.hs
cabal-install/src/Distribution/Client/ProjectPlanning.hs
cabal-install/src/Distribution/Client/Run.hs
cabal-install/src/Distribution/Client/SetupWrapper.hs
cabal-install/src/Distribution/Client/VCS.hs
cabal-testsuite/PackageTests/BuildToolPaths/bt/bt-data/PP1.txt [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/bt/bt.cabal [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/bt/exe/Main.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/bt/src/Tool.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/cabal.project [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/cabal.test.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/SetupHooks.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/bench/Main.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/data/PP2.txt [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/exe/Main.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/pbts.cabal [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/src/Call.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/src/MyLib1.hs-pp1 [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/src/MyLib2.hs-pp2 [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/test/Main.hs [new file with mode: 0644]
cabal-testsuite/PackageTests/BuildToolPaths/pbts/tool/Main.hs [new file with mode: 0644]