diff --git a/distrib/mkDocs/mkDocs b/distrib/mkDocs/mkDocs
index 641d945cfad61c3cfd6a7733383840a104cd6b31..b11c9dde785a2dc1d4d68106c7e500ab0c9471a8 100755
--- a/distrib/mkDocs/mkDocs
+++ b/distrib/mkDocs/mkDocs
@@ -40,13 +40,18 @@ mv ../../../../../../windows/doc/html/libraries/Win32-* . || \
 
 sh gen_contents_index
 cd ..
-for i in haddock libraries users_guide
+for i in */
 do
-    tar -Jcf ../../../../../$i.html.tar.xz $i
+    dir=${i%*/}
+    tar -Jcf ../../../../../$dir.html.tar.xz $dir
 done
 mv index.html ../../../../..
 cd ..
-mv ./*.pdf ../../../..
+# make
+mv ./*.pdf ../../../.. || \
+# hadrian
+  mv ./pdfs/*.pdf ../../../.. || \
+    die "failed to find PDFs"
 cd ../../../..
 [ "$NO_CLEAN" -eq 0 ] && rm -r inst
 [ "$NO_CLEAN" -eq 0 ] && rm -r windows
diff --git a/hadrian/bindist/Makefile b/hadrian/bindist/Makefile
index 3ae599452f3a27eefb52f413ed81f1313119a7a2..fdeb06ace5ac25b779dcf5a8a0eec3a1d39ef5d6 100644
--- a/hadrian/bindist/Makefile
+++ b/hadrian/bindist/Makefile
@@ -190,6 +190,9 @@ install_docs:
 		cp -R $$i "$(docdir)/"; \
 	done
 
+	$(INSTALL_DATA) docs-utils/prologue.txt "$(docdir)/html/libraries/"
+	$(INSTALL_SCRIPT) docs-utils/gen_contents_index "$(docdir)/html/libraries/"
+
 BINARY_NAMES=$(shell ls ./wrappers/)
 install_wrappers: install_bin_libdir
 	@echo "Installing wrapper scripts"
diff --git a/hadrian/src/Rules/BinaryDist.hs b/hadrian/src/Rules/BinaryDist.hs
index a6693a75f3c4d23ef59f816fd6831e317150901f..f07c455e385fbac138e6853ed5bfdde8dabf49ad 100644
--- a/hadrian/src/Rules/BinaryDist.hs
+++ b/hadrian/src/Rules/BinaryDist.hs
@@ -227,6 +227,9 @@ bindistRules = do
         -- included in the bindist in the past (part of the problem in #18669).
         whenM (liftIO (IO.doesDirectoryExist (root -/- "docs"))) $ do
           copyDirectory (root -/- "docs") bindistFilesDir
+          copyFile ("libraries" -/- "prologue.txt") (bindistFilesDir -/- "docs-utils" -/- "prologue.txt")
+          copyFile ("libraries" -/- "gen_contents_index") (bindistFilesDir -/- "docs-utils" -/- "gen_contents_index" )
+
         when windowsHost $ do
           copyDirectory (root -/- "mingw") bindistFilesDir
           -- we use that opportunity to delete the .stamp file that we use
diff --git a/libraries/gen_contents_index b/libraries/gen_contents_index
index 29be2e13f9faf2273c6e57c9eb484d385c6cda1d..1efd5eb157098a193b45f6d03d30c28dc8213aec 100644
--- a/libraries/gen_contents_index
+++ b/libraries/gen_contents_index
@@ -32,7 +32,18 @@ then
     [ -d dist-haddock ] || mkdir dist-haddock
     cd dist-haddock
 
-    HADDOCK=../../inplace/bin/haddock
+    if [ -e ../../inplace/bin/haddock ]
+    then
+      # Make #17527
+      HADDOCK=../../inplace/bin/haddock
+    elif [ -e ../../../../../bin/haddock ]
+    then
+      # Hadrian
+      HADDOCK=../../../../../bin/haddock
+    else
+      echo "Haddock not found"
+      exit 1
+    fi
     # Exclude Cabal package-tests, which may run haddock
     HADDOCK_FILES=`find ../ -name *.haddock | grep -v 'PackageTests' | sort`
     HADDOCK_ARGS="-p ../prologue.txt"