module Hledger.Cli.Version (
version
,progversionstr
,binaryfilename
)
where
import Data.List
import System.Info (os, arch)
import Text.Printf
import Hledger.Utils
version :: String
version = "0.15.0"
patchlevel :: String
#ifdef PATCHLEVEL
patchlevel = "." ++ show (PATCHLEVEL :: Int)
#else
patchlevel = ""
#endif
buildversion :: String
buildversion = version ++ patchlevel :: String
progversionstr :: String -> String
progversionstr progname = progname ++ "-" ++ versionstr ++ configmsg
where
versionstr = prettify $ splitAtElement '.' buildversion
where
prettify (major:minor:bugfix:patches:[]) =
printf "%s.%s%s%s" major minor bugfix' patches'
where
bugfix'
| bugfix `elem` ["0"] = ""
| otherwise = '.' : bugfix
patches'
| patches/="0" = "+"++patches
| otherwise = ""
prettify s = intercalate "." s
configmsg | null buildflags = ""
| otherwise = " with " ++ intercalate ", " buildflags
buildflags = []
binaryfilename :: String -> String
binaryfilename progname = prettify $ splitAtElement '.' buildversion
where
prettify (major:minor:bugfix:patches:[]) =
printf "%s-%s.%s%s%s-%s-%s%s" progname major minor bugfix' patches' os' arch suffix
where
bugfix'
| bugfix `elem` ["0"] = ""
| otherwise = '.' : bugfix
patches'
| patches/="0" = '+' : patches
| otherwise = ""
(os',suffix)
| os == "darwin" = ("mac","")
| os == "mingw32" = ("windows",".exe")
| otherwise = (os,"")
prettify (major:minor:bugfix:[]) = prettify [major,minor,bugfix,"0"]
prettify (major:minor:[]) = prettify [major,minor,"0","0"]
prettify (major:[]) = prettify [major,"0","0","0"]
prettify [] = error' "VERSION is empty, please fix"
prettify _ = error' "VERSION has too many components, please fix"