Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Cabal-QuickCheck/src/Test/QuickCheck/Instances/Cabal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import Distribution.Types.VersionRange.Internal
import Distribution.Utils.NubList
import Distribution.Verbosity
import Distribution.Version
import Distribution.Types.DebugInfoLevel (DebugInfoLevel)
import Distribution.Types.OptimisationLevel (OptimisationLevel)

import Test.QuickCheck.GenericArbitrary

Expand Down
8 changes: 2 additions & 6 deletions Cabal-syntax/src/Distribution/Parsec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -252,15 +252,11 @@ instance Parsec Bool where
parsec = P.munch1 isAlpha >>= postprocess
where
postprocess str
| str == "True" = pure True
| str == "False" = pure False
| lstr == "true" = parsecWarning PWTBoolCase caseWarning *> pure True
| lstr == "false" = parsecWarning PWTBoolCase caseWarning *> pure False
| lstr == "true" = pure True
| lstr == "false" = pure False
| otherwise = fail $ "Not a boolean: " ++ str
where
lstr = map toLower str
caseWarning =
"Boolean values are case sensitive, use 'True' or 'False'."

instance Parsec a => Parsec (Last a) where
parsec = parsecLast
Expand Down
2 changes: 0 additions & 2 deletions Cabal-syntax/src/Distribution/Parsec/Warning.hs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ data PWarnType
PWTOther
| -- | Invalid UTF encoding
PWTUTF
| -- | @true@ or @false@, not @True@ or @False@
PWTBoolCase
| -- | there are version with tags
PWTVersionTag
| -- | New syntax used, but no @cabal-version: >= 1.2@ specified
Expand Down
1 change: 0 additions & 1 deletion Cabal-tests/tests/ParserTests.hs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ warningTests = testGroup "warnings triggered"
, warningTest PWTLexNBSP "nbsp.cabal"
, warningTest PWTLexTab "tab.cabal"
, warningTest PWTUTF "utf8.cabal"
, warningTest PWTBoolCase "bool.cabal"
, warningTest PWTVersionTag "versiontag.cabal"
, warningTest PWTNewSyntax "newsyntax.cabal"
, warningTest PWTOldSyntax "oldsyntax.cabal"
Expand Down
12 changes: 0 additions & 12 deletions Cabal-tests/tests/ParserTests/warnings/bool.cabal

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ tests = testGroup "Distribution.Simple.Program.GHC"
})
(Platform X86_64 Linux)
(mempty { ghcOptNumJobs = Flag (NumJobs (Just 4)) })
assertListEquals flags ["-j4", "-clear-package-db"]
assertListEquals flags ["-g0", "-j4", "-clear-package-db"]
]
]

Expand Down
14 changes: 8 additions & 6 deletions Cabal-tree-diff/src/Data/TreeDiff/Instances/Cabal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,22 @@ import Distribution.Compiler (CompilerFlavor, CompilerId,
import Distribution.InstalledPackageInfo (AbiDependency, ExposedModule, InstalledPackageInfo)
import Distribution.ModuleName (ModuleName)
import Distribution.PackageDescription
import Distribution.Simple.Compiler (DebugInfoLevel, OptimisationLevel, ProfDetailLevel)
import Distribution.Simple.Compiler (ProfDetailLevel)
import Distribution.Simple.InstallDirs
import Distribution.Simple.InstallDirs.Internal
import Distribution.Simple.InstallDirs.Internal (PathComponent)
import Distribution.Simple.Setup (HaddockTarget, TestShowDetails)
import Distribution.System
import Distribution.System (OS, Arch)
import Distribution.Types.AbiHash (AbiHash)
import Distribution.Types.ComponentId (ComponentId)
import Distribution.Types.DumpBuildInfo (DumpBuildInfo)
import Distribution.Types.PackageVersionConstraint
import Distribution.Types.PackageVersionConstraint (PackageVersionConstraint)
import Distribution.Types.UnitId (DefUnitId, UnitId)
import Distribution.Utils.NubList (NubList)
import Distribution.Utils.Path (SymbolicPathX)
import Distribution.Verbosity
import Distribution.Verbosity.Internal
import Distribution.Verbosity (VerbosityLevel, VerbosityFlags)
import Distribution.Verbosity.Internal (VerbosityFlag)
import Distribution.Types.DebugInfoLevel (DebugInfoLevel)
import Distribution.Types.OptimisationLevel (OptimisationLevel)

import qualified Distribution.Compat.NonEmptySet as NES

Expand Down
2 changes: 2 additions & 0 deletions Cabal/Cabal.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,13 @@ library
Distribution.TestSuite
Distribution.Types.AnnotatedId
Distribution.Types.ComponentInclude
Distribution.Types.DebugInfoLevel
Distribution.Types.DumpBuildInfo
Distribution.Types.PackageName.Magic
Distribution.Types.ComponentLocalBuildInfo
Distribution.Types.LocalBuildConfig
Distribution.Types.LocalBuildInfo
Distribution.Types.OptimisationLevel
Distribution.Types.TargetInfo
Distribution.Types.GivenComponent
Distribution.Types.ParStrat
Expand Down
2 changes: 1 addition & 1 deletion Cabal/src/Distribution/Simple/Build.hs
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ dumpBuildInfo verbosity distPref dumpBuildInfoFlag pkg_descr lbi flags = do
removeFileForcibly buildInfoFile
where
buildInfoFile = interpretSymbolicPathLBI lbi $ buildInfoPref distPref
shouldDumpBuildInfo = fromFlagOrDefault NoDumpBuildInfo dumpBuildInfoFlag == DumpBuildInfo
shouldDumpBuildInfo = fromNoFlag dumpBuildInfoFlag == DumpBuildInfo

-- \| Given the flavor of the compiler, try to find out
-- which program we need.
Expand Down
10 changes: 0 additions & 10 deletions Cabal/src/Distribution/Simple/Command.hs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ module Distribution.Simple.Command
, reqArg'
, optArg
, optArg'
, optArgDef'
, noArg
, boolOpt
, boolOpt'
Expand Down Expand Up @@ -280,15 +279,6 @@ optArg'
optArg' ad mkflag showflag =
optArg ad (succeedReadE (mkflag . Just)) ("", mkflag Nothing) showflag

optArgDef'
:: Monoid b
=> ArgPlaceHolder
-> (String, Maybe String -> b)
-> (b -> [Maybe String])
-> MkOptDescr (a -> b) (b -> a -> a) a
optArgDef' ad (dv, mkflag) showflag =
optArg ad (succeedReadE (mkflag . Just)) (dv, mkflag Nothing) showflag

noArg :: Eq b => b -> MkOptDescr (a -> b) (b -> a -> a) a
noArg flag sf lf d = choiceOpt [(flag, (sf, lf), d)] sf lf d

Expand Down
121 changes: 16 additions & 105 deletions Cabal/src/Distribution/Simple/Compiler.hs
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,6 @@ module Distribution.Simple.Compiler
, coercePackageDBStack
, readPackageDb

-- * Support for optimisation levels
, OptimisationLevel (..)
, flagToOptimisationLevel

-- * Support for debug info levels
, DebugInfoLevel (..)
, flagToDebugInfoLevel

-- * Support for language extensions
, CompilerFlag
, languageToFlags
Expand Down Expand Up @@ -95,22 +87,30 @@ module Distribution.Simple.Compiler
, showProfDetailLevel
) where

import Distribution.Compat.CharParsing
import Distribution.Compat.Prelude
import Distribution.Parsec
import Distribution.Pretty
import Distribution.Parsec (CabalParsing, Parsec (..), parsecToken)
import Distribution.Pretty (prettyShow)
import Prelude ()

import Distribution.Compiler
import Distribution.Package (PackageName)
import Distribution.Simple.Utils
import Distribution.Simple.Utils (lowercase, safeLast)
import Distribution.Types.UnitId (UnitId)
import Distribution.Utils.Path
import Distribution.Version

import Language.Haskell.Extension
( CWD
, FileOrDir (..)
, Pkg
, PkgDB
, SymbolicPath
, getSymbolicPath
, interpretSymbolicPath
, makeSymbolicPath
, symbolicPathRelative_maybe
)
import Distribution.Version (Version, mkVersion)

import Language.Haskell.Extension (Extension, Language (..))

import Data.Bool (bool)
import qualified Data.Map as Map (lookup)
import System.Directory (canonicalizePath)

Expand Down Expand Up @@ -303,95 +303,6 @@ coercePackageDBStack = map coercePackageDB

-- ------------------------------------------------------------

-- * Optimisation levels

-- ------------------------------------------------------------

-- | Some compilers support optimising. Some have different levels.
-- For compilers that do not the level is just capped to the level
-- they do support.
data OptimisationLevel
= NoOptimisation
| NormalOptimisation
| MaximumOptimisation
deriving (Bounded, Enum, Eq, Generic, Read, Show)

instance Binary OptimisationLevel
instance NFData OptimisationLevel
instance Structured OptimisationLevel

instance Parsec OptimisationLevel where
parsec = parsecOptimisationLevel

parsecOptimisationLevel :: CabalParsing m => m OptimisationLevel
parsecOptimisationLevel = boolParser <|> intParser
where
boolParser = bool NoOptimisation NormalOptimisation <$> parsec
intParser = intToOptimisationLevel <$> integral

flagToOptimisationLevel :: Maybe String -> OptimisationLevel
flagToOptimisationLevel Nothing = NormalOptimisation
flagToOptimisationLevel (Just s) = case reads s of
[(i, "")] -> intToOptimisationLevel i
_ -> error $ "Can't parse optimisation level " ++ s

intToOptimisationLevel :: Int -> OptimisationLevel
intToOptimisationLevel i
| i >= minLevel && i <= maxLevel = toEnum i
| otherwise =
error $
"Bad optimisation level: "
++ show i
++ ". Valid values are "
++ show minLevel
++ ".."
++ show maxLevel
where
minLevel = fromEnum (minBound :: OptimisationLevel)
maxLevel = fromEnum (maxBound :: OptimisationLevel)

-- ------------------------------------------------------------

-- * Debug info levels

-- ------------------------------------------------------------

-- | Some compilers support emitting debug info. Some have different
-- levels. For compilers that do not the level is just capped to the
-- level they do support.
data DebugInfoLevel
= NoDebugInfo
| MinimalDebugInfo
| NormalDebugInfo
| MaximalDebugInfo
deriving (Bounded, Enum, Eq, Generic, Read, Show)

instance Binary DebugInfoLevel
instance NFData DebugInfoLevel
instance Structured DebugInfoLevel

instance Parsec DebugInfoLevel where
parsec = parsecDebugInfoLevel

parsecDebugInfoLevel :: CabalParsing m => m DebugInfoLevel
parsecDebugInfoLevel = flagToDebugInfoLevel . pure <$> parsecToken

flagToDebugInfoLevel :: Maybe String -> DebugInfoLevel
flagToDebugInfoLevel Nothing = NormalDebugInfo
flagToDebugInfoLevel (Just s) = case reads s of
[(i, "")]
| i >= fromEnum (minBound :: DebugInfoLevel)
&& i <= fromEnum (maxBound :: DebugInfoLevel) ->
toEnum i
| otherwise ->
error $
"Bad debug info level: "
++ show i
++ ". Valid values are 0..3"
_ -> error $ "Can't parse debug info level " ++ s

-- ------------------------------------------------------------

-- * Languages and Extensions

-- ------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions Cabal/src/Distribution/Simple/Configure.hs
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ import Distribution.Pretty
)
import Distribution.Simple.Errors
import Distribution.Types.AnnotatedId
import Distribution.Types.DebugInfoLevel (DebugInfoLevel (..))
import Distribution.Utils.Path
import Distribution.Utils.Structured (structuredDecodeOrFailIO, structuredEncode)
import System.Directory
Expand Down
14 changes: 14 additions & 0 deletions Cabal/src/Distribution/Simple/Flag.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ module Distribution.Simple.Flag
, maybeToFlag
, mergeListFlag
, BooleanFlag (..)
, NoFlagValue (..)
, fromNoFlag
) where

import Data.Monoid (Last (..))
Expand Down Expand Up @@ -123,3 +125,15 @@ class BooleanFlag a where

instance BooleanFlag Bool where
asBool = id

-- | Flag is a Monoid, with 'NoFlag' as the identity element, and 'Flag' as the binary operation.
--
-- @since 3.18.0.0
class NoFlagValue a where
noFlagValue :: a

-- | Extracts a value from a 'Flag', and returns the 'noFlagValue' on 'NoFlag'.
--
-- @since 3.18.0.0
fromNoFlag :: NoFlagValue a => Flag a -> a
fromNoFlag = fromFlagOrDefault noFlagValue
3 changes: 2 additions & 1 deletion Cabal/src/Distribution/Simple/GHC/Build/Link.hs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import Distribution.Utils.Path
import Distribution.Verbosity
import Distribution.Version

import Distribution.Types.OptimisationLevel (OptimisationLevel (..))
import System.Directory
( createDirectoryIfMissing
, doesDirectoryExist
Expand Down Expand Up @@ -176,7 +177,7 @@ linkOrLoadComponent
`mappend` linkerOpts mempty
`mappend` mempty
{ ghcOptMode = toFlag GhcModeInteractive
, ghcOptOptimisation = toFlag GhcNoOptimisation
, ghcOptOptimisation = toFlag NoOptimisation
}
replOpts_final =
replOpts
Expand Down
Loading
Loading