hledger/Hledger/Cli/Version.hs
2010-05-19 20:11:36 +00:00

78 lines
2.7 KiB
Haskell

{-# LANGUAGE CPP #-}
{-
Version-related utilities. See the Makefile for details of our version
numbering policy.
-}
module Hledger.Cli.Version
where
import System.Info (os, arch)
import Hledger.Data.Utils
-- version and PATCHLEVEL are set by the makefile
version = "0.10.0"
#ifdef PATCHLEVEL
patchlevel = "." ++ show PATCHLEVEL -- must be numeric !
#else
patchlevel = ""
#endif
progname = "hledger"
timeprogname = "hours"
buildversion = version ++ patchlevel :: String
binaryfilename = prettify $ splitAtElement '.' buildversion :: String
where
prettify (major:minor:bugfix:patches:[]) =
printf "hledger-%s.%s%s%s-%s-%s%s" major minor bugfix' patches' os' arch suffix
where
bugfix'
| bugfix `elem` ["0"{-,"98","99"-}] = ""
| 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"
versionstr = prettify $ splitAtElement '.' buildversion :: String
where
prettify (major:minor:bugfix:patches:[]) =
printf "%s.%s%s%s" major minor bugfix' patches'
where
bugfix'
| bugfix `elem` ["0"{-,"98","99"-}] = ""
| otherwise = '.' : bugfix
patches'
| patches/="0" = "+"++patches
| otherwise = ""
prettify s = intercalate "." s
versionmsg = progname ++ "-" ++ versionstr ++ configmsg :: String
where configmsg
| null configflags = " with no extras"
| otherwise = " with " ++ intercalate ", " configflags
configflags = tail [""
#ifdef CHART
,"chart"
#endif
#ifdef VTY
,"vty"
#endif
#if defined(WEB)
,"web (using simpleserver)"
#elif defined(WEBHAPPSTACK)
,"web (using happstack)"
#endif
]