From fa7e002c63b11a88e35ef4160b4bc9b6e3bdb34e Mon Sep 17 00:00:00 2001 From: Andrea Rossato Date: Tue, 19 Jun 2007 12:51:50 +0200 Subject: added cabal support darcs-hash:20070619105150-d6583-4351c7ea0a1eb1aa45f752f69a9e50d89af64ac3.gz --- Setup.lhs | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 Setup.lhs (limited to 'Setup.lhs') diff --git a/Setup.lhs b/Setup.lhs new file mode 100755 index 0000000..d7acc7f --- /dev/null +++ b/Setup.lhs @@ -0,0 +1,80 @@ +#!/usr/bin/env runhaskell + +> import Distribution.Simple +> import Distribution.PackageDescription +> import Distribution.Setup +> import Distribution.Simple.Utils +> import Distribution.Simple.LocalBuildInfo +> import Distribution.Program +> import Distribution.PreProcess + +> import System.FilePath.Posix +> import System.Directory +> import Data.List + + +> main = defaultMainWithHooks defaultUserHooks {haddockHook = xmonadHaddock} + +> -- a different implementation of haddock hook from +> -- from Distribution.Simple: will use synopsis and description for +> -- building executables' documentation. + +> xmonadHaddock pkg_descr lbi hooks (HaddockFlags hoogle verbose) = do +> confHaddock <- do let programConf = withPrograms lbi +> haddockName = programName haddockProgram +> mHaddock <- lookupProgram haddockName programConf +> maybe (die "haddock command not found") return mHaddock + +> let tmpDir = (buildDir lbi) "tmp" +> createDirectoryIfMissing True tmpDir +> createDirectoryIfMissing True haddockPref +> preprocessSources pkg_descr lbi verbose (allSuffixHandlers hooks) +> setupMessage "Running Haddock for" pkg_descr + +> let outputFlag = if hoogle then "--hoogle" else "--html" +> showPkg = showPackageId (package pkg_descr) +> showDepPkgs = map showPackageId (packageDeps lbi) + +> withExe pkg_descr $ \exe -> do +> let bi = buildInfo exe +> inFiles <- getModulePaths bi (otherModules bi) +> srcMainPath <- findFile (hsSourceDirs bi) (modulePath exe) + +> let prologName = showPkg ++ "-haddock-prolog.txt" +> writeFile prologName (description pkg_descr ++ "\n") + +> let exeTargetDir = haddockPref exeName exe +> outFiles = srcMainPath : inFiles +> haddockFile = exeTargetDir (haddockName pkg_descr) + +> createDirectoryIfMissing True exeTargetDir +> rawSystemProgram verbose confHaddock +> ([outputFlag, +> "--odir=" ++ exeTargetDir, +> "--title=" ++ showPkg ++ ": " ++ synopsis pkg_descr, +> "--package=" ++ showPkg, +> "--dump-interface=" ++ haddockFile, +> "--prologue=" ++ prologName +> ] +> ++ map ("--use-package=" ++) showDepPkgs +> ++ programArgs confHaddock +> ++ (if verbose > 4 then ["--verbose"] else []) +> ++ outFiles +> ) +> removeFile prologName + +> getModulePaths :: BuildInfo -> [String] -> IO [FilePath] +> getModulePaths bi = +> fmap concat . +> mapM (flip (moduleToFilePath (hsSourceDirs bi)) ["hs", "lhs"]) + + +> allSuffixHandlers :: Maybe UserHooks +> -> [PPSuffixHandler] +> allSuffixHandlers hooks +> = maybe knownSuffixHandlers +> (\h -> overridesPP (hookedPreProcessors h) knownSuffixHandlers) +> hooks +> where +> overridesPP :: [PPSuffixHandler] -> [PPSuffixHandler] -> [PPSuffixHandler] +> overridesPP = unionBy (\x y -> fst x == fst y) -- cgit v1.2.3