@@ -7,7 +7,7 @@ module Util.DynamicLinker (ForeignFun(..), DynamicLib(..), tryLoadLib, tryLoadFn
7import Foreign.LibFFI
7import Foreign.LibFFI
8import Foreign.Ptr (Ptr(), nullPtr, FunPtr, nullFunPtr, castPtrToFunPtr)
8import Foreign.Ptr (Ptr(), nullPtr, FunPtr, nullFunPtr, castPtrToFunPtr)
9import System.Directory
9import System.Directory
10−#ifndef WINDOWS
10+#ifndef mingw32_HOST_OS
11import System.Posix.DynamicLinker
11import System.Posix.DynamicLinker
12import System.FilePath.Posix ((</>))
12import System.FilePath.Posix ((</>))
@@ -19,16 +19,14 @@ type DL = HMODULE
21hostDynamicLibExt :: String
21hostDynamicLibExt :: String
22−#ifdef LINUX
22+#if defined(linux_HOST_OS) || defined(freebsd_HOST_OS) \
23+ || defined(dragonfly_HOST_OS) || defined(openbsd_HOST_OS) \
24+ || defined(netbsd_HOST_OS)
23hostDynamicLibExt = "so"
25hostDynamicLibExt = "so"
24−#elif MACOSX
26+#elif defined(darwin_HOST_OS)
25hostDynamicLibExt = "dylib"
27hostDynamicLibExt = "dylib"
26−#elif WINDOWS
28+#elif defined(mingw32_HOST_OS)
27hostDynamicLibExt = "dll"
29hostDynamicLibExt = "dll"
29−hostDynamicLibExt = "so"
31−hostDynamicLibExt = "so"
33hostDynamicLibExt = error $ unwords
31hostDynamicLibExt = error $ unwords
34 [ "Undefined file extension for dynamic libraries"
32 [ "Undefined file extension for dynamic libraries"
@@ -61,7 +59,7 @@ libFileName dirs lib = do let names = [lib, lib ++ "." ++ hostDynamicLibExt]
61 map ("."</>) names ++ [d </> f | d <- cwd:dirs, f <- names]
59 map ("."</>) names ++ [d </> f | d <- cwd:dirs, f <- names]
62 return $ maybe (lib ++ "." ++ hostDynamicLibExt) id found
60 return $ maybe (lib ++ "." ++ hostDynamicLibExt) id found
64−#ifndef WINDOWS
62+#ifndef mingw32_HOST_OS
65tryLoadLib :: [FilePath] -> String -> IO (Maybe DynamicLib)
63tryLoadLib :: [FilePath] -> String -> IO (Maybe DynamicLib)
66tryLoadLib dirs lib = do filename <- libFileName dirs lib
64tryLoadLib dirs lib = do filename <- libFileName dirs lib
67 handle <- dlopen filename [RTLD_NOW, RTLD_GLOBAL]
65 handle <- dlopen filename [RTLD_NOW, RTLD_GLOBAL]