{-# LANGUAGE CPP, TemplateHaskell #-}
module Hledger.Cli.Version (
progname,
version,
prognameandversion,
prognameanddetailedversion,
binaryfilename
)
where
import System.Info (os, arch)
import Text.Printf
import Hledger.Utils
progname, version, prognameandversion, prognameanddetailedversion :: String
progname :: String
progname = String
"hledger"
#ifdef VERSION
version :: String
version = VERSION
#else
version = "dev build"
#endif
prognameandversion :: String
prognameandversion = String
progname String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
version
prognameanddetailedversion :: String
prognameanddetailedversion = String -> String -> String -> String
forall r. PrintfType r => String -> r
printf String
"%s %s" String
progname String
version
patchlevel :: String
#ifdef PATCHLEVEL
patchlevel = "." ++ show (PATCHLEVEL :: Int)
#else
patchlevel :: String
patchlevel = String
""
#endif
buildversion :: String
buildversion :: String
buildversion = String
version String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
patchlevel
binaryfilename :: String -> String
binaryfilename :: String -> String
binaryfilename String
progname = [String] -> String
forall p. PrintfType p => [String] -> p
prettify ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ Char -> String -> [String]
forall a. Eq a => a -> [a] -> [[a]]
splitAtElement Char
'.' String
buildversion
where
prettify :: [String] -> p
prettify (String
major:String
minor:String
bugfix:String
patches:[]) =
String
-> String
-> String
-> String
-> String
-> String
-> String
-> String
-> String
-> p
forall r. PrintfType r => String -> r
printf String
"%s-%s.%s%s%s-%s-%s%s" String
progname String
major String
minor String
bugfix' String
patches' String
os' String
arch String
suffix
where
bugfix' :: String
bugfix'
| String
bugfix String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"0"] = String
""
| Bool
otherwise = Char
'.' Char -> String -> String
forall a. a -> [a] -> [a]
: String
bugfix
patches' :: String
patches'
| String
patchesString -> String -> Bool
forall a. Eq a => a -> a -> Bool
/=String
"0" = Char
'+' Char -> String -> String
forall a. a -> [a] -> [a]
: String
patches
| Bool
otherwise = String
""
(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
"")
prettify (String
major:String
minor:String
bugfix:[]) = [String] -> p
prettify [String
major,String
minor,String
bugfix,String
"0"]
prettify (String
major:String
minor:[]) = [String] -> p
prettify [String
major,String
minor,String
"0",String
"0"]
prettify (String
major:[]) = [String] -> p
prettify [String
major,String
"0",String
"0",String
"0"]
prettify [] = String -> p
forall a. String -> a
error' String
"VERSION is empty, please fix"
prettify [String]
_ = String -> p
forall a. String -> a
error' String
"VERSION has too many components, please fix"