packages feed

haskell-awk-1.0.1: src/System/Console/Hawk/Config/Compile.hs

--   Copyright 2013 Mario Pastorelli (pastorelli.mario@gmail.com) Samuel Gélineau (gelisam@gmail.com)
--
--   Licensed under the Apache License, Version 2.0 (the "License");
--   you may not use this file except in compliance with the License.
--   You may obtain a copy of the License at
--
--       http://www.apache.org/licenses/LICENSE-2.0
--
--   Unless required by applicable law or agreed to in writing, software
--   distributed under the License is distributed on an "AS IS" BASIS,
--   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--   See the License for the specific language governing permissions and
--   limitations under the License.

{-# LANGUAGE OverloadedStrings #-}
module System.Console.Hawk.Config.Compile
    ( compile
    )
  where

import Control.Monad (when)

import System.Exit
import System.IO
import System.Process

import System.Console.Hawk.Sandbox (extraGhcArgs)


-- compile a haskell file
-- TODO: this should return the error instead of print it and exit
compile :: FilePath -- ^ the source file
        -> FilePath -- ^ the output file
        -> FilePath -- ^ the directory used for compiler files
        -> IO ()
compile sourceFile outputFile dir = do
    let basicArgs = [ "--make"
                    , sourceFile
                    , "-i"
                    , "-ilib"
                    , "-fforce-recomp"
                    , "-v0"
                    , "-o",outputFile]
    extraArgs <- extraGhcArgs
    let args = basicArgs ++ extraArgs
    compExitCode <-
            waitForProcess =<< runProcess "ghc"
                                          args
                                          (Just dir)
                                          Nothing
                                          Nothing
                                          Nothing
                                          (Just stderr)
    when (compExitCode /= ExitSuccess) $ do
        exitFailure