Skip to content
Snippets Groups Projects
Commit c21eef43 authored by Jens Petersen's avatar Jens Petersen Committed by Mikolaj
Browse files

cabal-install-solver: fix pkgconf 1.9 --modversion regression

Check that the numbers of *versions* output is equal to the number of pkgconf's

fixes #8923

The pkgconf behavior was reverted upstream in 2.0

(this should cover the case too of checking that equal pkgList lines are output also)

(cherry picked from commit 3832beaf)

# Conflicts:
#	cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs
parent 83ecb5c0
Branches mergify/bp/3.10/pr-9391
No related tags found
No related merge requests found
......@@ -67,15 +67,22 @@ readPkgConfigDb verbosity progdb = handle ioErrorHandler $ do
-- The output of @pkg-config --list-all@ also includes a description
-- for each package, which we do not need.
let pkgNames = map (takeWhile (not . isSpace)) pkgList
(pkgVersions, _errs, exitCode) <-
(outs, _errs, exitCode) <-
getProgramInvocationOutputAndErrors verbosity
(programInvocation pkgConfig ("--modversion" : pkgNames))
case exitCode of
ExitSuccess -> (return . pkgConfigDbFromList . zip pkgNames) (lines pkgVersions)
-- if there's a single broken pc file the above fails, so we fall back into calling it individually
_ -> do
info verbosity ("call to pkg-config --modversion on all packages failed. Falling back to querying pkg-config individually on each package")
pkgConfigDbFromList . catMaybes <$> mapM (getIndividualVersion pkgConfig) pkgNames
let pkgVersions = lines outs
if exitCode == ExitSuccess && length pkgVersions == length pkgNames
then (return . pkgConfigDbFromList . zip pkgNames) pkgVersions
else
-- if there's a single broken pc file the above fails, so we fall back
-- into calling it individually
--
-- Also some implementations of @pkg-config@ do not provide more than
-- one package version, so if the returned list is shorter than the
-- requested one, we fall back to querying one by one.
do
info verbosity ("call to pkg-config --modversion on all packages failed. Falling back to querying pkg-config individually on each package")
pkgConfigDbFromList . catMaybes <$> mapM (getIndividualVersion pkgConfig) pkgNames
where
-- For when pkg-config invocation fails (possibly because of a
-- too long command line).
......
synopsis: fix pkgconfig-depends for pkgconf-1.9
packages: cabal-install-solver
prs: #9391
issues: #8923
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