module Support.CompatMingw32 (
createLinkCompat,
raiseSigIntCompat,
noEscapePath,
systemCompat
) where
import System.Process
import System.Exit
#ifdef mingw32_HOST_OS
import System.Directory
import System.Win32.Console
#else
import System.Posix.Files
import System.Posix.Signals
#endif
createLinkCompat :: FilePath -> FilePath -> IO ()
#ifdef mingw32_HOST_OS
createLinkCompat = copyFile
#else
createLinkCompat = createLink
#endif
raiseSigIntCompat :: IO ()
#ifdef mingw32_HOST_OS
raiseSigIntCompat = generateConsoleCtrlEvent cTRL_C_EVENT 0
#else
raiseSigIntCompat = raiseSignal sigINT
#endif
noEscapePath :: String -> String
#ifdef mingw32_HOST_OS
noEscapePath = replace '\\' '/'
where replace :: Eq a => a -> a -> [a] -> [a]
replace x y = map (\z -> if z == x then y else z)
#else
noEscapePath = id
#endif
systemCompat :: String -> IO ExitCode
#ifdef mingw32_HOST_OS
systemCompat s = system $ "sh -c \"" ++ s ++ "\""
#else
systemCompat = system
#endif