{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
module Hledger.Cli.Version (
progname,
version,
prognameandversion,
versiondescription,
binaryfilename,
)
where
#if MIN_VERSION_githash(0,1,4)
import GitHash (giDescribe, tGitInfoCwdTry)
#else
import GitHash (giHash, tGitInfoCwdTry)
#endif
import System.Info (os, arch)
import Hledger.Utils
progname, version, prognameandversion :: String
progname :: String
progname = String
"hledger"
#ifdef VERSION
version :: String
version = VERSION
#else
version = "dev build"
#endif
prognameandversion :: String
prognameandversion = String -> String
versiondescription String
progname
patchlevel :: String
#ifdef PATCHLEVEL
patchlevel = "." ++ show (PATCHLEVEL :: Int)
#else
patchlevel :: String
patchlevel = String
""
#endif
buildversion :: String
buildversion :: String
buildversion = [String] -> String
prettify ([String] -> String) -> (String -> [String]) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> String -> [String]
forall a. Eq a => a -> [a] -> [[a]]
splitAtElement Char
'.' (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
version String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
patchlevel
where
prettify :: [String] -> String
prettify (String
major:String
minor:String
bugfix:String
patches:[]) =
String
major String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"." String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
minor String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
bugfix' String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
patches'
where
bugfix' :: String
bugfix' = if String
bugfix String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"0" then String
"" else Char
'.' Char -> String -> String
forall a. a -> [a] -> [a]
: String
bugfix
patches' :: String
patches' = if String
patches String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"0" then String
"" else Char
'+' Char -> String -> String
forall a. a -> [a] -> [a]
: String
patches
prettify (String
major:String
minor:String
bugfix:[]) = [String] -> String
prettify [String
major,String
minor,String
bugfix,String
"0"]
prettify (String
major:String
minor:[]) = [String] -> String
prettify [String
major,String
minor,String
"0",String
"0"]
prettify (String
major:[]) = [String] -> String
prettify [String
major,String
"0",String
"0",String
"0"]
prettify [] = String -> String
forall a. String -> a
error' String
"VERSION is empty, please fix"
prettify [String]
_ = String -> String
forall a. String -> a
error' String
"VERSION has too many components, please fix"
versiondescription :: String -> String
versiondescription :: String -> String
versiondescription String
progname = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
#if MIN_VERSION_githash(0,1,4)
[String
progname, String
" ", (String -> String)
-> (GitInfo -> String) -> Either String GitInfo -> String
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (String -> String -> String
forall a b. a -> b -> a
const String
buildversion) GitInfo -> String
giDescribe Either String GitInfo
gi, String
", ", String
os', String
"-", String
arch]
#else
[progname, " ", buildversion, either (const "") (\x -> ", git revision " ++ giHash x) gi, ", ", os', "-", arch]
#endif
where
gi :: Either String GitInfo
gi = String
String -> Either String GitInfo
forall a b. a -> Either a b
$$tGitInfoCwdTry
os' :: String
os' | String
os String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"darwin" = String
"mac"
| String
os String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"mingw32" = String
"windows"
| Bool
otherwise = String
os
binaryfilename :: String -> String
binaryfilename :: String -> String
binaryfilename String
progname = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
[String
progname, String
"-", String
buildversion, String
"-", String
os', String
"-", String
arch, String
suffix]
where
(String
os',String
suffix) | String
os String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"darwin" = (String
"mac",String
"" :: String)
| String
os String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"mingw32" = (String
"windows",String
".exe")
| Bool
otherwise = (String
os,String
"")