From 7f4b8d9bfbfb0556d51ba1fb25f18e424bd5bf9c Mon Sep 17 00:00:00 2001
From: Ian Lynagh <igloo@earth.li>
Date: Sun, 8 Nov 2009 21:07:01 +0000
Subject: [PATCH] Put docs into versioned directory names; fixes trac #3532 You
 can now have multiple versions of a package installed, and gen_contents_index
 will do the right thing.

---
 ghc.mk                       |  2 ++
 libraries/gen_contents_index | 31 +++++++++++++++++++------------
 utils/ghc-cabal/ghc-cabal.hs |  4 ++--
 3 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/ghc.mk b/ghc.mk
index 23d4e5fdc97..015e3b464e5 100644
--- a/ghc.mk
+++ b/ghc.mk
@@ -817,6 +817,8 @@ ifneq "$(INSTALL_LIBRARY_DOCS)" ""
 	for i in $(INSTALL_LIBRARY_DOCS); do \
 		$(INSTALL_DOC) $(INSTALL_OPTS) $$i "$(DESTDIR)$(docdir)/html/libraries/"; \
 	done
+	$(INSTALL_DATA) $(INSTALL_OPTS) libraries/prologue.txt "$(DESTDIR)$(docdir)/html/libraries/"
+	$(INSTALL_SCRIPT) $(INSTALL_OPTS) libraries/gen_contents_index "$(DESTDIR)$(docdir)/html/libraries/"
 endif
 ifneq "$(INSTALL_HTML_DOC_DIRS)" ""
 	for i in $(INSTALL_HTML_DOC_DIRS); do \
diff --git a/libraries/gen_contents_index b/libraries/gen_contents_index
index 99efc8fcc60..e189cac8ee3 100644
--- a/libraries/gen_contents_index
+++ b/libraries/gen_contents_index
@@ -3,28 +3,35 @@
 set -e
 
 HADDOCK_ARGS=
-NAMES=
 
 case $* in
 --inplace)
     HADDOCK=../inplace/bin/haddock
-    HADDOCK_FILES=`ls -1 */dist-install/doc/html/*/*.haddock | sort`
-    HADDOCK_FILES="$HADDOCK_FILES `ls -1 dph/*/dist-install/doc/html/*/*.haddock | sort`"
+    HADDOCK_FILES1=`ls -1     */dist-install/doc/html/*/*.haddock | sort`
+    HADDOCK_FILES2=`ls -1 dph/*/dist-install/doc/html/*/*.haddock | sort`
+    HADDOCK_FILES="$HADDOCK_FILES1 $HADDOCK_FILES2"
+    for HADDOCK_FILE in $HADDOCK_FILES
+    do
+        LIBPATH=`echo "$HADDOCK_FILE" | sed 's#/dist-install.*##'`
+        NAME=`echo "$HADDOCK_FILE" | sed 's#.*/##' | sed 's#\.haddock$##'`
+        VERSION=`grep -i '^version:' $LIBPATH/$NAME.cabal | sed 's/.*[ \t]//'`
+        HADDOCK_ARG="--read-interface=${NAME}-${VERSION},$HADDOCK_FILE"
+        HADDOCK_ARGS="$HADDOCK_ARGS $HADDOCK_ARG"
+    done
     ;;
 *)
-    HADDOCK=../../../../bin/haddock
+    HADDOCK=../../../../../bin/haddock
     # We don't want the GHC API to swamp the index
-    HADDOCK_FILES=`ls -1 */*.haddock | grep -v "ghc/" | sort`
+    HADDOCK_FILES=`ls -1 */*.haddock | grep -v '/ghc\.haddock' | sort`
+    for HADDOCK_FILE in $HADDOCK_FILES
+    do
+        NAME_VERSION=`echo "$HADDOCK_FILE" | sed 's#/.*##'`
+        HADDOCK_ARG="--read-interface=${NAME_VERSION},$HADDOCK_FILE"
+        HADDOCK_ARGS="$HADDOCK_ARGS $HADDOCK_ARG"
+    done
     ;;
 esac
 
-for HADDOCK_FILE in $HADDOCK_FILES
-do
-    NAME=` echo "$HADDOCK_FILE" | sed 's#.*/##' | sed 's#\.haddock$##' `
-    HADDOCK_ARGS="$HADDOCK_ARGS --read-interface=$NAME,$HADDOCK_FILE"
-    NAMES="$NAMES $NAME"
-done
-
 # Now create the combined contents and index pages
 $HADDOCK --gen-index --gen-contents -o . \
          -t "Haskell Hierarchical Libraries" \
diff --git a/utils/ghc-cabal/ghc-cabal.hs b/utils/ghc-cabal/ghc-cabal.hs
index ef4e989e6c3..b940a2dff56 100644
--- a/utils/ghc-cabal/ghc-cabal.hs
+++ b/utils/ghc-cabal/ghc-cabal.hs
@@ -198,8 +198,8 @@ doInstall ghc ghcpkg strip topdir directory distDir
                             libsubdir = toPathTemplate "$pkgid",
                             docdir    = toPathTemplate $
                                             if relocatableBuild
-                                            then "$topdir/$pkg"
-                                            else (myDocdir </> "$pkg"),
+                                            then "$topdir/$pkgid"
+                                            else (myDocdir </> "$pkgid"),
                             htmldir   = toPathTemplate "$docdir"
                         }
                 progs = withPrograms lbi
-- 
GitLab