@@ -3,26 +3,16 @@
33import Distribution.Simple
44import Distribution.Simple.Setup
55 (copyDest, copyVerbosity, fromFlag, installVerbosity, BuildFlags(..))
6−import Distribution.PackageDescription
7− (PackageDescription(..), Executable(..), BuildInfo(..))
6+import Distribution.PackageDescription (PackageDescription(..), Executable(..))
87import Distribution.Simple.LocalBuildInfo
98 (LocalBuildInfo(..), absoluteInstallDirs)
109import Distribution.Verbosity ( Verbosity, silent )
11−import Distribution.Simple.GHC (ghcPackageDbOptions)
12−import Distribution.Simple.InstallDirs (mandir, bindir, CopyDest (NoCopyDest))
10+import Distribution.Simple.InstallDirs (mandir, CopyDest (NoCopyDest))
1311import Distribution.Simple.Utils (installOrdinaryFiles)
1412import Prelude hiding (catch)
15−import Control.Exception ( bracket_, catch )
16−import Control.Monad ( unless )
17−import System.Process ( rawSystem, runCommand, waitForProcess )
13+import System.Process ( rawSystem )
1814import System.FilePath ( (</>) )
19−import System.Directory
2015import System.Exit
21−import System.Time
22−import System.IO.Error ( isDoesNotExistError )
23−import Data.Maybe ( catMaybes )
24−import Data.List ( (\\) )
25−import Data.Time.Clock (UTCTime(..))
2616
2717main :: IO ()
2818main = do
@@ -33,39 +23,22 @@ main = do
3323 (fromFlag $ copyDest flags)
3424 , postInst = \ _ flags pkg lbi ->
3525 installManpages pkg lbi (fromFlag $ installVerbosity flags) NoCopyDest
26+ , copyHook = \pkgdescr ->
27+ (copyHook simpleUserHooks) pkgdescr{ executables =
28+ [x | x <- executables pkgdescr, exeName x /= "make-pandoc-man-pages"] }
29+ , instHook = \pkgdescr ->
30+ (instHook simpleUserHooks) pkgdescr{ executables =
31+ [x | x <- executables pkgdescr, exeName x /= "make-pandoc-man-pages"] }
3632 }
3733 exitWith ExitSuccess
3834
3935-- | Build man pages from markdown sources in man/
4036makeManPages :: Args -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
41−makeManPages _ flags _ lbi = do
42− ds1 <- modifiedDependencies (manDir </> "man1" </> "pandoc.1")
43− ["README", manDir </> "man1" </> "pandoc.1.template"]
44− ds2 <- modifiedDependencies (manDir </> "man5" </> "pandoc_markdown.5")
45− ["README", manDir </> "man5" </> "pandoc_markdown.5.template"]
46−
47− let distPref = fromFlag (buildDistPref flags)
48− packageDB =
49− withPackageDB lbi
50− ++ [SpecificPackageDB $ distPref </> "package.conf.inplace"]
51−
52− verbosity = fromFlag $ buildVerbosity flags
53−
54− args = makeGhcArgs (ghcPackageDbOptions packageDB)
55− ++ ["MakeManPage.hs"]
56− args' = if verbosity == silent
57− then args
58− else args ++ ["--verbose"]
59− -- Don't run MakeManPage.hs unless we have to
60− unless (null ds1 && null ds2) $ do
61− rawSystem "runghc" args' >>= exitWith
62−
63−-- format arguments to runghc that we wish to pass to ghc
64−-- normally runghc gets it right, unless the argument does
65−-- not begin with a '-' charecter, so we need to give clear
66−-- directions.
67−makeGhcArgs :: [String] -> [String]
68−makeGhcArgs = map ("--ghc-arg="++)
37+makeManPages _ flags _ _ = do
38+ let verbosity = fromFlag $ buildVerbosity flags
39+ let args = ["--verbose" | verbosity /= silent]
40+ rawSystem ("dist" </> "build" </> "make-pandoc-man-pages" </> "make-pandoc-man-pages")
41+ args >>= exitWith
6942
7043manpages :: [FilePath]
7144manpages = ["man1" </> "pandoc.1"
@@ -80,18 +53,3 @@ installManpages pkg lbi verbosity copy =
8053 installOrdinaryFiles verbosity (mandir (absoluteInstallDirs pkg lbi copy))
8154 (zip (repeat manDir) manpages)
8255
83−-- | Returns a list of 'dependencies' that have been modified after 'file'.
84−modifiedDependencies :: FilePath -> [FilePath] -> IO [FilePath]
85−modifiedDependencies file dependencies = do
86− fileModTime <- catch (getModificationTime file) $
87− \e -> if isDoesNotExistError e
88−#if __GLASGOW_HASKELL__ >= 706
89− then return (UTCTime (toEnum 0) 0) -- the minimum ClockTime
90−#else
91− then return (TOD 0 0) -- the minimum ClockTime
92−#endif
93− else ioError e
94− depModTimes <- mapM getModificationTime dependencies
95− let modified = zipWith (\dep time -> if time > fileModTime then Just dep else Nothing) dependencies depModTimes
96− return $ catMaybes modified
97−