packages feed

lhc-0.10: src/GhcMain.hs

module Main (main) where

import Paths_lhc
import qualified Data.Version as Version
import System.Info
import System.Directory


-- Standard Haskell libraries
import System.IO
import System.Environment
import System.Exit
import System.FilePath
import Control.Monad
import Data.List
import Data.Maybe

import Data.Word (Word)
import Foreign.Storable (sizeOf)
import System.Cmd

import qualified LhcMain as Lhc

getLibdir
    = do appdir <- getAppUserDataDirectory "lhc"
         let targetARCH = arch
             targetOS   = os
         let subdir = targetARCH ++ '-':targetOS ++ '-':Version.showVersion version
         return (appdir </> subdir)

main :: IO ()
main = do Lhc.tryMain -- This call will terminate the program if it recognizes the command arguments.
          ghcMain


ghcMain :: IO ()
ghcMain = do libdir <- getLibdir
             args <- getArgs
             let wordSize = sizeOf (undefined :: Word)
             system $ unwords (["ghc","-fext-core","-B"++libdir,"-no-user-package-conf","-D__LHC__"
                               ,"-DWORD_SIZE="++show wordSize
                               ,"-DWORD_SIZE_IN_BITS="++show (wordSize*8)] ++ args)
             return ()