Commit 0bc8cebd authored by Tom Lane's avatar Tom Lane

Use pkg-config, if available, to locate libxml2 during configure.

If pkg-config is installed and knows about libxml2, use its information
rather than asking xml2-config.  Otherwise proceed as before.  This
patch allows "configure --with-libxml" to succeed on platforms that
have pkg-config but not xml2-config, which is likely to soon become
a typical situation.

The old mechanism can be forced by setting XML2_CONFIG explicitly
(hence, build processes that were already doing so will certainly
not need adjustment).  Also, it's now possible to set XML2_CFLAGS
and XML2_LIBS explicitly to override both programs.

There is a small risk of this breaking existing build processes,
if there are multiple libxml2 installations on the machine and
pkg-config disagrees with xml2-config about which to use.  The
only case where that seems really likely is if a builder has tried
to select a non-default xml2-config by putting it early in his PATH
rather than setting XML2_CONFIG.  Plan to warn against that in the
minor release notes.

Back-patch to v10; before that we had no pkg-config infrastructure,
and it doesn't seem worth adding it for this.

Hugh McMaster and Tom Lane; Peter Eisentraut also made an earlier
attempt at this, from which I lifted most of the docs changes.

Discussion: https://postgr.es/m/CAN9BcdvfUwc9Yx5015bLH2TOiQ-M+t_NADBSPhMF7dZ=pLa_iw@mail.gmail.com
parent 28e0a103
This diff is collapsed.
...@@ -667,6 +667,10 @@ else ...@@ -667,6 +667,10 @@ else
fi fi
AC_SUBST(TAS) AC_SUBST(TAS)
#
# Set up pkg_config in case we need it below
#
PKG_PROG_PKG_CONFIG
# #
# Automatic dependency tracking # Automatic dependency tracking
...@@ -927,27 +931,41 @@ AC_SUBST(UUID_EXTRA_OBJS) ...@@ -927,27 +931,41 @@ AC_SUBST(UUID_EXTRA_OBJS)
# #
# XML # XML
# #
AC_MSG_CHECKING([whether to build with XML support])
PGAC_ARG_BOOL(with, libxml, no, [build with XML support], PGAC_ARG_BOOL(with, libxml, no, [build with XML support],
[AC_DEFINE([USE_LIBXML], 1, [Define to 1 to build with XML support. (--with-libxml)])]) [AC_DEFINE([USE_LIBXML], 1, [Define to 1 to build with XML support. (--with-libxml)])])
AC_MSG_RESULT([$with_libxml])
AC_SUBST(with_libxml)
if test "$with_libxml" = yes ; then if test "$with_libxml" = yes ; then
PGAC_PATH_PROGS(XML2_CONFIG, xml2-config) # Check pkg-config, then xml2-config. But for backwards compatibility,
# setting XML2_CONFIG overrides pkg-config.
AC_ARG_VAR(XML2_CONFIG, [path to xml2-config utility])dnl AC_ARG_VAR(XML2_CONFIG, [path to xml2-config utility])dnl
if test -n "$XML2_CONFIG"; then have_libxml2_pkg_config=no
for pgac_option in `$XML2_CONFIG --cflags`; do if test -z "$XML2_CONFIG" -a -n "$PKG_CONFIG"; then
case $pgac_option in PKG_CHECK_MODULES(XML2, [libxml-2.0 >= 2.6.23],
-I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; [have_libxml2_pkg_config=yes], [# do nothing])
esac
done
for pgac_option in `$XML2_CONFIG --libs`; do
case $pgac_option in
-L*) LDFLAGS="$LDFLAGS $pgac_option";;
esac
done
fi fi
if test "$have_libxml2_pkg_config" = no ; then
PGAC_PATH_PROGS(XML2_CONFIG, xml2-config)
if test -n "$XML2_CONFIG"; then
XML2_CFLAGS=`$XML2_CONFIG --cflags`
XML2_LIBS=`$XML2_CONFIG --libs`
fi
fi
# Note the user could also set XML2_CFLAGS/XML2_LIBS directly
for pgac_option in $XML2_CFLAGS; do
case $pgac_option in
-I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";;
esac
done
for pgac_option in $XML2_LIBS; do
case $pgac_option in
-L*) LDFLAGS="$LDFLAGS $pgac_option";;
esac
done
fi fi
AC_SUBST(with_libxml)
# #
# XSLT # XSLT
......
...@@ -1117,21 +1117,31 @@ build-postgresql: ...@@ -1117,21 +1117,31 @@ build-postgresql:
<term><option>--with-libxml</option></term> <term><option>--with-libxml</option></term>
<listitem> <listitem>
<para> <para>
Build with libxml, enabling SQL/XML support. Libxml version 2.6.23 or Build with libxml2, enabling SQL/XML support. Libxml2 version 2.6.23 or
later is required for this feature. later is required for this feature.
</para> </para>
<para> <para>
Libxml installs a program <command>xml2-config</command> that To detect the required compiler and linker options, PostgreSQL will
can be used to detect the required compiler and linker query <command>pkg-config</command>, if that is installed and knows
options. PostgreSQL will use it automatically if found. To about libxml2. Otherwise the program <command>xml2-config</command>,
specify a libxml installation at an unusual location, you can which is installed by libxml2, will be used if it is found. Use
either set the environment variable of <command>pkg-config</command> is preferred, because it can deal
<envar>XML2_CONFIG</envar> to point to the with multi-architecture installations better.
<command>xml2-config</command> program belonging to the </para>
installation, or use the options
<option>--with-includes</option> and <para>
<option>--with-libraries</option>. To use a libxml2 installation that is in an unusual location, you
can set <command>pkg-config</command>-related environment
variables (see its documentation), or set the environment variable
<envar>XML2_CONFIG</envar> to point to
the <command>xml2-config</command> program belonging to the libxml2
installation, or set the variables <envar>XML2_CFLAGS</envar>
and <envar>XML2_LIBS</envar>. (If <command>pkg-config</command> is
installed, then to override its idea of where libxml2 is you must
either set <envar>XML2_CONFIG</envar> or set
both <envar>XML2_CFLAGS</envar> and <envar>XML2_LIBS</envar> to
nonempty strings.)
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -1857,7 +1867,7 @@ build-postgresql: ...@@ -1857,7 +1867,7 @@ build-postgresql:
<listitem> <listitem>
<para> <para>
<command>xml2-config</command> program used to locate the <command>xml2-config</command> program used to locate the
libxml installation libxml2 installation
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment