mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
b21c569cea
Peter Eisentraut noted that commit 40b9f1921
had broken a configure
behavior that some people might rely on: AC_CHECK_PROGS(FOO,...) will
allow the search to be overridden by specifying a value for FOO on
configure's command line or in its environment, but AC_PATH_PROGS(FOO,...)
accepts such an override only if it's an absolute path. We had worked
around that behavior for some, but not all, of the pre-existing uses
of AC_PATH_PROGS by just skipping the macro altogether when FOO is
already set. Let's standardize on that workaround for all uses of
AC_PATH_PROGS, new and pre-existing, by wrapping AC_PATH_PROGS in a
new macro PGAC_PATH_PROGS. While at it, fix a deficiency of the old
workaround code by making sure we report the setting to configure's log.
Eventually I'd like to improve PGAC_PATH_PROGS so that it converts
non-absolute override inputs to absolute form, eg "PYTHON=python3"
becomes, say, PYTHON = /usr/bin/python3. But that will take some
nontrivial coding so it doesn't seem like a thing to do in late beta.
Discussion: https://postgr.es/m/90a92a7d-938e-507a-3bd7-ecd2b4004689@2ndquadrant.com
294 lines
9.3 KiB
Plaintext
294 lines
9.3 KiB
Plaintext
# config/programs.m4
|
|
|
|
|
|
# PGAC_PATH_PROGS
|
|
# ---------------
|
|
# This wrapper for AC_PATH_PROGS behaves like that macro except when
|
|
# VARIABLE is already set; in that case we just accept the value verbatim.
|
|
# (AC_PATH_PROGS would accept it only if it looks like an absolute path.)
|
|
# A desirable future improvement would be to convert a non-absolute-path
|
|
# input into absolute form.
|
|
AC_DEFUN([PGAC_PATH_PROGS],
|
|
[if test -z "$$1"; then
|
|
AC_PATH_PROGS($@)
|
|
else
|
|
# Report the value of $1 in configure's output in all cases.
|
|
AC_MSG_CHECKING([for $1])
|
|
AC_MSG_RESULT([$$1])
|
|
fi
|
|
])
|
|
|
|
|
|
# PGAC_PATH_BISON
|
|
# ---------------
|
|
# Look for Bison, set the output variable BISON to its path if found.
|
|
# Reject versions before 1.875 (they have bugs or capacity limits).
|
|
# Note we do not accept other implementations of yacc.
|
|
|
|
AC_DEFUN([PGAC_PATH_BISON],
|
|
[PGAC_PATH_PROGS(BISON, bison)
|
|
|
|
if test "$BISON"; then
|
|
pgac_bison_version=`$BISON --version 2>/dev/null | sed q`
|
|
AC_MSG_NOTICE([using $pgac_bison_version])
|
|
if echo "$pgac_bison_version" | $AWK '{ if ([$]4 < 1.875) exit 0; else exit 1;}'
|
|
then
|
|
AC_MSG_WARN([
|
|
*** The installed version of Bison, $BISON, is too old to use with PostgreSQL.
|
|
*** Bison version 1.875 or later is required, but this is $pgac_bison_version.])
|
|
BISON=""
|
|
fi
|
|
# Bison >=3.0 issues warnings about %name-prefix="base_yy", instead
|
|
# of the now preferred %name-prefix "base_yy", but the latter
|
|
# doesn't work with Bison 2.3 or less. So for now we silence the
|
|
# deprecation warnings.
|
|
if echo "$pgac_bison_version" | $AWK '{ if ([$]4 >= 3) exit 0; else exit 1;}'
|
|
then
|
|
BISONFLAGS="$BISONFLAGS -Wno-deprecated"
|
|
fi
|
|
fi
|
|
|
|
if test -z "$BISON"; then
|
|
AC_MSG_WARN([
|
|
*** Without Bison you will not be able to build PostgreSQL from Git nor
|
|
*** change any of the parser definition files. You can obtain Bison from
|
|
*** a GNU mirror site. (If you are using the official distribution of
|
|
*** PostgreSQL then you do not need to worry about this, because the Bison
|
|
*** output is pre-generated.)])
|
|
fi
|
|
# We don't need AC_SUBST(BISON) because PGAC_PATH_PROGS did it
|
|
AC_SUBST(BISONFLAGS)
|
|
])# PGAC_PATH_BISON
|
|
|
|
|
|
|
|
# PGAC_PATH_FLEX
|
|
# --------------
|
|
# Look for Flex, set the output variable FLEX to its path if found.
|
|
# Reject versions before 2.5.31, as we need a reasonably non-buggy reentrant
|
|
# scanner. (Note: the well-publicized security problem in 2.5.31 does not
|
|
# affect Postgres, and there are still distros shipping patched 2.5.31,
|
|
# so allow it.) Also find Flex if its installed under `lex', but do not
|
|
# accept other Lex programs.
|
|
|
|
AC_DEFUN([PGAC_PATH_FLEX],
|
|
[AC_CACHE_CHECK([for flex], pgac_cv_path_flex,
|
|
[# Let the user override the test
|
|
if test -n "$FLEX"; then
|
|
pgac_cv_path_flex=$FLEX
|
|
else
|
|
pgac_save_IFS=$IFS
|
|
IFS=$PATH_SEPARATOR
|
|
for pgac_dir in $PATH; do
|
|
IFS=$pgac_save_IFS
|
|
if test -z "$pgac_dir" || test x"$pgac_dir" = x"."; then
|
|
pgac_dir=`pwd`
|
|
fi
|
|
for pgac_prog in flex lex; do
|
|
pgac_candidate="$pgac_dir/$pgac_prog"
|
|
if test -f "$pgac_candidate" \
|
|
&& $pgac_candidate --version </dev/null >/dev/null 2>&1
|
|
then
|
|
echo '%%' > conftest.l
|
|
if $pgac_candidate -t conftest.l 2>/dev/null | grep FLEX_SCANNER >/dev/null 2>&1; then
|
|
pgac_flex_version=`$pgac_candidate --version 2>/dev/null`
|
|
if echo "$pgac_flex_version" | sed ['s/[.a-z]/ /g'] | $AWK '{ if ([$]1 == 2 && ([$]2 > 5 || ([$]2 == 5 && [$]3 >= 31))) exit 0; else exit 1;}'
|
|
then
|
|
pgac_cv_path_flex=$pgac_candidate
|
|
break 2
|
|
else
|
|
AC_MSG_WARN([
|
|
*** The installed version of Flex, $pgac_candidate, is too old to use with PostgreSQL.
|
|
*** Flex version 2.5.31 or later is required, but this is $pgac_flex_version.])
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
rm -f conftest.l lex.yy.c
|
|
: ${pgac_cv_path_flex=no}
|
|
fi
|
|
])[]dnl AC_CACHE_CHECK
|
|
|
|
if test x"$pgac_cv_path_flex" = x"no"; then
|
|
AC_MSG_WARN([
|
|
*** Without Flex you will not be able to build PostgreSQL from Git nor
|
|
*** change any of the scanner definition files. You can obtain Flex from
|
|
*** a GNU mirror site. (If you are using the official distribution of
|
|
*** PostgreSQL then you do not need to worry about this because the Flex
|
|
*** output is pre-generated.)])
|
|
|
|
FLEX=
|
|
else
|
|
FLEX=$pgac_cv_path_flex
|
|
pgac_flex_version=`$FLEX --version 2>/dev/null`
|
|
AC_MSG_NOTICE([using $pgac_flex_version])
|
|
fi
|
|
|
|
AC_SUBST(FLEX)
|
|
AC_SUBST(FLEXFLAGS)
|
|
])# PGAC_PATH_FLEX
|
|
|
|
|
|
|
|
# PGAC_LDAP_SAFE
|
|
# --------------
|
|
# PostgreSQL sometimes loads libldap_r and plain libldap into the same
|
|
# process. Check for OpenLDAP versions known not to tolerate doing so; assume
|
|
# non-OpenLDAP implementations are safe. The dblink test suite exercises the
|
|
# hazardous interaction directly.
|
|
|
|
AC_DEFUN([PGAC_LDAP_SAFE],
|
|
[AC_CACHE_CHECK([for compatible LDAP implementation], [pgac_cv_ldap_safe],
|
|
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include <ldap.h>
|
|
#if !defined(LDAP_VENDOR_VERSION) || \
|
|
(defined(LDAP_API_FEATURE_X_OPENLDAP) && \
|
|
LDAP_VENDOR_VERSION >= 20424 && LDAP_VENDOR_VERSION <= 20431)
|
|
choke me
|
|
#endif], [])],
|
|
[pgac_cv_ldap_safe=yes],
|
|
[pgac_cv_ldap_safe=no])])
|
|
|
|
if test "$pgac_cv_ldap_safe" != yes; then
|
|
AC_MSG_WARN([
|
|
*** With OpenLDAP versions 2.4.24 through 2.4.31, inclusive, each backend
|
|
*** process that loads libpq (via WAL receiver, dblink, or postgres_fdw) and
|
|
*** also uses LDAP will crash on exit.])
|
|
fi])
|
|
|
|
|
|
|
|
# PGAC_CHECK_READLINE
|
|
# -------------------
|
|
# Check for the readline library and dependent libraries, either
|
|
# termcap or curses. Also try libedit, since NetBSD's is compatible.
|
|
# Add the required flags to LIBS, define HAVE_LIBREADLINE.
|
|
|
|
AC_DEFUN([PGAC_CHECK_READLINE],
|
|
[AC_REQUIRE([AC_CANONICAL_HOST])
|
|
|
|
AC_CACHE_CHECK([for library containing readline], [pgac_cv_check_readline],
|
|
[pgac_cv_check_readline=no
|
|
pgac_save_LIBS=$LIBS
|
|
if test x"$with_libedit_preferred" != x"yes"
|
|
then READLINE_ORDER="-lreadline -ledit"
|
|
else READLINE_ORDER="-ledit -lreadline"
|
|
fi
|
|
for pgac_rllib in $READLINE_ORDER ; do
|
|
for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
|
|
LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
|
|
AC_TRY_LINK_FUNC([readline], [[
|
|
# Older NetBSD, OpenBSD, and Irix have a broken linker that does not
|
|
# recognize dependent libraries; assume curses is needed if we didn't
|
|
# find any dependency.
|
|
case $host_os in
|
|
netbsd* | openbsd* | irix*)
|
|
if test x"$pgac_lib" = x"" ; then
|
|
pgac_lib=" -lcurses"
|
|
fi ;;
|
|
esac
|
|
|
|
pgac_cv_check_readline="${pgac_rllib}${pgac_lib}"
|
|
break
|
|
]])
|
|
done
|
|
if test "$pgac_cv_check_readline" != no ; then
|
|
break
|
|
fi
|
|
done
|
|
LIBS=$pgac_save_LIBS
|
|
])[]dnl AC_CACHE_CHECK
|
|
|
|
if test "$pgac_cv_check_readline" != no ; then
|
|
LIBS="$pgac_cv_check_readline $LIBS"
|
|
AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a function readline library])
|
|
fi
|
|
|
|
])# PGAC_CHECK_READLINE
|
|
|
|
|
|
|
|
# PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
|
|
# ---------------------------------------
|
|
# Readline versions < 2.1 don't have rl_completion_append_character
|
|
|
|
AC_DEFUN([PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER],
|
|
[AC_CACHE_CHECK([for rl_completion_append_character], pgac_cv_var_rl_completion_append_character,
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdio.h>
|
|
#ifdef HAVE_READLINE_READLINE_H
|
|
# include <readline/readline.h>
|
|
#elif defined(HAVE_READLINE_H)
|
|
# include <readline.h>
|
|
#endif
|
|
],
|
|
[rl_completion_append_character = 'x';])],
|
|
[pgac_cv_var_rl_completion_append_character=yes],
|
|
[pgac_cv_var_rl_completion_append_character=no])])
|
|
if test x"$pgac_cv_var_rl_completion_append_character" = x"yes"; then
|
|
AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER, 1,
|
|
[Define to 1 if you have the global variable 'rl_completion_append_character'.])
|
|
fi])# PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
|
|
|
|
|
|
|
|
# PGAC_CHECK_GETTEXT
|
|
# ------------------
|
|
# We check for bind_textdomain_codeset() not just gettext(). GNU gettext
|
|
# before 0.10.36 does not have that function, and is generally too incomplete
|
|
# to be usable.
|
|
|
|
AC_DEFUN([PGAC_CHECK_GETTEXT],
|
|
[
|
|
AC_SEARCH_LIBS(bind_textdomain_codeset, intl, [],
|
|
[AC_MSG_ERROR([a gettext implementation is required for NLS])])
|
|
AC_CHECK_HEADER([libintl.h], [],
|
|
[AC_MSG_ERROR([header file <libintl.h> is required for NLS])])
|
|
PGAC_PATH_PROGS(MSGFMT, msgfmt)
|
|
if test -z "$MSGFMT"; then
|
|
AC_MSG_ERROR([msgfmt is required for NLS])
|
|
fi
|
|
AC_CACHE_CHECK([for msgfmt flags], pgac_cv_msgfmt_flags,
|
|
[if test x"$MSGFMT" != x"" && "$MSGFMT" --version 2>&1 | grep "GNU" >/dev/null; then
|
|
pgac_cv_msgfmt_flags=-c
|
|
fi])
|
|
AC_SUBST(MSGFMT_FLAGS, $pgac_cv_msgfmt_flags)
|
|
PGAC_PATH_PROGS(MSGMERGE, msgmerge)
|
|
PGAC_PATH_PROGS(XGETTEXT, xgettext)
|
|
])# PGAC_CHECK_GETTEXT
|
|
|
|
|
|
|
|
# PGAC_CHECK_STRIP
|
|
# ----------------
|
|
# Check for a 'strip' program, and figure out if that program can
|
|
# strip libraries.
|
|
|
|
AC_DEFUN([PGAC_CHECK_STRIP],
|
|
[
|
|
AC_CHECK_TOOL(STRIP, strip, :)
|
|
|
|
AC_MSG_CHECKING([whether it is possible to strip libraries])
|
|
if test x"$STRIP" != x"" && "$STRIP" -V 2>&1 | grep "GNU strip" >/dev/null; then
|
|
STRIP_STATIC_LIB="$STRIP -x"
|
|
STRIP_SHARED_LIB="$STRIP --strip-unneeded"
|
|
AC_MSG_RESULT(yes)
|
|
else
|
|
case $host_os in
|
|
darwin*)
|
|
STRIP="$STRIP -x"
|
|
STRIP_STATIC_LIB=$STRIP
|
|
STRIP_SHARED_LIB=$STRIP
|
|
AC_MSG_RESULT(yes)
|
|
;;
|
|
*)
|
|
STRIP_STATIC_LIB=:
|
|
STRIP_SHARED_LIB=:
|
|
AC_MSG_RESULT(no)
|
|
;;
|
|
esac
|
|
fi
|
|
AC_SUBST(STRIP_STATIC_LIB)
|
|
AC_SUBST(STRIP_SHARED_LIB)
|
|
])# PGAC_CHECK_STRIP
|