diff --git a/examples/make/o/prog/Main.hs b/examples/make/o/prog/Main.hs index 53a6a4b..d73883e 100644 --- a/examples/make/o/prog/Main.hs +++ b/examples/make/o/prog/Main.hs @@ -13,11 +13,16 @@ import System.Directory -- this should go away once we can read .hi files. main = do - make "../Plugin.hs" [ "-i../api", "-o", "/tmp/Plugin.o" ] - m_v <- load "/tmp/Plugin.o" ["../api"] [] "resource" +#if __GLASGOW_HASKELL__ >= 604 + tmpDir <- getTemporaryDirectory +#else + let tmpDir = "/tmp" +#endif + make "../Plugin.hs" [ "-i../api", "-o", (tmpDir ++ "/Plugin.o") ] + m_v <- load (tmpDir ++ "/Plugin.o") ["../api"] [] "resource" v <- case m_v of LoadSuccess _ v -> return v _ -> error "load failed" putStrLn $ field v - mapM_ removeFile [ "/tmp/Plugin.o" , "/tmp/Plugin.hi" ] + mapM_ removeFile [ (tmpDir ++ "/Plugin.hi"), (tmpDir ++ "/Plugin.o") ] diff --git a/examples/make/odir/prog/Main.hs b/examples/make/odir/prog/Main.hs index 6d95f44..48825a0 100644 --- a/examples/make/odir/prog/Main.hs +++ b/examples/make/odir/prog/Main.hs @@ -3,7 +3,12 @@ import API import System.Directory main = do - status <- make "../Plugin.hs" [ "-i../api", "-odir", "/tmp" ] +#if __GLASGOW_HASKELL__ >= 604 + tmpDir <- getTemporaryDirectory +#else + let tmpDir = "/tmp" +#endif + status <- make "../Plugin.hs" [ "-i../api", "-odir", tmpDir ] o <- case status of MakeSuccess _ o -> return o MakeFailure e -> mapM_ putStrLn e >> error "didn't compile" @@ -12,5 +17,5 @@ main = do LoadSuccess _ v -> return v _ -> error "load failed" putStrLn $ field v - mapM_ removeFile ["/tmp/Plugin.hi", "/tmp/Plugin.o" ] + mapM_ removeFile [(tmpDir ++ "/Plugin.hi"), (tmpDir ++ "/Plugin.o") ] diff --git a/src/plugins/Plugins/Consts.hs b/src/plugins/Plugins/Consts.hs index 76e78fc..d539b4e 100644 --- a/src/plugins/Plugins/Consts.hs +++ b/src/plugins/Plugins/Consts.hs @@ -22,6 +22,13 @@ module Plugins.Consts where #include "../../../config.h" + +#if __GLASGOW_HASKELL__ >= 604 +import System.Directory ( getTemporaryDirectory ) +import System.IO.Unsafe ( unsafePerformIO ) +#endif + + -- | path to *build* dir, used by eval() for testing the examples top = TOP @@ -40,7 +47,7 @@ sysPkgSuffix = ".o" objSuf = sysPkgSuffix hiSuf = ".hi" hsSuf = ".hs" -#ifdef CYGWIN +#if defined(CYGWIN) || defined(__MINGW32__) dllSuf = ".dll" #else dllSuf = ".so" @@ -59,9 +66,14 @@ prefixUnderscore = "" #endif -- | Define tmpDir to where tmp files should be created on your platform + +#if __GLASGOW_HASKELL__ >= 604 +tmpDir = unsafePerformIO getTemporaryDirectory +{-# NOINLINE tmpDir #-} +#else #if !defined(__MINGW32__) tmpDir = "/tmp" #else tmpDir = error "tmpDir not defined for this platform. Try setting the TMPDIR env var" #endif - +#endif diff --git a/src/plugins/Plugins/Load.hs b/src/plugins/Plugins/Load.hs index 9f5f42e..0e0a580 100644 --- a/src/plugins/Plugins/Load.hs +++ b/src/plugins/Plugins/Load.hs @@ -243,7 +243,11 @@ unify obj incs args ty sym = do i = "-i" ++ dirname obj -- plugin hWrite hdl src +#if defined(CYGWIN) || defined(__MINGW32__) + e <- build tmpf "nul" (i:is++args++["-fno-code","-ohi nul"]) +#else e <- build tmpf "/dev/null" (i:is++args++["-fno-code","-ohi/dev/null"]) +#endif removeFile tmpf return e