packages feed

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"