module Main where import Control.Monad import Data.List import System.Environment import System.Process import System.IO import System.Directory import Pipes import Pipes.Safe import qualified Pipes.Safe.Prelude as SP import Pipes.Prelude runLinker :: [String] -> IO () runLinker args = callProcess "gcc" args modifyLinkerArgs :: Pipe String String (SafeT IO) () modifyLinkerArgs = do x <- await if x == "\"-Xlinker\"" then do y <- await if y == "\"--stack=0x800000,0x800000\"" then yield "\"-fstack-check\"" else yield x >> yield y else yield x modifyLinkerArgs main :: IO () main = do args <- getArgs case args of ( [] ) -> error "No args" (x : xs) -> do let linkFileOrig = tail x let linkFileNew = linkFileOrig ++ "-temp" runSafeT $ runEffect $ SP.readFile linkFileOrig >-> modifyLinkerArgs >-> SP.writeFile linkFileNew renameFile linkFileNew linkFileOrig runLinker args