More Windows support, from <shelarcy capella.freemail.ne.jp>

This commit is contained in:
dons 2005-05-13 01:54:49 +00:00
parent 98ea2802c9
commit a1529d9003
4 changed files with 33 additions and 7 deletions

View File

@ -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") ]

View File

@ -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") ]

View File

@ -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

View File

@ -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