Distribution/Types/SetupBuildInfo.hs

    {-# LANGUAGE DeriveDataTypeable #-}
    {-# LANGUAGE DeriveGeneric #-}

    module Distribution.Types.SetupBuildInfo (
        SetupBuildInfo(..)
    ) where

    import Prelude ()
    import Distribution.Compat.Prelude

    import Distribution.Types.Dependency

    -- ---------------------------------------------------------------------------
    -- The SetupBuildInfo type

    -- One can see this as a very cut-down version of BuildInfo below.
    -- To keep things simple for tools that compile Setup.hs we limit the
    -- options authors can specify to just Haskell package dependencies.

    data SetupBuildInfo = SetupBuildInfo
        { setupDepends        :: [Dependency]
        , defaultSetupDepends :: Bool
            -- ^ Is this a default 'custom-setup' section added by the cabal-install
            -- code (as opposed to user-provided)? This field is only used
            -- internally, and doesn't correspond to anything in the .cabal
            -- file. See #3199.
        }
        deriving (Generic, Show, Eq, Read, Typeable, Data)

    instance Binary SetupBuildInfo

    instance NFData SetupBuildInfo where rnf = genericRnf

    instance Monoid SetupBuildInfo where
        mempty  = SetupBuildInfo [] False
        mappend = (<>)

    instance Semigroup SetupBuildInfo where
        a <> b = SetupBuildInfo
            (setupDepends a <> setupDepends b)
            (defaultSetupDepends a || defaultSetupDepends b)