module DisTract.Version (getNameVersionFromCabal)
where
import Data.Version
import Distribution.PackageDescription
import Distribution.Package
import Language.Haskell.TH.Syntax
import Distribution.Verbosity (silent)
getNameVersionFromCabal :: FilePath -> Q [Dec]
getNameVersionFromCabal path
= do { desc <- runIO $ readPackageDescription silent path
; makeNameVersionDeclarations desc
}
makeNameVersionDeclarations :: GenericPackageDescription -> Q [Dec]
makeNameVersionDeclarations desc
= do { versionD <- [d| package_version :: String; package_version = $(lift $ versionStr desc) |]
; nameD <- [d| package_name :: String; package_name = $(lift $ name desc) |]
; return $ nameD ++ versionD
}
name :: GenericPackageDescription -> String
name desc = pkgName $ pkgId desc
pkgId :: GenericPackageDescription -> PackageIdentifier
pkgId desc = package $ packageDescription desc
versionStr :: GenericPackageDescription -> String
versionStr desc = showVersion $ version desc
version :: GenericPackageDescription -> Version
version desc = pkgVersion $ pkgId desc