2020-01-11 21:15:05 +01:00
|
|
|
{-# LANGUAGE QuasiQuotes #-}
|
|
|
|
|
|
|
|
|
|
|
2020-07-22 01:08:58 +02:00
|
|
|
{-|
|
|
|
|
|
Module : GHCup.Version
|
2020-11-20 18:37:48 +01:00
|
|
|
Description : Version information and version handling.
|
2020-07-22 01:08:58 +02:00
|
|
|
Copyright : (c) Julian Ospald, 2020
|
2020-07-30 20:04:02 +02:00
|
|
|
License : LGPL-3.0
|
2020-07-22 01:08:58 +02:00
|
|
|
Maintainer : hasufell@hasufell.de
|
|
|
|
|
Stability : experimental
|
2021-05-14 23:09:45 +02:00
|
|
|
Portability : portable
|
2020-07-22 01:08:58 +02:00
|
|
|
-}
|
2020-01-11 21:15:05 +01:00
|
|
|
module GHCup.Version where
|
|
|
|
|
|
2020-11-20 18:37:48 +01:00
|
|
|
import GHCup.Types
|
2021-02-25 15:33:52 +01:00
|
|
|
import Paths_ghcup (version)
|
2020-01-11 21:15:05 +01:00
|
|
|
|
2021-02-25 15:33:52 +01:00
|
|
|
import Data.Version (Version(versionBranch))
|
|
|
|
|
import Data.Versions hiding (version)
|
2020-04-09 16:59:25 +02:00
|
|
|
import URI.ByteString
|
|
|
|
|
import URI.ByteString.QQ
|
|
|
|
|
|
2021-02-25 15:33:52 +01:00
|
|
|
import qualified Data.List.NonEmpty as NE
|
2020-04-17 16:56:56 +02:00
|
|
|
import qualified Data.Text as T
|
|
|
|
|
|
2020-08-09 17:39:02 +02:00
|
|
|
-- | This reflects the API version of the YAML.
|
2020-04-09 16:59:25 +02:00
|
|
|
ghcupURL :: URI
|
2021-07-28 19:17:59 +02:00
|
|
|
ghcupURL = [uri|https://www.haskell.org/ghcup/data/ghcup-0.0.6.yaml|]
|
2020-01-11 21:15:05 +01:00
|
|
|
|
2020-08-09 17:39:02 +02:00
|
|
|
-- | The current ghcup version.
|
2020-01-11 21:15:05 +01:00
|
|
|
ghcUpVer :: PVP
|
2021-02-25 15:33:52 +01:00
|
|
|
ghcUpVer = PVP . NE.fromList . fmap fromIntegral $ versionBranch version
|
2020-04-17 16:56:56 +02:00
|
|
|
|
2020-07-22 01:08:58 +02:00
|
|
|
-- | ghcup version as numeric string.
|
2020-04-17 16:56:56 +02:00
|
|
|
numericVer :: String
|
|
|
|
|
numericVer = T.unpack . prettyPVP $ ghcUpVer
|
2020-11-20 18:37:48 +01:00
|
|
|
|
|
|
|
|
versionCmp :: Versioning -> VersionCmp -> Bool
|
|
|
|
|
versionCmp ver1 (VR_gt ver2) = ver1 > ver2
|
|
|
|
|
versionCmp ver1 (VR_gteq ver2) = ver1 >= ver2
|
|
|
|
|
versionCmp ver1 (VR_lt ver2) = ver1 < ver2
|
|
|
|
|
versionCmp ver1 (VR_lteq ver2) = ver1 <= ver2
|
|
|
|
|
versionCmp ver1 (VR_eq ver2) = ver1 == ver2
|
|
|
|
|
|
|
|
|
|
versionRange :: Versioning -> VersionRange -> Bool
|
|
|
|
|
versionRange ver' (SimpleRange cmps) = and $ fmap (versionCmp ver') cmps
|
|
|
|
|
versionRange ver' (OrRange cmps range) =
|
|
|
|
|
versionRange ver' (SimpleRange cmps) || versionRange ver' range
|
|
|
|
|
|