summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
Diffstat (limited to 'Build')
-rw-r--r--Build/Mans.hs58
-rwxr-xr-xBuild/mdwn2man2
2 files changed, 58 insertions, 2 deletions
diff --git a/Build/Mans.hs b/Build/Mans.hs
new file mode 100644
index 000000000..a50396e5e
--- /dev/null
+++ b/Build/Mans.hs
@@ -0,0 +1,58 @@
+{- Build man pages.
+ -
+ - Copyright 2016 Joey Hess <id@joeyh.name>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# OPTIONS_GHC -fno-warn-tabs #-}
+
+module Build.Mans where
+
+import System.Directory
+import System.FilePath
+import Data.List
+import Control.Monad
+import System.Process
+import System.Exit
+import Data.Maybe
+import Utility.Exception
+
+main :: IO ()
+main = do
+ mans <- buildMans
+ when (any isNothing mans) $
+ error "mdwn2man failed"
+
+buildMans :: IO [Maybe FilePath]
+buildMans = do
+ mansrc <- filter isManSrc <$> getDirectoryContents "doc"
+ createDirectoryIfMissing False "man"
+ forM mansrc $ \f -> do
+ let src = "doc" </> f
+ let dest = srcToDest src
+ srcm <- getModificationTime src
+ destm <- catchMaybeIO $ getModificationTime dest
+ if (Just srcm > destm)
+ then do
+ r <- system $ unwords
+ [ "./Build/mdwn2man"
+ , progName src
+ , "1"
+ , src
+ , "> " ++ dest
+ ]
+ if r == ExitSuccess
+ then return (Just dest)
+ else return Nothing
+ else return (Just dest)
+
+isManSrc :: FilePath -> Bool
+isManSrc s = "git-annex" `isPrefixOf` (takeFileName s)
+ && takeExtension s == ".mdwn"
+
+srcToDest :: FilePath -> FilePath
+srcToDest s = "man" </> progName s ++ ".1"
+
+progName :: FilePath -> FilePath
+progName = dropExtension . takeFileName
diff --git a/Build/mdwn2man b/Build/mdwn2man
index f56d9b0c7..09b684a07 100755
--- a/Build/mdwn2man
+++ b/Build/mdwn2man
@@ -2,8 +2,6 @@
# Warning: hack
my $prog=shift;
-$prog=~s/\.\d+$//;
-$prog=~s/man\///;
my $section=shift;
print ".TH $prog $section\n";