[commit: packages/unix] master: Make compatible again for GHC back to 7.4.1 (2b69c54)

git at git.haskell.org git at git.haskell.org
Sat Oct 12 12:02:11 UTC 2013


Repository : ssh://git@git.haskell.org/unix

On branch  : master
Link       : http://git.haskell.org/packages/unix.git/commitdiff/2b69c54bbbc85993cb2456ecb60a40adb574ccda

>---------------------------------------------------------------

commit 2b69c54bbbc85993cb2456ecb60a40adb574ccda
Author: Herbert Valerio Riedel <hvr at gnu.org>
Date:   Sat Oct 12 13:24:45 2013 +0200

    Make compatible again for GHC back to 7.4.1
    
    By avoiding `import Foreign` this accomplishes backward-compatibility
    w.r.t. the `unsafePerformIO` relocation w/o resorting to CPP
    conditionals.
    
    Moreover, in order to support base<4.7 this commits needs to reintroduce
    a harmless backport of `newFilePath`.
    
    Signed-off-by: Herbert Valerio Riedel <hvr at gnu.org>


>---------------------------------------------------------------

2b69c54bbbc85993cb2456ecb60a40adb574ccda
 System/Posix/Env.hsc            |   11 +++++++++++
 System/Posix/Files/Common.hsc   |    6 +++++-
 System/Posix/Process/Common.hsc |    5 -----
 System/Posix/Signals.hsc        |    6 +++++-
 4 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/System/Posix/Env.hsc b/System/Posix/Env.hsc
index c53929f..fbe5c79 100644
--- a/System/Posix/Env.hsc
+++ b/System/Posix/Env.hsc
@@ -39,6 +39,12 @@ import Control.Monad
 import Data.Maybe (fromMaybe)
 import System.Posix.Internals
 
+#if !MIN_VERSION_base(4,7,0)
+-- needed for backported local 'newFilePath' binding in 'putEnv'
+import GHC.IO.Encoding (getFileSystemEncoding)
+import qualified GHC.Foreign as GHC (newCString)
+#endif
+
 -- |'getEnv' looks up a variable in the environment.
 
 getEnv :: String -> IO (Maybe String)
@@ -128,6 +134,11 @@ putEnv keyvalue = do s <- newFilePath keyvalue
                      -- According to SUSv2, the string passed to putenv
                      -- becomes part of the enviroment. #7342
                      throwErrnoIfMinus1_ "putenv" (c_putenv s)
+#if !MIN_VERSION_base(4,7,0)
+    where
+      newFilePath :: FilePath -> IO CString
+      newFilePath fp = getFileSystemEncoding >>= \enc -> GHC.newCString enc fp
+#endif
 
 foreign import ccall unsafe "putenv"
    c_putenv :: CString -> IO CInt
diff --git a/System/Posix/Files/Common.hsc b/System/Posix/Files/Common.hsc
index 9ce2f1d..75c7fde 100644
--- a/System/Posix/Files/Common.hsc
+++ b/System/Posix/Files/Common.hsc
@@ -85,11 +85,15 @@ import System.Posix.Error
 import System.Posix.Types
 import System.IO.Unsafe
 import Data.Bits
+import Data.Int
 import Data.Time.Clock.POSIX
 import Data.Ratio
 import System.Posix.Internals
-import Foreign
 import Foreign.C
+import Foreign.ForeignPtr
+import Foreign.Marshal
+import Foreign.Ptr
+import Foreign.Storable
 
 -- -----------------------------------------------------------------------------
 -- POSIX file modes
diff --git a/System/Posix/Process/Common.hsc b/System/Posix/Process/Common.hsc
index 3bcc505..51c75b3 100644
--- a/System/Posix/Process/Common.hsc
+++ b/System/Posix/Process/Common.hsc
@@ -313,11 +313,6 @@ getProcessStatus block stopped pid =
       _  -> do ps <- readWaitStatus wstatp
 	       return (Just ps)
 
-#if __GLASGOW_HASKELL__ < 701
--- not available prior to 7.1
-#define interruptible safe
-#endif
-
 -- safe/interruptible, because this call might block
 foreign import ccall interruptible "waitpid"
   c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid
diff --git a/System/Posix/Signals.hsc b/System/Posix/Signals.hsc
index 39de76b..eb46ba4 100644
--- a/System/Posix/Signals.hsc
+++ b/System/Posix/Signals.hsc
@@ -103,8 +103,12 @@ module System.Posix.Signals (
   -- siginterrupt
   ) where
 
-import Foreign
+import Data.Word
 import Foreign.C
+import Foreign.ForeignPtr
+import Foreign.Marshal
+import Foreign.Ptr
+import Foreign.Storable
 import System.IO.Unsafe (unsafePerformIO)
 import System.Posix.Types
 import System.Posix.Internals



More information about the ghc-commits mailing list