Skip to content

Commit c21eef4

Browse files
juhpMikolaj
authored andcommitted
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 3832bea) # Conflicts: # cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs
1 parent 83ecb5c commit c21eef4

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

cabal-install-solver/src/Distribution/Solver/Types/PkgConfigDb.hs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,22 @@ readPkgConfigDb verbosity progdb = handle ioErrorHandler $ do
6767
-- The output of @pkg-config --list-all@ also includes a description
6868
-- for each package, which we do not need.
6969
let pkgNames = map (takeWhile (not . isSpace)) pkgList
70-
(pkgVersions, _errs, exitCode) <-
70+
(outs, _errs, exitCode) <-
7171
getProgramInvocationOutputAndErrors verbosity
7272
(programInvocation pkgConfig ("--modversion" : pkgNames))
73-
case exitCode of
74-
ExitSuccess -> (return . pkgConfigDbFromList . zip pkgNames) (lines pkgVersions)
75-
-- if there's a single broken pc file the above fails, so we fall back into calling it individually
76-
_ -> do
77-
info verbosity ("call to pkg-config --modversion on all packages failed. Falling back to querying pkg-config individually on each package")
78-
pkgConfigDbFromList . catMaybes <$> mapM (getIndividualVersion pkgConfig) pkgNames
73+
let pkgVersions = lines outs
74+
if exitCode == ExitSuccess && length pkgVersions == length pkgNames
75+
then (return . pkgConfigDbFromList . zip pkgNames) pkgVersions
76+
else
77+
-- if there's a single broken pc file the above fails, so we fall back
78+
-- into calling it individually
79+
--
80+
-- Also some implementations of @pkg-config@ do not provide more than
81+
-- one package version, so if the returned list is shorter than the
82+
-- requested one, we fall back to querying one by one.
83+
do
84+
info verbosity ("call to pkg-config --modversion on all packages failed. Falling back to querying pkg-config individually on each package")
85+
pkgConfigDbFromList . catMaybes <$> mapM (getIndividualVersion pkgConfig) pkgNames
7986
where
8087
-- For when pkg-config invocation fails (possibly because of a
8188
-- too long command line).

changelog.d/pr-9391

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
synopsis: fix pkgconfig-depends for pkgconf-1.9
2+
packages: cabal-install-solver
3+
prs: #9391
4+
issues: #8923

0 commit comments

Comments
 (0)