packages feed

hackport-0.5.1: cabal/Cabal/Distribution/Package/TextClass.hs

-- | *Dependency Text instances moved from Distribution.Package
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Distribution.Package.TextClass () where

import Prelude ()
import Distribution.Compat.Prelude

import Distribution.Package
import Distribution.ParseUtils
import Distribution.Version (anyVersion)

import qualified Distribution.Compat.ReadP as Parse
import qualified Text.PrettyPrint as Disp
import Distribution.Compat.ReadP
import Distribution.Text

import Text.PrettyPrint ((<+>))


instance Text Dependency where
  disp (Dependency name ver) =
    disp name <+> disp ver

  parse = do name <- parse
             Parse.skipSpaces
             ver <- parse <++ return anyVersion
             Parse.skipSpaces
             return (Dependency name ver)

instance Text LegacyExeDependency where
  disp (LegacyExeDependency name ver) =
    Disp.text name <+> disp ver

  parse = do name <- parseMaybeQuoted parseBuildToolName
             Parse.skipSpaces
             ver <- parse <++ return anyVersion
             Parse.skipSpaces
             return $ LegacyExeDependency name ver
    where
      -- like parsePackageName but accepts symbols in components
      parseBuildToolName :: Parse.ReadP r String
      parseBuildToolName = do ns <- sepBy1 component (Parse.char '-')
                              return (intercalate "-" ns)
        where component = do
                cs <- munch1 (\c -> isAlphaNum c || c == '+' || c == '_')
                if all isDigit cs then pfail else return cs

instance Text PkgconfigDependency where
  disp (PkgconfigDependency name ver) =
    disp name <+> disp ver

  parse = do name <- parse
             Parse.skipSpaces
             ver <- parse <++ return anyVersion
             Parse.skipSpaces
             return $ PkgconfigDependency name ver