Skip to content
Snippets Groups Projects
Unverified Commit ce72f63b authored by Rodrigo Mesquita's avatar Rodrigo Mesquita :seedling: Committed by GitHub
Browse files

backport: Find build-tool installed programs before programs in path (#9767)


* Find build-tool installed programs before programs in path (BP)

A backport of 443c8906581e4a985185a9a32de2e6c7cc63dde1 (#9762)

---------

Co-authored-by: Brandon S. Allbery's avatarbrandon s allbery kf8nh <allbery.b@gmail.com>
Co-authored-by: default avatarGershom Bazerman <gershom@arista.com>
parent 3f82401d
No related branches found
No related tags found
No related merge requests found
Showing
with 127 additions and 3 deletions
...@@ -76,7 +76,7 @@ import Distribution.Simple.Program ...@@ -76,7 +76,7 @@ import Distribution.Simple.Program
import Distribution.Simple.Setup as Setup import Distribution.Simple.Setup as Setup
import Distribution.Simple.BuildTarget import Distribution.Simple.BuildTarget
import Distribution.Simple.LocalBuildInfo import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.Program.Db (appendProgramSearchPath) import Distribution.Simple.Program.Db (appendProgramSearchPath, modifyProgramSearchPath)
import Distribution.Simple.Utils import Distribution.Simple.Utils
import Distribution.System import Distribution.System
import Distribution.Types.PackageVersionConstraint import Distribution.Types.PackageVersionConstraint
...@@ -850,7 +850,9 @@ configure (pkg_descr0, pbi) cfg = do ...@@ -850,7 +850,9 @@ configure (pkg_descr0, pbi) cfg = do
-- arguments. -- arguments.
mkProgramDb :: ConfigFlags -> ProgramDb -> IO ProgramDb mkProgramDb :: ConfigFlags -> ProgramDb -> IO ProgramDb
mkProgramDb cfg initialProgramDb = do mkProgramDb cfg initialProgramDb = do
programDb <- appendProgramSearchPath (fromFlagOrDefault normal (configVerbosity cfg)) searchpath initialProgramDb programDb <-
modifyProgramSearchPath (getProgramSearchPath initialProgramDb ++)
<$> appendProgramSearchPath (fromFlagOrDefault normal (configVerbosity cfg)) searchpath initialProgramDb
pure pure
. userSpecifyArgss (configProgramArgs cfg) . userSpecifyArgss (configProgramArgs cfg)
. userSpecifyPaths (configProgramPaths cfg) . userSpecifyPaths (configProgramPaths cfg)
......
...@@ -3394,7 +3394,10 @@ setupHsScriptOptions (ReadyPackage elab@ElaboratedConfiguredPackage{..}) ...@@ -3394,7 +3394,10 @@ setupHsScriptOptions (ReadyPackage elab@ElaboratedConfiguredPackage{..})
useDistPref = builddir, useDistPref = builddir,
useLoggingHandle = Nothing, -- this gets set later useLoggingHandle = Nothing, -- this gets set later
useWorkingDir = Just srcdir, useWorkingDir = Just srcdir,
useExtraPathEnv = elabExeDependencyPaths elab, useExtraPathEnv = elabExeDependencyPaths elab ++ elabProgramPathExtra,
-- note that the above adds the extra-prog-path directly following the elaborated
-- dep paths, so that it overrides the normal path, but _not_ the elaborated extensions
-- for build-tools-depends.
useExtraEnvOverrides = dataDirsEnvironmentForPlan distdir plan, useExtraEnvOverrides = dataDirsEnvironmentForPlan distdir plan,
useWin32CleanHack = False, --TODO: [required eventually] useWin32CleanHack = False, --TODO: [required eventually]
forceExternalSetupMethod = isParallelBuild, forceExternalSetupMethod = isParallelBuild,
......
{-# LANGUAGE TemplateHaskell #-}
module OK where
import Data.List
import System.Process
import Language.Haskell.TH
$(do
out <- runIO $ readProcess "mybuilder" [] ""
if "0.2.0.0" `isInfixOf` out then
[d| x = () |]
else
error ("Expecting Version 0.2.0.0, but got: " ++ out)
)
cabal-version: 1.12
name: cabal-bug-build-tool
version: 0
build-type: Simple
library
exposed-modules: OK
default-language: Haskell2010
build-depends: base, template-haskell, process
build-tool-depends: mybuilder:mybuilder >=0.2.0.0
# cabal v2-update
Downloading the latest package list from test-local-repo
# cabal v2-install
Resolving dependencies...
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- mybuilder-0.1.0.0 (exe:mybuilder) (requires build)
Configuring executable 'mybuilder' for mybuilder-0.1.0.0..
Preprocessing executable 'mybuilder' for mybuilder-0.1.0.0..
Building executable 'mybuilder' for mybuilder-0.1.0.0..
Installing executable mybuilder in <PATH>
Warning: The directory <ROOT>/cabal.dist/home/.cabal/store/ghc-<GHCVER>/incoming/new-<RAND><ROOT>/cabal.dist/home/.cabal/store/ghc-<GHCVER>/<PACKAGE>-<HASH>/bin is not in the system search path.
Symlinking 'mybuilder' to '<ROOT>/cabal.dist/install/mybuilder'
# cabal v2-build
Resolving dependencies...
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- mybuilder-0.2.0.0 (exe:mybuilder) (requires build)
- cabal-bug-build-tool-0 (lib) (first run)
Configuring executable 'mybuilder' for mybuilder-0.2.0.0..
Preprocessing executable 'mybuilder' for mybuilder-0.2.0.0..
Building executable 'mybuilder' for mybuilder-0.2.0.0..
Installing executable mybuilder in <PATH>
Warning: The directory <ROOT>/cabal.dist/home/.cabal/store/ghc-<GHCVER>/incoming/new-<RAND><ROOT>/cabal.dist/home/.cabal/store/ghc-<GHCVER>/<PACKAGE>-<HASH>/bin is not in the system search path.
Configuring library for cabal-bug-build-tool-0..
Preprocessing library for cabal-bug-build-tool-0..
Building library for cabal-bug-build-tool-0..
packages: .
import Test.Cabal.Prelude
-- We are testing if the build-tools program is found in path before programs e.g. in extra-prog-path or the system path
-- For that, we need
-- * A repo with a build tool that is up to date
-- * An older version of the build tool in the extra-prog-path
-- * A project that requires the more up-to-date version of the build-tool
main = cabalTest $ withRepo "repo" $ do
dir <- testWorkDir <$> getTestEnv
cabal "v2-install" ["mybuilder-0.1.0.0", "--installdir=" ++ dir ++ "/install", "--overwrite-policy=always"]
cabal "v2-build" ["cabal-bug-build-tool", "--extra-prog-path=" ++ dir ++ "/install"]
# Revision history for mybuilder0100
## 0.1.0.0 -- YYYY-mm-dd
* First version. Released on an unsuspecting world.
module Main where
main :: IO ()
main = putStrLn "0.1.0.0"
cabal-version: 3.0
name: mybuilder
version: 0.1.0.0
license: NONE
author: Rodrigo Mesquita
maintainer: rodrigo.m.mesquita@gmail.com
build-type: Simple
extra-doc-files: CHANGELOG.md
common warnings
ghc-options: -Wall
executable mybuilder
import: warnings
main-is: Main.hs
build-depends: base
hs-source-dirs: app
default-language: Haskell2010
# Revision history for mybuilder0100
## 0.1.0.0 -- YYYY-mm-dd
* First version. Released on an unsuspecting world.
module Main where
main :: IO ()
main = putStrLn "0.2.0.0"
cabal-version: 3.0
name: mybuilder
version: 0.2.0.0
license: NONE
author: Rodrigo Mesquita
maintainer: rodrigo.m.mesquita@gmail.com
build-type: Simple
extra-doc-files: CHANGELOG.md
common warnings
ghc-options: -Wall
executable mybuilder
import: warnings
main-is: Main.hs
build-depends: base
hs-source-dirs: app
default-language: Haskell2010
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment