From cd355e4dfb00c5a3b4e63779788f8aaadd10396f Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 15 Apr 2010 22:23:09 -0700 Subject: [PATCH] configure: Improve check for PostgreSQL's libpq. Previously this test did not check that linking against libpq worked. This commit fixes that. Besides broken installations this also guards against pg_config that is applicable to the host when cross-compiling to Mingw, which doesn't always show up as cross-compiling since some systems can still run the Mingw binaries if Wine is installed as a binary interpreter for Windows executables. This also fixes a minor issue where -lpq was being added to the default LIBS as well as to PG_LIBS, which meant that every PSPP binary was being linked against it, not just the ones that needed it (which were being linked against it twice). Problem reported by Michel Boaventura . --- configure.ac | 86 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 28 deletions(-) diff --git a/configure.ac b/configure.ac index 5ad33fee..7ba69097 100644 --- a/configure.ac +++ b/configure.ac @@ -104,35 +104,65 @@ dnl only set PG_LDFLAGS if it's not found. AC_ARG_WITH( libpq, [AS_HELP_STRING([--without-libpq], [don't compile in Postgres capability])]) - -if test x"$with_libpq" != x"no" ; then - AC_SEARCH_LIBS([PQexec], [pq], [libpq_in_std_lib_path=yes]) - - AC_ARG_VAR([PG_CONFIG], [Full pathname of the pg_config program shipped with Postgresql]) - if test x"$cross_compiling" != x"yes" ; then - AC_PATH_PROG([PG_CONFIG], [pg_config], [], [$PATH:/usr/local/pgsql/bin:/usr/pgsql/bin]) - fi - if test -n "$PG_CONFIG" ; then - AC_SUBST(PG_CONFIG) - AC_DEFINE([PSQL_SUPPORT], 1, - [Define to 1 if building in support for reading from postgres databases.]) - PG_CFLAGS=-I`$PG_CONFIG --includedir` - AC_SUBST(PG_CFLAGS) - - if test "x$libpq_in_std_lib_path" != x"yes" ; then - PG_LDFLAGS="-L`$PG_CONFIG --libdir` -R`$PG_CONFIG --libdir`" - fi - AC_SUBST(PG_LDFLAGS) - - PG_LIBS=-lpq - AC_SUBST(PG_LIBS) - PKG_CHECK_EXISTS(libssl, - AC_DEFINE([USE_SSL],1, - [Define to 1 if the openssl library is present.]) - ,) - fi +AC_ARG_VAR([PG_CONFIG], + [Full pathname of the pg_config program shipped with Postgresql]) +AC_PATH_PROG([PG_CONFIG], [pg_config], [], + [$PATH:/usr/local/pgsql/bin:/usr/pgsql/bin]) + +if test x"$with_libpq" != x"no" && test -n "$PG_CONFIG" ; then + AC_SUBST(PG_CONFIG) + PG_CFLAGS=-I`$PG_CONFIG --includedir` + AC_SUBST(PG_CFLAGS) + + AC_CHECK_LIB([pq], [PQexec], + [:], + [PG_LDFLAGS="-L`$PG_CONFIG --libdir` -R`$PG_CONFIG --libdir`"]) + AC_SUBST(PG_LDFLAGS) + + PG_LIBS=-lpq + AC_SUBST(PG_LIBS) + + PKG_CHECK_EXISTS(libssl, + AC_DEFINE([USE_SSL],1, + [Define to 1 if the openssl library is present.]) + ,) + + # Now verify that we can actually link against libpq. If we are + # cross-compiling and picked up a host libpq, or if libpq is just + # badly installed, this will fail. + AC_CACHE_CHECK( + [whether -lpq links successfully], + [pspp_cv_have_libpq], + [save_CPPFLAGS=$CPPFLAGS + save_LIBS=$LIBS + save_LDFLAGS=$LDFLAGS + CPPFLAGS="$PG_CFLAGS $CPPFLAGS" + LIBS="$PG_LIBS $LIBS" + LDFLAGS="$PG_LDFLAGS $LDFLAGS" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include + ], [PQfinish (0);])], + [pspp_cv_have_libpq=yes], + [pspp_cv_have_libpq=no]) + CPPFLAGS=$save_CPPFLAGS + LIBS=$save_LIBS + LDFLAGS=$save_LDFLAGS]) + + if test $pspp_cv_have_libpq = yes; then + AC_DEFINE([PSQL_SUPPORT], [1], + [Define to 1 if building in support for reading from postgres + databases.]) + else + PG_CONFIG= + PG_CFLAGS= + PG_LDFLAGS= + PG_LIBS= + fi +else + pspp_cv_have_libpq=no fi -AM_CONDITIONAL(PSQL_SUPPORT, test -n "$PG_CONFIG") +AM_CONDITIONAL(PSQL_SUPPORT, test $pspp_cv_have_libpq = yes) dnl Check for libxml2 PKG_CHECK_MODULES( -- 2.30.2