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