diff options
Diffstat (limited to 'Setup.hs')
| -rw-r--r-- | Setup.hs | 68 |
1 files changed, 51 insertions, 17 deletions
@@ -1,5 +1,5 @@ {- -Copyright (C) 2006-2014 John MacFarlane <jgm@berkeley.edu> +Copyright (C) 2006-2015 John MacFarlane <jgm@berkeley.edu> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,34 +18,68 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import Distribution.Simple import Distribution.Simple.PreProcess -import Distribution.PackageDescription (PackageDescription(..), Executable(..)) +import Distribution.Simple.Setup (ConfigFlags(..)) +import Distribution.PackageDescription (PackageDescription(..), FlagName(..)) import System.Process ( rawSystem ) import System.FilePath ( (</>) ) import System.Directory ( findExecutable ) -import Distribution.Simple.Utils (info) +import Distribution.Verbosity ( Verbosity ) +import Distribution.Simple.Utils (info, notice, installOrdinaryFiles) +import Distribution.Simple.Setup +import Distribution.Simple.Program (simpleProgram, Program(..)) +import Distribution.Simple.LocalBuildInfo +import Data.Version +import System.Process (readProcess) +import Text.ParserCombinators.ReadP (readP_to_S, skipSpaces, eof) +import Control.Monad (when) +import qualified Control.Exception as E main :: IO () main = defaultMainWithHooks $ simpleUserHooks { -- enable hsb2hs preprocessor for .hsb files hookedPreProcessors = [ppBlobSuffixHandler] - -- ensure that make-pandoc-man-pages doesn't get installed to bindir - , copyHook = \pkgdescr -> - (copyHook simpleUserHooks) pkgdescr{ executables = - [x | x <- executables pkgdescr, exeName x /= "make-pandoc-man-pages"] } - , instHook = \pkgdescr -> - (instHook simpleUserHooks) pkgdescr{ executables = - [x | x <- executables pkgdescr, exeName x /= "make-pandoc-man-pages"] } + , hookedPrograms = [(simpleProgram "hsb2hs"){ + programFindVersion = findHsb2hsVersion }] + , postCopy = installManPage } +findHsb2hsVersion :: Verbosity -> FilePath -> IO (Maybe Version) +findHsb2hsVersion verb fp = do + let handleExitFailure :: IOError -> IO (Maybe Version) + handleExitFailure _ = return Nothing + E.handle handleExitFailure $ do + outp <- readProcess fp ["--version"] "" + case readP_to_S (do v <- parseVersion + skipSpaces + eof + return v) outp of + ((v,""):_) -> return (Just v) + _ -> return Nothing + ppBlobSuffixHandler :: PPSuffixHandler -ppBlobSuffixHandler = ("hsb", \_ _ -> +ppBlobSuffixHandler = ("hsb", \_ lbi -> PreProcessor { platformIndependent = True, runPreProcessor = mkSimplePreProcessor $ \infile outfile verbosity -> - do info verbosity $ "Preprocessing " ++ infile ++ " to " ++ outfile - hsb2hsPath <- findExecutable "hsb2hs" - case hsb2hsPath of - Just p -> rawSystem p [infile, infile, outfile] - Nothing -> error "hsb2hs is needed to build this program: cabal install hsb2hs" - return () + do let embedData = case lookup (FlagName "embed_data_files") + (configConfigurationsFlags (configFlags lbi)) of + Just True -> True + _ -> False + when embedData $ + do info verbosity $ "Preprocessing " ++ infile ++ " to " ++ outfile + hsb2hsPath <- findExecutable "hsb2hs" + case hsb2hsPath of + Just p -> rawSystem p [infile, infile, outfile] + Nothing -> error "hsb2hs is needed to build this program: cabal install hsb2hs" + return () }) + +installManPage :: Args -> CopyFlags + -> PackageDescription -> LocalBuildInfo -> IO () +installManPage _ flags pkg lbi = do + let verbosity = fromFlag (copyVerbosity flags) + let copydest = fromFlag (copyDest flags) + let mandest = mandir (absoluteInstallDirs pkg lbi copydest) + </> "man1" + notice verbosity $ "Copying man page to " ++ mandest + installOrdinaryFiles verbosity mandest [("man", "pandoc.1")] |
