71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| {-# OPTIONS_GHC -cpp #-}
 | |
| {-
 | |
| Version-related utilities. See the Makefile for details of our version
 | |
| numbering policy.
 | |
| -}
 | |
| 
 | |
| module Version
 | |
| where
 | |
| import System.Info (os, arch)
 | |
| import Ledger.Utils
 | |
| import Options (progname)
 | |
| 
 | |
| -- version and PATCHLEVEL are set by the makefile
 | |
| version       = "0.7.0"
 | |
| 
 | |
| #ifdef PATCHLEVEL
 | |
| patchlevel = "." ++ show PATCHLEVEL -- must be numeric !
 | |
| #else
 | |
| patchlevel = ""
 | |
| #endif
 | |
| 
 | |
| 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 VTY
 | |
|   ,"vty"
 | |
| #endif
 | |
| #ifdef WEB
 | |
|   ,"web"
 | |
| #endif
 | |
|  ]
 |