module Distribution.Simple.Program.Builtin (
builtinPrograms,
ghcProgram,
ghcPkgProgram,
runghcProgram,
ghcjsProgram,
ghcjsPkgProgram,
hmakeProgram,
jhcProgram,
haskellSuiteProgram,
haskellSuitePkgProgram,
uhcProgram,
gccProgram,
arProgram,
stripProgram,
happyProgram,
alexProgram,
hsc2hsProgram,
c2hsProgram,
cpphsProgram,
hscolourProgram,
doctestProgram,
haddockProgram,
greencardProgram,
ldProgram,
tarProgram,
cppProgram,
pkgConfigProgram,
hpcProgram,
) where
import Prelude ()
import Distribution.Compat.Prelude
import Distribution.Simple.Program.GHC
import Distribution.Simple.Program.Find
import Distribution.Simple.Program.Internal
import Distribution.Simple.Program.Run
import Distribution.Simple.Program.Types
import Distribution.Simple.Utils
import Distribution.Compat.Exception
import Distribution.Verbosity
import Distribution.Version
import qualified Data.Map as Map
builtinPrograms :: [Program]
builtinPrograms :: [Program]
builtinPrograms =
[
Program
ghcProgram
, Program
runghcProgram
, Program
ghcPkgProgram
, Program
ghcjsProgram
, Program
ghcjsPkgProgram
, Program
haskellSuiteProgram
, Program
haskellSuitePkgProgram
, Program
hmakeProgram
, Program
jhcProgram
, Program
uhcProgram
, Program
hpcProgram
, Program
hscolourProgram
, Program
doctestProgram
, Program
haddockProgram
, Program
happyProgram
, Program
alexProgram
, Program
hsc2hsProgram
, Program
c2hsProgram
, Program
cpphsProgram
, Program
greencardProgram
, Program
gccProgram
, Program
arProgram
, Program
stripProgram
, Program
ldProgram
, Program
tarProgram
, Program
pkgConfigProgram
]
ghcProgram :: Program
ghcProgram :: Program
ghcProgram = (String -> Program
simpleProgram String
"ghc") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--numeric-version" String -> String
forall a. a -> a
id,
programPostConf :: Verbosity -> ConfiguredProgram -> IO ConfiguredProgram
programPostConf = \Verbosity
_verbosity ConfiguredProgram
ghcProg ->
do let ghcProg' :: ConfiguredProgram
ghcProg' = ConfiguredProgram
ghcProg {
programOverrideEnv :: [(String, Maybe String)]
programOverrideEnv = (String
"LANGUAGE", String -> Maybe String
forall a. a -> Maybe a
Just String
"en")
(String, Maybe String)
-> [(String, Maybe String)] -> [(String, Maybe String)]
forall a. a -> [a] -> [a]
: ConfiguredProgram -> [(String, Maybe String)]
programOverrideEnv ConfiguredProgram
ghcProg
}
affectedVersionRange :: VersionRange
affectedVersionRange = VersionRange -> VersionRange -> VersionRange
intersectVersionRanges
(Version -> VersionRange
laterVersion (Version -> VersionRange) -> Version -> VersionRange
forall a b. (a -> b) -> a -> b
$ [Int] -> Version
mkVersion [Int
7,Int
8,Int
0])
(Version -> VersionRange
earlierVersion (Version -> VersionRange) -> Version -> VersionRange
forall a b. (a -> b) -> a -> b
$ [Int] -> Version
mkVersion [Int
7,Int
8,Int
4])
ConfiguredProgram -> IO ConfiguredProgram
forall (m :: * -> *) a. Monad m => a -> m a
return (ConfiguredProgram -> IO ConfiguredProgram)
-> ConfiguredProgram -> IO ConfiguredProgram
forall a b. (a -> b) -> a -> b
$ ConfiguredProgram
-> (Version -> ConfiguredProgram)
-> Maybe Version
-> ConfiguredProgram
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ConfiguredProgram
ghcProg
(\Version
v -> if Version -> VersionRange -> Bool
withinRange Version
v VersionRange
affectedVersionRange
then ConfiguredProgram
ghcProg' else ConfiguredProgram
ghcProg)
(ConfiguredProgram -> Maybe Version
programVersion ConfiguredProgram
ghcProg),
programNormaliseArgs :: Maybe Version -> PackageDescription -> [String] -> [String]
programNormaliseArgs = Maybe Version -> PackageDescription -> [String] -> [String]
normaliseGhcArgs
}
runghcProgram :: Program
runghcProgram :: Program
runghcProgram = (String -> Program
simpleProgram String
"runghc") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
ghcPkgProgram :: Program
ghcPkgProgram :: Program
ghcPkgProgram = (String -> Program
simpleProgram String
"ghc-pkg") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
_:String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
ghcjsProgram :: Program
ghcjsProgram :: Program
ghcjsProgram = (String -> Program
simpleProgram String
"ghcjs") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--numeric-ghcjs-version" String -> String
forall a. a -> a
id
}
ghcjsPkgProgram :: Program
ghcjsPkgProgram :: Program
ghcjsPkgProgram = (String -> Program
simpleProgram String
"ghcjs-pkg") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
_:String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
hmakeProgram :: Program
hmakeProgram :: Program
hmakeProgram = (String -> Program
simpleProgram String
"hmake") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
jhcProgram :: Program
jhcProgram :: Program
jhcProgram = (String -> Program
simpleProgram String
"jhc") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
uhcProgram :: Program
uhcProgram :: Program
uhcProgram = (String -> Program
simpleProgram String
"uhc") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version-dotted" String -> String
forall a. a -> a
id
}
hpcProgram :: Program
hpcProgram :: Program
hpcProgram = (String -> Program
simpleProgram String
"hpc")
{
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_ : String
_ : String
_ : String
ver : [String]
_) -> String
ver
[String]
_ -> String
""
}
haskellSuiteProgram :: Program
haskellSuiteProgram :: Program
haskellSuiteProgram = (String -> Program
simpleProgram String
"haskell-suite") {
programFindLocation :: Verbosity -> ProgramSearchPath -> IO (Maybe (String, [String]))
programFindLocation = \Verbosity
_verbosity ProgramSearchPath
_searchPath ->
Maybe (String, [String]) -> IO (Maybe (String, [String]))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (String, [String]) -> IO (Maybe (String, [String])))
-> Maybe (String, [String]) -> IO (Maybe (String, [String]))
forall a b. (a -> b) -> a -> b
$ (String, [String]) -> Maybe (String, [String])
forall a. a -> Maybe a
Just (String
"haskell-suite-dummy-location", [])
}
haskellSuitePkgProgram :: Program
haskellSuitePkgProgram :: Program
haskellSuitePkgProgram = (String -> Program
simpleProgram String
"haskell-suite-pkg") {
programFindLocation :: Verbosity -> ProgramSearchPath -> IO (Maybe (String, [String]))
programFindLocation = \Verbosity
_verbosity ProgramSearchPath
_searchPath ->
Maybe (String, [String]) -> IO (Maybe (String, [String]))
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe (String, [String]) -> IO (Maybe (String, [String])))
-> Maybe (String, [String]) -> IO (Maybe (String, [String]))
forall a b. (a -> b) -> a -> b
$ (String, [String]) -> Maybe (String, [String])
forall a. a -> Maybe a
Just (String
"haskell-suite-pkg-dummy-location", [])
}
happyProgram :: Program
happyProgram :: Program
happyProgram = (String -> Program
simpleProgram String
"happy") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
alexProgram :: Program
alexProgram :: Program
alexProgram = (String -> Program
simpleProgram String
"alex") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
ver:[String]
_) -> (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (\Char
x -> Char -> Bool
isDigit Char
x Bool -> Bool -> Bool
|| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'.') String
ver
[String]
_ -> String
""
}
gccProgram :: Program
gccProgram :: Program
gccProgram = (String -> Program
simpleProgram String
"gcc") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"-dumpversion" String -> String
forall a. a -> a
id
}
arProgram :: Program
arProgram :: Program
arProgram = String -> Program
simpleProgram String
"ar"
stripProgram :: Program
stripProgram :: Program
stripProgram = (String -> Program
simpleProgram String
"strip") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = \Verbosity
verbosity ->
String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" String -> String
stripExtractVersion (Verbosity -> Verbosity
lessVerbose Verbosity
verbosity)
}
hsc2hsProgram :: Program
hsc2hsProgram :: Program
hsc2hsProgram = (String -> Program
simpleProgram String
"hsc2hs") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion =
String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
c2hsProgram :: Program
c2hsProgram :: Program
c2hsProgram = (String -> Program
simpleProgram String
"c2hs") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--numeric-version" String -> String
forall a. a -> a
id
}
cpphsProgram :: Program
cpphsProgram :: Program
cpphsProgram = (String -> Program
simpleProgram String
"cpphs") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
hscolourProgram :: Program
hscolourProgram :: Program
hscolourProgram = (String -> Program
simpleProgram String
"hscolour") {
programFindLocation :: Verbosity -> ProgramSearchPath -> IO (Maybe (String, [String]))
programFindLocation = \Verbosity
v ProgramSearchPath
p -> Verbosity
-> ProgramSearchPath -> String -> IO (Maybe (String, [String]))
findProgramOnSearchPath Verbosity
v ProgramSearchPath
p String
"HsColour",
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"-version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
doctestProgram :: Program
doctestProgram :: Program
doctestProgram = (String -> Program
simpleProgram String
"doctest") {
programFindLocation :: Verbosity -> ProgramSearchPath -> IO (Maybe (String, [String]))
programFindLocation = \Verbosity
v ProgramSearchPath
p -> Verbosity
-> ProgramSearchPath -> String -> IO (Maybe (String, [String]))
findProgramOnSearchPath Verbosity
v ProgramSearchPath
p String
"doctest"
, programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
ver:[String]
_) -> String
ver
[String]
_ -> String
""
}
haddockProgram :: Program
haddockProgram :: Program
haddockProgram = (String -> Program
simpleProgram String
"haddock") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" ((String -> String) -> Verbosity -> String -> IO (Maybe Version))
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \String
str ->
case String -> [String]
words String
str of
(String
_:String
_:String
ver:[String]
_) -> (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
takeWhile (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` (Char
'.'Char -> String -> String
forall a. a -> [a] -> [a]
:[Char
'0'..Char
'9'])) String
ver
[String]
_ -> String
"",
programNormaliseArgs :: Maybe Version -> PackageDescription -> [String] -> [String]
programNormaliseArgs = \Maybe Version
_ PackageDescription
_ [String]
args -> [String]
args
}
greencardProgram :: Program
greencardProgram :: Program
greencardProgram = String -> Program
simpleProgram String
"greencard"
ldProgram :: Program
ldProgram :: Program
ldProgram = String -> Program
simpleProgram String
"ld"
tarProgram :: Program
tarProgram :: Program
tarProgram = (String -> Program
simpleProgram String
"tar") {
programPostConf :: Verbosity -> ConfiguredProgram -> IO ConfiguredProgram
programPostConf = \Verbosity
verbosity ConfiguredProgram
tarProg -> do
String
tarHelpOutput <- Verbosity -> ProgramInvocation -> IO String
getProgramInvocationOutput
Verbosity
verbosity (ConfiguredProgram -> [String] -> ProgramInvocation
programInvocation ConfiguredProgram
tarProg [String
"--help"])
IO String -> (IOException -> IO String) -> IO String
forall a. IO a -> (IOException -> IO a) -> IO a
`catchIO` (\IOException
_ -> String -> IO String
forall (m :: * -> *) a. Monad m => a -> m a
return String
"")
let k :: String
k = String
"Supports --format"
v :: String
v = if (String
"--format" String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isInfixOf` String
tarHelpOutput) then String
"YES" else String
"NO"
m :: Map String String
m = String -> String -> Map String String -> Map String String
forall k a. Ord k => k -> a -> Map k a -> Map k a
Map.insert String
k String
v (ConfiguredProgram -> Map String String
programProperties ConfiguredProgram
tarProg)
ConfiguredProgram -> IO ConfiguredProgram
forall (m :: * -> *) a. Monad m => a -> m a
return (ConfiguredProgram -> IO ConfiguredProgram)
-> ConfiguredProgram -> IO ConfiguredProgram
forall a b. (a -> b) -> a -> b
$ ConfiguredProgram
tarProg { programProperties :: Map String String
programProperties = Map String String
m }
}
cppProgram :: Program
cppProgram :: Program
cppProgram = String -> Program
simpleProgram String
"cpp"
pkgConfigProgram :: Program
pkgConfigProgram :: Program
pkgConfigProgram = (String -> Program
simpleProgram String
"pkg-config") {
programFindVersion :: Verbosity -> String -> IO (Maybe Version)
programFindVersion = String
-> (String -> String) -> Verbosity -> String -> IO (Maybe Version)
findProgramVersion String
"--version" String -> String
forall a. a -> a
id
}