on master help sign in
Allow Idris to install IdrisDoc into a central location.
de5a79cJan de Muijnck-Hughes
Setup.hs−1
@@ -268,7 +268,6 @@ idrisInstall verbosity copy pkg local = unless (execOnly (configFlags local)) $
268 notice verbosity $ unwords ["Copying man page to", mandest]
268 notice verbosity $ unwords ["Copying man page to", mandest]
269 installOrdinaryFiles verbosity mandest [("man", "idris.1")]
269 installOrdinaryFiles verbosity mandest [("man", "idris.1")]
270
270
271−
272 makeInstall src target =
271 makeInstall src target =
273 make verbosity [ "-C", src, "install" , "TARGET=" ++ target, "IDRIS=" ++ idrisCmd local]
272 make verbosity [ "-C", src, "install" , "TARGET=" ++ target, "IDRIS=" ++ idrisCmd local]
274
273
libs/Makefile−1
@@ -34,5 +34,4 @@ doc_clean:
34 $(MAKE) -C effects doc_clean
34 $(MAKE) -C effects doc_clean
35 $(MAKE) -C pruviloj doc_clean
35 $(MAKE) -C pruviloj doc_clean
36
36
37−
38.PHONY: build install clean doc doc_clean
37.PHONY: build install clean doc doc_clean
libs/base/Makefile+3−2
@@ -4,8 +4,9 @@ PKG := base
4build:
4build:
5 $(IDRIS) --build ${PKG}.ipkg
5 $(IDRIS) --build ${PKG}.ipkg
6
6
7−install:
7+install:
8 $(IDRIS) --install ${PKG}.ipkg
8 $(IDRIS) --install ${PKG}.ipkg
9+ ${IDRIS} --installdoc ${PKG}.ipkg
9
10
10clean:
11clean:
11 $(IDRIS) --clean ${PKG}.ipkg
12 $(IDRIS) --clean ${PKG}.ipkg
@@ -21,4 +22,4 @@ doc_clean:
21linecount:
22linecount:
22 find . -name '*.idr' | xargs wc -l
23 find . -name '*.idr' | xargs wc -l
23
24
24−.PHONY: build install clean rebuild linecount
25+.PHONY: build install clean rebuild linecount doc doc_clean
libs/contrib/Makefile+3−2
@@ -4,8 +4,9 @@ PKG := contrib
4build:
4build:
5 $(IDRIS) --build ${PKG}.ipkg
5 $(IDRIS) --build ${PKG}.ipkg
6
6
7−install:
7+install:
8 $(IDRIS) --install ${PKG}.ipkg
8 $(IDRIS) --install ${PKG}.ipkg
9+ ${IDRIS} --installdoc ${PKG}.ipkg
9
10
10clean:
11clean:
11 $(IDRIS) --clean ${PKG}.ipkg
12 $(IDRIS) --clean ${PKG}.ipkg
@@ -21,4 +22,4 @@ doc_clean:
21linecount:
22linecount:
22 find . -name '*.idr' | xargs wc -l
23 find . -name '*.idr' | xargs wc -l
23
24
24−.PHONY: build install clean rebuild linecount
25+.PHONY: build install clean rebuild linecount doc doc_clean
libs/effects/Makefile+1
@@ -9,6 +9,7 @@ clean:
9
9
10install:
10install:
11 $(IDRIS) --install ${PKG}.ipkg
11 $(IDRIS) --install ${PKG}.ipkg
12+ ${IDRIS} --installdoc ${PKG}.ipkg
12
13
13rebuild: clean build
14rebuild: clean build
14
15
libs/prelude/Makefile+2−1
@@ -4,8 +4,9 @@ PKG := prelude
4build:
4build:
5 $(IDRIS) --build ${PKG}.ipkg
5 $(IDRIS) --build ${PKG}.ipkg
6
6
7−install:
7+install:
8 $(IDRIS) --install ${PKG}.ipkg
8 $(IDRIS) --install ${PKG}.ipkg
9+ ${IDRIS} --installdoc ${PKG}.ipkg
9
10
10clean:
11clean:
11 $(IDRIS) --clean ${PKG}.ipkg
12 $(IDRIS) --clean ${PKG}.ipkg
libs/pruviloj/Makefile+1
@@ -9,6 +9,7 @@ clean:
9
9
10install:
10install:
11 $(IDRIS) --install ${PKG}.ipkg
11 $(IDRIS) --install ${PKG}.ipkg
12+ ${IDRIS} --installdoc ${PKG}.ipkg
12
13
13rebuild: clean build
14rebuild: clean build
14
15
main/Main.hs+2−1
@@ -18,7 +18,8 @@ processShowOptions opts = runIO $ do
18 when (ShowLoggingCats `elem` opts) $ showExitIdrisLoggingCategories
18 when (ShowLoggingCats `elem` opts) $ showExitIdrisLoggingCategories
19 when (ShowIncs `elem` opts) $ showExitIdrisFlagsInc
19 when (ShowIncs `elem` opts) $ showExitIdrisFlagsInc
20 when (ShowLibs `elem` opts) $ showExitIdrisFlagsLibs
20 when (ShowLibs `elem` opts) $ showExitIdrisFlagsLibs
21− when (ShowLibdir `elem` opts) $ showExitIdrisLibDir
21+ when (ShowLibDir `elem` opts) $ showExitIdrisLibDir
22+ when (ShowDocDir `elem` opts) $ showExitIdrisDocDir
22 when (ShowPkgs `elem` opts) $ showExitIdrisInstalledPackages
23 when (ShowPkgs `elem` opts) $ showExitIdrisInstalledPackages
23
24
24check :: [Opt] -> (Opt -> Maybe a) -> ([a] -> Idris ()) -> Idris ()
25check :: [Opt] -> (Opt -> Maybe a) -> ([a] -> Idris ()) -> Idris ()
src/IRTS/System.hs+17−5
@@ -12,6 +12,7 @@ module IRTS.System( getDataFileName
12 , getCC
12 , getCC
13 , getLibFlags
13 , getLibFlags
14 , getIdrisLibDir
14 , getIdrisLibDir
15+ , getIdrisDocDir
15 , getIncFlags
16 , getIncFlags
16 , getEnvFlags
17 , getEnvFlags
17 , version
18 , version
@@ -31,15 +32,23 @@ import Paths_idris (version)
31import Paths_idris
32import Paths_idris
32#endif
33#endif
33
34
35+overrideIdrisDirWith :: String -- ^ Sub directory in `getDataDir` location.
36+ -> String -- ^ Environment variable to get new location from.
34−overrideDataDirWith :: String -> IO FilePath
37+ -> IO FilePath
35−overrideDataDirWith envVar = do
38+overrideIdrisDirWith fp envVar = do
36 envValue <- lookupEnv envVar
39 envValue <- lookupEnv envVar
37 case envValue of
40 case envValue of
38 Nothing -> do
41 Nothing -> do
39 ddir <- getDataDir
42 ddir <- getDataDir
40− return (ddir </> "libs")
43+ return (ddir </> fp)
41 Just ddir -> return ddir
44 Just ddir -> return ddir
42
45
46+overrideIdrisLibDirWith :: String -> IO FilePath
47+overrideIdrisLibDirWith = overrideIdrisDirWith "libs"
48+
49+overrideIdrisDocDirWith :: String -> IO FilePath
50+overrideIdrisDocDirWith = overrideIdrisDirWith "docs"
51+
43getCC :: IO String
52getCC :: IO String
44getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
53getCC = fromMaybe "gcc" <$> lookupEnv "IDRIS_CC"
45
54
@@ -47,7 +56,7 @@ getEnvFlags :: IO [String]
47getEnvFlags = maybe [] (splitOn " ") <$> lookupEnv "IDRIS_CFLAGS"
56getEnvFlags = maybe [] (splitOn " ") <$> lookupEnv "IDRIS_CFLAGS"
48
57
49getTargetDir :: IO String
58getTargetDir :: IO String
50−getTargetDir = overrideDataDirWith "TARGET"
59+getTargetDir = overrideIdrisLibDirWith "TARGET"
51
60
52#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
61#if defined(freebsd_HOST_OS) || defined(dragonfly_HOST_OS)\
53 || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
62 || defined(openbsd_HOST_OS) || defined(netbsd_HOST_OS)
@@ -68,7 +77,10 @@ getLibFlags = do dir <- getDataDir
68 return $ ["-L" ++ (dir </> "rts"),
77 return $ ["-L" ++ (dir </> "rts"),
69 "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
78 "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
70
79
71−getIdrisLibDir = addTrailingPathSeparator <$> overrideDataDirWith "IDRIS_LIBRARY_PATH"
80+getIdrisLibDir = addTrailingPathSeparator <$> overrideIdrisLibDirWith "IDRIS_LIBRARY_PATH"
81+
82+getIdrisDocDir = addTrailingPathSeparator <$> overrideIdrisDocDirWith "IDRIS_DOC_PATH"
83+
72
84
73getIncFlags = do dir <- getDataDir
85getIncFlags = do dir <- getDataDir
74 return $ ("-I" ++ dir </> "rts") : extraInclude
86 return $ ("-I" ++ dir </> "rts") : extraInclude
src/Idris/AbsSyntax.hs+5−4
@@ -2545,7 +2545,7 @@ getPkgDir (Pkg str) = Just str
2545getPkgDir _ = Nothing
2545getPkgDir _ = Nothing
2546
2546
2547getPkg :: Opt -> Maybe (Bool, String)
2547getPkg :: Opt -> Maybe (Bool, String)
2548−getPkg (PkgBuild str) = Just (False, str)
2548+getPkg (PkgBuild str) = Just (False, str)
2549getPkg (PkgInstall str) = Just (True, str)
2549getPkg (PkgInstall str) = Just (True, str)
2550getPkg _ = Nothing
2550getPkg _ = Nothing
2551
2551
@@ -2563,9 +2563,10 @@ getPkgCheck _ = Nothing
2563
2563
2564-- | Returns None if given an Opt which is not PkgMkDoc
2564-- | Returns None if given an Opt which is not PkgMkDoc
2565-- Otherwise returns Just x, where x is the contents of PkgMkDoc
2565-- Otherwise returns Just x, where x is the contents of PkgMkDoc
2566−getPkgMkDoc :: Opt -- ^ Opt to extract
2566+getPkgMkDoc :: Opt -- ^ Opt to extract
2567− -> Maybe String -- ^ Result
2567+ -> Maybe (Bool, String) -- ^ Result
2568−getPkgMkDoc (PkgMkDoc str) = Just str
2568+getPkgMkDoc (PkgDocBuild str) = Just (False,str)
2569+getPkgMkDoc (PkgDocInstall str) = Just (True,str)
2569getPkgMkDoc _ = Nothing
2570getPkgMkDoc _ = Nothing
2570
2571
2571getPkgTest :: Opt -- ^ the option to extract
2572getPkgTest :: Opt -- ^ the option to extract
src/Idris/AbsSyntaxTree.hs+4−2
@@ -492,7 +492,8 @@ data Opt = Filename String
492 | IdemodeSocket
492 | IdemodeSocket
493 | ShowAll
493 | ShowAll
494 | ShowLibs
494 | ShowLibs
495− | ShowLibdir
495+ | ShowLibDir
496+ | ShowDocDir
496 | ShowIncs
497 | ShowIncs
497 | ShowPkgs
498 | ShowPkgs
498 | ShowLoggingCats
499 | ShowLoggingCats
@@ -524,7 +525,8 @@ data Opt = Filename String
524 | PkgClean String
525 | PkgClean String
525 | PkgCheck String
526 | PkgCheck String
526 | PkgREPL String
527 | PkgREPL String
527− | PkgMkDoc String -- IdrisDoc
528+ | PkgDocBuild String -- IdrisDoc
529+ | PkgDocInstall String
528 | PkgTest String
530 | PkgTest String
529 | PkgIndex FilePath
531 | PkgIndex FilePath
530 | WarnOnly
532 | WarnOnly
src/Idris/CmdOptions.hs+10−8
@@ -129,7 +129,8 @@ parseFlags = many $
129 <|> flag' ShowLoggingCats (long "listlogcats" <> help "Display logging categories")
129 <|> flag' ShowLoggingCats (long "listlogcats" <> help "Display logging categories")
130 <|> flag' ShowLibs (long "link" <> help "Display link flags")
130 <|> flag' ShowLibs (long "link" <> help "Display link flags")
131 <|> flag' ShowPkgs (long "listlibs" <> help "Display installed libraries")
131 <|> flag' ShowPkgs (long "listlibs" <> help "Display installed libraries")
132− <|> flag' ShowLibdir (long "libdir" <> help "Display library directory")
132+ <|> flag' ShowLibDir (long "libdir" <> help "Display library directory")
133+ <|> flag' ShowDocDir (long "docdir" <> help "Display idrisdoc install directory")
133 <|> flag' ShowIncs (long "include" <> help "Display the includes flags")
134 <|> flag' ShowIncs (long "include" <> help "Display the includes flags")
134
135
135 <|> flag' Verbose (short 'V' <> long "verbose" <> help "Loud verbosity")
136 <|> flag' Verbose (short 'V' <> long "verbose" <> help "Loud verbosity")
@@ -144,13 +145,14 @@ parseFlags = many $
144 <|> (Port <$> option portReader (long "port" <> metavar "PORT" <> help "REPL TCP port - pass \"none\" to not bind any port"))
145 <|> (Port <$> option portReader (long "port" <> metavar "PORT" <> help "REPL TCP port - pass \"none\" to not bind any port"))
145
146
146 -- Package commands
147 -- Package commands
147− <|> (PkgBuild <$> strOption (long "build" <> metavar "IPKG" <> help "Build package"))
148+ <|> (PkgBuild <$> strOption (long "build" <> metavar "IPKG" <> help "Build package"))
148− <|> (PkgInstall <$> strOption (long "install" <> metavar "IPKG" <> help "Install package"))
149+ <|> (PkgInstall <$> strOption (long "install" <> metavar "IPKG" <> help "Install package"))
149− <|> (PkgREPL <$> strOption (long "repl" <> metavar "IPKG" <> help "Launch REPL, only for executables"))
150+ <|> (PkgREPL <$> strOption (long "repl" <> metavar "IPKG" <> help "Launch REPL, only for executables"))
150− <|> (PkgClean <$> strOption (long "clean" <> metavar "IPKG" <> help "Clean package"))
151+ <|> (PkgClean <$> strOption (long "clean" <> metavar "IPKG" <> help "Clean package"))
151− <|> (PkgMkDoc <$> strOption (long "mkdoc" <> metavar "IPKG" <> help "Generate IdrisDoc for package"))
152+ <|> (PkgDocBuild <$> strOption (long "mkdoc" <> metavar "IPKG" <> help "Generate IdrisDoc for package"))
153+ <|> (PkgDocInstall <$> strOption (long "installdoc" <> metavar "IPKG" <> help "Install IdrisDoc for package"))
152− <|> (PkgCheck <$> strOption (long "checkpkg" <> metavar "IPKG" <> help "Check package only"))
154+ <|> (PkgCheck <$> strOption (long "checkpkg" <> metavar "IPKG" <> help "Check package only"))
153− <|> (PkgTest <$> strOption (long "testpkg" <> metavar "IPKG" <> help "Run tests for package"))
155+ <|> (PkgTest <$> strOption (long "testpkg" <> metavar "IPKG" <> help "Run tests for package"))
154
156
155 -- Misc options
157 -- Misc options
156 <|> (BCAsm <$> strOption (long "bytecode"))
158 <|> (BCAsm <$> strOption (long "bytecode"))
src/Idris/Info.hs+4
@@ -7,6 +7,7 @@ Maintainer : The Idris Community.
7-}
7-}
8module Idris.Info
8module Idris.Info
9 ( getIdrisLibDir
9 ( getIdrisLibDir
10+ , getIdrisDocDir
10 , getIdrisFlagsLib
11 , getIdrisFlagsLib
11 , getIdrisFlagsInc
12 , getIdrisFlagsInc
12 , getIdrisFlagsEnv
13 , getIdrisFlagsEnv
@@ -33,6 +34,9 @@ import Version_idris (gitHash)
33
34
34import Paths_idris
35import Paths_idris
35
36
37+getIdrisDocDir :: IO String
38+getIdrisDocDir = S.getIdrisDocDir
39+
36getIdrisLibDir :: IO String
40getIdrisLibDir :: IO String
37getIdrisLibDir = S.getIdrisLibDir
41getIdrisLibDir = S.getIdrisLibDir
38
42
src/Idris/Info/Show.hs+12
@@ -24,6 +24,16 @@ showExitIdrisLibDir = do
24 showIdrisLibDir
24 showIdrisLibDir
25 exitSuccess
25 exitSuccess
26
26
27+showIdrisDocDir :: IO ()
28+showIdrisDocDir = do
29+ ldir <- getIdrisDocDir
30+ putStrLn ldir
31+
32+showExitIdrisDocDir :: IO ()
33+showExitIdrisDocDir = do
34+ showIdrisDocDir
35+ exitSuccess
36+
27showIdrisFlagsInc :: IO ()
37showIdrisFlagsInc :: IO ()
28showIdrisFlagsInc = do
38showIdrisFlagsInc = do
29 incFlags <- getIdrisFlagsInc
39 incFlags <- getIdrisFlagsInc
@@ -68,8 +78,10 @@ showIdrisInfo = do
68 putStrLn "Paths:"
78 putStrLn "Paths:"
69 ldir <- getIdrisLibDir
79 ldir <- getIdrisLibDir
70 udir <- getIdrisUserDataDir
80 udir <- getIdrisUserDataDir
81+ ddir <- getIdrisDocDir
71 putStrLn $ unwords ["-", "Library Dir:", ldir]
82 putStrLn $ unwords ["-", "Library Dir:", ldir]
72 putStrLn $ unwords ["-", "User Dir:", udir]
83 putStrLn $ unwords ["-", "User Dir:", udir]
84+ putStrLn $ unwords ["-", "Documentation Dir:", ddir]
73
85
74 putStrLn "Flags:"
86 putStrLn "Flags:"
75 lflag <- getIdrisFlagsLib
87 lflag <- getIdrisFlagsLib
src/Idris/Package.hs+19−12
@@ -190,10 +190,10 @@ cleanPkg copts fp = do
190--
190--
191-- Issue number #1572 on the issue tracker
191-- Issue number #1572 on the issue tracker
192-- https://github.com/idris-lang/Idris-dev/issues/1572
192-- https://github.com/idris-lang/Idris-dev/issues/1572
193−documentPkg :: [Opt] -- ^ Command line options.
193+documentPkg :: [Opt] -- ^ Command line options.
194− -> FilePath -- ^ Path to ipkg file.
194+ -> (Bool,FilePath) -- ^ (Should we install?, Path to ipkg file).
195 -> IO ()
195 -> IO ()
196−documentPkg copts fp = do
196+documentPkg copts (install,fp) = do
197 pkgdesc <- parseDesc fp
197 pkgdesc <- parseDesc fp
198 cd <- getCurrentDirectory
198 cd <- getCurrentDirectory
199 let pkgDir = cd </> takeDirectory fp
199 let pkgDir = cd </> takeDirectory fp
@@ -223,7 +223,13 @@ documentPkg copts fp = do
223 putStrLn $ pshow idrisInit err
223 putStrLn $ pshow idrisInit err
224 exitWith (ExitFailure 1)
224 exitWith (ExitFailure 1)
225 Right ist -> do
225 Right ist -> do
226+ iDocDir <- getIdrisDocDir
227+ pkgDocDir <- makeAbsolute (iDocDir </> pkgname pkgdesc)
228+ let out_dir = if install then pkgDocDir else outputDir
229+ when install $ do
230+ putStrLn $ unwords ["Attempting to install IdrisDocs for", pkgname pkgdesc, "in:", out_dir]
231+
226− docRes <- generateDocs ist mods outputDir
232+ docRes <- generateDocs ist mods out_dir
227 case docRes of
233 case docRes of
228 Right _ -> return ()
234 Right _ -> return ()
229 Left msg -> do
235 Left msg -> do
@@ -416,14 +422,15 @@ mergeOptions copts popts =
416 normaliseOpts = filter filtOpt
422 normaliseOpts = filter filtOpt
417
423
418 filtOpt :: Opt -> Bool
424 filtOpt :: Opt -> Bool
419− filtOpt (PkgBuild _) = False
425+ filtOpt (PkgBuild _) = False
420− filtOpt (PkgInstall _) = False
426+ filtOpt (PkgInstall _) = False
421− filtOpt (PkgClean _) = False
427+ filtOpt (PkgClean _) = False
422− filtOpt (PkgCheck _) = False
428+ filtOpt (PkgCheck _) = False
423− filtOpt (PkgREPL _) = False
429+ filtOpt (PkgREPL _) = False
430+ filtOpt (PkgDocBuild _) = False
424− filtOpt (PkgMkDoc _) = False
431+ filtOpt (PkgDocInstall _) = False
425− filtOpt (PkgTest _) = False
432+ filtOpt (PkgTest _) = False
426− filtOpt _ = True
433+ filtOpt _ = True
427
434
428 chkOpt :: Opt -> Either String Opt
435 chkOpt :: Opt -> Either String Opt
429 chkOpt o@(OLogging _) = Right o
436 chkOpt o@(OLogging _) = Right o