runMkDLL,
touch, -- String -> String -> IO ()
- copy, -- String -> String -> String -> IO ()
+ copy,
+ copyWithHeader,
normalisePath, -- FilePath -> FilePath
-- Temporary-file management
cleanTempDirs, cleanTempFiles, cleanTempFilesExcept,
addFilesToClean,
- -- System interface
- system, -- String -> IO ExitCode
-
Option(..)
) where
import Control.Exception
import Data.IORef
-import Data.Int
import Control.Monad
import System.Exit
import System.Environment
import Data.Maybe
import Data.List
--- GHC <= 4.08 didn't have rawSystem, and runs into problems with long command
--- lines on mingw32, so we disallow it now.
-#if __GLASGOW_HASKELL__ < 500
-#error GHC >= 5.00 is required for bootstrapping GHC
-#endif
-
#ifndef mingw32_HOST_OS
#if __GLASGOW_HASKELL__ > 504
import qualified System.Posix.Internals
import qualified Posix
#endif
#else /* Must be Win32 */
-import List ( isPrefixOf )
-import Util ( dropList )
import Foreign
import CString ( CString, peekCString )
#endif
import System.Cmd ( system )
import GHC.IOBase ( IOErrorType(..) )
#else
-import System.Cmd ( rawSystem, system )
import System.Process ( runInteractiveProcess, getProcessExitCode )
import Control.Concurrent( forkIO, newChan, readChan, writeChan )
import Data.Char ( isSpace )
touch dflags purpose arg =
runSomething dflags purpose (pgm_T dflags) [FileOption "" arg]
-copy :: DynFlags -> String -> String -> String -> IO ()
-copy dflags purpose from to = do
+copy :: DynFlags -> String -> FilePath -> FilePath -> IO ()
+copy dflags purpose from to = copyWithHeader dflags purpose Nothing from to
+
+copyWithHeader :: DynFlags -> String -> Maybe String -> FilePath -> FilePath
+ -> IO ()
+copyWithHeader dflags purpose maybe_header from to = do
showPass dflags purpose
h <- openFile to WriteMode
ls <- readFile from -- inefficient, but it'll do for now.
-- ToDo: speed up via slurping.
+ maybe (return ()) (hPutStr h) maybe_header
hPutStr h ls
hClose h
+
\end{code}
%************************************************************************