diff --git a/var/spack/repos/builtin/packages/docbook-xsl/package.py b/var/spack/repos/builtin/packages/docbook-xsl/package.py
index 9606bb970a6763a41da2ad85fd6e88ec0d3417c5..99bfb06d66893d078871ee6e9d8bc919fa84b5ba 100644
--- a/var/spack/repos/builtin/packages/docbook-xsl/package.py
+++ b/var/spack/repos/builtin/packages/docbook-xsl/package.py
@@ -22,6 +22,14 @@ class DocbookXsl(Package):
     def install(self, spec, prefix):
         install_tree('.', prefix)
 
+    @property
+    def catalog(self):
+        return os.path.join(self.prefix, 'catalog.xml')
+
     def setup_environment(self, spack_env, run_env):
-        catalog = os.path.join(self.prefix, 'catalog.xml')
+        catalog = self.catalog
         run_env.set('XML_CATALOG_FILES', catalog, separator=' ')
+
+    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+        catalog = self.catalog
+        spack_env.prepend_path("XML_CATALOG_FILES", catalog)
diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/docbook-cdn.patch b/var/spack/repos/builtin/packages/gdk-pixbuf/docbook-cdn.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fdcbcb83035b7426e335c093816c95280d66a9f2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gdk-pixbuf/docbook-cdn.patch
@@ -0,0 +1,11 @@
+--- a/docs/meson.build	2019-01-10 17:55:09.573701375 -0800
++++ b/docs/meson.build	2019-01-10 17:56:03.672667410 -0800
+@@ -89,7 +89,7 @@
+                     xsltproc,
+                     xlstproc_flags,
+                     '-o', '@OUTPUT@',
+-                    'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
++                    'http://cdn.docbook.org/release/xsl/current/manpages/docbook.xsl',
+                     '@INPUT@',
+                   ],
+                   install: true,
diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
index 688720a933ea8f509435ae8c7ea7c6b9c73c7b0c..78d455242e42714d0527f19900d63a08be4694d6 100644
--- a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
+++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
@@ -27,13 +27,21 @@ class GdkPixbuf(Package):
     depends_on('shared-mime-info', type='build', when='@2.36.8: platform=linux')
     depends_on('shared-mime-info', type='build', when='@2.36.8: platform=cray')
     depends_on('pkgconfig', type='build')
+    # Building the man pages requires libxslt and the Docbook stylesheets
+    depends_on('libxslt', type='build')
+    depends_on('docbook-xsl', type='build')
     depends_on('gettext')
-    depends_on('glib')
+    depends_on('glib@2.38.0:')
     depends_on('jpeg')
     depends_on('libpng')
+    depends_on('zlib')
     depends_on('libtiff')
     depends_on('gobject-introspection')
 
+    # Replace the docbook stylesheet URL with the one that our
+    # docbook-xsl package uses/recognizes.
+    patch('docbook-cdn.patch')
+
     def url_for_version(self, version):
         url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/{0}/gdk-pixbuf-{1}.tar.xz"
         return url.format(version.up_to(2), version)
@@ -48,6 +56,8 @@ def install(self, spec, prefix):
         with working_dir('spack-build', create=True):
             meson('..', *std_meson_args)
             ninja('-v')
+            if self.run_tests:
+                ninja('test')
             ninja('install')
 
     def configure_args(self):
@@ -70,3 +80,8 @@ def install(self, spec, prefix):
         make('install')
         if self.run_tests:
             make('installcheck')
+
+    def setup_environment(self, spack_env, run_env):
+        # The "post-install.sh" script uses gdk-pixbuf-query-loaders,
+        # which was installed earlier.
+        spack_env.prepend_path('PATH', self.prefix.bin)