@@ -25,28 +25,44 @@ lsrcPath fp = let (n, ext) = splitExtension fp in
2525 _ -> fp ++ ".lidr"
2626
2727-- Get name of byte compiled version of an import
28−ibcPath :: FilePath -> FilePath
29−ibcPath fp = let (n, ext) = splitExtension fp in
30− n ++ ".ibc"
31−
32−findImport :: [FilePath] -> FilePath -> IO IFileType
33−findImport [] fp = fail $ "Can't find import " ++ fp
34−findImport (d:ds) fp = do let ibcp = ibcPath (d ++ "/" ++ fp)
35− let idrp = srcPath (d ++ "/" ++ fp)
36− let lidrp = lsrcPath (d ++ "/" ++ fp)
37− ibc <- doesFileExist ibcp
38− idr <- doesFileExist idrp
39− lidr <- doesFileExist lidrp
40−-- when idr $ putStrLn $ idrp ++ " ok"
41−-- when lidr $ putStrLn $ lidrp ++ " ok"
42−-- when ibc $ putStrLn $ ibcp ++ " ok"
43− let isrc = if lidr then LIDR lidrp
44− else IDR idrp
45− if ibc
46− then return (IBC ibcp isrc)
47− else if (idr || lidr)
48− then return isrc
49− else findImport ds fp
28+ibcPath :: FilePath -> Bool -> FilePath -> FilePath
29+ibcPath ibcsd use_ibcsd fp = let (d_fp, n_fp) = splitFileName fp
30+ d = if (not use_ibcsd) || ibcsd == ""
31+ then d_fp
32+ else d_fp ++ ibcsd ++ "/"
33+ n = dropExtension n_fp
34+ in d ++ n ++ ".ibc"
35+
36+ibcPathWithFallback :: FilePath -> FilePath -> IO FilePath
37+ibcPathWithFallback ibcsd fp = do let ibcp = ibcPath ibcsd True fp
38+ ibc <- doesFileExist ibcp
39+ return (if ibc
40+ then ibcp
41+ else ibcPath ibcsd False fp)
42+
43+ibcPathNoFallback :: FilePath -> FilePath -> FilePath
44+ibcPathNoFallback ibcsd fp = ibcPath ibcsd True fp
45+
46+findImport :: [FilePath] -> FilePath -> FilePath -> IO IFileType
47+findImport [] ibcsd fp = fail $ "Can't find import " ++ fp
48+findImport (d:ds) ibcsd fp = do let fp_full = d ++ "/" ++ fp
49+ ibcp <- ibcPathWithFallback ibcsd fp_full
50+ let idrp = srcPath fp_full
51+ let lidrp = lsrcPath fp_full
52+ ibc <- doesFileExist ibcp
53+ idr <- doesFileExist idrp
54+ lidr <- doesFileExist lidrp
55+-- when idr $ putStrLn $ idrp ++ " ok"
56+-- when lidr $ putStrLn $ lidrp ++ " ok"
57+-- when ibc $ putStrLn $ ibcp ++ " ok"
58+ let isrc = if lidr
59+ then LIDR lidrp
60+ else IDR idrp
61+ if ibc
62+ then return (IBC ibcp isrc)
63+ else if (idr || lidr)
64+ then return isrc
65+ else findImport ds ibcsd fp
5066
5167-- find a specific filename somewhere in a path
5268