module UHC.Light.Compiler.Config
( module UHC.Light.Compiler.ConfigInstall
, Version (..)
, version
, verInfo
, module UHC.Light.Compiler.ConfigDefines
, installRoot
, installVariant
, mkInstallFilePrefix
, mkInstallBindirPrefix
, mkInstalledRts
, shellCmdGcc
, libnamesGcc
, libnamesRts
, ehcGccOptsStatic, ehcGccOptsStatic'
, libnamesGccEhcExtraExternalLibs
, mbSuffixExec, linkerSymbolPrefix
, suffixDotlessBinaryCore, suffixDotlessInputOutputBinaryCore, suffixDotlessOutputTextualCore, suffixDotlessInputOutputTextualCore
, suffixDotlessInputOutputCoreRun
, mkInstallPkgdirSystem
, mkInstallPkgdirUser
, shellCmdOverride
, shellCmdCpp
, shellCmdAr
, shellCmdRanlib
, shellCmdLibtoolStatic
, shellCmdLibtoolStaticOpts
, mkShellCmdLibtool )
where
import UHC.Light.Compiler.ConfigInstall
import Data.Maybe
import Data.List
import UHC.Util.Utils
import UHC.Util.FPath
import qualified Data.Map as Map
import UHC.Light.Compiler.Opts.CommandLine
import UHC.Light.Compiler.ConfigDefines
import UHC.Light.Compiler.Opts.Base
import UHC.Light.Compiler.EHC.Environment
data Version
= Version
{ verSvnRevision :: !String
, verMajor :: !String
, verMinor :: !String
, verMinorMinor :: !String
, verMinorMinorMinor :: !String
, verQuality :: !String
, verShort :: !String
, verMedium :: !String
, verFull :: !String
, verAsNumber :: !String
, verProg :: !String
}
version :: Version
version
= Version
{ verSvnRevision = ehcSvnRevision
, verMajor = "1"
, verMinor = "1"
, verMinorMinor = "8"
, verMinorMinorMinor = "3"
, verQuality = "alpha"
, verShort = "1.1"
, verMedium = "1.1.8"
, verFull = "1.1.8.3"
, verAsNumber = "1183"
, verProg = "ehc"
}
verInfo :: Version -> String
verInfo v =
verProg v ++ "-" ++ verFull v ++ ", revision " ++ verSvnRevision v
installRoot :: EHCOpts -> String
installRoot opts
= maybe envroot id (ehcOptCfgInstallRoot opts)
where envroot = ehcenvInstallRoot $ ehcOptEnvironment opts
installVariant :: EHCOpts -> String
installVariant opts
= maybe envvariant id (ehcOptCfgInstallVariant opts)
where envvariant = ehcenvVariant $ ehcOptEnvironment opts
mkInstallFilePrefix :: EHCOpts -> WhatInstallFile -> String -> String -> String
mkInstallFilePrefix opts whatfile variant pkg
= mkDirbasedInstallPrefix (installRoot opts) whatfile variant (show $ ehcOptTarget opts) pkg
mkInstallBindirPrefix :: EHCOpts -> String -> String
mkInstallBindirPrefix opts variant
= mkDirbasedInstallPrefix (installRoot opts) INST_BIN variant "" ""
mkInstallPkgdirSystem :: EHCOpts -> String
mkInstallPkgdirSystem opts
= filePathUnPrefix $ mkInstallFilePrefix opts INST_LIB_PKG2 (installVariant opts) ""
mkInstallPkgdirUser :: EHCOpts -> String
mkInstallPkgdirUser opts
= filePathCoalesceSeparator $ filePathUnPrefix $ mkDirbasedInstallPrefix (ehcOptUserDir opts) INST_LIB_PKG2 "" (show $ ehcOptTarget opts) ""
mkInstalledRts :: EHCOpts -> (String -> String -> String) -> WhatInstallFile -> String -> String -> String
mkInstalledRts opts mkLib how variant rts = mkLib (mkInstallFilePrefix opts how variant rts) rts
shellCmdOverride'' :: (cmd -> Maybe FilePath) -> FilePath -> cmd -> FilePath
shellCmdOverride'' override base cmd = maybe base id $ override cmd
shellCmdOverride' :: Ord cmd => Map.Map cmd FilePath -> FilePath -> cmd -> FilePath
shellCmdOverride' override = shellCmdOverride'' (flip Map.lookup override)
shellCmdOverride :: EHCOpts -> FilePath -> PgmExec -> FilePath
shellCmdOverride opts = shellCmdOverride' (ehcOptPgmExecMp opts)
shellCmdGcc :: String
shellCmdGcc = "/usr/bin/gcc"
shellCmdCpp :: String
shellCmdCpp = "/usr/bin/cpp"
shellCmdAr :: String
shellCmdAr = "/usr/bin/ar"
shellCmdRanlib :: String
shellCmdRanlib = "/usr/bin/ranlib -c"
shellCmdLibtoolStatic :: String
shellCmdLibtoolStatic = "/usr/bin/libtool"
shellCmdLibtoolStaticOpts :: String
shellCmdLibtoolStaticOpts = "-static -o"
mkShellCmdLibtool :: String -> [String] -> [[String]]
mkShellCmdLibtool archive files
= if True
then [ [shellCmdAr,"-r","-s",archive] ++ files
]
else [ [shellCmdLibtoolStatic,shellCmdLibtoolStaticOpts,archive] ++ files
]
libnamesGcc :: EHCOpts -> [String]
libnamesGcc opts
= [ ]
++ (if useBoehmGC opts
then [ "gc" ]
else []
)
++ (if mpLib == MPLib_GMP
then [ "gmp" ]
else []
)
libnamesRts :: [String]
libnamesRts
= [ prefixLib ++ "EH-RTS"]
ehcGccOptsStatic' :: CmdLineOpts
ehcGccOptsStatic' = fst $ parseCmdLineOpts Cmd_C ""
ehcGccOptsStatic :: [String]
ehcGccOptsStatic = map show ehcGccOptsStatic'
libnamesGccEhcExtraExternalLibs :: [String]
libnamesGccEhcExtraExternalLibs
= words
( ""
++ " m"
)
prefixLib :: String
prefixLib = ""
suffixExec :: String
suffixExec = ""
mbSuffixExec :: Maybe String
mbSuffixExec
= case suffixExec of
('.':s) -> Just s
"" -> Nothing
s -> Just s
linkerSymbolPrefix :: String
linkerSymbolPrefix = "_"
suffixDotlessBinaryCore :: String
suffixDotlessBinaryCore = "cr"
suffixDotlessInputOutputBinaryCore :: String
suffixDotlessInputOutputBinaryCore = "bcr"
suffixDotlessOutputTextualCore :: String
suffixDotlessOutputTextualCore = "tcr"
suffixDotlessInputOutputTextualCore :: String
suffixDotlessInputOutputTextualCore = suffixDotlessOutputTextualCore
suffixDotlessInputOutputCoreRun :: String
suffixDotlessInputOutputCoreRun = "rcr"