{- DisTract ------------------------------------------------------\ | | | Copyright (c) 2007, Matthew Sackman (matthew@wellquite.org) | | | | DisTract is freely distributable under the terms of a 3-Clause | | BSD-style license. For details, see the DisTract web site: | | http://distract.wellquite.org/ | | | \-----------------------------------------------------------------} {-# LANGUAGE TemplateHaskell #-} 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