Skip to content

Commit

Permalink
Add notion of ExeDependency for tool-depends and custom setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Ericson2314 committed Nov 12, 2016
1 parent 3d9be43 commit f87fc8e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
13 changes: 12 additions & 1 deletion Cabal/Distribution/Package.hs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ module Distribution.Package (

-- * Package source dependencies
Dependency(..),
ExeDependency(..),
LegacyExeDependency(..),
PkgconfigDependency(..),
thisPackageVersion,
Expand Down Expand Up @@ -395,12 +396,20 @@ mkLegacyUnitId = newSimpleUnitId . mkComponentId . display
data Dependency = Dependency PackageName VersionRange
deriving (Generic, Read, Show, Eq, Typeable, Data)

-- | 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)

-- | Describes a legacy `build-tools`-style dependency on an executable
--
-- It is "legacy" because we do not know what the build-tool referred to. It
-- could refer to a pkg-config executable (PkgconfigName), or an internal
-- executable (UnqualComponentName). Thus the name is stringly typed.
--
--g
-- @since 2.0
data LegacyExeDependency = LegacyExeDependency
String
Expand All @@ -416,10 +425,12 @@ data PkgconfigDependency = PkgconfigDependency
deriving (Generic, Read, Show, Eq, Typeable, Data)

instance Binary Dependency
instance Binary ExeDependency
instance Binary LegacyExeDependency
instance Binary PkgconfigDependency

instance NFData Dependency where rnf = genericRnf
instance NFData ExeDependency where rnf = genericRnf
instance NFData LegacyExeDependency where rnf = genericRnf
instance NFData PkgconfigDependency where rnf = genericRnf

Expand Down
12 changes: 12 additions & 0 deletions Cabal/Distribution/Package/TextClass.hs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ instance Text Dependency where
Parse.skipSpaces
return (Dependency name ver)

instance Text ExeDependency where
disp (ExeDependency name exe ver) =
(disp name <<>> Disp.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)

instance Text LegacyExeDependency where
disp (LegacyExeDependency name ver) =
Disp.text name <+> disp ver
Expand Down
10 changes: 9 additions & 1 deletion Cabal/Distribution/Parsec/Class.hs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import Distribution.License (License (..))
import Distribution.ModuleName (ModuleName)
import qualified Distribution.ModuleName as ModuleName
import Distribution.Package
(Dependency (..),
(Dependency (..), ExeDependency (..),
LegacyExeDependency (..), PkgconfigDependency (..),
UnqualComponentName, mkUnqualComponentName,
PackageName, mkPackageName,
Expand Down Expand Up @@ -133,6 +133,14 @@ instance Parsec Dependency where
ver <- parsec <|> pure anyVersion
return (Dependency name ver)

instance Parsec ExeDependency where
parsec = do
name <- lexemeParsec
_ <- P.char ':'
exe <- lexemeParsec
ver <- parsec <|> pure anyVersion
return (ExeDependency name exe ver)

instance Parsec LegacyExeDependency where
parsec = do
name <- parsecMaybeQuoted nameP
Expand Down

0 comments on commit f87fc8e

Please sign in to comment.