content: {-# LANGUAGE DeriveDataTypeable #-}
  {-# LANGUAGE DeriveGeneric #-}
  module Distribution.Types.ExeDependency
    ( ExeDependency(..)
    , qualifiedExeName
    ) where
  
  import Prelude ()
  import Distribution.Compat.Prelude
  
  import Distribution.Types.ComponentName
  import Distribution.Types.UnqualComponentName
  import Distribution.Types.PackageName
  import Distribution.Version ( VersionRange, anyVersion )
  
  import qualified Distribution.Compat.ReadP as Parse
  import Distribution.Compat.ReadP
  import Distribution.Text
  
  import Text.PrettyPrint ((<+>), text)
  
  -- | Describes a dependency on an executable from a package
  --
  data ExeDependency = ExeDependency
                       PackageName
                       UnqualComponentName -- name of executable component of package
                       VersionRange
                       deriving (Generic, Read, Show, Eq, Typeable, Data)
  
  instance Binary ExeDependency
  instance NFData ExeDependency where rnf = genericRnf
  
  instance Text ExeDependency where
    disp (ExeDependency name exe ver) =
      (disp name <<>> text ":" <<>> disp exe) <+> disp ver
  
    parse = do name <- parse
               _ <- Parse.char ':'
               exe <- parse
               Parse.skipSpaces
               ver <- parse <++ return anyVersion
               Parse.skipSpaces
               return (ExeDependency name exe ver)
  
  qualifiedExeName :: ExeDependency -> ComponentName
  qualifiedExeName (ExeDependency _ ucn _) = CExeName ucn
  