From ee0e26bb8d1b08b225b981eaef5f94ef8ac9b34a Mon Sep 17 00:00:00 2001 From: Oleg Grenrus <oleg.grenrus@iki.fi> Date: Fri, 14 Feb 2020 12:30:41 +0200 Subject: [PATCH] Accept any pkg-config --modversion output This results e.g. in cabal: The pkg-config package 'blas' version ==0.3 || >0.3 is required but the version installed on the system is version 0.2.20+ds output instead of failing to parse 0.2.20+ds as a PkgconfigVersion. We don't need to parse the `pkg-config --modversion` output as strictly as the versions in `.cabal` file. I.e. at all, as `PkgconfigVersion` comparison works somehow on any possible version strings. --- Cabal/Distribution/Simple/Configure.hs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Cabal/Distribution/Simple/Configure.hs b/Cabal/Distribution/Simple/Configure.hs index 39570332d6..af74f13c02 100644 --- a/Cabal/Distribution/Simple/Configure.hs +++ b/Cabal/Distribution/Simple/Configure.hs @@ -79,6 +79,7 @@ import Distribution.Simple.BuildTarget import Distribution.Simple.LocalBuildInfo import Distribution.Types.ExeDependency import Distribution.Types.LegacyExeDependency +import Distribution.Types.PkgconfigVersion import Distribution.Types.PkgconfigDependency import Distribution.Types.PkgconfigVersionRange import Distribution.Types.LocalBuildInfo @@ -119,7 +120,7 @@ import Data.ByteString.Lazy ( ByteString ) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy.Char8 as BLC8 import Data.List - ( (\\), partition, inits, stripPrefix, intersect ) + ( (\\), partition, inits, stripPrefix, intersect, dropWhileEnd ) import Data.Either ( partitionEithers ) import qualified Data.Map as Map @@ -1616,13 +1617,11 @@ configurePkgconfigPackages verbosity pkg_descr progdb enabled version <- pkgconfig ["--modversion", pkg] `catchIO` (\_ -> die' verbosity notFound) `catchExit` (\_ -> die' verbosity notFound) - case simpleParsec version of - Nothing -> die' verbosity - "parsing output of pkg-config --modversion failed" - Just v | not (withinPkgconfigVersionRange v range) -> - die' verbosity (badVersion v) - | otherwise -> - info verbosity (depSatisfied v) + let trim = dropWhile isSpace . dropWhileEnd isSpace + let v = PkgconfigVersion (toUTF8BS $ trim version) + if not (withinPkgconfigVersionRange v range) + then die' verbosity (badVersion v) + else info verbosity (depSatisfied v) where notFound = "The pkg-config package '" ++ pkg ++ "'" ++ versionRequirement -- GitLab