uhc-light-1.1.7.0: src/UHC/Light/Compiler/Config.hs
module UHC.Light.Compiler.Config
( module UHC.Light.Compiler.ConfigInstall
, Version (..)
, version
, verInfo
, module UHC.Light.Compiler.ConfigDefines
, installRootM
, installRoot
, installVariant
, mkInstallFilePrefixM
, mkInstallFilePrefix
, mkInstallBindirPrefixM
, mkInstallBindirPrefix
, mkInstalledRtsM
, mkInstalledRts
, shellCmdGcc
, libnamesGcc
, libnamesRts
, ehcGccOptsStatic, ehcGccOptsStatic'
, libnamesGccEhcExtraExternalLibs
, mbSuffixExec, linkerSymbolPrefix
, suffixDotlessBinaryCore, suffixDotlessInputOutputBinaryCore, suffixDotlessOutputTextualCore, suffixDotlessInputOutputTextualCore
, suffixDotlessInputOutputCoreRun
, mkInstallPkgdirSystemM
, 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
import qualified UHC.Light.Compiler.ConfigCabal as Cfg
{-# LINE 37 "src/ehc/Config.chs" #-}
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
}
{-# LINE 58 "src/ehc/Config.chs" #-}
version :: Version
version
= Version
{ verSvnRevision = ehcSvnRevision
, verMajor = "1"
, verMinor = "1"
, verMinorMinor = "7"
, verMinorMinorMinor = "0"
, verQuality = "alpha"
, verShort = "1.1"
, verMedium = "1.1.7"
, verFull = "1.1.7.0"
, verAsNumber = "1170"
, verProg = "ehc"
}
{-# LINE 80 "src/ehc/Config.chs" #-}
verInfo :: Version -> String
verInfo v =
verProg v ++ "-" ++ verFull v ++ ", revision " ++ verSvnRevision v
{-# LINE 93 "src/ehc/Config.chs" #-}
-- | Get the installation root, in order of cabal specified (when installed as such), cmd line, builtin
installRootM :: EHCOpts -> IO String
installRootM opts = do
d <- Cfg.getDataDir
if null d
then maybe (return envroot) return (ehcOptCfgInstallRoot opts)
else return d
where envroot = ehcenvInstallRoot $ ehcOptEnvironment opts
{-# LINE 112 "src/ehc/Config.chs" #-}
installRoot :: EHCOpts -> String
installRoot opts
= maybe envroot id (ehcOptCfgInstallRoot opts)
where envroot = ehcenvInstallRoot $ ehcOptEnvironment opts
{-# LINE 123 "src/ehc/Config.chs" #-}
installVariant :: EHCOpts -> String
installVariant opts
= maybe envvariant id (ehcOptCfgInstallVariant opts)
where envvariant = ehcenvVariant $ ehcOptEnvironment opts
{-# LINE 138 "src/ehc/Config.chs" #-}
mkInstallFilePrefixM :: EHCOpts -> WhatInstallFile -> String -> String -> IO String
mkInstallFilePrefixM opts whatfile variant pkg
= installRootM opts >>= \r -> return $ mkDirbasedInstallPrefix r whatfile variant (show $ ehcOptTarget opts) pkg
{-# LINE 144 "src/ehc/Config.chs" #-}
mkInstallFilePrefix :: EHCOpts -> WhatInstallFile -> String -> String -> String
mkInstallFilePrefix opts whatfile variant pkg
= mkDirbasedInstallPrefix (installRoot opts) whatfile variant (show $ ehcOptTarget opts) pkg
{-# LINE 150 "src/ehc/Config.chs" #-}
mkInstallBindirPrefixM :: EHCOpts -> String -> IO String
mkInstallBindirPrefixM opts variant
= installRootM opts >>= \r -> return $ mkDirbasedInstallPrefix r INST_BIN variant "" ""
{-# LINE 156 "src/ehc/Config.chs" #-}
mkInstallBindirPrefix :: EHCOpts -> String -> String
mkInstallBindirPrefix opts variant
= mkDirbasedInstallPrefix (installRoot opts) INST_BIN variant "" ""
{-# LINE 162 "src/ehc/Config.chs" #-}
mkInstallPkgdirSystemM :: EHCOpts -> IO String
mkInstallPkgdirSystemM opts
= fmap filePathUnPrefix $ mkInstallFilePrefixM opts INST_LIB_PKG2 (installVariant opts) ""
{-# LINE 168 "src/ehc/Config.chs" #-}
mkInstallPkgdirSystem :: EHCOpts -> String
mkInstallPkgdirSystem opts
= filePathUnPrefix $ mkInstallFilePrefix opts INST_LIB_PKG2 (installVariant opts) ""
{-# LINE 174 "src/ehc/Config.chs" #-}
mkInstallPkgdirUser :: EHCOpts -> String
mkInstallPkgdirUser opts
= filePathCoalesceSeparator $ filePathUnPrefix $ mkDirbasedInstallPrefix (ehcOptUserDir opts) INST_LIB_PKG2 "" (show $ ehcOptTarget opts) ""
{-# LINE 180 "src/ehc/Config.chs" #-}
-- | construct path for RTS
mkInstalledRtsM :: EHCOpts -> (String -> String -> String) -> WhatInstallFile -> String -> String -> IO String
mkInstalledRtsM opts mkLib how variant rts
= mkInstallFilePrefixM opts how variant rts >>= \p -> return $ mkLib p rts
{-# LINE 187 "src/ehc/Config.chs" #-}
-- | construct path for RTS
mkInstalledRts :: EHCOpts -> (String -> String -> String) -> WhatInstallFile -> String -> String -> String
mkInstalledRts opts mkLib how variant rts = mkLib (mkInstallFilePrefix opts how variant rts) rts
{-# LINE 197 "src/ehc/Config.chs" #-}
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)
{-# LINE 208 "src/ehc/Config.chs" #-}
shellCmdGcc :: String
shellCmdGcc = "/usr/bin/gcc"
{-# LINE 233 "src/ehc/Config.chs" #-}
shellCmdCpp :: String
shellCmdCpp = "/usr/bin/cpp"
{-# LINE 238 "src/ehc/Config.chs" #-}
shellCmdAr :: String
shellCmdAr = "/usr/bin/ar"
{-# LINE 243 "src/ehc/Config.chs" #-}
shellCmdRanlib :: String
shellCmdRanlib = "/usr/bin/ranlib -c"
{-# LINE 248 "src/ehc/Config.chs" #-}
shellCmdLibtoolStatic :: String
shellCmdLibtoolStatic = "/usr/bin/libtool"
{-# LINE 253 "src/ehc/Config.chs" #-}
shellCmdLibtoolStaticOpts :: String
shellCmdLibtoolStaticOpts = "-static -o"
{-# LINE 258 "src/ehc/Config.chs" #-}
mkShellCmdLibtool :: String -> [String] -> [[String]]
mkShellCmdLibtool archive files
= if True -- "/usr/bin/libtool" == "no"
then [ [shellCmdAr,"-r","-s",archive] ++ files
-- , [shellCmdRanlib,archive]
]
else [ [shellCmdLibtoolStatic,shellCmdLibtoolStaticOpts,archive] ++ files
]
{-# LINE 273 "src/ehc/Config.chs" #-}
libnamesGcc :: EHCOpts -> [String]
libnamesGcc opts
= [ ]
++ (if useBoehmGC opts
then [ "gc" ]
else []
)
++ (if mpLib == MPLib_GMP
then [ "gmp" ]
else []
)
{-# LINE 291 "src/ehc/Config.chs" #-}
libnamesRts :: [String]
libnamesRts
= [ prefixLib ++ "EH-RTS"]
{-# LINE 297 "src/ehc/Config.chs" #-}
ehcGccOptsStatic' :: CmdLineOpts
ehcGccOptsStatic' = fst $ parseCmdLineOpts Cmd_C ""
ehcGccOptsStatic :: [String]
ehcGccOptsStatic = map show ehcGccOptsStatic'
{-# LINE 318 "src/ehc/Config.chs" #-}
libnamesGccEhcExtraExternalLibs :: [String]
libnamesGccEhcExtraExternalLibs
= words
( ""
++ " m"
)
{-# LINE 333 "src/ehc/Config.chs" #-}
prefixLib :: String
prefixLib = ""
{-# LINE 338 "src/ehc/Config.chs" #-}
suffixExec :: String
suffixExec = ""
mbSuffixExec :: Maybe String
mbSuffixExec
= case suffixExec of
('.':s) -> Just s
"" -> Nothing
s -> Just s
linkerSymbolPrefix :: String
linkerSymbolPrefix = "_"
{-# LINE 354 "src/ehc/Config.chs" #-}
-- | Suffix (dotless) for binary core files, to be read in as part of the compilation process
suffixDotlessBinaryCore :: String
suffixDotlessBinaryCore = "cr"
-- | Suffix (dotless) for binary dumped/output core files
suffixDotlessInputOutputBinaryCore :: String
suffixDotlessInputOutputBinaryCore = "bcr"
-- | Suffix (dotless) for textually dumped/output core files
suffixDotlessOutputTextualCore :: String
suffixDotlessOutputTextualCore = "tcr"
-- | Suffix (dotless) for textually read core files
suffixDotlessInputOutputTextualCore :: String
suffixDotlessInputOutputTextualCore = suffixDotlessOutputTextualCore
{-# LINE 373 "src/ehc/Config.chs" #-}
-- | Suffix (dotless) for CoreRun files
suffixDotlessInputOutputCoreRun :: String
suffixDotlessInputOutputCoreRun = "rcr"