{-# LANGUAGE TemplateHaskell #-}
module Futhark.Version
( version,
versionString,
)
where
import Data.ByteString.Char8 qualified as BS
import Data.FileEmbed
import Data.Text qualified as T
import Data.Version
import Futhark.Util (trim)
import GitHash
import Paths_futhark qualified
{-# NOINLINE version #-}
version :: Version
version :: Version
version = Version
Paths_futhark.version
{-# NOINLINE versionString #-}
versionString :: T.Text
versionString :: Text
versionString =
String -> Text
T.pack (Version -> String
showVersion Version
version) forall a. Semigroup a => a -> a -> a
<> Text
unreleased forall a. Semigroup a => a -> a -> a
<> forall {a}. Either a GitInfo -> Text
gitversion $$String
forall a b. a -> Either a b
tGitInfoCwdTry
where
unreleased :: Text
unreleased =
if forall a. [a] -> a
last (Version -> [Int]
versionBranch Version
version) forall a. Eq a => a -> a -> Bool
== Int
0
then Text
" (prerelease - include info below when reporting bugs)"
else forall a. Monoid a => a
mempty
gitversion :: Either a GitInfo -> Text
gitversion (Left a
_) =
case Maybe String
commitIdFromFile of
Maybe String
Nothing -> Text
""
Just String
commit -> Text
"\ngit: " forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack String
commit
gitversion (Right GitInfo
gi) =
forall a. Monoid a => [a] -> a
mconcat
[ Text
"\n",
Text
"git: ",
Text
branch,
String -> Text
T.pack (forall a. Int -> [a] -> [a]
take Int
7 forall a b. (a -> b) -> a -> b
$ GitInfo -> String
giHash GitInfo
gi),
Text
" (",
String -> Text
T.pack (GitInfo -> String
giCommitDate GitInfo
gi),
Text
")",
Text
dirty
]
where
branch :: Text
branch
| GitInfo -> String
giBranch GitInfo
gi forall a. Eq a => a -> a -> Bool
== String
"master" = Text
""
| Bool
otherwise = String -> Text
T.pack (GitInfo -> String
giBranch GitInfo
gi) forall a. Semigroup a => a -> a -> a
<> Text
" @ "
dirty :: Text
dirty = if GitInfo -> Bool
giDirty GitInfo
gi then Text
" [modified]" else Text
""
commitIdFromFile :: Maybe String
commitIdFromFile :: Maybe String
commitIdFromFile = String -> String
trim forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> String
BS.unpack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> $(embedFileIfExists "./commit-id")