{-# LANGUAGE CPP #-}
module Staversion.Internal.Version
(
V.Version,
V.VersionRange,
V.LowerBound(..),
V.UpperBound(..),
V.Bound(..),
V.VersionInterval,
V.thisVersion,
V.unionVersionRanges,
V.simplifyVersionRange,
V.fromVersionIntervals,
V.asVersionIntervals,
mkVersion,
mkVersionIntervals,
versionNumbers,
docVersionRange,
BaseVersion,
showBaseVersion,
parseVersionText
) where
import Data.Maybe (listToMaybe, fromJust)
import Data.Text (Text, unpack)
import qualified Distribution.Version as V
#if MIN_VERSION_Cabal(2,2,0)
import qualified Distribution.Pretty as DP
#else
import qualified Distribution.Text as DT
#endif
import Data.Version (parseVersion)
import qualified Data.Version as BaseV
import Text.ParserCombinators.ReadP (readP_to_S)
import Text.PrettyPrint (Doc)
type BaseVersion = BaseV.Version
showBaseVersion :: BaseVersion -> String
showBaseVersion = BaseV.showVersion
baseVToV :: BaseV.Version -> V.Version
baseVToV = mkVersion . BaseV.versionBranch
parseVersionText :: Text -> Maybe V.Version
parseVersionText = extractResult . (readP_to_S parseVersion) . unpack where
extractResult = fmap baseVToV . listToMaybe . map fst . filter (\pair -> snd pair == "")
#if MIN_VERSION_Cabal(2,0,0)
mkVersion :: [Int] -> V.Version
mkVersion = V.mkVersion
versionNumbers :: V.Version -> [Int]
versionNumbers = V.versionNumbers
#else
mkVersion :: [Int] -> V.Version
mkVersion vs = V.Version vs []
versionNumbers :: V.Version -> [Int]
versionNumbers = V.versionBranch
#endif
#if MIN_VERSION_Cabal(2,2,0)
mkVersionIntervals :: [V.VersionInterval] -> V.VersionIntervals
mkVersionIntervals = V.mkVersionIntervals
#else
mkVersionIntervals :: [V.VersionInterval] -> V.VersionIntervals
mkVersionIntervals = fromJust . V.mkVersionIntervals
#endif
#if MIN_VERSION_Cabal(2,2,0)
docVersionRange :: V.VersionRange -> Doc
docVersionRange = DP.pretty
#else
docVersionRange :: V.VersionRange -> Doc
docVersionRange = DT.disp
#endif