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
, suffixDotlessBinaryCoreRun, suffixDotlessInputOutputBinaryCoreRun, suffixDotlessOutputTextualCoreRun, suffixDotlessInputOutputTextualCoreRun
, 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



{-# LINE 34 "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 55 "src/ehc/Config.chs" #-}
version :: Version
version
  = Version
      { verSvnRevision      = ehcSvnRevision
      , verMajor            = "1"
      , verMinor            = "1"
      , verMinorMinor       = "9"
      , verMinorMinorMinor  = "0"
      , verQuality          = "alpha"
      , verShort            = "1.1"
      , verMedium           = "1.1.9"
      , verFull             = "1.1.9.0"
      , verAsNumber         = "1010900"
      , verProg             = "ehc"
      }

{-# LINE 77 "src/ehc/Config.chs" #-}
verInfo :: Version -> String
verInfo v =
  verProg v ++ "-" ++ verFull v ++ ", revision " ++ verSvnRevision v

{-# LINE 90 "src/ehc/Config.chs" #-}
installRoot :: EHCOpts -> String
installRoot opts
  = maybe envroot id (ehcOptCfgInstallRoot opts)
  where envroot = ehcenvInstallRoot $ ehcOptEnvironment opts

{-# LINE 101 "src/ehc/Config.chs" #-}
installVariant :: EHCOpts -> String
installVariant opts
  = maybe envvariant id (ehcOptCfgInstallVariant opts)
  where envvariant = ehcenvVariant $ ehcOptEnvironment opts

{-# LINE 116 "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 122 "src/ehc/Config.chs" #-}
mkInstallBindirPrefix :: EHCOpts -> String -> String
mkInstallBindirPrefix opts variant
  = mkDirbasedInstallPrefix (installRoot opts) INST_BIN variant "" ""

{-# LINE 128 "src/ehc/Config.chs" #-}
mkInstallPkgdirSystem :: EHCOpts -> String
mkInstallPkgdirSystem opts
  = filePathUnPrefix $ mkInstallFilePrefix opts INST_LIB_PKG2 (installVariant opts) ""

{-# LINE 134 "src/ehc/Config.chs" #-}
mkInstallPkgdirUser :: EHCOpts -> String
mkInstallPkgdirUser opts
  = filePathCoalesceSeparator $ filePathUnPrefix $ mkDirbasedInstallPrefix (ehcOptUserDir opts) INST_LIB_PKG2 "" (show $ ehcOptTarget opts) ""

{-# LINE 140 "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 150 "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 161 "src/ehc/Config.chs" #-}
shellCmdGcc :: String
shellCmdGcc = "/usr/bin/gcc"

{-# LINE 186 "src/ehc/Config.chs" #-}
shellCmdCpp :: String
shellCmdCpp = "/usr/bin/cpp"

{-# LINE 191 "src/ehc/Config.chs" #-}
shellCmdAr :: String
shellCmdAr = "/usr/bin/ar"

{-# LINE 196 "src/ehc/Config.chs" #-}
shellCmdRanlib :: String
shellCmdRanlib = "/usr/bin/ranlib -c"

{-# LINE 201 "src/ehc/Config.chs" #-}
shellCmdLibtoolStatic :: String
shellCmdLibtoolStatic = "/usr/bin/libtool"

{-# LINE 206 "src/ehc/Config.chs" #-}
shellCmdLibtoolStaticOpts :: String
shellCmdLibtoolStaticOpts = "-static -o"

{-# LINE 211 "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 226 "src/ehc/Config.chs" #-}
libnamesGcc :: EHCOpts -> [String]
libnamesGcc opts
  = [ ]
    ++ (if useBoehmGC opts
        then [ "gc" ]
        else []
       )
    ++ (if mpLib == MPLib_GMP
        then [ "gmp" ]
        else []
       )

{-# LINE 244 "src/ehc/Config.chs" #-}
libnamesRts :: [String]
libnamesRts
  = [ prefixLib ++ "EH-RTS"]

{-# LINE 250 "src/ehc/Config.chs" #-}
ehcGccOptsStatic' :: CmdLineOpts
ehcGccOptsStatic' = fst $ parseCmdLineOpts Cmd_C ""

ehcGccOptsStatic :: [String]
ehcGccOptsStatic = map show ehcGccOptsStatic'

{-# LINE 271 "src/ehc/Config.chs" #-}
libnamesGccEhcExtraExternalLibs :: [String]
libnamesGccEhcExtraExternalLibs
  = words
      (  ""
      ++ " m"
      )

{-# LINE 286 "src/ehc/Config.chs" #-}
prefixLib :: String
prefixLib = ""

{-# LINE 291 "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 307 "src/ehc/Config.chs" #-}
-- | Suffix (dotless) for binary corerun files, to be read in as part of the compilation process
suffixDotlessBinaryCoreRun :: String
suffixDotlessBinaryCoreRun = "crr"

-- | Suffix (dotless) for binary dumped/output corerun files
suffixDotlessInputOutputBinaryCoreRun :: String
suffixDotlessInputOutputBinaryCoreRun = "bcrr"

-- | Suffix (dotless) for textually dumped/output corerun files
suffixDotlessOutputTextualCoreRun :: String
suffixDotlessOutputTextualCoreRun = "tcrr"

-- | Suffix (dotless) for textually read corerun files
suffixDotlessInputOutputTextualCoreRun :: String
suffixDotlessInputOutputTextualCoreRun = suffixDotlessOutputTextualCoreRun

{-# LINE 325 "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 344 "src/ehc/Config.chs" #-}
-- | Suffix (dotless) for CoreRun files
suffixDotlessInputOutputCoreRun :: String
suffixDotlessInputOutputCoreRun = "rcr"