From 375754e1064f7c64e3806fb802675c80aff1023a Mon Sep 17 00:00:00 2001 From: krasimir Date: Tue, 22 Apr 2008 12:12:29 +0000 Subject: [PATCH] move gfLibraryPath and gfGrammarPath to UseIO. Now they are accessible and there is only one place to change if you want to use different envVar --- src/GF/Compile/Compile.hs | 7 ++----- src/GF/Devel/Compile.hs | 5 +---- src/GF/Devel/Compile/Compile.hs | 5 +---- src/GF/Devel/UseIO.hs | 30 +++++++++++++++++------------- src/GF/Infra/UseIO.hs | 32 +++++++++++++++++++------------- 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/GF/Compile/Compile.hs b/src/GF/Compile/Compile.hs index 58fc91269..422df0fd5 100644 --- a/src/GF/Compile/Compile.hs +++ b/src/GF/Compile/Compile.hs @@ -60,9 +60,6 @@ import Control.Monad import System.Directory import System.FilePath --- | environment variable for grammar search path -gfGrammarPathVar = "GF_GRAMMAR_PATH" - -- | in batch mode: write code in a file batchCompile f = liftM fst $ compileModule defOpts emptyShellState f where @@ -115,7 +112,7 @@ compileModule opts1 st0 file = do let ps1 = if (useFileOpt && not useLineOpt) then (ps0 ++ map (combine fpath) ps0) else ps0 - ps <- ioeIO $ extendPathEnv gfLibraryPath gfGrammarPathVar ps1 + ps <- ioeIO $ extendPathEnv ps1 let ioeIOIf = if oElem beVerbose opts then ioeIO else (const (return ())) ioeIOIf $ putStrLn $ "module search path:" +++ show ps ---- let st = st0 --- if useFileOpt then emptyShellState else st0 @@ -396,7 +393,7 @@ getGFEFiles opts1 file = useIOE [] $ do let ps1 = if (useFileOpt && not useLineOpt) then (map (combine fpath) ps0) else ps0 - ps <- ioeIO $ extendPathEnv gfLibraryPath gfGrammarPathVar ps1 + ps <- ioeIO $ extendPathEnv ps1 let file' = if useFileOpt then takeFileName file else file -- to find file itself files <- getAllFiles opts ps [] file' efiles <- ioeIO $ filterM doesFileExist [replaceExtension f "gfe" | f <- files] diff --git a/src/GF/Devel/Compile.hs b/src/GF/Devel/Compile.hs index 538aa1309..69062457a 100644 --- a/src/GF/Devel/Compile.hs +++ b/src/GF/Devel/Compile.hs @@ -48,9 +48,6 @@ prMod :: SourceModule -> String prMod = compactPrint . prModule --- | environment variable for grammar search path -gfGrammarPathVar = "GF_GRAMMAR_PATH" - -- | the environment type CompileEnv = (Int,SourceGrammar) @@ -71,7 +68,7 @@ compileModule opts1 env file = do let ps1 = if (useFileOpt && not useLineOpt) then (ps0 ++ map (combine fpath) ps0) else ps0 - ps <- ioeIO $ extendPathEnv gfLibraryPath gfGrammarPathVar ps1 + ps <- ioeIO $ extendPathEnv ps1 let ioeIOIf = if oElem beVerbose opts then ioeIO else (const (return ())) ioeIOIf $ putStrLn $ "module search path:" +++ show ps ---- let sgr = snd env diff --git a/src/GF/Devel/Compile/Compile.hs b/src/GF/Devel/Compile/Compile.hs index 65c0530f1..07e059ed4 100644 --- a/src/GF/Devel/Compile/Compile.hs +++ b/src/GF/Devel/Compile/Compile.hs @@ -44,9 +44,6 @@ intermOut opts opt s = prMod :: SourceModule -> String prMod = prModule --- | environment variable for grammar search path -gfGrammarPathVar = "GF_GRAMMAR_PATH" - -- | the environment type CompileEnv = (Int,GF) @@ -67,7 +64,7 @@ compileModule opts1 env file = do let ps1 = if (useFileOpt && not useLineOpt) then (ps0 ++ map (combine fpath) ps0) else ps0 - ps <- ioeIO $ extendPathEnv gfLibraryPath gfGrammarPathVar ps1 + ps <- ioeIO $ extendPathEnv ps1 let ioeIOIf = if oElem beVerbose opts then ioeIO else (const (return ())) ioeIOIf $ putStrLn $ "module search path:" +++ show ps ---- let sgr = snd env diff --git a/src/GF/Devel/UseIO.hs b/src/GF/Devel/UseIO.hs index 39c451be4..161e165b8 100644 --- a/src/GF/Devel/UseIO.hs +++ b/src/GF/Devel/UseIO.hs @@ -122,10 +122,13 @@ doesFileExistPath paths file = do mpfile <- ioeIO $ getFilePathMsg "" paths file return $ maybe False (const True) mpfile +gfLibraryPath = "GF_LIB_PATH" +gfGrammarPathVar = "GF_GRAMMAR_PATH" + getLibraryPath :: IO FilePath getLibraryPath = catch - (getEnv "GF_LIB_PATH") + (getEnv gfLibraryPath) #ifdef mingw32_HOST_OS (\_ -> do exepath <- getModuleFileName nullPtr let (path,_) = splitFileName exepath @@ -134,23 +137,26 @@ getLibraryPath = (const (return libdir)) #endif --- | first var is lib prefix, second is like class path --- | path in environment variable has lower priority -extendPathEnv :: String -> String -> [FilePath] -> IO [FilePath] -extendPathEnv lib var ps = do +-- | extends the search path with the +-- 'gfLibraryPath' and 'gfGrammarPathVar' +-- environment variables. Returns only existing paths. +extendPathEnv :: [FilePath] -> IO [FilePath] +extendPathEnv ps = do b <- getLibraryPath -- e.g. GF_LIB_PATH - s <- catch (getEnv var) (const (return "")) -- e.g. GF_GRAMMAR_PATH + s <- catch (getEnv gfGrammarPathVar) (const (return "")) -- e.g. GF_GRAMMAR_PATH let ss = ps ++ splitSearchPath s liftM concat $ mapM allSubdirs $ ss ++ [b s | s <- ss ++ ["prelude"]] where allSubdirs :: FilePath -> IO [FilePath] allSubdirs [] = return [[]] allSubdirs p = case last p of - '*' -> do - let path = init p - fs <- getSubdirs path - return [path f | f <- fs] - _ -> return [p] + '*' -> do let path = init p + fs <- getSubdirs path + return [path f | f <- fs] + _ -> do exists <- doesDirectoryExist p + if exists + then return [p] + else return [] getSubdirs :: FilePath -> IO [FilePath] getSubdirs dir = do @@ -278,8 +284,6 @@ putPointEgen cond opts msg act = do putPointEVerb :: Options -> String -> IOE a -> IOE a putPointEVerb opts = putPointE (addOption beVerbose opts) -gfLibraryPath = "GF_LIB_PATH" - -- ((do {s <- readFile f; return (return s)}) ) readFileIOE :: FilePath -> IOE BS.ByteString readFileIOE f = ioe $ catch (BS.readFile f >>= return . return) diff --git a/src/GF/Infra/UseIO.hs b/src/GF/Infra/UseIO.hs index 01331dd08..af95e6890 100644 --- a/src/GF/Infra/UseIO.hs +++ b/src/GF/Infra/UseIO.hs @@ -126,10 +126,15 @@ doesFileExistPath paths file = do mpfile <- ioeIO $ getFilePathMsg "" paths file return $ maybe False (const True) mpfile +gfLibraryPath = "GF_LIB_PATH" + +-- | environment variable for grammar search path +gfGrammarPathVar = "GF_GRAMMAR_PATH" + getLibraryPath :: IO FilePath getLibraryPath = catch - (getEnv "GF_LIB_PATH") + (getEnv gfLibraryPath) #ifdef mingw32_HOST_OS (\_ -> do exepath <- getModuleFileName nullPtr let (path,_) = splitFileName exepath @@ -138,23 +143,26 @@ getLibraryPath = (const (return libdir)) #endif --- | first var is lib prefix, second is like class path --- | path in environment variable has lower priority -extendPathEnv :: String -> String -> [FilePath] -> IO [FilePath] -extendPathEnv lib var ps = do +-- | extends the search path with the +-- 'gfLibraryPath' and 'gfGrammarPathVar' +-- environment variables. Returns only existing paths. +extendPathEnv :: [FilePath] -> IO [FilePath] +extendPathEnv ps = do b <- getLibraryPath -- e.g. GF_LIB_PATH - s <- catch (getEnv var) (const (return "")) -- e.g. GF_GRAMMAR_PATH + s <- catch (getEnv gfGrammarPathVar) (const (return "")) -- e.g. GF_GRAMMAR_PATH let ss = ps ++ splitSearchPath s liftM concat $ mapM allSubdirs $ ss ++ [b s | s <- ss ++ ["prelude"]] where allSubdirs :: FilePath -> IO [FilePath] allSubdirs [] = return [[]] allSubdirs p = case last p of - '*' -> do - let path = init p - fs <- getSubdirs path - return [path f | f <- fs] - _ -> return [p] + '*' -> do let path = init p + fs <- getSubdirs path + return [path f | f <- fs] + _ -> do exists <- doesDirectoryExist p + if exists + then return [p] + else return [] getSubdirs :: FilePath -> IO [FilePath] getSubdirs dir = do @@ -291,8 +299,6 @@ putPointE opts msg act = do putPointEVerb :: Options -> String -> IOE a -> IOE a putPointEVerb opts = putPointE (addOption beVerbose opts) -gfLibraryPath = "GF_LIB_PATH" - -- ((do {s <- readFile f; return (return s)}) ) readFileIOE :: FilePath -> IOE (String) readFileIOE f = ioe $ catch (readFileStrict f >>= return . return)