on master help sign in
Merge pull request #257 from david-christiansen/providers

Make dynamic library extension platform-dependent

commit9116870cb006ad02971f75d2b599385a8fba4623 authorEdwin Brady <edwin.brady@gmail.com> dateFri 22 Mar 2013, 02:32 (14 years ago) parent7e3df2f90f661b
3 files changed+18−3
idris.cabal+6 src/Util/DynamicLinker.hs+11−2 test/test022/test022.idr+1−1
idris.cabal+6
@@ -114,3 +114,9 @@ Executable idris
114114 FlexibleInstances, TemplateHaskell
115115 ghc-prof-options: -auto-all -caf-all
116116 ghc-options: -rtsopts
117+ if os(linux)
118+ cpp-options: -DLINUX
119+ if os(darwin)
120+ cpp-options: -DMACOSX
121+ if os(windows)
122+ cpp-options: -DWINDOWS
src/Util/DynamicLinker.hs+11−2
@@ -1,18 +1,27 @@
11-- | Platform-specific dynamic linking support. Add new platforms to this file
22-- through conditional compilation.
3−{-# LANGUAGE ExistentialQuantification #-}
3+{-# LANGUAGE ExistentialQuantification, CPP #-}
44module Util.DynamicLinker where
55
66import Foreign.LibFFI
77import Foreign.Ptr (nullPtr, FunPtr, nullFunPtr)
88import System.Posix.DynamicLinker
99
10+hostDynamicLibExt :: String
11+#ifdef LINUX
12+hostDynamicLibExt = "so"
13+#elif MACOSX
14+hostDynamicLibExt = "dylib"
15+#elif WINDOWS
16+hostDynamicLibExt = "dll"
17+#endif
18+
1019data DynamicLib = Lib { lib_name :: String
1120 , lib_handle :: DL
1221 }
1322
1423tryLoadLib :: String -> IO (Maybe DynamicLib)
15−tryLoadLib lib = do handle <- dlopen lib [RTLD_NOW]
24+tryLoadLib lib = do handle <- dlopen (lib ++ "." ++ hostDynamicLibExt) [RTLD_NOW]
1625 if undl handle == nullPtr
1726 then return Nothing
1827 else return . Just $ Lib lib handle
test/test022/test022.idr+1−1
@@ -1,6 +1,6 @@
11module Main
22
3−%dynamic "libm.so"
3+%dynamic "libm"
44
55x : Float
66x = unsafePerformIO (mkForeign (FFun "sin" [FFloat] FFloat) 1.6)