diff mbox series

PR libstdc++/89466 avoid slow xsltproc command in configure

Message ID 20190227110951.GJ8507@redhat.com
State New
Headers show
Series PR libstdc++/89466 avoid slow xsltproc command in configure | expand

Commit Message

Jonathan Wakely Feb. 27, 2019, 11:09 a.m. UTC
Certain broken versions of xsltproc ignore the --nonet option and will
attempt to fetch the docbook stylesheet from the WWW when it isn't in
the local XML catalog.

This patch checks for the local stylesheet directory first, and doesn't
use xsltproc if no local stylesheets are found. Checking for the local
directory is done using xmlcatalog if available, only checking the
hardcoded list of directories if xmlcatalog fails. The right directory
for Suse is added to the hardcoded list.

This should avoid doing an xsltproc check that would need to download
the stylesheet, so no network connection is made even if a broken
xsltproc is present.

	PR libstdc++/89466
	* acinclude.m4 (GLIBCXX_CONFIGURE_DOCBOOK): Reorder check for local
	stylesheet directories before check for xsltproc. Try to use
	xmlcatalog to find local stylesheet directory before trying hardcoded
	paths. Add path used by suse to hardcoded paths. Adjust xsltproc
	check to look for the same stylesheet as doc/Makefile.am uses. Don't
	use xsltproc if xmlcatalog fails to find a local stylesheet.
	* configure.ac: Check for xmlcatalog.
	* Makefile.in: Regenerate.
	* configure: Likewise.
	* doc/Makefile.in: Likewise.
	* include/Makefile.in: Likewise.
	* libsupc++/Makefile.in: Likewise.
	* po/Makefile.in: Likewise.
	* python/Makefile.in: Likewise.
	* src/Makefile.in: Likewise.
	* src/c++11/Makefile.in: Likewise.
	* src/c++17/Makefile.in: Likewise.
	* src/c++98/Makefile.in: Likewise.
	* src/filesystem/Makefile.in: Likewise.
	* testsuite/Makefile.in: Likewise.

Tested x86_64-linux (with stylesheets installed) and
powerpc64le-linux (without stylesheets installed).

Committed to trunk.
commit a24bf5641e21070bd36363ef22ec4977bc0ad094
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Feb 26 23:30:30 2019 +0000

    PR libstdc++/89466 avoid slow xsltproc command in configure
    
    Certain broken versions of xsltproc ignore the --nonet option and will
    attempt to fetch the docbook stylesheet from the WWW when it isn't in
    the local XML catalog.
    
    This patch checks for the local stylesheet directory first, and doesn't
    use xsltproc if no local stylesheets are found. Checking for the local
    directory is done using xmlcatalog if available, only checking the
    hardcoded list of directories if xmlcatalog fails. The right directory
    for Suse is added to the hardcoded list.
    
    This should avoid doing an xsltproc check that would need to download
    the stylesheet, so no network connection is made even if a broken
    xsltproc is present.
    
            PR libstdc++/89466
            * acinclude.m4 (GLIBCXX_CONFIGURE_DOCBOOK): Reorder check for local
            stylesheet directories before check for xsltproc. Try to use
            xmlcatalog to find local stylesheet directory before trying hardcoded
            paths. Add path used by suse to hardcoded paths. Adjust xsltproc
            check to look for the same stylesheet as doc/Makefile.am uses. Don't
            use xsltproc if xmlcatalog fails to find a local stylesheet.
            * configure.ac: Check for xmlcatalog.
            * Makefile.in: Regenerate.
            * configure: Likewise.
            * doc/Makefile.in: Likewise.
            * include/Makefile.in: Likewise.
            * libsupc++/Makefile.in: Likewise.
            * po/Makefile.in: Likewise.
            * python/Makefile.in: Likewise.
            * src/Makefile.in: Likewise.
            * src/c++11/Makefile.in: Likewise.
            * src/c++17/Makefile.in: Likewise.
            * src/c++98/Makefile.in: Likewise.
            * src/filesystem/Makefile.in: Likewise.
            * testsuite/Makefile.in: Likewise.
diff mbox series

Patch

diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 8950e4c8872..84258d87a33 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -634,34 +634,43 @@  dnl  XSL_STYLE_DIR
 dnl
 AC_DEFUN([GLIBCXX_CONFIGURE_DOCBOOK], [
 
-AC_MSG_CHECKING([for docbook stylesheets for documentation creation])
-glibcxx_stylesheets=no
-if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude http://docbook.sourceforge.net/release/xsl-ns/current/xhtml-1_1/docbook.xsl - 2>/dev/null; then
-  glibcxx_stylesheets=yes
-fi
-AC_MSG_RESULT($glibcxx_stylesheets)
+glibcxx_docbook_url=http://docbook.sourceforge.net/release/xsl-ns/current/
 
 AC_MSG_CHECKING([for local stylesheet directory])
 glibcxx_local_stylesheets=no
-if test x"$glibcxx_stylesheets" = x"yes"; then
-  if test -d /usr/share/sgml/docbook/xsl-ns-stylesheets; then
-    glibcxx_local_stylesheets=yes
-    XSL_STYLE_DIR=/usr/share/sgml/docbook/xsl-ns-stylesheets
-  fi
-  if test -d /usr/share/xml/docbook/stylesheet/docbook-xsl-ns; then
-    glibcxx_local_stylesheets=yes
-    XSL_STYLE_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl-ns
-  fi
-  if test -d /usr/share/xml/docbook/stylesheet/nwalsh5/current; then
-    glibcxx_local_stylesheets=yes
-    XSL_STYLE_DIR=/usr/share/xml/docbook/stylesheet/nwalsh5/current
-  fi
+if test x${XMLCATALOG} = xyes && xsl_style_dir=`xmlcatalog "" $glibcxx_docbook_url 2>/dev/null`
+then
+  XSL_STYLE_DIR=`echo $xsl_style_dir | sed -n 's;^file://;;p'`
+  glibcxx_local_stylesheets=yes
+else
+  for dir in \
+    /usr/share/sgml/docbook/xsl-ns-stylesheets \
+    /usr/share/xml/docbook/stylesheet/docbook-xsl-ns \
+    /usr/share/xml/docbook/stylesheet/nwalsh5/current \
+    /usr/share/xml/docbook/stylesheet/nwalsh/current
+  do
+    if test -d $dir; then
+      glibcxx_local_stylesheets=yes
+      XSL_STYLE_DIR=$dir
+      break
+    fi
+  done
 fi
 AC_MSG_RESULT($glibcxx_local_stylesheets)
 
 if test x"$glibcxx_local_stylesheets" = x"yes"; then
   AC_SUBST(XSL_STYLE_DIR)
   AC_MSG_NOTICE($XSL_STYLE_DIR)
+
+  AC_MSG_CHECKING([for docbook stylesheets for documentation creation])
+  glibcxx_stylesheets=no
+  if test x${XMLCATALOG} = xno || xmlcatalog "" $glibcxx_docbook_url/xhtml/docbook.xsl >/dev/null 2>&1; then
+    if test x${XSLTPROC} = xyes && echo '<title/>' | xsltproc --noout --nonet --xinclude $glibcxx_docbook_url/xhtml/docbook.xsl - 2>/dev/null; then
+      glibcxx_stylesheets=yes
+    fi
+  fi
+  AC_MSG_RESULT($glibcxx_stylesheets)
+
 else
   glibcxx_stylesheets=no
 fi
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 6c98f270441..39b0b90c289 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -449,6 +449,7 @@  AC_CHECK_PROG([DOXYGEN], doxygen, yes, no)
 AC_CHECK_PROG([DOT], dot, yes, no)
 
 # Check for docbook
+AC_CHECK_PROG([XMLCATALOG], xmlcatalog, yes, no)
 AC_CHECK_PROG([XSLTPROC], xsltproc, yes, no)
 AC_CHECK_PROG([XMLLINT], xmllint, yes, no)
 GLIBCXX_CONFIGURE_DOCBOOK