I might get a chance to look at this tonight :)

Anyone else is welcome to volunteer.

peace,

  isaac

--- Begin Message ---

On Mon, 5 Jun 2006, Henning Thielemann wrote:

I've started hacking on Distribution/Simple in order to improve the haddock support. I do now pass two more things to haddock: The --dump-interface option, which generates the .haddock files which are needed by other haddock documentation that refers to this one, and the --use-package option for linking haddock to existing documentation. However, I have noticed that Cabal does not install haddock documentation so far. Thus I cannot link to documentation of custom Cabal packages, yet. I see the problem of finding an appropriate path for installed documentation. I will add some checks for common documentation paths on Linux in the configure phase.

I'll sent some darcs patches when I'm ready.

I do now send you my improvements for Haddock support in Cabal. The packages which a Cabal project depends on are now also forwarded to haddock, so that it generate hyperlinks to them. Additionally the documentation of a Cabal package is installed in share/package/doc/html. Maybe the documentation path should configurable. Since this installation depends on the .installed-pkg-config, a generated documentation can only be installed after 'Setup build' was started. I think future versions of Cabal should generate the documentation within the 'build' step. Manuals for executables cannot be properly generated so far, because they depend on the installed package, but during the 'Setup haddock' procedure the main documentation is not present at the installation path.
New patches:

[generate .haddock interface file when running haddock
[EMAIL PROTECTED] {
hunk ./Distribution/Simple.hs 391
+
+getModulePaths :: BuildInfo -> [String] -> IO [FilePath]
+getModulePaths bi =
+   fmap concat .
+      mapM (flip (moduleToFilePath (hsSourceDirs bi)) ["hs", "lhs"])
+
hunk ./Distribution/Simple.hs 401
-                      let haddockName = programName $ haddockProgram
+                      let haddockName = programName haddockProgram
hunk ./Distribution/Simple.hs 403
-                      case mHaddock of
-                        Nothing -> (die "haddock command not found")
-                        Just h  -> return h
+                      maybe (die "haddock command not found") return mHaddock
hunk ./Distribution/Simple.hs 410
-    
+
hunk ./Distribution/Simple.hs 413
+    let replaceLitExts = map (joinFileName tmpDir . flip changeFileExt "hs")
+    let mockAll bi = mapM_ (mockPP ["-D__HADDOCK__"] pkg_descr bi lbi tmpDir 
verbose)
+
hunk ./Distribution/Simple.hs 418
-        inFiles <- sequence [moduleToFilePath (hsSourceDirs bi) m ["hs", "lhs"]
-                               | m <- exposedModules lib ++ otherModules bi] 
>>= return . concat
-        mapM_ (mockPP ["-D__HADDOCK__"] pkg_descr bi lbi tmpDir verbose) 
inFiles
+        inFiles <- getModulePaths bi (exposedModules lib ++ otherModules bi)
+        mockAll bi inFiles
hunk ./Distribution/Simple.hs 422
-        writeFile prologName ((description pkg_descr) ++ "\n")
-        let outFiles = map (joinFileName tmpDir)
-                       (map ((flip changeFileExt) "hs") inFiles)
+        writeFile prologName (description pkg_descr ++ "\n")
+        let outFiles = replaceLitExts inFiles
+        let haddockFile = joinFileExt (pkgName (package pkg_descr)) "haddock"
hunk ./Distribution/Simple.hs 430
-                  "-p", prologName] ++ (programArgs confHaddock)
-                ++ (if verbose > 4 then ["-v"] else [])
-                ++ outFiles
-                ++ map ((++) "--hide=") (otherModules bi)
+                  "-D", joinFileName targetDir haddockFile,
+                  "-p", prologName]
+                 ++ programArgs confHaddock
+                 ++ (if verbose > 4 then ["-v"] else [])
+                 ++ outFiles
+                 ++ map ("--hide=" ++) (otherModules bi)
hunk ./Distribution/Simple.hs 442
-        inFiles' <- sequence [moduleToFilePath (hsSourceDirs bi) m ["hs", 
"lhs"]
-                               | m <- otherModules bi] >>= return . concat
+        inFiles' <- getModulePaths bi (otherModules bi)
hunk ./Distribution/Simple.hs 445
-        mapM_ (mockPP ["-D__HADDOCK__"] pkg_descr bi lbi tmpDir verbose) 
inFiles
-        let outFiles = map (joinFileName tmpDir)
-                       (map ((flip changeFileExt) "hs") inFiles)
+        mockAll bi inFiles
+        let outFiles = replaceLitExts inFiles
hunk ./Distribution/Simple.hs 450
-                  "-t", exeName exe] ++ (programArgs confHaddock)
-                ++ (if verbose > 4 then ["-v"] else [])
-                ++ outFiles
+                  "-t", exeName exe]
+                 ++ programArgs confHaddock
+                 ++ (if verbose > 4 then ["-v"] else [])
+                 ++ outFiles
hunk ./Distribution/Simple.hs 471
-        needsCpp p | not (hasLibs p) = False
-                   | otherwise = any (== CPP) (extensions $ libBuildInfo $ 
fromJust $ library p)
+        needsCpp p =
+           hasLibs p &&
+           any (== CPP) (extensions $ libBuildInfo $ fromJust $ library p)
hunk ./Distribution/Simple.hs 485
-        inFiles <- sequence [moduleToFilePath (hsSourceDirs bi) m ["hs", "lhs"]
-                                | m <- mods] >>= return . concat
+        inFiles <- getModulePaths bi mods
hunk ./Distribution/Simple.hs 524
-                s <- sequence [moduleToFilePath dirs (x ++"_stub") ["h", "c"]
-                                 | x <- mods ]
-                mapM_ removeFile (concat s)
+            s <- mapM (\x -> moduleToFilePath dirs (x ++"_stub") ["h", "c"]) 
mods
+            mapM_ removeFile (concat s)
hunk ./Distribution/Simple.hs 541
-  die ("Unrecognised flags: " ++ concat (intersperse "," (extra_flags)))
+  die ("Unrecognised flags: " ++ concat (intersperse "," extra_flags))
}

[stripPrefix -> dropPrefix
[EMAIL PROTECTED] {
hunk ./Distribution/Compat/FilePath.hs 11
-         , joinPaths         
+         , joinPaths
hunk ./Distribution/Compat/FilePath.hs 85
-      [_]                          -> path1   -- don't remove the trailing 
slash if 
+      [_]                          -> path1   -- don't remove the trailing 
slash if
hunk ./Distribution/Compat/FilePath.hs 123
--- | Split the path into directory, file name and extension. 
+-- | Split the path into directory, file name and extension.
hunk ./Distribution/Compat/FilePath.hs 143
--- | The 'joinFileName' function is the opposite of 'splitFileName'. 
+-- | The 'joinFileName' function is the opposite of 'splitFileName'.
hunk ./Distribution/Compat/FilePath.hs 184
-  | otherwise          = 
+  | otherwise          =
hunk ./Distribution/Compat/FilePath.hs 193
-  
+
hunk ./Distribution/Compat/FilePath.hs 197
-                                    -- Specify an empty string to remove an 
existing 
+                                    -- Specify an empty string to remove an 
existing
hunk ./Distribution/Compat/FilePath.hs 237
--- 
+--
hunk ./Distribution/Compat/FilePath.hs 247
--- 
--- >  stripPrefix "." "Src/Test.hs" == "Src/Test.hs"
--- >  stripPrefix "Src" "Src/Test.hs" == "Test.hs"
+--
+-- >  dropPrefix "." "Src/Test.hs" == "Src/Test.hs"
+-- >  dropPrefix "Src" "Src/Test.hs" == "Test.hs"
hunk ./Distribution/Compat/FilePath.hs 257
--- The function is useful in case if you want to create 
--- some file but you aren\'t sure whether all directories 
+-- The function is useful in case if you want to create
+-- some file but you aren\'t sure whether all directories
hunk ./Distribution/Compat/FilePath.hs 260
--- 
+--
hunk ./Distribution/Compat/FilePath.hs 280
--- Note that if the file is relative then the current directory (\".\") 
+-- Note that if the file is relative then the current directory (\".\")
hunk ./Distribution/Compat/FilePath.hs 302
-       inits cs = 
+       inits cs =
hunk ./Distribution/Compat/FilePath.hs 315
-commonParent paths@(p:ps) = 
+commonParent paths@(p:ps) =
hunk ./Distribution/Compat/FilePath.hs 318
-    Nothing | all (not . isAbsolutePath) paths -> 
+    Nothing | all (not . isAbsolutePath) paths ->
hunk ./Distribution/Compat/FilePath.hs 320
-         getDrive (d:':':_) ds 
+         getDrive (d:':':_) ds
hunk ./Distribution/Compat/FilePath.hs 344
-    removeSep i acc cs pacc []          = 
+    removeSep i acc cs pacc []          =
hunk ./Distribution/Compat/FilePath.hs 369
-        []     -> [chunk] 
+        []     -> [chunk]
hunk ./Distribution/Compat/FilePath.hs 372
-        chunk = 
+        chunk =
hunk ./Distribution/Compat/FilePath.hs 414
--- | A platform-specific character used to separate search path strings in 
--- environment variables. The separator is a colon (\":\") on Unix and 
Macintosh, 
+-- | A platform-specific character used to separate search path strings in
+-- environment variables. The separator is a colon (\":\") on Unix and 
Macintosh,
}

[Distribution.simple: haddock option --use-package tells which packages to 
hyperlink to
[EMAIL PROTECTED] {
hunk ./Distribution/Simple.hs 415
+    let showPkg     = showPackageId (package pkg_descr)
+    let showDepPkgs = map showPackageId (packageDeps lbi)
hunk ./Distribution/Simple.hs 422
-        let showPkg = showPackageId (package pkg_descr)
hunk ./Distribution/Simple.hs 430
-                  "-t", showPkg,
+                  "-t", showPkg ++ ": " ++ synopsis pkg_descr,
+                  "-k", showPkg,
hunk ./Distribution/Simple.hs 434
+                 ++ map ("--use-package=" ++) showDepPkgs
hunk ./Distribution/Simple.hs 454
+                 ++ map ("--use-package=" ++) (showPkg:showDepPkgs)
}

[Distribution.Compat.Directory: added getDirectoryContentsWithoutSpecial
[EMAIL PROTECTED] {
hunk ./Distribution/Compat/Directory.hs 3
-        removeDirectoryRecursive, module System.Directory
+        removeDirectoryRecursive, module System.Directory,
+        getDirectoryContentsWithoutSpecial
hunk ./Distribution/Compat/Directory.hs 114
-  cont <- getDirectoryContents startLoc
-  sequence_ [rm (startLoc `joinFileName` x) | x <- cont, x /= "." && x /= ".."]
+  cont <- getDirectoryContentsWithoutSpecial startLoc
+  mapM_ (rm . joinFileName startLoc) cont
hunk ./Distribution/Compat/Directory.hs 128
+
+getDirectoryContentsWithoutSpecial :: FilePath -> IO [FilePath]
+getDirectoryContentsWithoutSpecial =
+   fmap (filter (not . flip elem [".", ".."])) . getDirectoryContents
}

[Distribution.Simple.Utils: copyDirectoryRecursiveVerbose
[EMAIL PROTECTED] {
hunk ./Distribution/Simple/Utils.hs 56
+        copyDirectoryRecursiveVerbose,
hunk ./Distribution/Simple/Utils.hs 70
+        haddockPref,
hunk ./Distribution/Simple/Utils.hs 88
-import Control.Monad(when, filterM)
+import Control.Monad(when, filterM, unless)
hunk ./Distribution/Simple/Utils.hs 99
-       (splitFileName, splitFileExt, joinFileName, joinFileExt,
+       (splitFileName, splitFileExt, joinFileName, joinFileExt, joinPaths,
hunk ./Distribution/Simple/Utils.hs 102
-                       , doesFileExist, removeFile, getPermissions
+                       , doesDirectoryExist, doesFileExist, removeFile, 
getPermissions
hunk ./Distribution/Simple/Utils.hs 105
-import Distribution.Compat.Directory 
(copyFile,findExecutable,createDirectoryIfMissing)
+import Distribution.Compat.Directory
+           (copyFile, findExecutable, createDirectoryIfMissing,
+            getDirectoryContentsWithoutSpecial)
hunk ./Distribution/Simple/Utils.hs 275
--- |The path name that represents the current directory.  May be
--- system-specific.  In Unix, it's @\".\"@.
+-- adaptation of removeDirectoryRecursive
+copyDirectoryRecursiveVerbose :: Int -> FilePath -> FilePath -> IO ()
+copyDirectoryRecursiveVerbose verbose srcDir destDir = do
+  when (verbose > 0) $
+    putStrLn ("copy directory '" ++ srcDir ++ "' to '" ++ destDir ++ "'.")
+  let aux src dest =
+         let cp :: FilePath -> IO ()
+             cp f = let srcFile  = joinPaths src  f
+                        destFile = joinPaths dest f
+                    in  do success <- try (copyFileVerbose verbose srcFile 
destFile)
+                           case success of
+                              Left e  -> do isDir <- doesDirectoryExist srcFile
+                                            -- If f is not a directory, 
re-throw the error
+                                            unless isDir $ ioError e
+                                            aux srcFile destFile
+                              Right _ -> return ()
+         in  do createDirectoryIfMissing False dest
+                getDirectoryContentsWithoutSpecial src >>= mapM_ cp
+   in aux srcDir destDir
+
+
+
+
+-- | The path name that represents the current directory.
+-- In Unix, it's @\".\"@, but this is system-specific.
+-- (E.g. AmigaOS uses the empty string @\"\"@ for the current directory.)
hunk ./Distribution/Simple/Utils.hs 328
+
+haddockPref :: FilePath
+haddockPref = foldl1 joinPaths [distPref, "doc", "html"]
+
}

[PackageDescription: added toMaybe, some logical simplifications
[EMAIL PROTECTED] {
hunk ./Distribution/PackageDescription.hs 86
-import Data.Maybe(fromMaybe, fromJust, isNothing, catMaybes)
-import Data.List (nub)
+import Data.Maybe(fromMaybe, isNothing, catMaybes)
+import Data.List (nub,lookup)
hunk ./Distribution/PackageDescription.hs 185
-    = (maybe [] exposedModules lib)
-      ++ (maybe [] (otherModules . libBuildInfo) lib)
+    = maybe [] exposedModules lib
+       ++ maybe [] (otherModules . libBuildInfo) lib
hunk ./Distribution/PackageDescription.hs 196
+
+-- |'Maybe' version of 'hasLibs'
+maybeHasLibs :: PackageDescription -> Maybe Library
+maybeHasLibs p =
+   library p >>= (\lib -> toMaybe (buildable (libBuildInfo lib)) lib)
hunk ./Distribution/PackageDescription.hs 271
-withLib pkg_descr a f = if hasLibs pkg_descr
-                        then f (fromJust (library pkg_descr))
-                        else return a
+withLib pkg_descr a f =
+   maybe (return a) f (maybeHasLibs pkg_descr)
hunk ./Distribution/PackageDescription.hs 527
-            Nothing           -> syntaxError lineNo $ "No 'Main-Is' field 
found for " ++ eName ++ " stanza"
+            Nothing    -> syntaxError lineNo $ "No 'Main-Is' field found for " 
++ eName ++ " stanza"
hunk ./Distribution/PackageDescription.hs 541
+        lookupField x sts = lookup x (map (\(n,f,v) -> (f,(n,v))) sts)
hunk ./Distribution/PackageDescription.hs 543
-        lookupField x ((n,f,v):st)
-          | x == f      = Just (n,v)
-          | otherwise   = lookupField x st
-        lookupField _ [] = Nothing
hunk ./Distribution/PackageDescription.hs 548
-  case mLib of
-    Nothing      -> do biExes <- mapM parseExe stanzas
-                       return (Nothing, biExes)
-    lib@(Just _) -> do biExes <- mapM parseExe exes
-                       return (lib, biExes)
+  biExes <- mapM parseExe (maybe stanzas (const exes) mLib)
+  return (mLib, biExes)
hunk ./Distribution/PackageDescription.hs 662
+
+toMaybe :: Bool -> a -> Maybe a
+toMaybe b x = if b then Just x else Nothing
hunk ./Distribution/PackageDescription.hs 675
-              = if null (f pkg_descr)
-                 then Just $ "Missing field: " ++ n
-                 else Nothing
+              = toMaybe (null (f pkg_descr)) ("Missing field: " ++ n)
hunk ./Distribution/PackageDescription.hs 678
-sanityCheckLib Nothing  = Nothing
-sanityCheckLib (Just l)
-    = if null $ exposedModules l
-      then Just "Non-empty library, but empty exposed modules list. Cabal may 
not build this library correctly"
-      else Nothing
+sanityCheckLib ml =
+   ml >>= (\l ->
+      toMaybe (null $ exposedModules l)
+              ("Non-empty library, but empty exposed modules list. " ++
+               "Cabal may not build this library correctly"))
hunk ./Distribution/PackageDescription.hs 685
-checkSanity False _  = Nothing
-checkSanity True  s  = Just s
+checkSanity = toMaybe
hunk ./Distribution/PackageDescription.hs 688
-hasMods pkg_descr
-    | isNothing (library pkg_descr) = null $ executables pkg_descr
-    | otherwise = null (executables pkg_descr)
-                   && null (exposedModules (fromJust (library pkg_descr)))
+hasMods pkg_descr =
+   null (executables pkg_descr) &&
+      maybe True (null . exposedModules) (library pkg_descr)
+
hunk ./Distribution/PackageDescription.hs 867
-                          in if e1 == e2
-                              then Nothing
-                              else Just (er ++ " Expected: " ++ show e1
-                                            ++ " Got: " ++ show e2)
+                          in toMaybe (e1 /= e2)
+                                     (er ++ " Expected: " ++ show e1
+                                              ++ " Got: " ++ show e2)
}

[PackageDescription: haddockName generates the name of the .haddock file
[EMAIL PROTECTED] {
hunk ./Distribution/PackageDescription.hs 78
+        haddockName,
hunk ./Distribution/PackageDescription.hs 107
+import Distribution.Compat.FilePath(joinFileExt)
hunk ./Distribution/PackageDescription.hs 341
+
+haddockName :: PackageDescription -> FilePath
+haddockName pkg_descr =
+   joinFileExt (pkgName (package pkg_descr)) "haddock"
}

[install Haddock documentation in share/package/doc/html and register that path 
in the ghc-pkg
[EMAIL PROTECTED] {
hunk ./Distribution/Simple.hs 85
-import Distribution.Simple.Configure(LocalBuildInfo(..), 
getPersistBuildConfig, maybeGetPersistBuildConfig,
+import Distribution.Simple.Configure(getPersistBuildConfig, 
maybeGetPersistBuildConfig,
hunk ./Distribution/Simple.hs 88
+import Distribution.Simple.LocalBuildInfo(LocalBuildInfo(..))
hunk ./Distribution/Simple.hs 92
-                                  moduleToFilePath, findFile, distPref, 
srcPref)
+                                  moduleToFilePath, findFile,
+                                  distPref, srcPref, haddockPref)
hunk ./Distribution/Simple.hs 106
-import Data.Maybe       ( isNothing, isJust, fromJust )
+import Data.Maybe       ( isJust, fromJust )
hunk ./Distribution/Simple.hs 111
-import Distribution.Compat.FilePath(joinFileName, joinPaths, splitFileName, 
joinFileExt,
-                                    splitFileExt, changeFileExt)
+import Distribution.Compat.FilePath(joinFileName, joinPaths, joinFileExt,
+                                    splitFileName, splitFileExt, changeFileExt)
hunk ./Distribution/Simple.hs 407
-    let targetDir = joinPaths distPref (joinPaths "doc" "html")
hunk ./Distribution/Simple.hs 409
-    createDirectoryIfMissing True targetDir
+    createDirectoryIfMissing True haddockPref
hunk ./Distribution/Simple.hs 426
-        let haddockFile = joinFileExt (pkgName (package pkg_descr)) "haddock"
+        let haddockFile = joinFileName haddockPref (haddockName pkg_descr)
hunk ./Distribution/Simple.hs 430
-                  "-o", targetDir,
+                  "-o", haddockPref,
hunk ./Distribution/Simple.hs 433
-                  "-D", joinFileName targetDir haddockFile,
+                  "-D", haddockFile,
hunk ./Distribution/Simple.hs 444
-            exeTargetDir = targetDir `joinFileName` exeName exe
+            exeTargetDir = haddockPref `joinFileName` exeName exe
hunk ./Distribution/Simple/Install.hs 70
-        LocalBuildInfo(..), mkLibDir, mkBinDir, mkDataDir, mkProgDir)
-import Distribution.Simple.Utils(smartCopySources, copyFileVerbose, mkLibName,
-                                 mkProfLibName, mkGHCiLibName, die, 
rawSystemVerbose)
+        LocalBuildInfo(..),
+        mkLibDir, mkBinDir, mkDataDir, mkProgDir, mkHaddockDir)
+import Distribution.Simple.Utils (
+          smartCopySources, copyFileVerbose,
+          mkLibName, mkProfLibName, mkGHCiLibName, die,
+          rawSystemVerbose, copyDirectoryRecursiveVerbose, haddockPref)
hunk ./Distribution/Simple/Install.hs 83
-                                     findExecutable)
+                                     findExecutable, doesDirectoryExist)
hunk ./Distribution/Simple/Install.hs 99
-  when (not (null (dataFiles pkg_descr))) $ do
+  let dataFilesExist = not (null (dataFiles pkg_descr))
+  docExists <- doesDirectoryExist haddockPref
+  when (verbose >= 4)
+       (putStrLn ("directory " ++ haddockPref ++
+                  " does exist: " ++ show docExists))
+  when (dataFilesExist || docExists) $ do
hunk ./Distribution/Simple/Install.hs 111
+    when docExists $ do
+      let targetDir = mkHaddockDir pkg_descr lbi copydest
+      createDirectoryIfMissing True targetDir
+      copyDirectoryRecursiveVerbose verbose haddockPref targetDir
+      -- setPermissionsRecursive [Read] targetDir
hunk ./Distribution/Simple/Install.hs 124
-                withExe pkg_descr $ installExeJHC verbose binPref buildPref 
pkg_descr
+                withExe pkg_descr    $ installExeJHC verbose binPref buildPref 
pkg_descr
hunk ./Distribution/Simple/Install.hs 129
-     _    -> die ("only installing with GHC or Hugs is implemented")
+     _    -> die ("only installing with GHC, JHC or Hugs is implemented")
hunk ./Distribution/Simple/LocalBuildInfo.hs 53
-       mkLibDir, mkLibDirRel, mkBinDir, mkBinDirRel, mkLibexecDir, 
mkLibexecDirRel, mkDataDir, mkDataDirRel, mkProgDir,
+       mkLibDir, mkLibDirRel, mkBinDir, mkBinDirRel, mkLibexecDir, 
mkLibexecDirRel, mkDataDir, mkDataDirRel, mkHaddockDir, mkProgDir,
hunk ./Distribution/Simple/LocalBuildInfo.hs 253
+
+mkHaddockDir :: PackageDescription -> LocalBuildInfo -> CopyDest -> FilePath
+mkHaddockDir pkg_descr lbi copydest =
+  foldl1 joinPaths [mkDataDir pkg_descr lbi copydest, "doc", "html"]
+
+
hunk ./Distribution/Simple/Register.hs 65
-import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..), mkLibDir)
+import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..), mkLibDir, 
mkHaddockDir)
hunk ./Distribution/Simple/Register.hs 69
-                                       BuildInfo(..), Library(..))
+                                       BuildInfo(..), Library(..), haddockName)
hunk ./Distribution/Simple/Register.hs 85
-import Distribution.Compat.FilePath (joinFileName)
+import Distribution.Compat.FilePath (joinFileName, joinPaths, joinFileExt)
hunk ./Distribution/Simple/Register.hs 224
+        haddockDir = mkHaddockDir pkg_descr lbi NoCopyDest
+        haddockFile = joinPaths haddockDir (haddockName pkg_descr)
hunk ./Distribution/Simple/Register.hs 253
-       IPI.haddockInterfaces = [],
-       IPI.haddockHTMLs      = []
+       IPI.haddockInterfaces = [haddockFile],
+       IPI.haddockHTMLs      = [haddockDir]
}

Context:

[Cabal.xml: entity greencard was mixed up with haddock
[EMAIL PROTECTED] 
[GHC FFI flag should be -fffi not -ffi, the latter merely happens to work.
Duncan Coutts <[EMAIL PROTECTED]>**20060318022010] 
[Make ghc-6.2 packages be exposed by default.
Duncan Coutts <[EMAIL PROTECTED]>**20060221135026
 For ghc-6.4 when Cabal registers packages it exposes them by default.
 However it does not do the same fo ghc-6.2. This change corrects the
 discrepancy. This patch is already being used in Gentoo with Cabal 1.1.3.
] 
[test case for buildinfo with multiple executables
[EMAIL PROTECTED] 
[It is no longer necessary to run 'configure' before 'clean' or 'sdist', 
addressing http://haskell.galois.com/trac/hackage/ticket/12.
Nick Alexander <[EMAIL PROTECTED]>**20060404054127
 In order to change this behaviour, it was necessary to modify the hook 
interface, specifically cleanHook, postClean, sDistHook, postSDist.  They now 
take a Maybe LocalBuildInfo, since a LocalBuildInfo might not be available in 
.setup-config.
] 
[windows patch from [EMAIL PROTECTED]
[EMAIL PROTECTED] 
[oops, don't enable -split-objs by default
Simon Marlow <[EMAIL PROTECTED]>**20060314124358] 
[export configDependency
Simon Marlow <[EMAIL PROTECTED]>**20060303155527] 
[comment fix
Simon Marlow <[EMAIL PROTECTED]>**20060303155516] 
[don't check cabal-version during parsing, it doesn't work
Simon Marlow <[EMAIL PROTECTED]>**20060303155500
 because parsers are evaluated multiple times due to backtracking.
] 
[no need to use a verbatim copy of System.Console.GetOpt, omit if possible
Simon Marlow <[EMAIL PROTECTED]>**20060303144025] 
[Support for -split-objs with GHC
Simon Marlow <[EMAIL PROTECTED]>**20060302170907
 New configure option: --enable-split-objs creates libraries using
 -split-objs with GHC (current HEAD or later only, the configure checks
 for version 6.5).  Fixes ticket #19.
] 
[Initial support for JHC
Einar Karttunen <[email protected]>**20060206233543] 
[added some fields to test suite for duncan's mods
[EMAIL PROTECTED] 
[fixup PackageDescription test code
Duncan Coutts <[EMAIL PROTECTED]>**20060201183912
 just ignore the extra ParseOk warnings field
] 
[ignore "x-" extension fields without a warning
Duncan Coutts <[EMAIL PROTECTED]>**20060201183145] 
[Make unknown fields a warning rather than an error
Duncan Coutts <[EMAIL PROTECTED]>**20060201182944
 Add support for warnings to the ParseResult type. Change existing
 warnings from using Debug.Trace to use this new warning support.
] 
[fix conflict
Simon Marlow <[EMAIL PROTECTED]>**20060206095833] 
[push and pull all
[EMAIL PROTECTED] 
[combine GNUmakefile and Makefile
Simon Marlow <[EMAIL PROTECTED]>**20060206095400] 
[now build Setup.lhs instead of using runghc on it. still uses runhugs.
[EMAIL PROTECTED] 
[cabal-install uses defaultMain if it can't find Setup.lhs
[EMAIL PROTECTED] 
[cleaned up suffix handler params to hooks
[EMAIL PROTECTED]
 
 Summary if last few changes: I modified the hooks interface quite a
 bit, again.  There's good news and bad news about this.  The good news
 is that it's cleaned up and should be easier to maintain and to avoid
 future modifications.  The bad news is that this change itself will
 break stuff, of course.
 
 If you have any trouble building your Setup scripts, please let me
 know.  I really think that it was best to bite the bullet right now in
 one big go instead of down the road with lots of little changes.  I
 have a lot more confidence in the hooks interface, and I don't
 actually expect that it'll change as often.
 
 I made the types more consistent, and made sure there are accessor
 functions on each of the Flags types so that if the flags types change
 in the future, it shouldn't break lots of code.
 
 Another piece of good / bad news is that I decided not to get rid of
 the pre & post hooks.  They are nice for convenience and it wouldn't
 be nearly so easy to write hooks without them.
 
 That's bad because the interface to hooks is still pretty big, which
 means that there's more likelihood that it'll change in the future.
 
 Another weakness in the Hooks interface is that with command hooks
 (like sDistHook) it's tempting to add parameters to them; basically
 the stuff that we compute between the preSDist and sDist hook.  I
 removed such params and have their values computed elsewhere.
 
 Cabal hackers, please avoid adding parameters to these command hooks
 if at all possible in order to keep the interface steady.  If you need
 to compute a value to pass to these functions, compute it in the
 function and / or make it available as a function that someone
 crafting hooks can use as well, or consider whether it belongs in one
 of the parameters already being passed to the hooks,
 PackageDescription, LocalBuildInfo, UserHooks, Flags.
 
] 
[make the order of params to cmd hooks consistent
[EMAIL PROTECTED] 
[remove some flags from sdist, some cleanup
[EMAIL PROTECTED] 
[clarifying and making flags types consistent
[EMAIL PROTECTED] 
[changing tuple types to records w/ fields
[EMAIL PROTECTED] 
[moving TODO stuff to wiki
[EMAIL PROTECTED] 
[fix version number in fptools makefile to match .cabal file
[EMAIL PROTECTED] 
[Add extraGHCiLibraries to the InstalledPackageInfo and extend the parser.
Duncan Coutts <[EMAIL PROTECTED]>**20060131163640] 
[re-add the GNUmakefiles
Simon Marlow <[EMAIL PROTECTED]>*-20060123115236
 These are now safe after we added "-f Makefile" to the make args when invoked
 from the GHC build system.  This repo should now be useable as the main
 Cabal repo.
] 
[re-add the GNUmakefiles
Simon Marlow <[EMAIL PROTECTED]>**20060123115236
 These are now safe after we added "-f Makefile" to the make args when invoked
 from the GHC build system.  This repo should now be useable as the main
 Cabal repo.
] 
[TAG checkpoint
[EMAIL PROTECTED] 
Patch bundle hash:
8664d322719cb37279d41cc51a268d04f48d3bbc

--- End Message ---
_______________________________________________
cabal-devel mailing list
[email protected]
http://www.haskell.org//mailman/listinfo/cabal-devel

Reply via email to