content: {-# LANGUAGE CPP #-}
  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
  -- Windows filepath backslash confuses jhc's lexer with escape code.
  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
  