Distribution.Compiler

Cabal-2.2.0.0: A framework for packaging Haskell software

Copyright | Isaac Jones 2003-2004
License | BSD3
Maintainer | cabal-devel@haskell.org
Portability | portable
Safe Haskell | None
Language | Haskell2010

Distribution.Compiler

Contents

- Compiler flavor
- Compiler id
- Compiler info

Description

This has an enumeration of the various compilers that Cabal knows about. It also specifies the default compiler. Sadly you'll often see code that does case analysis on this compiler flavour enumeration like:

    case compilerFlavor comp of
      GHC -> GHC.getInstalledPackages verbosity packageDb progdb
      JHC -> JHC.getInstalledPackages verbosity packageDb progdb

Obviously it would be better to use the proper `Compiler` abstraction because that would keep all the compiler-specific code together. Unfortunately we cannot make this change yet without breaking the `UserHooks` api, which would break all custom `Setup.hs` files, so for the moment we just have to live with this deficiency. If you're interested, see ticket #57.

Synopsis

- data CompilerFlavor
  - = GHC
  - | GHCJS
  - | NHC
  - | YHC
  - | Hugs
  - | HBC
  - | Helium
  - | JHC
  - | LHC
  - | UHC
  - | HaskellSuite String
  - | OtherCompiler String
- buildCompilerId :: CompilerId
- buildCompilerFlavor :: CompilerFlavor
- defaultCompilerFlavor :: Maybe CompilerFlavor
- parseCompilerFlavorCompat :: ReadP r CompilerFlavor
- classifyCompilerFlavor :: String -> CompilerFlavor
- data CompilerId = CompilerId CompilerFlavor Version
- data CompilerInfo = CompilerInfo {
  - compilerInfoId :: CompilerId
  - compilerInfoAbiTag :: AbiTag
  - compilerInfoCompat :: Maybe [CompilerId]
  - compilerInfoLanguages :: Maybe [Language]
  - compilerInfoExtensions :: Maybe [Extension]
  }
- unknownCompilerInfo :: CompilerId -> AbiTag -> CompilerInfo
- data AbiTag
  - = NoAbiTag
  - | AbiTag String
- abiTagString :: AbiTag -> String

# Compiler flavor

data CompilerFlavor Source #

Constructors

GHC |
GHCJS |
NHC |
YHC |
Hugs |
HBC |
Helium |
JHC |
LHC |
UHC |
HaskellSuite String |
OtherCompiler String |

Instances

Eq CompilerFlavor Source # |
Instance details Methods (==) :: CompilerFlavor -> CompilerFlavor -> Bool # (/=) :: CompilerFlavor -> CompilerFlavor -> Bool #
Data CompilerFlavor Source # |
Instance details Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CompilerFlavor -> c CompilerFlavor Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CompilerFlavor Source # toConstr :: CompilerFlavor -> Constr Source # dataTypeOf :: CompilerFlavor -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CompilerFlavor) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CompilerFlavor) Source # gmapT :: (forall b. Data b => b -> b) -> CompilerFlavor -> CompilerFlavor Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CompilerFlavor -> r Source # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CompilerFlavor -> r Source # gmapQ :: (forall d. Data d => d -> u) -> CompilerFlavor -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> CompilerFlavor -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CompilerFlavor -> m CompilerFlavor Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CompilerFlavor -> m CompilerFlavor Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CompilerFlavor -> m CompilerFlavor Source #
Ord CompilerFlavor Source # |
Instance details Methods compare :: CompilerFlavor -> CompilerFlavor -> Ordering # (<) :: CompilerFlavor -> CompilerFlavor -> Bool # (<=) :: CompilerFlavor -> CompilerFlavor -> Bool # (>) :: CompilerFlavor -> CompilerFlavor -> Bool # (>=) :: CompilerFlavor -> CompilerFlavor -> Bool # max :: CompilerFlavor -> CompilerFlavor -> CompilerFlavor # min :: CompilerFlavor -> CompilerFlavor -> CompilerFlavor #
Read CompilerFlavor Source # |
Instance details Methods readsPrec :: Int -> ReadS CompilerFlavor Source # readList :: ReadS [CompilerFlavor] Source # readPrec :: ReadPrec CompilerFlavor Source # readListPrec :: ReadPrec [CompilerFlavor] Source #
Show CompilerFlavor Source # |
Instance details Methods showsPrec :: Int -> CompilerFlavor -> ShowS Source # show :: CompilerFlavor -> String Source # showList :: [CompilerFlavor] -> ShowS Source #
Generic CompilerFlavor Source # |
Instance details Associated Types type Rep CompilerFlavor :: * -> * Source # Methods from :: CompilerFlavor -> Rep CompilerFlavor x Source # to :: Rep CompilerFlavor x -> CompilerFlavor Source #
NFData CompilerFlavor Source # |
Instance details Methods rnf :: CompilerFlavor -> () Source #
Binary CompilerFlavor Source # |
Instance details Methods put :: CompilerFlavor -> Put Source # get :: Get CompilerFlavor Source # putList :: [CompilerFlavor] -> Put Source #
Pretty CompilerFlavor Source # |
Instance details Methods pretty :: CompilerFlavor -> Doc Source #
Parsec CompilerFlavor Source # |
Instance details Methods parsec :: CabalParsing m => m CompilerFlavor Source #
Text CompilerFlavor Source # |
Instance details Methods disp :: CompilerFlavor -> Doc Source # parse :: ReadP r CompilerFlavor Source #
Newtype TestedWith (CompilerFlavor, VersionRange) Source # |
Instance details Methods pack :: (CompilerFlavor, VersionRange) -> TestedWith Source # unpack :: TestedWith -> (CompilerFlavor, VersionRange) Source #
type Rep CompilerFlavor Source # |
Instance details type Rep CompilerFlavor = D1 (MetaData "CompilerFlavor" "Distribution.Compiler" "Cabal-2.2.0.0" False) (((C1 (MetaCons "GHC" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "GHCJS" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "NHC" PrefixI False) (U1 :: * -> *))) :+: (C1 (MetaCons "YHC" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "Hugs" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "HBC" PrefixI False) (U1 :: * -> *)))) :+: ((C1 (MetaCons "Helium" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "JHC" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "LHC" PrefixI False) (U1 :: * -> *))) :+: (C1 (MetaCons "UHC" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "HaskellSuite" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String)) :+: C1 (MetaCons "OtherCompiler" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String))))))

buildCompilerId :: CompilerId Source #

buildCompilerFlavor :: CompilerFlavor Source #

defaultCompilerFlavor :: Maybe CompilerFlavor Source #

The default compiler flavour to pick when compiling stuff. This defaults to the compiler used to build the Cabal lib.

However if it's not a recognised compiler then it's `Nothing` and the user will have to specify which compiler they want.

parseCompilerFlavorCompat :: ReadP r CompilerFlavor Source #

Like `classifyCompilerFlavor` but compatible with the old ReadS parser.

It is compatible in the sense that it accepts only the same strings, eg GHC but not "ghc". However other strings get mapped to `OtherCompiler`. The point of this is that we do not allow extra valid values that would upset older Cabal versions that had a stricter parser however we cope with new values more gracefully so that we'll be able to introduce new value in future without breaking things so much.

classifyCompilerFlavor :: String -> CompilerFlavor Source #

# Compiler id

data CompilerId Source #

Constructors

CompilerId CompilerFlavor Version |

Instances

Eq CompilerId Source # |
Instance details Methods (==) :: CompilerId -> CompilerId -> Bool # (/=) :: CompilerId -> CompilerId -> Bool #
Ord CompilerId Source # |
Instance details Methods compare :: CompilerId -> CompilerId -> Ordering # (<) :: CompilerId -> CompilerId -> Bool # (<=) :: CompilerId -> CompilerId -> Bool # (>) :: CompilerId -> CompilerId -> Bool # (>=) :: CompilerId -> CompilerId -> Bool # max :: CompilerId -> CompilerId -> CompilerId # min :: CompilerId -> CompilerId -> CompilerId #
Read CompilerId Source # |
Instance details Methods readsPrec :: Int -> ReadS CompilerId Source # readList :: ReadS [CompilerId] Source # readPrec :: ReadPrec CompilerId Source # readListPrec :: ReadPrec [CompilerId] Source #
Show CompilerId Source # |
Instance details Methods showsPrec :: Int -> CompilerId -> ShowS Source # show :: CompilerId -> String Source # showList :: [CompilerId] -> ShowS Source #
Generic CompilerId Source # |
Instance details Associated Types type Rep CompilerId :: * -> * Source # Methods from :: CompilerId -> Rep CompilerId x Source # to :: Rep CompilerId x -> CompilerId Source #
NFData CompilerId Source # |
Instance details Methods rnf :: CompilerId -> () Source #
Binary CompilerId Source # |
Instance details Methods put :: CompilerId -> Put Source # get :: Get CompilerId Source # putList :: [CompilerId] -> Put Source #
Text CompilerId Source # |
Instance details Methods disp :: CompilerId -> Doc Source # parse :: ReadP r CompilerId Source #
type Rep CompilerId Source # |
Instance details type Rep CompilerId = D1 (MetaData "CompilerId" "Distribution.Compiler" "Cabal-2.2.0.0" False) (C1 (MetaCons "CompilerId" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 CompilerFlavor) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Version)))

# Compiler info

data CompilerInfo Source #

Compiler information used for resolving configurations. Some fields can be set to Nothing to indicate that the information is unknown.

Constructors

CompilerInfo |
Fields compilerInfoId :: CompilerId Compiler flavour and version. compilerInfoAbiTag :: AbiTag Tag for distinguishing incompatible ABI's on the same architecture/os. compilerInfoCompat :: Maybe [CompilerId] Other implementations that this compiler claims to be compatible with, if known. compilerInfoLanguages :: Maybe [Language] Supported language standards, if known. compilerInfoExtensions :: Maybe [Extension] Supported extensions, if known.

Instances

Read CompilerInfo Source # |
Instance details Methods readsPrec :: Int -> ReadS CompilerInfo Source # readList :: ReadS [CompilerInfo] Source # readPrec :: ReadPrec CompilerInfo Source # readListPrec :: ReadPrec [CompilerInfo] Source #
Show CompilerInfo Source # |
Instance details Methods showsPrec :: Int -> CompilerInfo -> ShowS Source # show :: CompilerInfo -> String Source # showList :: [CompilerInfo] -> ShowS Source #
Generic CompilerInfo Source # |
Instance details Associated Types type Rep CompilerInfo :: * -> * Source # Methods from :: CompilerInfo -> Rep CompilerInfo x Source # to :: Rep CompilerInfo x -> CompilerInfo Source #
Binary CompilerInfo Source # |
Instance details Methods put :: CompilerInfo -> Put Source # get :: Get CompilerInfo Source # putList :: [CompilerInfo] -> Put Source #
type Rep CompilerInfo Source # |
Instance details type Rep CompilerInfo = D1 (MetaData "CompilerInfo" "Distribution.Compiler" "Cabal-2.2.0.0" False) (C1 (MetaCons "CompilerInfo" PrefixI True) ((S1 (MetaSel (Just "compilerInfoId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 CompilerId) :*: S1 (MetaSel (Just "compilerInfoAbiTag") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 AbiTag)) :*: (S1 (MetaSel (Just "compilerInfoCompat") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe [CompilerId])) :*: (S1 (MetaSel (Just "compilerInfoLanguages") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe [Language])) :*: S1 (MetaSel (Just "compilerInfoExtensions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Maybe [Extension]))))))

unknownCompilerInfo :: CompilerId -> AbiTag -> CompilerInfo Source #

Make a CompilerInfo of which only the known information is its CompilerId, its AbiTag and that it does not claim to be compatible with other compiler id's.

data AbiTag Source #

Constructors

NoAbiTag |
AbiTag String |

Instances

Eq AbiTag Source # |
Instance details Methods (==) :: AbiTag -> AbiTag -> Bool # (/=) :: AbiTag -> AbiTag -> Bool #
Read AbiTag Source # |
Instance details Methods readsPrec :: Int -> ReadS AbiTag Source # readList :: ReadS [AbiTag] Source # readPrec :: ReadPrec AbiTag Source # readListPrec :: ReadPrec [AbiTag] Source #
Show AbiTag Source # |
Instance details Methods showsPrec :: Int -> AbiTag -> ShowS Source # show :: AbiTag -> String Source # showList :: [AbiTag] -> ShowS Source #
Generic AbiTag Source # |
Instance details Associated Types type Rep AbiTag :: * -> * Source # Methods from :: AbiTag -> Rep AbiTag x Source # to :: Rep AbiTag x -> AbiTag Source #
Binary AbiTag Source # |
Instance details Methods put :: AbiTag -> Put Source # get :: Get AbiTag Source # putList :: [AbiTag] -> Put Source #
Text AbiTag Source # |
Instance details Methods disp :: AbiTag -> Doc Source # parse :: ReadP r AbiTag Source #
type Rep AbiTag Source # |
Instance details type Rep AbiTag = D1 (MetaData "AbiTag" "Distribution.Compiler" "Cabal-2.2.0.0" False) (C1 (MetaCons "NoAbiTag" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "AbiTag" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 String)))

abiTagString :: AbiTag -> String Source #