packages feed

hackport-0.9.0.0: cabal/Cabal/src/Distribution/Simple/Build/PackageInfoModule.hs

-----------------------------------------------------------------------------
-- |
-- Module      :  Distribution.Simple.Build.PackageInfoModule
-- Copyright   :
--
-- Maintainer  :  cabal-devel@haskell.org
-- Portability :  portable
--
-- Generating the PackageInfo_pkgname module.
--
-- This is a module that Cabal generates for the benefit of packages. It
-- enables them to find their package informations.
--
module Distribution.Simple.Build.PackageInfoModule (
    generatePackageInfoModule
  ) where

import Distribution.Compat.Prelude
import Prelude ()

import Distribution.Package
import Distribution.PackageDescription
import Distribution.Simple.Compiler
import Distribution.Simple.LocalBuildInfo
import Distribution.Utils.ShortText
import Distribution.Version

import qualified Distribution.Simple.Build.PackageInfoModule.Z as Z

-- ------------------------------------------------------------
-- * Building Paths_<pkg>.hs
-- ------------------------------------------------------------

generatePackageInfoModule :: PackageDescription -> LocalBuildInfo -> String
generatePackageInfoModule pkg_descr lbi = Z.render Z.Z
    { Z.zPackageName   = showPkgName $ packageName pkg_descr
    , Z.zVersionDigits = show $ versionNumbers $ packageVersion pkg_descr
    , Z.zSynopsis        = fromShortText $ synopsis pkg_descr
    , Z.zCopyright       = fromShortText $ copyright pkg_descr
    , Z.zHomepage        = fromShortText $ homepage pkg_descr
    , Z.zSupportsNoRebindableSyntax = supports_rebindable_syntax
    }
  where
    supports_rebindable_syntax   = ghc_newer_than (mkVersion [7,0,1])

    ghc_newer_than minVersion =
        case compilerCompatVersion GHC (compiler lbi) of
            Nothing      -> False
            Just version -> version `withinRange` orLaterVersion minVersion

showPkgName :: PackageName -> String
showPkgName = map fixchar . unPackageName

fixchar :: Char -> Char
fixchar '-' = '_'
fixchar c   = c