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