ghcwrapper.hs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. {-
  2. wrapper executable that captures arguments to ghc, ar or ld
  3. -}
  4. {-# LANGUAGE CPP #-}
  5. module Main where
  6. import Control.Monad (when)
  7. import Data.Maybe (fromMaybe)
  8. import Distribution.Compiler (CompilerFlavor (..))
  9. import qualified Distribution.Simple.Configure as D
  10. import Distribution.Simple.Program (arProgram,
  11. defaultProgramConfiguration,
  12. ghcProgram, ldProgram,
  13. programPath)
  14. import Distribution.Simple.Program.Db (configureAllKnownPrograms,
  15. lookupProgram)
  16. import Distribution.Simple.Program.Types (Program (..))
  17. import Distribution.Verbosity (silent)
  18. import System.Directory (doesDirectoryExist)
  19. import System.Environment (getArgs)
  20. import System.Exit (ExitCode (..), exitWith)
  21. import System.IO (hPutStrLn, stderr)
  22. import System.Process (rawSystem, readProcess)
  23. #ifdef LDCMD
  24. cmd :: Program
  25. cmd = ldProgram
  26. outFile = "yesod-devel/ldargs.txt"
  27. #else
  28. #ifdef ARCMD
  29. cmd :: Program
  30. cmd = arProgram
  31. outFile ="yesod-devel/arargs.txt"
  32. #else
  33. cmd :: Program
  34. cmd = ghcProgram
  35. outFile = "yesod-devel/ghcargs.txt"
  36. #endif
  37. #endif
  38. runProgram :: Program -> [String] -> IO ExitCode
  39. runProgram pgm args = do
  40. #if MIN_VERSION_Cabal(1,18,0)
  41. (_, comp, pgmc) <- D.configCompilerEx (Just GHC) Nothing Nothing defaultProgramConfiguration silent
  42. #else
  43. (comp, pgmc) <- D.configCompiler (Just GHC) Nothing Nothing defaultProgramConfiguration silent
  44. #endif
  45. pgmc' <- configureAllKnownPrograms silent pgmc
  46. case lookupProgram pgm pgmc' of
  47. Nothing -> do
  48. hPutStrLn stderr ("cannot find program '" ++ programName pgm ++ "'")
  49. return (ExitFailure 1)
  50. Just p -> rawSystem (programPath p) args
  51. main :: IO ()
  52. main = do
  53. args <- getArgs
  54. e <- doesDirectoryExist "yesod-devel"
  55. when e $ writeFile outFile (show args ++ "\n")
  56. ex <- runProgram cmd args
  57. exitWith ex