diff --git a/Cabal/Distribution/PackageDescription.hs b/Cabal/Distribution/PackageDescription.hs index 1124d0c80df18db04f87d730856cde6c88c40243..17ca9ea79329bbf719bc8119eebbf235db6b5f21 100644 --- a/Cabal/Distribution/PackageDescription.hs +++ b/Cabal/Distribution/PackageDescription.hs @@ -193,7 +193,8 @@ data PackageDescription dataFiles :: [FilePath], dataDir :: FilePath, extraSrcFiles :: [FilePath], - extraTmpFiles :: [FilePath] + extraTmpFiles :: [FilePath], + extraHtmlFiles :: [FilePath] } deriving (Show, Read, Eq) @@ -256,7 +257,8 @@ emptyPackageDescription dataFiles = [], dataDir = "", extraSrcFiles = [], - extraTmpFiles = [] + extraTmpFiles = [], + extraHtmlFiles = [] } -- | The type of build system used by this package. diff --git a/Cabal/Distribution/PackageDescription/Check.hs b/Cabal/Distribution/PackageDescription/Check.hs index 8826b0500cd65ae7cf2ad52dc7532fffb662ca7e..3d8ac627e58c723ffd16dafe37c0d6fd3542ccbc 100644 --- a/Cabal/Distribution/PackageDescription/Check.hs +++ b/Cabal/Distribution/PackageDescription/Check.hs @@ -848,10 +848,11 @@ checkPaths pkg = _ -> False -- paths that must be relative relPaths = - [ (path, "extra-src-files") | path <- extraSrcFiles pkg ] - ++ [ (path, "extra-tmp-files") | path <- extraTmpFiles pkg ] - ++ [ (path, "data-files") | path <- dataFiles pkg ] - ++ [ (path, "data-dir") | path <- [dataDir pkg]] + [ (path, "extra-src-files") | path <- extraSrcFiles pkg ] + ++ [ (path, "extra-tmp-files") | path <- extraTmpFiles pkg ] + ++ [ (path, "extra-html-files") | path <- extraHtmlFiles pkg ] + ++ [ (path, "data-files") | path <- dataFiles pkg ] + ++ [ (path, "data-dir") | path <- [dataDir pkg]] ++ concat [ [ (path, "c-sources") | path <- cSources bi ] ++ [ (path, "install-includes") | path <- installIncludes bi ] diff --git a/Cabal/Distribution/PackageDescription/Parse.hs b/Cabal/Distribution/PackageDescription/Parse.hs index 4cec0dac0459f1ac8674284ff41656567577675e..5e4acb7f8ad25e5f036bdbebff89f50ae734e7c7 100644 --- a/Cabal/Distribution/PackageDescription/Parse.hs +++ b/Cabal/Distribution/PackageDescription/Parse.hs @@ -170,6 +170,9 @@ pkgDescrFieldDescrs = , listField "extra-tmp-files" showFilePath parseFilePathQ extraTmpFiles (\val pkg -> pkg{extraTmpFiles=val}) + , listField "extra-html-files" + showFilePath parseFilePathQ + extraHtmlFiles (\val pkg -> pkg{extraHtmlFiles=val}) ] -- | Store any fields beginning with "x-" in the customFields field of diff --git a/Cabal/Distribution/Simple/Haddock.hs b/Cabal/Distribution/Simple/Haddock.hs index d166d03da19277d50ce88f497b5983f134b3ce59..94676d02c3b77251509bb439df79352bd1b0e88b 100644 --- a/Cabal/Distribution/Simple/Haddock.hs +++ b/Cabal/Distribution/Simple/Haddock.hs @@ -75,11 +75,11 @@ import Distribution.Simple.Build (initialBuildSteps) import Distribution.Simple.InstallDirs (InstallDirs(..), PathTemplateEnv, PathTemplate, PathTemplateVariable(..), toPathTemplate, fromPathTemplate, - substPathTemplate, - initialPathTemplateEnv) + substPathTemplate, initialPathTemplateEnv) import Distribution.Simple.LocalBuildInfo ( LocalBuildInfo(..), Component(..), ComponentLocalBuildInfo(..) - , withAllComponentsInBuildOrder ) + , withAllComponentsInBuildOrder + , absoluteInstallDirs, CopyDest(NoCopyDest) ) import Distribution.Simple.BuildPaths ( haddockName, hscolourPref, autogenModulesDir, ) @@ -92,7 +92,7 @@ import Distribution.InstalledPackageInfo import Distribution.Simple.Utils ( die, warn, notice, intercalate, setupMessage , createDirectoryIfMissingVerbose, withTempFile, copyFileVerbose - , withTempDirectory + , withTempDirectory, matchFileGlob , findFileWithExtension, findFile ) import Distribution.Text ( display, simpleParse ) @@ -102,15 +102,16 @@ import Language.Haskell.Extension -- Base import System.Directory(removeFile, doesFileExist, createDirectoryIfMissing) -import Control.Monad ( when, guard ) +import Control.Monad ( when, guard, forM_ ) import Control.Exception (assert) import Data.Monoid import Data.Maybe ( fromMaybe, listToMaybe ) import System.FilePath((</>), (<.>), splitFileName, splitExtension, - normalise, splitPath, joinPath) + normalise, splitPath, joinPath, takeDirectory) import System.IO (hClose, hPutStrLn) import Distribution.Version +import Distribution.Simple.SrcDist (copyFileTo) -- Types @@ -219,6 +220,14 @@ haddock pkg_descr lbi suffixes flags = do lbi isVersion2 bi (commonArgs `mappend` exeArgs) runHaddock verbosity keepTempFiles confHaddock exeArgs' _ -> return () + + flip mapM_ (extraHtmlFiles pkg_descr) $ \ fpath -> do + files <- matchFileGlob fpath + let dir = takeDirectory (flat_htmldir </> "html") + InstallDirs { htmldir = flat_htmldir } = + absoluteInstallDirs pkg_descr lbi NoCopyDest + -- sequence_ [ do copyFileTo verbosity dir file | file <- files ] + forM_ files $ copyFileTo verbosity dir where verbosity = flag haddockVerbosity keepTempFiles = flag haddockKeepTempFiles diff --git a/Cabal/Distribution/Simple/SrcDist.hs b/Cabal/Distribution/Simple/SrcDist.hs index 1e781ba2d57c62f841b05c8f4df7dd016b91b41f..fccbebaade0a5a731af1aca4635e9af184b59da5 100644 --- a/Cabal/Distribution/Simple/SrcDist.hs +++ b/Cabal/Distribution/Simple/SrcDist.hs @@ -64,6 +64,8 @@ module Distribution.Simple.SrcDist ( snapshotPackage, snapshotVersion, dateToSnapshotNumber, + + copyFileTo ) where import Distribution.PackageDescription @@ -223,7 +225,7 @@ prepareTree verbosity pkg_descr0 mb_lbi distPref targetDir pps = do when (not (null (licenseFile pkg_descr))) $ copyFileTo verbosity targetDir (licenseFile pkg_descr) - flip mapM_ (extraSrcFiles pkg_descr) $ \ fpath -> do + flip mapM_ (extraSrcFiles pkg_descr ++ extraHtmlFiles pkg_descr) $ \ fpath -> do files <- matchFileGlob fpath sequence_ [ do copyFileTo verbosity targetDir file