@@ -22,6 +22,7 @@ import Control.Monad.State
22import Data.List
22import Data.List
23import Data.Char
23import Data.Char
24import Data.Either
24import Data.Either
26import Debug.Trace
27import Debug.Trace
@@ -54,13 +55,21 @@ addFlag tgt f = do i <- getIState; putIState $ i { idris_cgflags = nub $ (tgt, f
55addDyLib :: [String] -> Idris (Either DynamicLib String)
56addDyLib :: [String] -> Idris (Either DynamicLib String)
56addDyLib libs = do i <- getIState
57addDyLib libs = do i <- getIState
58+ let ls = idris_dynamic_libs i
59+ case mapMaybe (findDyLib ls) libs of
60+ x:_ -> return (Left x)
57− handle <- lift $ mapM (\l -> catchIO (tryLoadLib l) (\_ -> return Nothing)) libs
62+ handle <- lift $ mapM (\l -> catchIO (tryLoadLib l) (\_ -> return Nothing)) $ libs
58− case msum handle of
63+ case msum handle of
59− Nothing -> return (Right $ "Could not load dynamic alternatives \"" ++
64+ Nothing -> return (Right $ "Could not load dynamic alternatives \"" ++
60− concat (intersperse "," libs) ++ "\"")
65+ concat (intersperse "," libs) ++ "\"")
61− Just x -> do let ls = idris_dynamic_libs i
62− putIState $ i { idris_dynamic_libs = x:ls }
66+ Just x -> do putIState $ i { idris_dynamic_libs = x:ls }
63− return (Left x)
67+ return (Left x)
68+ where findDyLib :: [DynamicLib] -> String -> Maybe DynamicLib
69+ findDyLib [] l = Nothing
70+ findDyLib (lib:libs) l | l == lib_name lib = Just lib
71+ | otherwise = findDyLib libs l
65addHdr :: Codegen -> String -> Idris ()
74addHdr :: Codegen -> String -> Idris ()
66addHdr tgt f = do i <- getIState; putIState $ i { idris_hdrs = nub $ (tgt, f) : idris_hdrs i }
75addHdr tgt f = do i <- getIState; putIState $ i { idris_hdrs = nub $ (tgt, f) : idris_hdrs i }