configure.in was deprecated some years ago. We have a bug at Gentoo [1] to move it to configure.ac.
I've done so in my git-clone of the postgresql repo, and ran autoupdate to move away from the deprecated functions as well. I generated the configure script again, but that didn't change. make && make check all succeeded without intervention. [1] https://bugs.gentoo.org/show_bug.cgi?id=529680 -- Mr. Aaron W. Swenson Gentoo Linux Developer PostgreSQL Herd Bull Email : titanof...@gentoo.org GnuPG FP : 2C00 7719 4F85 FB07 A49C 0E31 5713 AA03 D1BB FDA0 GnuPG ID : D1BBFDA0
From 60a76e24def32e7206e6d76999e6dca3575656da Mon Sep 17 00:00:00 2001 From: "Aaron W. Swenson" <aaron.w.swen...@gmail.com> Date: Wed, 19 Nov 2014 11:44:53 -0500 Subject: [PATCH] Move Deprecated configure.in to configure.ac configure.in was deprecated some years ago. Moved to configure.ac and autoupdate run to move away from deprecated functions. --- configure.ac | 2010 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.in | 2036 ---------------------------------------------------------- 2 files changed, 2010 insertions(+), 2036 deletions(-) create mode 100644 configure.ac delete mode 100644 configure.in diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..68ecc0e --- /dev/null +++ b/configure.ac @@ -0,0 +1,2010 @@ +dnl Process this file with autoconf to produce a configure script. +dnl configure.in +dnl +dnl Developers, please strive to achieve this order: +dnl +dnl 0. Initialization and options processing +dnl 1. Programs +dnl 2. Libraries +dnl 3. Header files +dnl 4. Types +dnl 5. Structures +dnl 6. Compiler characteristics +dnl 7. Functions, global variables +dnl 8. System services +dnl +dnl Read the Autoconf manual for details. +dnl +m4_pattern_forbid(^PGAC_)dnl to catch undefined macros + +AC_INIT([PostgreSQL],[9.5devel],[pgsql-b...@postgresql.org]) + +m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. +Untested combinations of 'autoconf' and PostgreSQL versions are not +recommended. You can remove the check from 'configure.in' but it is then +your responsibility whether the result works or not.])]) +AC_COPYRIGHT([Copyright (c) 1996-2014, PostgreSQL Global Development Group]) +AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c]) +AC_CONFIG_AUX_DIR(config) +AC_PREFIX_DEFAULT(/usr/local/pgsql) +AC_SUBST(configure_args, [$ac_configure_args]) + +[PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`] +AC_SUBST(PG_MAJORVERSION) +AC_DEFINE_UNQUOTED(PG_MAJORVERSION, "$PG_MAJORVERSION", [PostgreSQL major version as a string]) + +PGAC_ARG_REQ(with, extra-version, [STRING], [append STRING to version], + [PG_VERSION="$PACKAGE_VERSION$withval"], + [PG_VERSION="$PACKAGE_VERSION"]) +AC_DEFINE_UNQUOTED(PG_VERSION, "$PG_VERSION", [PostgreSQL version as a string]) + +AC_CANONICAL_HOST + +template= +AC_MSG_CHECKING([which template to use]) + +PGAC_ARG_REQ(with, template, [NAME], [override operating system template], +[ + case $withval in + list) echo; ls "$srcdir/src/template"; exit;; + *) if test -f "$srcdir/src/template/$with_template" ; then + template=$withval + else + AC_MSG_ERROR(['$withval' is not a valid template name. Use 'list' for a list.]) + fi;; + esac +], +[ +# --with-template not given + +case $host_os in + aix*) template=aix ;; + cygwin*) template=cygwin ;; + darwin*) template=darwin ;; +dragonfly*) template=netbsd ;; + freebsd*) template=freebsd ;; + hpux*) template=hpux ;; + linux*|gnu*|k*bsd*-gnu) + template=linux ;; + mingw*) template=win32 ;; + netbsd*) template=netbsd ;; + openbsd*) template=openbsd ;; + sco*) template=sco ;; + solaris*) template=solaris ;; + sysv5*) template=unixware ;; +esac + + if test x"$template" = x"" ; then + AC_MSG_ERROR([[ +******************************************************************* +PostgreSQL has apparently not been ported to your platform yet. +To try a manual configuration, look into the src/template directory +for a similar platform and use the '--with-template=' option. + +Please also contact <pgsql-b...@postgresql.org> to see about +rectifying this. Include the above 'checking host system type...' +line. +******************************************************************* +]]) + fi + +]) + +AC_MSG_RESULT([$template]) + +PORTNAME=$template +AC_SUBST(PORTNAME) + +# Initialize default assumption that we do not need separate assembly code +# for TAS (test-and-set). This can be overridden by the template file +# when it's executed. +need_tas=no +tas_file=dummy.s + + + +## +## Command line options +## + +# +# Add non-standard directories to the include path +# +PGAC_ARG_REQ(with, includes, [DIRS], [look for additional header files in DIRS]) + + +# +# Add non-standard directories to the library search path +# +PGAC_ARG_REQ(with, libraries, [DIRS], [look for additional libraries in DIRS], + [LIBRARY_DIRS=$withval]) + +PGAC_ARG_REQ(with, libs, [DIRS], [alternative spelling of --with-libraries], + [LIBRARY_DIRS=$withval]) + + +# +# 64-bit integer date/time storage: enabled by default. +# +AC_MSG_CHECKING([whether to build with 64-bit integer date/time support]) +PGAC_ARG_BOOL(enable, integer-datetimes, yes, [disable 64-bit integer date/time support], + [AC_DEFINE([USE_INTEGER_DATETIMES], 1, + [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])]) +AC_MSG_RESULT([$enable_integer_datetimes]) + + +# +# NLS +# +AC_MSG_CHECKING([whether NLS is wanted]) +PGAC_ARG_OPTARG(enable, nls, + [LANGUAGES], [enable Native Language Support], + [], + [WANTED_LANGUAGES=$enableval], + [AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if you want National Language Support. (--enable-nls)])]) +AC_MSG_RESULT([$enable_nls]) +AC_SUBST(enable_nls) +AC_SUBST(WANTED_LANGUAGES) + +# +# Default port number (--with-pgport), default 5432 +# +AC_MSG_CHECKING([for default port number]) +PGAC_ARG_REQ(with, pgport, [PORTNUM], [set default port number [5432]], + [default_port=$withval], + [default_port=5432]) +AC_MSG_RESULT([$default_port]) +# Need both of these because some places want an integer and some a string +AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port}, +[Define to the default TCP port number on which the server listens and +to which clients will try to connect. This can be overridden at run-time, +but it's convenient if your clients have the right default compiled in. +(--with-pgport=PORTNUM)]) +AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}", + [Define to the default TCP port number as a string constant.]) +AC_SUBST(default_port) + +# +# '-rpath'-like feature can be disabled +# +PGAC_ARG_BOOL(enable, rpath, yes, + [do not embed shared library search path in executables]) +AC_SUBST(enable_rpath) + +# +# Spinlocks +# +PGAC_ARG_BOOL(enable, spinlocks, yes, + [do not use spinlocks]) + +# +# Atomic operations +# +PGAC_ARG_BOOL(enable, atomics, yes, + [do not use atomic operations]) + +# +# --enable-debug adds -g to compiler flags +# +PGAC_ARG_BOOL(enable, debug, no, + [build with debugging symbols (-g)]) +AC_SUBST(enable_debug) + +# +# --enable-profiling enables gcc profiling +# +PGAC_ARG_BOOL(enable, profiling, no, + [build with profiling enabled ]) + +# +# --enable-coverage enables generation of code coverage metrics with gcov +# +PGAC_ARG_BOOL(enable, coverage, no, + [build with coverage testing instrumentation], +[AC_CHECK_PROGS(GCOV, gcov) +if test -z "$GCOV"; then + AC_MSG_ERROR([gcov not found]) +fi +AC_CHECK_PROGS(LCOV, lcov) +if test -z "$LCOV"; then + AC_MSG_ERROR([lcov not found]) +fi +AC_CHECK_PROGS(GENHTML, genhtml) +if test -z "$GENHTML"; then + AC_MSG_ERROR([genhtml not found]) +fi]) +AC_SUBST(enable_coverage) + +# +# DTrace +# +PGAC_ARG_BOOL(enable, dtrace, no, + [build with DTrace support], +[AC_CHECK_PROGS(DTRACE, dtrace) +if test -z "$DTRACE"; then + AC_MSG_ERROR([dtrace not found]) +fi +AC_SUBST(DTRACEFLAGS)]) +AC_SUBST(enable_dtrace) + +# +# TAP tests +# +PGAC_ARG_BOOL(enable, tap-tests, no, + [enable TAP tests (requires Perl and IPC::Run)]) +AC_SUBST(enable_tap_tests) + +# +# Block size +# +AC_MSG_CHECKING([for block size]) +PGAC_ARG_REQ(with, blocksize, [BLOCKSIZE], [set table block size in kB [8]], + [blocksize=$withval], + [blocksize=8]) +case ${blocksize} in + 1) BLCKSZ=1024;; + 2) BLCKSZ=2048;; + 4) BLCKSZ=4096;; + 8) BLCKSZ=8192;; + 16) BLCKSZ=16384;; + 32) BLCKSZ=32768;; + *) AC_MSG_ERROR([Invalid block size. Allowed values are 1,2,4,8,16,32.]) +esac +AC_MSG_RESULT([${blocksize}kB]) + +AC_DEFINE_UNQUOTED([BLCKSZ], ${BLCKSZ}, [ + Size of a disk block --- this also limits the size of a tuple. You + can set it bigger if you need bigger tuples (although TOAST should + reduce the need to have large tuples, since fields can be spread + across multiple tuples). + + BLCKSZ must be a power of 2. The maximum possible value of BLCKSZ + is currently 2^15 (32768). This is determined by the 15-bit widths + of the lp_off and lp_len fields in ItemIdData (see + include/storage/itemid.h). + + Changing BLCKSZ requires an initdb. +]) + +# +# Relation segment size +# +AC_MSG_CHECKING([for segment size]) +PGAC_ARG_REQ(with, segsize, [SEGSIZE], [set table segment size in GB [1]], + [segsize=$withval], + [segsize=1]) +# this expression is set up to avoid unnecessary integer overflow +# blocksize is already guaranteed to be a factor of 1024 +RELSEG_SIZE=`expr '(' 1024 / ${blocksize} ')' '*' ${segsize} '*' 1024` +test $? -eq 0 || exit 1 +AC_MSG_RESULT([${segsize}GB]) + +AC_DEFINE_UNQUOTED([RELSEG_SIZE], ${RELSEG_SIZE}, [ + RELSEG_SIZE is the maximum number of blocks allowed in one disk file. + Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ; + relations bigger than that are divided into multiple files. + + RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size. + This is often 2 GB or 4GB in a 32-bit operating system, unless you + have large file support enabled. By default, we make the limit 1 GB + to avoid any possible integer-overflow problems within the OS. + A limit smaller than necessary only means we divide a large + relation into more chunks than necessary, so it seems best to err + in the direction of a small limit. + + A power-of-2 value is recommended to save a few cycles in md.c, + but is not absolutely required. + + Changing RELSEG_SIZE requires an initdb. +]) + +# +# WAL block size +# +AC_MSG_CHECKING([for WAL block size]) +PGAC_ARG_REQ(with, wal-blocksize, [BLOCKSIZE], [set WAL block size in kB [8]], + [wal_blocksize=$withval], + [wal_blocksize=8]) +case ${wal_blocksize} in + 1) XLOG_BLCKSZ=1024;; + 2) XLOG_BLCKSZ=2048;; + 4) XLOG_BLCKSZ=4096;; + 8) XLOG_BLCKSZ=8192;; + 16) XLOG_BLCKSZ=16384;; + 32) XLOG_BLCKSZ=32768;; + 64) XLOG_BLCKSZ=65536;; + *) AC_MSG_ERROR([Invalid WAL block size. Allowed values are 1,2,4,8,16,32,64.]) +esac +AC_MSG_RESULT([${wal_blocksize}kB]) + +AC_DEFINE_UNQUOTED([XLOG_BLCKSZ], ${XLOG_BLCKSZ}, [ + Size of a WAL file block. This need have no particular relation to BLCKSZ. + XLOG_BLCKSZ must be a power of 2, and if your system supports O_DIRECT I/O, + XLOG_BLCKSZ must be a multiple of the alignment requirement for direct-I/O + buffers, else direct I/O may fail. + + Changing XLOG_BLCKSZ requires an initdb. +]) + +# +# WAL segment size +# +AC_MSG_CHECKING([for WAL segment size]) +PGAC_ARG_REQ(with, wal-segsize, [SEGSIZE], [set WAL segment size in MB [16]], + [wal_segsize=$withval], + [wal_segsize=16]) +case ${wal_segsize} in + 1) ;; + 2) ;; + 4) ;; + 8) ;; + 16) ;; + 32) ;; + 64) ;; + *) AC_MSG_ERROR([Invalid WAL segment size. Allowed values are 1,2,4,8,16,32,64.]) +esac +AC_MSG_RESULT([${wal_segsize}MB]) + +AC_DEFINE_UNQUOTED([XLOG_SEG_SIZE], [(${wal_segsize} * 1024 * 1024)], [ + XLOG_SEG_SIZE is the size of a single WAL file. This must be a power of 2 + and larger than XLOG_BLCKSZ (preferably, a great deal larger than + XLOG_BLCKSZ). + + Changing XLOG_SEG_SIZE requires an initdb. +]) + +# +# C compiler +# + +# For historical reasons you can also use --with-CC to specify the C compiler +# to use, although the standard way to do this is to set the CC environment +# variable. +PGAC_ARG_REQ(with, CC, [CMD], [set compiler (deprecated)], [CC=$with_CC]) + +case $template in + aix) pgac_cc_list="gcc xlc";; + *) pgac_cc_list="gcc cc";; +esac + +AC_PROG_CC([$pgac_cc_list]) + +# Check if it's Intel's compiler, which (usually) pretends to be gcc, +# but has idiosyncrasies of its own. We assume icc will define +# __INTEL_COMPILER regardless of CFLAGS. +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[@%:@ifndef __INTEL_COMPILER +choke me +@%:@endif]])],[ICC=[yes]],[ICC=[no]]) + +# Check if it's Sun Studio compiler. We assume that +# __SUNPRO_C will be defined for Sun Studio compilers +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[@%:@ifndef __SUNPRO_C +choke me +@%:@endif]])],[SUN_STUDIO_CC=yes],[SUN_STUDIO_CC=no]) + +AC_SUBST(SUN_STUDIO_CC) + +unset CFLAGS + +# +# Read the template +# +. "$srcdir/src/template/$template" || exit + +# CFLAGS are selected so: +# If the user specifies something in the environment, that is used. +# else: If the template file set something, that is used. +# else: If coverage was enabled, don't set anything. +# else: If the compiler is GCC, then we use -O2. +# else: If the compiler is something else, then we use -O, unless debugging. + +if test "$ac_env_CFLAGS_set" = set; then + CFLAGS=$ac_env_CFLAGS_value +elif test "${CFLAGS+set}" = set; then + : # (keep what template set) +elif test "$enable_coverage" = yes; then + : # no optimization by default +elif test "$GCC" = yes; then + CFLAGS="-O2" +else + # if the user selected debug mode, don't use -O + if test "$enable_debug" != yes; then + CFLAGS="-O" + fi +fi + +# set CFLAGS_VECTOR from the environment, if available +if test "$ac_env_CFLAGS_VECTOR_set" = set; then + CFLAGS_VECTOR=$ac_env_CFLAGS_VECTOR_value +fi + +# Some versions of GCC support some additional useful warning flags. +# Check whether they are supported, and add them to CFLAGS if so. +# ICC pretends to be GCC but it's lying; it doesn't support these flags, +# but has its own. Also check other compiler-specific flags here. + +if test "$GCC" = yes -a "$ICC" = no; then + CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wpointer-arith" + # These work in some but not all gcc versions + PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement]) + PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels]) + PGAC_PROG_CC_CFLAGS_OPT([-Wmissing-format-attribute]) + # This was included in -Wall/-Wformat in older GCC versions + PGAC_PROG_CC_CFLAGS_OPT([-Wformat-security]) + # Disable strict-aliasing rules; needed for gcc 3.3+ + PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) + # Disable optimizations that assume no overflow; needed for gcc 4.3+ + PGAC_PROG_CC_CFLAGS_OPT([-fwrapv]) + # Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+ + PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard]) + # Optimization flags for specific files that benefit from vectorization + PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-funroll-loops]) + PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-ftree-vectorize]) +elif test "$ICC" = yes; then + # Intel's compiler has a bug/misoptimization in checking for + # division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS. + PGAC_PROG_CC_CFLAGS_OPT([-mp1]) + # Make sure strict aliasing is off (though this is said to be the default) + PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) +elif test "$PORTNAME" = "aix"; then + # AIX's xlc has to have strict aliasing turned off too + PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias]) +elif test "$PORTNAME" = "hpux"; then + # On some versions of HP-UX, libm functions do not set errno by default. + # Fix that by using +Olibmerrno if the compiler recognizes it. + PGAC_PROG_CC_CFLAGS_OPT([+Olibmerrno]) +fi + +AC_SUBST(CFLAGS_VECTOR, $CFLAGS_VECTOR) + +# supply -g if --enable-debug +if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then + CFLAGS="$CFLAGS -g" +fi + +# enable code coverage if --enable-coverage +if test "$enable_coverage" = yes; then + if test "$GCC" = yes; then + CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" + else + AC_MSG_ERROR([--enable-coverage is supported only when using GCC]) + fi +fi + +# enable profiling if --enable-profiling +if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then + if test "$GCC" = yes; then + AC_DEFINE([PROFILE_PID_DIR], 1, + [Define to 1 to allow profiling output to be saved separately for each process.]) + CFLAGS="$CFLAGS -pg $PLATFORM_PROFILE_FLAGS" + else + AC_MSG_ERROR([--enable-profiling is supported only when using GCC]) + fi +fi + +# We already have this in Makefile.win32, but configure needs it too +if test "$PORTNAME" = "win32"; then + CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND" +fi + +# Check if the compiler still works with the template settings +AC_MSG_CHECKING([whether the C compiler still works]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])],[AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no) + AC_MSG_ERROR([cannot proceed])]) + +# Defend against gcc -ffast-math +if test "$GCC" = yes; then +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[@%:@ifdef __FAST_MATH__ +choke me +@%:@endif]])],[],[AC_MSG_ERROR([do not put -ffast-math in CFLAGS])]) +fi + +AC_PROG_CPP +AC_SUBST(GCC) + + +# +# Set up TAS assembly code if needed; the template file has now had its +# chance to request this. +# +AC_CONFIG_LINKS([src/backend/port/tas.s:src/backend/port/tas/${tas_file}]) + +if test "$need_tas" = yes ; then + TAS=tas.o +else + TAS="" +fi +AC_SUBST(TAS) + + +# +# Automatic dependency tracking +# +PGAC_ARG_BOOL(enable, depend, no, [turn on automatic dependency tracking], + [autodepend=yes]) +AC_SUBST(autodepend) + + +# +# Enable assert checks +# +PGAC_ARG_BOOL(enable, cassert, no, [enable assertion checks (for debugging)], + [AC_DEFINE([USE_ASSERT_CHECKING], 1, + [Define to 1 to build with assertion checks. (--enable-cassert)])]) + + +# +# Include directories +# +ac_save_IFS=$IFS +IFS="${IFS}${PATH_SEPARATOR}" +# SRCH_INC comes from the template file +for dir in $with_includes $SRCH_INC; do + if test -d "$dir"; then + INCLUDES="$INCLUDES -I$dir" + else + AC_MSG_WARN([*** Include directory $dir does not exist.]) + fi +done +IFS=$ac_save_IFS +AC_SUBST(INCLUDES) + + +# +# Library directories +# +ac_save_IFS=$IFS +IFS="${IFS}${PATH_SEPARATOR}" +# LIBRARY_DIRS comes from command line, SRCH_LIB from template file. +for dir in $LIBRARY_DIRS $SRCH_LIB; do + if test -d "$dir"; then + LIBDIRS="$LIBDIRS -L$dir" + else + AC_MSG_WARN([*** Library directory $dir does not exist.]) + fi +done +IFS=$ac_save_IFS + +# +# Enable thread-safe client libraries +# +AC_MSG_CHECKING([allow thread-safe client libraries]) +PGAC_ARG_BOOL(enable, thread-safety, yes, [disable thread-safety in client libraries]) +if test "$enable_thread_safety" = yes; then + AC_DEFINE([ENABLE_THREAD_SAFETY], 1, + [Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety)]) +fi +AC_MSG_RESULT([$enable_thread_safety]) +AC_SUBST(enable_thread_safety) + +# +# Optionally build Tcl modules (PL/Tcl) +# +AC_MSG_CHECKING([whether to build with Tcl]) +PGAC_ARG_BOOL(with, tcl, no, [build Tcl modules (PL/Tcl)]) +AC_MSG_RESULT([$with_tcl]) +AC_SUBST([with_tcl]) + +# We see if the path to the Tcl/Tk configuration scripts is specified. +# This will override the use of tclsh to find the paths to search. + +PGAC_ARG_REQ(with, tclconfig, [DIR], [tclConfig.sh is in DIR]) + +# +# Optionally build Perl modules (PL/Perl) +# +AC_MSG_CHECKING([whether to build Perl modules]) +PGAC_ARG_BOOL(with, perl, no, [build Perl modules (PL/Perl)]) +AC_MSG_RESULT([$with_perl]) +AC_SUBST(with_perl) + +# +# Optionally build Python modules (PL/Python) +# +AC_MSG_CHECKING([whether to build Python modules]) +PGAC_ARG_BOOL(with, python, no, [build Python modules (PL/Python)]) +AC_MSG_RESULT([$with_python]) +AC_SUBST(with_python) + +# +# GSSAPI +# +AC_MSG_CHECKING([whether to build with GSSAPI support]) +PGAC_ARG_BOOL(with, gssapi, no, [build with GSSAPI support], +[ + AC_DEFINE(ENABLE_GSS, 1, [Define to build with GSSAPI support. (--with-gssapi)]) + krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab" +]) +AC_MSG_RESULT([$with_gssapi]) + + +AC_SUBST(krb_srvtab) + + +# +# Kerberos configuration parameters +# +PGAC_ARG_REQ(with, krb-srvnam, + [NAME], [default service principal name in Kerberos (GSSAPI) [postgres]], + [], + [with_krb_srvnam="postgres"]) +AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"], + [Define to the name of the default PostgreSQL service principal in Kerberos (GSSAPI). (--with-krb-srvnam=NAME)]) + + +# +# PAM +# +AC_MSG_CHECKING([whether to build with PAM support]) +PGAC_ARG_BOOL(with, pam, no, + [build with PAM support], + [AC_DEFINE([USE_PAM], 1, [Define to 1 to build with PAM support. (--with-pam)])]) +AC_MSG_RESULT([$with_pam]) + + +# +# LDAP +# +AC_MSG_CHECKING([whether to build with LDAP support]) +PGAC_ARG_BOOL(with, ldap, no, + [build with LDAP support], + [AC_DEFINE([USE_LDAP], 1, [Define to 1 to build with LDAP support. (--with-ldap)])]) +AC_MSG_RESULT([$with_ldap]) + + +# +# Bonjour +# +AC_MSG_CHECKING([whether to build with Bonjour support]) +PGAC_ARG_BOOL(with, bonjour, no, + [build with Bonjour support], + [AC_DEFINE([USE_BONJOUR], 1, [Define to 1 to build with Bonjour support. (--with-bonjour)])]) +AC_MSG_RESULT([$with_bonjour]) + + +# +# OpenSSL +# +AC_MSG_CHECKING([whether to build with OpenSSL support]) +PGAC_ARG_BOOL(with, openssl, no, [build with OpenSSL support], + [AC_DEFINE([USE_OPENSSL], 1, [Define to build with OpenSSL support. (--with-openssl)])]) +AC_MSG_RESULT([$with_openssl]) +AC_SUBST(with_openssl) + +# +# SELinux +# +AC_MSG_CHECKING([whether to build with SELinux support]) +PGAC_ARG_BOOL(with, selinux, no, [build with SELinux support]) +AC_SUBST(with_selinux) +AC_MSG_RESULT([$with_selinux]) + +# +# Readline +# +PGAC_ARG_BOOL(with, readline, yes, + [do not use GNU Readline nor BSD Libedit for editing]) +# readline on MinGW has problems with backslashes in psql and other bugs. +# This is particularly a problem with non-US code pages. +# Therefore disable its use until we understand the cause. 2004-07-20 +if test "$PORTNAME" = "win32"; then + if test "$with_readline" = yes; then + AC_MSG_WARN([*** Readline does not work on MinGW --- disabling]) + with_readline=no + fi +fi + + +# +# Prefer libedit +# +PGAC_ARG_BOOL(with, libedit-preferred, no, + [prefer BSD Libedit over GNU Readline]) + + +# +# UUID library +# +# There are at least three UUID libraries in common use: the FreeBSD/NetBSD +# library, the e2fsprogs libuuid (now part of util-linux-ng), and the OSSP +# UUID library. More than one of these might be present on a given platform, +# so we make the user say which one she wants. +# +PGAC_ARG_REQ(with, uuid, [LIB], [build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)]) +if test x"$with_uuid" = x"" ; then + with_uuid=no +fi +PGAC_ARG_BOOL(with, ossp-uuid, no, [obsolete spelling of --with-uuid=ossp]) +if test "$with_ossp_uuid" = yes ; then + with_uuid=ossp +fi + +if test "$with_uuid" = bsd ; then + AC_DEFINE([HAVE_UUID_BSD], 1, [Define to 1 if you have BSD UUID support.]) + UUID_EXTRA_OBJS="md5.o sha1.o" +elif test "$with_uuid" = e2fs ; then + AC_DEFINE([HAVE_UUID_E2FS], 1, [Define to 1 if you have E2FS UUID support.]) + UUID_EXTRA_OBJS="md5.o sha1.o" +elif test "$with_uuid" = ossp ; then + AC_DEFINE([HAVE_UUID_OSSP], 1, [Define to 1 if you have OSSP UUID support.]) + UUID_EXTRA_OBJS="" +elif test "$with_uuid" = no ; then + UUID_EXTRA_OBJS="" +else + AC_MSG_ERROR([--with-uuid must specify one of bsd, e2fs, or ossp]) +fi +AC_SUBST(with_uuid) +AC_SUBST(UUID_EXTRA_OBJS) + + +# +# XML +# +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)])]) + +if test "$with_libxml" = yes ; then + AC_CHECK_PROGS(XML2_CONFIG, xml2-config) + if test -n "$XML2_CONFIG"; then + for pgac_option in `$XML2_CONFIG --cflags`; do + case $pgac_option in + -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; + esac + done + for pgac_option in `$XML2_CONFIG --libs`; do + case $pgac_option in + -L*) LDFLAGS="$LDFLAGS $pgac_option";; + esac + done + fi +fi + +AC_SUBST(with_libxml) + +# +# XSLT +# +PGAC_ARG_BOOL(with, libxslt, no, [use XSLT support when building contrib/xml2], + [AC_DEFINE([USE_LIBXSLT], 1, [Define to 1 to use XSLT support when building contrib/xml2. (--with-libxslt)])]) + + +AC_SUBST(with_libxslt) + +# +# tzdata +# +PGAC_ARG_REQ(with, system-tzdata, + [DIR], [use system time zone data in DIR]) +AC_SUBST(with_system_tzdata) + +# +# Zlib +# +PGAC_ARG_BOOL(with, zlib, yes, + [do not use Zlib]) +AC_SUBST(with_zlib) + +# +# Elf +# + +# Assume system is ELF if it predefines __ELF__ as 1, +# otherwise believe host_os based default. +case $host_os in + freebsd1*|freebsd2*) elf=no;; + freebsd3*|freebsd4*) elf=yes;; +esac + +AC_EGREP_CPP(yes, +[#if __ELF__ + yes +#endif +], +[ELF_SYS=true], +[if test "X$elf" = "Xyes" ; then + ELF_SYS=true +else + ELF_SYS= +fi]) +AC_SUBST(ELF_SYS) + +# +# Assignments +# + +CPPFLAGS="$CPPFLAGS $INCLUDES" +LDFLAGS="$LDFLAGS $LIBDIRS" + +AC_ARG_VAR(LDFLAGS_EX, [extra linker flags for linking executables only]) +AC_ARG_VAR(LDFLAGS_SL, [extra linker flags for linking shared libraries only]) + +PGAC_PROG_LD +AC_SUBST(LD) +AC_SUBST(with_gnu_ld) +case $host_os in sysv5*) + AC_CACHE_CHECK([whether ld -R works], [pgac_cv_prog_ld_R], + [ + pgac_save_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -Wl,-R/usr/lib" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[pgac_cv_prog_ld_R=yes],[pgac_cv_prog_ld_R=no]) + LDFLAGS=$pgac_save_LDFLAGS + ]) + ld_R_works=$pgac_cv_prog_ld_R + AC_SUBST(ld_R_works) +esac +AC_PROG_RANLIB +PGAC_CHECK_STRIP +AC_CHECK_TOOL(AR, ar, ar) +if test "$PORTNAME" = "win32"; then + AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool) + AC_CHECK_TOOL(DLLWRAP, dllwrap, dllwrap) + AC_CHECK_TOOL(WINDRES, windres, windres) +fi + +AC_PROG_INSTALL +# When Autoconf chooses install-sh as install program it tries to generate +# a relative path to it in each makefile where it subsitutes it. This clashes +# with our Makefile.global concept. This workaround helps. +case $INSTALL in + *install-sh*) install_bin='';; + *) install_bin=$INSTALL;; +esac +AC_SUBST(install_bin) + +AC_PATH_PROG(TAR, tar) +AC_PROG_LN_S +AC_PROG_AWK +AC_PROG_MKDIR_P +# When Autoconf chooses install-sh as mkdir -p program it tries to generate +# a relative path to it in each makefile where it subsitutes it. This clashes +# with our Makefile.global concept. This workaround helps. +case $MKDIR_P in + *install-sh*) MKDIR_P='\${SHELL} \${top_srcdir}/config/install-sh -c -d';; +esac + +PGAC_PATH_BISON +PGAC_PATH_FLEX + +PGAC_PATH_PERL +if test "$with_perl" = yes; then + if test -z "$PERL"; then + AC_MSG_ERROR([Perl not found]) + fi + PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib]) + PGAC_CHECK_PERL_EMBED_LDFLAGS +fi + +if test "$with_python" = yes; then + PGAC_PATH_PYTHON + PGAC_CHECK_PYTHON_EMBED_SETUP +fi + +if test "$cross_compiling" = yes && test -z "$with_system_tzdata"; then + AC_PATH_PROG(ZIC, zic) + if test -z "$ZIC"; then + AC_MSG_ERROR([ +When cross-compiling, either use the option --with-system-tzdata to use +existing time-zone data, or set the environment variable ZIC to a zic +program to use during the build.]) + fi +fi + + +## +## Libraries +## +## Most libraries are included only if they demonstrably provide a function +## we need, but libm is an exception: always include it, because there are +## too many compilers that play cute optimization games that will break +## probes for standard functions such as pow(). +## + +AC_CHECK_LIB(m, main) +AC_SEARCH_LIBS(setproctitle, util) +AC_SEARCH_LIBS(dlopen, dl) +AC_SEARCH_LIBS(socket, [socket ws2_32]) +AC_SEARCH_LIBS(shl_load, dld) +# We only use libld in port/dynloader/aix.c +case $host_os in + aix*) + AC_SEARCH_LIBS(ldopen, ld) + ;; +esac +AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt]) +AC_SEARCH_LIBS(crypt, crypt) +AC_SEARCH_LIBS(shm_open, rt) +AC_SEARCH_LIBS(shm_unlink, rt) +# Solaris: +AC_SEARCH_LIBS(fdatasync, [rt posix4]) +# Required for thread_test.c on Solaris 2.5: +# Other ports use it too (HP-UX) so test unconditionally +AC_SEARCH_LIBS(gethostbyname_r, nsl) +# Cygwin: +AC_SEARCH_LIBS(shmget, cygipc) + +if test "$with_readline" = yes; then + PGAC_CHECK_READLINE + if test x"$pgac_cv_check_readline" = x"no"; then + AC_MSG_ERROR([readline library not found +If you have readline already installed, see config.log for details on the +failure. It is possible the compiler isn't looking in the proper directory. +Use --without-readline to disable readline support.]) + fi +fi + +if test "$with_zlib" = yes; then + AC_CHECK_LIB(z, inflate, [], + [AC_MSG_ERROR([zlib library not found +If you have zlib already installed, see config.log for details on the +failure. It is possible the compiler isn't looking in the proper directory. +Use --without-zlib to disable zlib support.])]) +fi + +if test "$enable_spinlocks" = yes; then + AC_DEFINE(HAVE_SPINLOCKS, 1, [Define to 1 if you have spinlocks.]) +else + AC_MSG_WARN([ +*** Not using spinlocks will cause poor performance.]) +fi + +if test "$enable_atomics" = yes; then + AC_DEFINE(HAVE_ATOMICS, 1, [Define to 1 if you want to use atomics if available.]) +else + AC_MSG_WARN([ +*** Not using atomic operations will cause poor performance.]) +fi + +if test "$with_gssapi" = yes ; then + if test "$PORTNAME" != "win32"; then + AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [], + [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])]) + else + LIBS="$LIBS -lgssapi32" + fi +fi + +if test "$with_openssl" = yes ; then + dnl Order matters! + if test "$PORTNAME" != "win32"; then + AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) + AC_CHECK_LIB(ssl, SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) + else + AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])]) + AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])]) + fi + AC_CHECK_FUNCS([SSL_get_current_compression]) +fi + +if test "$with_pam" = yes ; then + AC_CHECK_LIB(pam, pam_start, [], [AC_MSG_ERROR([library 'pam' is required for PAM])]) +fi + +if test "$with_libxml" = yes ; then + AC_CHECK_LIB(xml2, xmlSaveToBuffer, [], [AC_MSG_ERROR([library 'xml2' (version >= 2.6.23) is required for XML support])]) +fi + +if test "$with_libxslt" = yes ; then + AC_CHECK_LIB(xslt, xsltCleanupGlobals, [], [AC_MSG_ERROR([library 'xslt' is required for XSLT support])]) +fi + +# for contrib/sepgsql +if test "$with_selinux" = yes; then + AC_CHECK_LIB(selinux, security_compute_create_name, [], + [AC_MSG_ERROR([library 'libselinux', version 2.1.10 or newer, is required for SELinux support])]) +fi + +# for contrib/uuid-ossp +if test "$with_uuid" = bsd ; then + # On BSD, the UUID functions are in libc + AC_CHECK_FUNC(uuid_to_string, + [UUID_LIBS=""], + [AC_MSG_ERROR([BSD UUID functions are not present])]) +elif test "$with_uuid" = e2fs ; then + # On OS X, the UUID functions are in libc + AC_CHECK_FUNC(uuid_generate, + [UUID_LIBS=""], + [AC_CHECK_LIB(uuid, uuid_generate, + [UUID_LIBS="-luuid"], + [AC_MSG_ERROR([library 'uuid' is required for E2FS UUID])])]) +elif test "$with_uuid" = ossp ; then + AC_CHECK_LIB(ossp-uuid, uuid_export, + [UUID_LIBS="-lossp-uuid"], + [AC_CHECK_LIB(uuid, uuid_export, + [UUID_LIBS="-luuid"], + [AC_MSG_ERROR([library 'ossp-uuid' or 'uuid' is required for OSSP UUID])])]) +fi +AC_SUBST(UUID_LIBS) + + +## +## Header files +## + +dnl sys/socket.h is required by AC_FUNC_ACCEPT_ARGTYPES +AC_CHECK_HEADERS([atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h pwd.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h]) + +# On BSD, test for net/if.h will fail unless sys/socket.h +# is included first. +AC_CHECK_HEADERS(net/if.h, [], [], +[AC_INCLUDES_DEFAULT +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +]) + +# On OpenBSD, test for sys/ucred.h will fail unless sys/param.h +# is included first. +AC_CHECK_HEADERS(sys/ucred.h, [], [], +[AC_INCLUDES_DEFAULT +#include <sys/param.h> +]) + +# At least on IRIX, test for netinet/tcp.h will fail unless +# netinet/in.h is included first. +AC_CHECK_HEADERS(netinet/in.h) +AC_CHECK_HEADERS(netinet/tcp.h, [], [], +[AC_INCLUDES_DEFAULT +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif +]) + +if expr x"$pgac_cv_check_readline" : 'x-lreadline' >/dev/null ; then + AC_CHECK_HEADERS(readline/readline.h, [], + [AC_CHECK_HEADERS(readline.h, [], + [AC_MSG_ERROR([readline header not found +If you have readline already installed, see config.log for details on the +failure. It is possible the compiler isn't looking in the proper directory. +Use --without-readline to disable readline support.])])]) + AC_CHECK_HEADERS(readline/history.h, [], + [AC_CHECK_HEADERS(history.h, [], + [AC_MSG_ERROR([history header not found +If you have readline already installed, see config.log for details on the +failure. It is possible the compiler isn't looking in the proper directory. +Use --without-readline to disable readline support.])])]) +fi + +if expr x"$pgac_cv_check_readline" : 'x-ledit' >/dev/null ; then +# Some installations of libedit usurp /usr/include/readline/, which seems +# bad practice, since in combined installations readline will have its headers +# there. We might have to resort to AC_EGREP checks to make sure we found +# the proper header... + AC_CHECK_HEADERS(editline/readline.h, [], + [AC_CHECK_HEADERS(readline.h, [], + [AC_CHECK_HEADERS(readline/readline.h, [], + [AC_MSG_ERROR([readline header not found +If you have libedit already installed, see config.log for details on the +failure. It is possible the compiler isn't looking in the proper directory. +Use --without-readline to disable libedit support.])])])]) +# Note: in a libedit installation, history.h is sometimes a dummy, and may +# not be there at all. Hence, don't complain if not found. We must check +# though, since in yet other versions it is an independent header. + AC_CHECK_HEADERS(editline/history.h, [], + [AC_CHECK_HEADERS(history.h, [], + [AC_CHECK_HEADERS(readline/history.h)])]) +fi + +if test "$with_zlib" = yes; then + AC_CHECK_HEADER(zlib.h, [], [AC_MSG_ERROR([zlib header not found +If you have zlib already installed, see config.log for details on the +failure. It is possible the compiler isn't looking in the proper directory. +Use --without-zlib to disable zlib support.])]) +fi + +if test "$with_gssapi" = yes ; then + AC_CHECK_HEADERS(gssapi/gssapi.h, [], + [AC_CHECK_HEADERS(gssapi.h, [], [AC_MSG_ERROR([gssapi.h header file is required for GSSAPI])])]) +fi + +if test "$with_openssl" = yes ; then + AC_CHECK_HEADER(openssl/ssl.h, [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])]) + AC_CHECK_HEADER(openssl/err.h, [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])]) +fi + +if test "$with_pam" = yes ; then + AC_CHECK_HEADERS(security/pam_appl.h, [], + [AC_CHECK_HEADERS(pam/pam_appl.h, [], + [AC_MSG_ERROR([header file <security/pam_appl.h> or <pam/pam_appl.h> is required for PAM.])])]) +fi + +if test "$with_libxml" = yes ; then + AC_CHECK_HEADER(libxml/parser.h, [], [AC_MSG_ERROR([header file <libxml/parser.h> is required for XML support])]) +fi + +if test "$with_libxslt" = yes ; then + AC_CHECK_HEADER(libxslt/xslt.h, [], [AC_MSG_ERROR([header file <libxslt/xslt.h> is required for XSLT support])]) +fi + +if test "$with_ldap" = yes ; then + if test "$PORTNAME" != "win32"; then + AC_CHECK_HEADERS(ldap.h, [], + [AC_MSG_ERROR([header file <ldap.h> is required for LDAP])]) + PGAC_LDAP_SAFE + else + AC_CHECK_HEADERS(winldap.h, [], + [AC_MSG_ERROR([header file <winldap.h> is required for LDAP])], + [AC_INCLUDES_DEFAULT +#include <windows.h> + ]) + fi +fi + +if test "$with_bonjour" = yes ; then + AC_CHECK_HEADER(dns_sd.h, [], [AC_MSG_ERROR([header file <dns_sd.h> is required for Bonjour])]) +fi + +# for contrib/uuid-ossp +if test "$with_uuid" = bsd ; then + AC_CHECK_HEADERS(uuid.h, + [AC_EGREP_HEADER([uuid_to_string], uuid.h, [], + [AC_MSG_ERROR([header file <uuid.h> does not match BSD UUID library])])], + [AC_MSG_ERROR([header file <uuid.h> is required for BSD UUID])]) +elif test "$with_uuid" = e2fs ; then + AC_CHECK_HEADERS(uuid/uuid.h, + [AC_EGREP_HEADER([uuid_generate], uuid/uuid.h, [], + [AC_MSG_ERROR([header file <uuid/uuid.h> does not match E2FS UUID library])])], + [AC_CHECK_HEADERS(uuid.h, + [AC_EGREP_HEADER([uuid_generate], uuid.h, [], + [AC_MSG_ERROR([header file <uuid.h> does not match E2FS UUID library])])], + [AC_MSG_ERROR([header file <uuid/uuid.h> or <uuid.h> is required for E2FS UUID])])]) +elif test "$with_uuid" = ossp ; then + AC_CHECK_HEADERS(ossp/uuid.h, + [AC_EGREP_HEADER([uuid_export], ossp/uuid.h, [], + [AC_MSG_ERROR([header file <ossp/uuid.h> does not match OSSP UUID library])])], + [AC_CHECK_HEADERS(uuid.h, + [AC_EGREP_HEADER([uuid_export], uuid.h, [], + [AC_MSG_ERROR([header file <uuid.h> does not match OSSP UUID library])])], + [AC_MSG_ERROR([header file <ossp/uuid.h> or <uuid.h> is required for OSSP UUID])])]) +fi + +if test "$PORTNAME" = "win32" ; then + AC_CHECK_HEADERS(crtdefs.h) +fi + +## +## Types, structures, compiler characteristics +## + +m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that. +AC_C_BIGENDIAN +PGAC_C_INLINE +AC_C_FLEXIBLE_ARRAY_MEMBER +PGAC_C_SIGNED +PGAC_C_FUNCNAME_SUPPORT +PGAC_C_STATIC_ASSERT +PGAC_C_TYPES_COMPATIBLE +PGAC_C_BUILTIN_CONSTANT_P +PGAC_C_BUILTIN_UNREACHABLE +PGAC_C_VA_ARGS +PGAC_STRUCT_TIMEZONE +PGAC_UNION_SEMUN +PGAC_STRUCT_SOCKADDR_UN +PGAC_STRUCT_SOCKADDR_STORAGE +PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS +PGAC_STRUCT_ADDRINFO +AC_TYPE_INTPTR_T +AC_TYPE_UINTPTR_T +AC_TYPE_LONG_LONG_INT + +PGAC_TYPE_LOCALE_T + +AC_CHECK_TYPES([struct cmsgcred], [], [], +[#include <sys/socket.h> +#include <sys/param.h> +#ifdef HAVE_SYS_UCRED_H +#include <sys/ucred.h> +#endif]) + +AC_CHECK_TYPES([struct option], [], [], +[#ifdef HAVE_GETOPT_H +#include <getopt.h> +#endif]) + +if test "$with_zlib" = yes; then + # Check that <zlib.h> defines z_streamp (versions before about 1.0.4 + # did not). While we could work around the lack of z_streamp, it + # seems unwise to encourage people to use such old zlib versions... + AC_CHECK_TYPE(z_streamp, [], [AC_MSG_ERROR([zlib version is too old +Use --without-zlib to disable zlib support.])], + [#include <zlib.h>]) +fi + +# On PPC, check if assembler supports LWARX instruction's mutex hint bit +case $host_cpu in + ppc*|powerpc*) + AC_MSG_CHECKING([whether assembler supports lwarx hint bit]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[int a = 0; int *p = &a; int r; + __asm__ __volatile__ (" lwarx %0,0,%1,1\n" : "=&r"(r) : "r"(p));]])],[pgac_cv_have_ppc_mutex_hint=yes],[pgac_cv_have_ppc_mutex_hint=no]) + AC_MSG_RESULT([$pgac_cv_have_ppc_mutex_hint]) + if test x"$pgac_cv_have_ppc_mutex_hint" = xyes ; then + AC_DEFINE(HAVE_PPC_LWARX_MUTEX_HINT, 1, [Define to 1 if the assembler supports PPC's LWARX mutex hint bit.]) + fi + ;; +esac + +# Check largefile support. You might think this is a system service not a +# compiler characteristic, but you'd be wrong. We must check this before +# probing existence of related functions such as fseeko, since the largefile +# defines can affect what is generated for that. +if test "$PORTNAME" != "win32"; then + AC_SYS_LARGEFILE + dnl Autoconf 2.69's AC_SYS_LARGEFILE believes it's a good idea to #define + dnl _DARWIN_USE_64_BIT_INODE, but it isn't: on OS X 10.5 that activates a + dnl bug that causes readdir() to sometimes return EINVAL. On later OS X + dnl versions where the feature actually works, it's on by default anyway. + AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],[]) +fi + +# Check for largefile support (must be after AC_SYS_LARGEFILE) +AC_CHECK_SIZEOF([off_t]) + +# If we don't have largefile support, can't handle segsize >= 2GB. +if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then + AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.]) +fi + + +## +## Functions, global variables +## + +PGAC_VAR_INT_TIMEZONE +AC_FUNC_ACCEPT_ARGTYPES +PGAC_FUNC_GETTIMEOFDAY_1ARG + +# Some versions of libedit contain strlcpy(), setproctitle(), and other +# symbols that that library has no business exposing to the world. Pending +# acquisition of a clue by those developers, ignore libedit (including its +# possible alias of libreadline) while checking for everything else. +LIBS_including_readline="$LIBS" +LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` + +AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat readlink setproctitle setsid shm_open sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l]) + +AC_REPLACE_FUNCS(fseeko) +case $host_os in + # NetBSD uses a custom fseeko/ftello built on fsetpos/fgetpos + # Mingw uses macros to access Win32 API calls + netbsd*|mingw*) + AC_DEFINE(HAVE_FSEEKO, 1, [Define to 1 because replacement version used.]) + ac_cv_func_fseeko=yes;; + *) + AC_FUNC_FSEEKO;; +esac + +# posix_fadvise() is a no-op on Solaris, so don't incur function overhead +# by calling it, 2009-04-02 +# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c +if test "$PORTNAME" != "solaris"; then +AC_CHECK_FUNCS(posix_fadvise) +AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>]) +fi + +AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) +AC_CHECK_DECLS([strlcat, strlcpy]) +# This is probably only present on Darwin, but may as well check always +AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>]) + +HAVE_IPV6=no +AC_CHECK_TYPE([struct sockaddr_in6], + [AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.]) + HAVE_IPV6=yes], + [], +[$ac_includes_default +#include <netinet/in.h>]) +AC_SUBST(HAVE_IPV6) + +AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <machine/vmparam.h> +#include <sys/exec.h> +]], [[PS_STRINGS->ps_nargvstr = 1; +PS_STRINGS->ps_argvstr = "foo";]])],[pgac_cv_var_PS_STRINGS=yes],[pgac_cv_var_PS_STRINGS=no])]) +if test "$pgac_cv_var_PS_STRINGS" = yes ; then + AC_DEFINE([HAVE_PS_STRINGS], 1, [Define to 1 if the PS_STRINGS thing exists.]) +fi + + +# We use our snprintf.c emulation if either snprintf() or vsnprintf() +# is missing. Yes, there are machines that have only one. We may +# also decide to use snprintf.c if snprintf() is present but does not +# have all the features we need --- see below. + +if test "$PORTNAME" = "win32"; then + # Win32 gets snprintf.c built unconditionally. + # + # To properly translate all NLS languages strings, we must support the + # *printf() %$ format, which allows *printf() arguments to be selected + # by position in the translated string. + # + # libintl versions < 0.13 use the native *printf() functions, and Win32 + # *printf() doesn't understand %$, so we must use our /port versions, + # which do understand %$. libintl versions >= 0.13 include their own + # *printf versions on Win32. The libintl 0.13 release note text is: + # + # C format strings with positions, as they arise when a translator + # needs to reorder a sentence, are now supported on all platforms. + # On those few platforms (NetBSD and Woe32) for which the native + # printf()/fprintf()/... functions don't support such format + # strings, replacements are provided through <libintl.h>. + # + # We could use libintl >= 0.13's *printf() if we were sure that we had + # a litint >= 0.13 at runtime, but seeing that there is no clean way + # to guarantee that, it is best to just use our own, so we are sure to + # get %$ support. In include/port.h we disable the *printf() macros + # that might have been defined by libintl. + # + # We do this unconditionally whether NLS is used or not so we are sure + # that all Win32 libraries and binaries behave the same. + pgac_need_repl_snprintf=yes +else + pgac_need_repl_snprintf=no + AC_CHECK_FUNCS(snprintf, [], pgac_need_repl_snprintf=yes) + AC_CHECK_FUNCS(vsnprintf, [], pgac_need_repl_snprintf=yes) +fi + + +# Check whether <stdio.h> declares snprintf() and vsnprintf(); if not, +# include/c.h will provide declarations. Note this is a separate test +# from whether the functions exist in the C library --- there are +# systems that have the functions but don't bother to declare them :-( + +AC_CHECK_DECLS([snprintf, vsnprintf]) + + +dnl Cannot use AC_CHECK_FUNC because isinf may be a macro +AC_CACHE_CHECK([for isinf], ac_cv_func_isinf, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include <math.h> +double glob_double; +]], [[return isinf(glob_double) ? 0 : 1;]])],[ac_cv_func_isinf=yes],[ac_cv_func_isinf=no])]) + +if test $ac_cv_func_isinf = yes ; then + AC_DEFINE(HAVE_ISINF, 1, [Define to 1 if you have isinf().]) +else + AC_LIBOBJ(isinf) + # Look for a way to implement a substitute for isinf() + AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break]) +fi + +AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy]) + +case $host_os in + + # Windows uses a specialised env handler + # and doesn't need a replacement getpeereid because it doesn't use + # Unix sockets. + mingw*) + AC_DEFINE(HAVE_UNSETENV, 1, [Define to 1 because replacement version used.]) + AC_DEFINE(HAVE_GETPEEREID, 1, [Define to 1 because function not required.]) + ac_cv_func_unsetenv=yes + ac_cv_func_getpeereid=yes;; + *) + AC_REPLACE_FUNCS([unsetenv getpeereid]) + ;; +esac + +# System's version of getaddrinfo(), if any, may be used only if we found +# a definition for struct addrinfo; see notes in src/include/getaddrinfo.h. +# We use only our own getaddrinfo.c on Windows, but it's time to revisit that. +if test x"$ac_cv_type_struct_addrinfo" = xyes && \ + test "$PORTNAME" != "win32"; then + AC_REPLACE_FUNCS([getaddrinfo]) +else + AC_LIBOBJ(getaddrinfo) +fi + +# Similarly, use system's getopt_long() only if system provides struct option. +if test x"$ac_cv_type_struct_option" = xyes ; then + AC_REPLACE_FUNCS([getopt_long]) +else + AC_LIBOBJ(getopt_long) +fi + +# Solaris' getopt() doesn't do what we want for long options, so always use +# our version on that platform. +if test "$PORTNAME" = "solaris"; then + AC_LIBOBJ(getopt) +fi + +# mingw has adopted a GNU-centric interpretation of optind/optreset, +# so always use our version on Windows. +if test "$PORTNAME" = "win32"; then + AC_LIBOBJ(getopt) + AC_LIBOBJ(getopt_long) +fi + +# Win32 support +if test "$PORTNAME" = "win32"; then + AC_REPLACE_FUNCS(gettimeofday) + AC_LIBOBJ(kill) + AC_LIBOBJ(open) + AC_LIBOBJ(system) + AC_LIBOBJ(win32env) + AC_LIBOBJ(win32error) + AC_LIBOBJ(win32setlocale) + AC_DEFINE([HAVE_SYMLINK], 1, + [Define to 1 if you have the `symlink' function.]) + AC_CHECK_TYPES(MINIDUMP_TYPE, [pgac_minidump_type=yes], [pgac_minidump_type=no], [ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <string.h> +#include <dbghelp.h>]) +fi +if test x"$pgac_minidump_type" = x"yes" ; then + AC_SUBST(have_win32_dbghelp,yes) +else + AC_SUBST(have_win32_dbghelp,no) +fi + +dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro +dnl (especially on GNU libc) +dnl See also comments in c.h. +AC_CACHE_CHECK([for sigsetjmp], pgac_cv_func_sigsetjmp, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]], [[sigjmp_buf x; sigsetjmp(x, 1);]])],[pgac_cv_func_sigsetjmp=yes],[pgac_cv_func_sigsetjmp=no])]) +if test x"$pgac_cv_func_sigsetjmp" = x"yes"; then + AC_DEFINE(HAVE_SIGSETJMP, 1, [Define to 1 if you have sigsetjmp().]) +fi + +AC_CHECK_DECLS([sys_siglist],[],[],[#include <signal.h> +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif +]) + + +AC_CHECK_FUNC(syslog, + [AC_CHECK_HEADER(syslog.h, + [AC_DEFINE(HAVE_SYSLOG, 1, [Define to 1 if you have the syslog interface.])])]) + +AC_CACHE_CHECK([for opterr], pgac_cv_var_int_opterr, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]], [[extern int opterr; opterr = 1;]])],[pgac_cv_var_int_opterr=yes],[pgac_cv_var_int_opterr=no])]) +if test x"$pgac_cv_var_int_opterr" = x"yes"; then + AC_DEFINE(HAVE_INT_OPTERR, 1, [Define to 1 if you have the global variable 'int opterr'.]) +fi + +AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]], [[extern int optreset; optreset = 1;]])],[pgac_cv_var_int_optreset=yes],[pgac_cv_var_int_optreset=no])]) +if test x"$pgac_cv_var_int_optreset" = x"yes"; then + AC_DEFINE(HAVE_INT_OPTRESET, 1, [Define to 1 if you have the global variable 'int optreset'.]) +fi + +AC_CHECK_FUNCS([strtoll strtoq], [break]) +AC_CHECK_FUNCS([strtoull strtouq], [break]) + +# Lastly, restore full LIBS list and check for readline/libedit symbols +LIBS="$LIBS_including_readline" + +if test "$with_readline" = yes; then + PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER + AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function]) + AC_CHECK_FUNCS([append_history history_truncate_file]) +fi + + +# +# Pthreads +# +# For each platform, we need to know about any special compile and link +# libraries, and whether the normal C function names are thread-safe. +# See the comment at the top of src/port/thread.c for more information. +# WIN32 doesn't need the pthread tests; it always uses threads +if test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"; then +ACX_PTHREAD # set thread flags + +# Some platforms use these, so just define them. They can't hurt if they +# are not supported. For example, on Solaris -D_POSIX_PTHREAD_SEMANTICS +# enables 5-arg getpwuid_r, among other things. +PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS" + +# Check for *_r functions +_CFLAGS="$CFLAGS" +_LIBS="$LIBS" +CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +LIBS="$LIBS $PTHREAD_LIBS" + +if test "$PORTNAME" != "win32"; then +AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([ +pthread.h not found; use --disable-thread-safety to disable thread safety])]) +fi + +AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r]) + +# Do test here with the proper thread flags +PGAC_FUNC_GETPWUID_R_5ARG +PGAC_FUNC_STRERROR_R_INT + +CFLAGS="$_CFLAGS" +LIBS="$_LIBS" + +else +# do not use values from template file +PTHREAD_CFLAGS= +PTHREAD_LIBS= +fi + +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_LIBS) + + +# We can test for libldap_r only after we know PTHREAD_LIBS +if test "$with_ldap" = yes ; then + _LIBS="$LIBS" + if test "$PORTNAME" != "win32"; then + AC_CHECK_LIB(ldap, ldap_bind, [], + [AC_MSG_ERROR([library 'ldap' is required for LDAP])], + [$EXTRA_LDAP_LIBS]) + LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" + if test "$enable_thread_safety" = yes; then + # on some platforms ldap_r fails to link without PTHREAD_LIBS + AC_CHECK_LIB(ldap_r, ldap_simple_bind, [], + [AC_MSG_ERROR([library 'ldap_r' is required for LDAP])], + [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) + LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS" + else + LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" + fi + else + AC_CHECK_LIB(wldap32, ldap_bind, [], [AC_MSG_ERROR([library 'wldap32' is required for LDAP])]) + LDAP_LIBS_FE="-lwldap32" + LDAP_LIBS_BE="-lwldap32" + fi + LIBS="$_LIBS" +fi +AC_SUBST(LDAP_LIBS_FE) +AC_SUBST(LDAP_LIBS_BE) + + +# This test makes sure that run tests work at all. Sometimes a shared +# library is found by the linker, but the runtime linker can't find it. +# This check should come after all modifications of compiler or linker +# variables, and before any other run tests. +AC_MSG_CHECKING([test program]) +AC_RUN_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],[AC_MSG_RESULT(ok)],[AC_MSG_RESULT(failed) +AC_MSG_ERROR([[ +Could not execute a simple test program. This may be a problem +related to locating shared libraries. Check the file 'config.log' +for the exact reason.]])],[AC_MSG_RESULT([cross-compiling])]) + +# -------------------- +# Run tests below here +# -------------------- + +# Force use of our snprintf if system's doesn't do arg control +# See comment above at snprintf test for details. +if test "$enable_nls" = yes -a "$pgac_need_repl_snprintf" = no; then + PGAC_FUNC_SNPRINTF_ARG_CONTROL + if test $pgac_cv_snprintf_arg_control != yes ; then + pgac_need_repl_snprintf=yes + fi +fi + + +dnl Check to see if we have a working 64-bit integer type. +dnl This breaks down into two steps: +dnl (1) figure out if the compiler has a 64-bit int type with working +dnl arithmetic, and if so +dnl (2) see whether snprintf() can format the type correctly. (Currently, +dnl snprintf is the only library routine we really need for int8 support.) +dnl It's entirely possible to have a compiler that handles a 64-bit type +dnl when the C library doesn't; this is fairly likely when using gcc on +dnl an older platform, for example. +dnl If there is no native snprintf() or it does not handle the 64-bit type, +dnl we force our own version of snprintf() to be used instead. +dnl Note this test must be run after our initial check for snprintf/vsnprintf. + +dnl As of Postgres 8.4, we no longer support compilers without a working +dnl 64-bit type. But we still handle the case of snprintf being broken. + +PGAC_TYPE_64BIT_INT([long int]) + +if test x"$HAVE_LONG_INT_64" = x"yes" ; then + pg_int64_type="long int" +else + PGAC_TYPE_64BIT_INT([long long int]) + if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then + pg_int64_type="long long int" + else + AC_MSG_ERROR([Cannot find a working 64-bit integer type.]) + fi +fi + +AC_DEFINE_UNQUOTED(PG_INT64_TYPE, $pg_int64_type, + [Define to the name of a signed 64-bit integer type.]) + +dnl If we need to use "long long int", figure out whether nnnLL notation works. + +if test x"$HAVE_LONG_LONG_INT_64" = xyes ; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#define INT64CONST(x) x##LL +long long int foo = INT64CONST(0x1234567890123456); +]], [[]])],[AC_DEFINE(HAVE_LL_CONSTANTS, 1, [Define to 1 if constants of type 'long long int' should have the suffix LL.])],[]) +fi + + +# If we found "long int" is 64 bits, assume snprintf handles it. If +# we found we need to use "long long int", better check. We cope with +# snprintfs that use %lld, %qd, or %I64d as the format. If none of these +# work, fall back to our own snprintf emulation (which we know uses %lld). + +if test "$HAVE_LONG_LONG_INT_64" = yes ; then + if test $pgac_need_repl_snprintf = no; then + PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER + if test "$LONG_LONG_INT_MODIFIER" = ""; then + # Force usage of our own snprintf, since system snprintf is broken + pgac_need_repl_snprintf=yes + LONG_LONG_INT_MODIFIER='ll' + fi + else + # Here if we previously decided we needed to use our own snprintf + LONG_LONG_INT_MODIFIER='ll' + fi +else + # Here if we are not using 'long long int' at all + LONG_LONG_INT_MODIFIER='l' +fi + +INT64_MODIFIER="\"$LONG_LONG_INT_MODIFIER\"" + +AC_DEFINE_UNQUOTED(INT64_MODIFIER, $INT64_MODIFIER, + [Define to the appropriate snprintf length modifier for 64-bit ints.]) + +# Also force use of our snprintf if the system's doesn't support the %z flag. +if test "$pgac_need_repl_snprintf" = no; then + PGAC_FUNC_SNPRINTF_SIZE_T_SUPPORT + if test "$pgac_cv_snprintf_size_t_support" != yes; then + pgac_need_repl_snprintf=yes + fi +fi + +# Now we have checked all the reasons to replace snprintf +if test $pgac_need_repl_snprintf = yes; then + AC_DEFINE(USE_REPL_SNPRINTF, 1, [Use replacement snprintf() functions.]) + AC_LIBOBJ(snprintf) +fi + +# Check size of void *, size_t (enables tweaks for > 32bit address space) +AC_CHECK_SIZEOF([void *]) +AC_CHECK_SIZEOF([size_t]) +AC_CHECK_SIZEOF([long]) + +# Decide whether float4 is passed by value: user-selectable, enabled by default +AC_MSG_CHECKING([whether to build with float4 passed by value]) +PGAC_ARG_BOOL(enable, float4-byval, yes, [disable float4 passed by value], + [AC_DEFINE([USE_FLOAT4_BYVAL], 1, + [Define to 1 if you want float4 values to be passed by value. (--enable-float4-byval)]) + float4passbyval=true], + [float4passbyval=false]) +AC_MSG_RESULT([$enable_float4_byval]) +AC_DEFINE_UNQUOTED([FLOAT4PASSBYVAL], [$float4passbyval], [float4 values are passed by value if 'true', by reference if 'false']) + +# Decide whether float8 is passed by value. +# Note: this setting also controls int8 and related types such as timestamp. +# If sizeof(Datum) >= 8, this is user-selectable, enabled by default. +# If not, trying to select it is an error. +AC_MSG_CHECKING([whether to build with float8 passed by value]) +if test $ac_cv_sizeof_void_p -ge 8 ; then + PGAC_ARG_BOOL(enable, float8-byval, yes, [disable float8 passed by value]) +else + PGAC_ARG_BOOL(enable, float8-byval, no, [disable float8 passed by value]) + if test "$enable_float8_byval" = yes ; then + AC_MSG_ERROR([--enable-float8-byval is not supported on 32-bit platforms.]) + fi +fi +if test "$enable_float8_byval" = yes ; then + AC_DEFINE([USE_FLOAT8_BYVAL], 1, + [Define to 1 if you want float8, int8, etc values to be passed by value. (--enable-float8-byval)]) + float8passbyval=true +else + float8passbyval=false +fi +AC_MSG_RESULT([$enable_float8_byval]) +AC_DEFINE_UNQUOTED([FLOAT8PASSBYVAL], [$float8passbyval], [float8, int8, and related values are passed by value if 'true', by reference if 'false']) + +# Determine memory alignment requirements for the basic C data types. + +AC_CHECK_ALIGNOF(short) +AC_CHECK_ALIGNOF(int) +AC_CHECK_ALIGNOF(long) +if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then + AC_CHECK_ALIGNOF(long long int) +fi +AC_CHECK_ALIGNOF(double) + +# Compute maximum alignment of any basic type. +# We assume long's alignment is at least as strong as char, short, or int; +# but we must check long long (if it exists) and double. + +MAX_ALIGNOF=$ac_cv_alignof_long +if test $MAX_ALIGNOF -lt $ac_cv_alignof_double ; then + MAX_ALIGNOF=$ac_cv_alignof_double +fi +if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ; then + MAX_ALIGNOF="$ac_cv_alignof_long_long_int" +fi +AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.]) + + +# Some platforms predefine the types int8, int16, etc. Only check +# a (hopefully) representative subset. +AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [], +[#include <stdio.h>]) + +# We also check for sig_atomic_t, which *should* be defined per ANSI +# C, but is missing on some old platforms. +AC_CHECK_TYPES(sig_atomic_t, [], [], [#include <signal.h>]) + +# Check for various atomic operations now that we have checked how to declare +# 64bit integers. +PGAC_HAVE_GCC__SYNC_CHAR_TAS +PGAC_HAVE_GCC__SYNC_INT32_TAS +PGAC_HAVE_GCC__SYNC_INT32_CAS +PGAC_HAVE_GCC__SYNC_INT64_CAS +PGAC_HAVE_GCC__ATOMIC_INT32_CAS +PGAC_HAVE_GCC__ATOMIC_INT64_CAS + +if test "$PORTNAME" != "win32" +then +PGAC_FUNC_POSIX_SIGNALS +if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; then + AC_MSG_ERROR([ +Thread-safety requires POSIX signals, which are not supported by this +operating system; use --disable-thread-safety to disable thread safety.]) +fi +fi + + +# Select semaphore implementation type. +if test "$PORTNAME" != "win32"; then + if test x"$USE_NAMED_POSIX_SEMAPHORES" = x"1" ; then + AC_DEFINE(USE_NAMED_POSIX_SEMAPHORES, 1, [Define to select named POSIX semaphores.]) + SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c" + else + if test x"$USE_UNNAMED_POSIX_SEMAPHORES" = x"1" ; then + AC_DEFINE(USE_UNNAMED_POSIX_SEMAPHORES, 1, [Define to select unnamed POSIX semaphores.]) + SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c" + else + AC_DEFINE(USE_SYSV_SEMAPHORES, 1, [Define to select SysV-style semaphores.]) + SEMA_IMPLEMENTATION="src/backend/port/sysv_sema.c" + fi + fi +else + AC_DEFINE(USE_WIN32_SEMAPHORES, 1, [Define to select Win32-style semaphores.]) + SEMA_IMPLEMENTATION="src/backend/port/win32_sema.c" +fi + + +# Select shared-memory implementation type. +if test "$PORTNAME" != "win32"; then + AC_DEFINE(USE_SYSV_SHARED_MEMORY, 1, [Define to select SysV-style shared memory.]) + SHMEM_IMPLEMENTATION="src/backend/port/sysv_shmem.c" +else + AC_DEFINE(USE_WIN32_SHARED_MEMORY, 1, [Define to select Win32-style shared memory.]) + SHMEM_IMPLEMENTATION="src/backend/port/win32_shmem.c" +fi + +# Select latch implementation type. +if test "$PORTNAME" != "win32"; then + LATCH_IMPLEMENTATION="src/backend/port/unix_latch.c" +else + LATCH_IMPLEMENTATION="src/backend/port/win32_latch.c" +fi + +# If not set in template file, set bytes to use libc memset() +if test x"$MEMSET_LOOP_LIMIT" = x"" ; then + MEMSET_LOOP_LIMIT=1024 +fi +AC_DEFINE_UNQUOTED(MEMSET_LOOP_LIMIT, ${MEMSET_LOOP_LIMIT}, [Define bytes to use libc memset().]) + + +if test "$enable_nls" = yes ; then + PGAC_CHECK_GETTEXT +fi + +# Check for Tcl configuration script tclConfig.sh +if test "$with_tcl" = yes; then + PGAC_PATH_TCLCONFIGSH([$with_tclconfig]) + PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH], + [TCL_INCLUDE_SPEC,TCL_LIB_FILE,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD]) + AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one + # now that we have TCL_INCLUDE_SPEC, we can check for <tcl.h> + ac_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" + AC_CHECK_HEADER(tcl.h, [], [AC_MSG_ERROR([header file <tcl.h> is required for Tcl])]) + CPPFLAGS=$ac_save_CPPFLAGS +fi + +# check for <perl.h> +if test "$with_perl" = yes; then + ac_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE" + AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file <perl.h> is required for Perl])], + [#include <EXTERN.h>]) + # While we're at it, check that we can link to libperl. + # On most platforms, if perl.h is there then libperl.so will be too, but at + # this writing Debian packages them separately. There is no known reason to + # waste cycles on separate probes for the Tcl or Python libraries, though. + pgac_save_LIBS=$LIBS + LIBS="$perl_embed_ldflags" + AC_MSG_CHECKING([for libperl]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include <EXTERN.h> +#include <perl.h> +]], [[perl_alloc();]])],[AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no) + AC_MSG_ERROR([libperl library is required for Perl])]) + LIBS=$pgac_save_LIBS + CPPFLAGS=$ac_save_CPPFLAGS +fi + +# check for <Python.h> +if test "$with_python" = yes; then + ac_save_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$python_includespec $CPPFLAGS" + AC_CHECK_HEADER(Python.h, [], [AC_MSG_ERROR([header file <Python.h> is required for Python])]) + CPPFLAGS=$ac_save_CPPFLAGS +fi + +# +# Check for DocBook and tools +# +PGAC_PROG_NSGMLS +PGAC_PROG_JADE +PGAC_CHECK_DOCBOOK(4.2) +PGAC_PATH_DOCBOOK_STYLESHEETS +PGAC_PATH_COLLATEINDEX +AC_CHECK_PROGS(DBTOEPUB, dbtoepub) +AC_CHECK_PROGS(XMLLINT, xmllint) +AC_CHECK_PROGS(XSLTPROC, xsltproc) +AC_CHECK_PROGS(OSX, [osx sgml2xml sx]) + +# +# Check for test tools +# +if test "$enable_tap_tests" = yes; then + AC_CHECK_PROGS(PROVE, prove) + if test -z "$PROVE"; then + AC_MSG_ERROR([prove not found]) + fi + if test -z "$PERL"; then + AC_MSG_ERROR([Perl not found]) + fi +fi + +# Thread testing + +# We have to run the thread test near the end so we have all our symbols +# defined. Cross compiling throws a warning. +# +if test "$enable_thread_safety" = yes; then +if test "$PORTNAME" != "win32" +then +AC_MSG_CHECKING([thread safety of required library functions]) + +_CFLAGS="$CFLAGS" +_LIBS="$LIBS" +CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE" +LIBS="$LIBS $PTHREAD_LIBS" +AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "$srcdir/src/test/thread/thread_test.c"]])],[AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no) + AC_MSG_ERROR([thread test program failed +This platform is not thread-safe. Check the file 'config.log' or compile +and run src/test/thread/thread_test for the exact reason. +Use --disable-thread-safety to disable thread safety.])],[AC_MSG_RESULT(maybe) + AC_MSG_WARN([ +*** Skipping thread test program because of cross-compile build. +*** Run the program in src/test/thread on the target machine. +])]) +CFLAGS="$_CFLAGS" +LIBS="$_LIBS" +else +AC_MSG_WARN([*** skipping thread test on Win32]) +fi +fi + +# If compiler will take -Wl,--as-needed (or various platform-specific +# spellings thereof) then add that to LDFLAGS. This is much easier than +# trying to filter LIBS to the minimum for each executable. +# On (at least) some Red-Hat-derived systems, this switch breaks linking to +# libreadline; therefore we postpone testing it until we know what library +# dependencies readline has. The test code will try to link with $LIBS. +if test "$with_readline" = yes; then + link_test_func=readline +else + link_test_func=exit +fi + +if test "$PORTNAME" = "darwin"; then + PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-dead_strip_dylibs], $link_test_func) +elif test "$PORTNAME" = "openbsd"; then + PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-Bdynamic], $link_test_func) +else + PGAC_PROG_CC_LDFLAGS_OPT([-Wl,--as-needed], $link_test_func) +fi + +# Create compiler version string +if test x"$GCC" = x"yes" ; then + cc_string=`${CC} --version | sed q` + case $cc_string in [[A-Za-z]]*) ;; *) cc_string="GCC $cc_string";; esac +elif test x"$SUN_STUDIO_CC" = x"yes" ; then + cc_string=`${CC} -V 2>&1 | sed q` +else + cc_string=$CC +fi + +AC_DEFINE_UNQUOTED(PG_VERSION_STR, + ["PostgreSQL $PG_VERSION on $host, compiled by $cc_string, `expr $ac_cv_sizeof_void_p \* 8`-bit"], + [A string containing the version number, platform, and C compiler]) + +# Supply a numeric version string for use by 3rd party add-ons +# awk -F is a regex on some platforms, and not on others, so make "." a tab +[PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | +tr '.' ' ' | +$AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"] +AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) + + +# Begin output steps + +AC_MSG_NOTICE([using compiler=$cc_string]) +AC_MSG_NOTICE([using CFLAGS=$CFLAGS]) +AC_MSG_NOTICE([using CPPFLAGS=$CPPFLAGS]) +AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS]) + +# prepare build tree if outside source tree +# Note 1: test -ef might not exist, but it's more reliable than `pwd`. +# Note 2: /bin/pwd might be better than shell's built-in at getting +# a symlink-free name. +if ( test "$srcdir" -ef . ) >/dev/null 2>&1 || test "`cd $srcdir && /bin/pwd`" = "`/bin/pwd`"; then + vpath_build=no +else + vpath_build=yes + if test "$no_create" != yes; then + _AS_ECHO_N([preparing build tree... ]) + pgac_abs_top_srcdir=`cd "$srcdir" && pwd` + $SHELL "$ac_aux_dir/prep_buildtree" "$pgac_abs_top_srcdir" "." \ + || AC_MSG_ERROR(failed) + AC_MSG_RESULT(done) + fi +fi +AC_SUBST(vpath_build) + + +AC_CONFIG_FILES([GNUmakefile src/Makefile.global]) + +AC_CONFIG_LINKS([ + src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c + src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} + src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} + src/backend/port/pg_latch.c:${LATCH_IMPLEMENTATION} + src/include/dynloader.h:src/backend/port/dynloader/${template}.h + src/include/pg_config_os.h:src/include/port/${template}.h + src/Makefile.port:src/makefiles/Makefile.${template} +]) + +if test "$PORTNAME" = "win32"; then +AC_CONFIG_COMMANDS([check_win32_symlinks],[ +# Links sometimes fail undetected on Mingw - +# so here we detect it and warn the user +for FILE in $CONFIG_LINKS + do + # test -e works for symlinks in the MinGW console + test -e `expr "$FILE" : '\([[^:]]*\)'` || AC_MSG_WARN([*** link for $FILE -- please fix by hand]) + done +]) +fi + +AC_CONFIG_HEADERS([src/include/pg_config.h], +[ +# Update timestamp for pg_config.h (see Makefile.global) +echo >src/include/stamp-h +]) + +AC_CONFIG_HEADERS([src/include/pg_config_ext.h], +[ +# Update timestamp for pg_config_ext.h (see Makefile.global) +echo >src/include/stamp-ext-h +]) + +AC_CONFIG_HEADERS([src/interfaces/ecpg/include/ecpg_config.h], + [echo >src/interfaces/ecpg/include/stamp-h]) + +AC_OUTPUT diff --git a/configure.in b/configure.in deleted file mode 100644 index 2465f26..0000000 --- a/configure.in +++ /dev/null @@ -1,2036 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -dnl configure.in -dnl -dnl Developers, please strive to achieve this order: -dnl -dnl 0. Initialization and options processing -dnl 1. Programs -dnl 2. Libraries -dnl 3. Header files -dnl 4. Types -dnl 5. Structures -dnl 6. Compiler characteristics -dnl 7. Functions, global variables -dnl 8. System services -dnl -dnl Read the Autoconf manual for details. -dnl -m4_pattern_forbid(^PGAC_)dnl to catch undefined macros - -AC_INIT([PostgreSQL], [9.5devel], [pgsql-b...@postgresql.org]) - -m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. -Untested combinations of 'autoconf' and PostgreSQL versions are not -recommended. You can remove the check from 'configure.in' but it is then -your responsibility whether the result works or not.])]) -AC_COPYRIGHT([Copyright (c) 1996-2014, PostgreSQL Global Development Group]) -AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c]) -AC_CONFIG_AUX_DIR(config) -AC_PREFIX_DEFAULT(/usr/local/pgsql) -AC_SUBST(configure_args, [$ac_configure_args]) - -[PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`] -AC_SUBST(PG_MAJORVERSION) -AC_DEFINE_UNQUOTED(PG_MAJORVERSION, "$PG_MAJORVERSION", [PostgreSQL major version as a string]) - -PGAC_ARG_REQ(with, extra-version, [STRING], [append STRING to version], - [PG_VERSION="$PACKAGE_VERSION$withval"], - [PG_VERSION="$PACKAGE_VERSION"]) -AC_DEFINE_UNQUOTED(PG_VERSION, "$PG_VERSION", [PostgreSQL version as a string]) - -AC_CANONICAL_HOST - -template= -AC_MSG_CHECKING([which template to use]) - -PGAC_ARG_REQ(with, template, [NAME], [override operating system template], -[ - case $withval in - list) echo; ls "$srcdir/src/template"; exit;; - *) if test -f "$srcdir/src/template/$with_template" ; then - template=$withval - else - AC_MSG_ERROR(['$withval' is not a valid template name. Use 'list' for a list.]) - fi;; - esac -], -[ -# --with-template not given - -case $host_os in - aix*) template=aix ;; - cygwin*) template=cygwin ;; - darwin*) template=darwin ;; -dragonfly*) template=netbsd ;; - freebsd*) template=freebsd ;; - hpux*) template=hpux ;; - linux*|gnu*|k*bsd*-gnu) - template=linux ;; - mingw*) template=win32 ;; - netbsd*) template=netbsd ;; - openbsd*) template=openbsd ;; - sco*) template=sco ;; - solaris*) template=solaris ;; - sysv5*) template=unixware ;; -esac - - if test x"$template" = x"" ; then - AC_MSG_ERROR([[ -******************************************************************* -PostgreSQL has apparently not been ported to your platform yet. -To try a manual configuration, look into the src/template directory -for a similar platform and use the '--with-template=' option. - -Please also contact <pgsql-b...@postgresql.org> to see about -rectifying this. Include the above 'checking host system type...' -line. -******************************************************************* -]]) - fi - -]) - -AC_MSG_RESULT([$template]) - -PORTNAME=$template -AC_SUBST(PORTNAME) - -# Initialize default assumption that we do not need separate assembly code -# for TAS (test-and-set). This can be overridden by the template file -# when it's executed. -need_tas=no -tas_file=dummy.s - - - -## -## Command line options -## - -# -# Add non-standard directories to the include path -# -PGAC_ARG_REQ(with, includes, [DIRS], [look for additional header files in DIRS]) - - -# -# Add non-standard directories to the library search path -# -PGAC_ARG_REQ(with, libraries, [DIRS], [look for additional libraries in DIRS], - [LIBRARY_DIRS=$withval]) - -PGAC_ARG_REQ(with, libs, [DIRS], [alternative spelling of --with-libraries], - [LIBRARY_DIRS=$withval]) - - -# -# 64-bit integer date/time storage: enabled by default. -# -AC_MSG_CHECKING([whether to build with 64-bit integer date/time support]) -PGAC_ARG_BOOL(enable, integer-datetimes, yes, [disable 64-bit integer date/time support], - [AC_DEFINE([USE_INTEGER_DATETIMES], 1, - [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])]) -AC_MSG_RESULT([$enable_integer_datetimes]) - - -# -# NLS -# -AC_MSG_CHECKING([whether NLS is wanted]) -PGAC_ARG_OPTARG(enable, nls, - [LANGUAGES], [enable Native Language Support], - [], - [WANTED_LANGUAGES=$enableval], - [AC_DEFINE(ENABLE_NLS, 1, - [Define to 1 if you want National Language Support. (--enable-nls)])]) -AC_MSG_RESULT([$enable_nls]) -AC_SUBST(enable_nls) -AC_SUBST(WANTED_LANGUAGES) - -# -# Default port number (--with-pgport), default 5432 -# -AC_MSG_CHECKING([for default port number]) -PGAC_ARG_REQ(with, pgport, [PORTNUM], [set default port number [5432]], - [default_port=$withval], - [default_port=5432]) -AC_MSG_RESULT([$default_port]) -# Need both of these because some places want an integer and some a string -AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port}, -[Define to the default TCP port number on which the server listens and -to which clients will try to connect. This can be overridden at run-time, -but it's convenient if your clients have the right default compiled in. -(--with-pgport=PORTNUM)]) -AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}", - [Define to the default TCP port number as a string constant.]) -AC_SUBST(default_port) - -# -# '-rpath'-like feature can be disabled -# -PGAC_ARG_BOOL(enable, rpath, yes, - [do not embed shared library search path in executables]) -AC_SUBST(enable_rpath) - -# -# Spinlocks -# -PGAC_ARG_BOOL(enable, spinlocks, yes, - [do not use spinlocks]) - -# -# Atomic operations -# -PGAC_ARG_BOOL(enable, atomics, yes, - [do not use atomic operations]) - -# -# --enable-debug adds -g to compiler flags -# -PGAC_ARG_BOOL(enable, debug, no, - [build with debugging symbols (-g)]) -AC_SUBST(enable_debug) - -# -# --enable-profiling enables gcc profiling -# -PGAC_ARG_BOOL(enable, profiling, no, - [build with profiling enabled ]) - -# -# --enable-coverage enables generation of code coverage metrics with gcov -# -PGAC_ARG_BOOL(enable, coverage, no, - [build with coverage testing instrumentation], -[AC_CHECK_PROGS(GCOV, gcov) -if test -z "$GCOV"; then - AC_MSG_ERROR([gcov not found]) -fi -AC_CHECK_PROGS(LCOV, lcov) -if test -z "$LCOV"; then - AC_MSG_ERROR([lcov not found]) -fi -AC_CHECK_PROGS(GENHTML, genhtml) -if test -z "$GENHTML"; then - AC_MSG_ERROR([genhtml not found]) -fi]) -AC_SUBST(enable_coverage) - -# -# DTrace -# -PGAC_ARG_BOOL(enable, dtrace, no, - [build with DTrace support], -[AC_CHECK_PROGS(DTRACE, dtrace) -if test -z "$DTRACE"; then - AC_MSG_ERROR([dtrace not found]) -fi -AC_SUBST(DTRACEFLAGS)]) -AC_SUBST(enable_dtrace) - -# -# TAP tests -# -PGAC_ARG_BOOL(enable, tap-tests, no, - [enable TAP tests (requires Perl and IPC::Run)]) -AC_SUBST(enable_tap_tests) - -# -# Block size -# -AC_MSG_CHECKING([for block size]) -PGAC_ARG_REQ(with, blocksize, [BLOCKSIZE], [set table block size in kB [8]], - [blocksize=$withval], - [blocksize=8]) -case ${blocksize} in - 1) BLCKSZ=1024;; - 2) BLCKSZ=2048;; - 4) BLCKSZ=4096;; - 8) BLCKSZ=8192;; - 16) BLCKSZ=16384;; - 32) BLCKSZ=32768;; - *) AC_MSG_ERROR([Invalid block size. Allowed values are 1,2,4,8,16,32.]) -esac -AC_MSG_RESULT([${blocksize}kB]) - -AC_DEFINE_UNQUOTED([BLCKSZ], ${BLCKSZ}, [ - Size of a disk block --- this also limits the size of a tuple. You - can set it bigger if you need bigger tuples (although TOAST should - reduce the need to have large tuples, since fields can be spread - across multiple tuples). - - BLCKSZ must be a power of 2. The maximum possible value of BLCKSZ - is currently 2^15 (32768). This is determined by the 15-bit widths - of the lp_off and lp_len fields in ItemIdData (see - include/storage/itemid.h). - - Changing BLCKSZ requires an initdb. -]) - -# -# Relation segment size -# -AC_MSG_CHECKING([for segment size]) -PGAC_ARG_REQ(with, segsize, [SEGSIZE], [set table segment size in GB [1]], - [segsize=$withval], - [segsize=1]) -# this expression is set up to avoid unnecessary integer overflow -# blocksize is already guaranteed to be a factor of 1024 -RELSEG_SIZE=`expr '(' 1024 / ${blocksize} ')' '*' ${segsize} '*' 1024` -test $? -eq 0 || exit 1 -AC_MSG_RESULT([${segsize}GB]) - -AC_DEFINE_UNQUOTED([RELSEG_SIZE], ${RELSEG_SIZE}, [ - RELSEG_SIZE is the maximum number of blocks allowed in one disk file. - Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ; - relations bigger than that are divided into multiple files. - - RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size. - This is often 2 GB or 4GB in a 32-bit operating system, unless you - have large file support enabled. By default, we make the limit 1 GB - to avoid any possible integer-overflow problems within the OS. - A limit smaller than necessary only means we divide a large - relation into more chunks than necessary, so it seems best to err - in the direction of a small limit. - - A power-of-2 value is recommended to save a few cycles in md.c, - but is not absolutely required. - - Changing RELSEG_SIZE requires an initdb. -]) - -# -# WAL block size -# -AC_MSG_CHECKING([for WAL block size]) -PGAC_ARG_REQ(with, wal-blocksize, [BLOCKSIZE], [set WAL block size in kB [8]], - [wal_blocksize=$withval], - [wal_blocksize=8]) -case ${wal_blocksize} in - 1) XLOG_BLCKSZ=1024;; - 2) XLOG_BLCKSZ=2048;; - 4) XLOG_BLCKSZ=4096;; - 8) XLOG_BLCKSZ=8192;; - 16) XLOG_BLCKSZ=16384;; - 32) XLOG_BLCKSZ=32768;; - 64) XLOG_BLCKSZ=65536;; - *) AC_MSG_ERROR([Invalid WAL block size. Allowed values are 1,2,4,8,16,32,64.]) -esac -AC_MSG_RESULT([${wal_blocksize}kB]) - -AC_DEFINE_UNQUOTED([XLOG_BLCKSZ], ${XLOG_BLCKSZ}, [ - Size of a WAL file block. This need have no particular relation to BLCKSZ. - XLOG_BLCKSZ must be a power of 2, and if your system supports O_DIRECT I/O, - XLOG_BLCKSZ must be a multiple of the alignment requirement for direct-I/O - buffers, else direct I/O may fail. - - Changing XLOG_BLCKSZ requires an initdb. -]) - -# -# WAL segment size -# -AC_MSG_CHECKING([for WAL segment size]) -PGAC_ARG_REQ(with, wal-segsize, [SEGSIZE], [set WAL segment size in MB [16]], - [wal_segsize=$withval], - [wal_segsize=16]) -case ${wal_segsize} in - 1) ;; - 2) ;; - 4) ;; - 8) ;; - 16) ;; - 32) ;; - 64) ;; - *) AC_MSG_ERROR([Invalid WAL segment size. Allowed values are 1,2,4,8,16,32,64.]) -esac -AC_MSG_RESULT([${wal_segsize}MB]) - -AC_DEFINE_UNQUOTED([XLOG_SEG_SIZE], [(${wal_segsize} * 1024 * 1024)], [ - XLOG_SEG_SIZE is the size of a single WAL file. This must be a power of 2 - and larger than XLOG_BLCKSZ (preferably, a great deal larger than - XLOG_BLCKSZ). - - Changing XLOG_SEG_SIZE requires an initdb. -]) - -# -# C compiler -# - -# For historical reasons you can also use --with-CC to specify the C compiler -# to use, although the standard way to do this is to set the CC environment -# variable. -PGAC_ARG_REQ(with, CC, [CMD], [set compiler (deprecated)], [CC=$with_CC]) - -case $template in - aix) pgac_cc_list="gcc xlc";; - *) pgac_cc_list="gcc cc";; -esac - -AC_PROG_CC([$pgac_cc_list]) - -# Check if it's Intel's compiler, which (usually) pretends to be gcc, -# but has idiosyncrasies of its own. We assume icc will define -# __INTEL_COMPILER regardless of CFLAGS. -AC_TRY_COMPILE([], [@%:@ifndef __INTEL_COMPILER -choke me -@%:@endif], [ICC=[yes]], [ICC=[no]]) - -# Check if it's Sun Studio compiler. We assume that -# __SUNPRO_C will be defined for Sun Studio compilers -AC_TRY_COMPILE([], [@%:@ifndef __SUNPRO_C -choke me -@%:@endif], [SUN_STUDIO_CC=yes], [SUN_STUDIO_CC=no]) - -AC_SUBST(SUN_STUDIO_CC) - -unset CFLAGS - -# -# Read the template -# -. "$srcdir/src/template/$template" || exit - -# CFLAGS are selected so: -# If the user specifies something in the environment, that is used. -# else: If the template file set something, that is used. -# else: If coverage was enabled, don't set anything. -# else: If the compiler is GCC, then we use -O2. -# else: If the compiler is something else, then we use -O, unless debugging. - -if test "$ac_env_CFLAGS_set" = set; then - CFLAGS=$ac_env_CFLAGS_value -elif test "${CFLAGS+set}" = set; then - : # (keep what template set) -elif test "$enable_coverage" = yes; then - : # no optimization by default -elif test "$GCC" = yes; then - CFLAGS="-O2" -else - # if the user selected debug mode, don't use -O - if test "$enable_debug" != yes; then - CFLAGS="-O" - fi -fi - -# set CFLAGS_VECTOR from the environment, if available -if test "$ac_env_CFLAGS_VECTOR_set" = set; then - CFLAGS_VECTOR=$ac_env_CFLAGS_VECTOR_value -fi - -# Some versions of GCC support some additional useful warning flags. -# Check whether they are supported, and add them to CFLAGS if so. -# ICC pretends to be GCC but it's lying; it doesn't support these flags, -# but has its own. Also check other compiler-specific flags here. - -if test "$GCC" = yes -a "$ICC" = no; then - CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wpointer-arith" - # These work in some but not all gcc versions - PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement]) - PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels]) - PGAC_PROG_CC_CFLAGS_OPT([-Wmissing-format-attribute]) - # This was included in -Wall/-Wformat in older GCC versions - PGAC_PROG_CC_CFLAGS_OPT([-Wformat-security]) - # Disable strict-aliasing rules; needed for gcc 3.3+ - PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) - # Disable optimizations that assume no overflow; needed for gcc 4.3+ - PGAC_PROG_CC_CFLAGS_OPT([-fwrapv]) - # Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+ - PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard]) - # Optimization flags for specific files that benefit from vectorization - PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-funroll-loops]) - PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-ftree-vectorize]) -elif test "$ICC" = yes; then - # Intel's compiler has a bug/misoptimization in checking for - # division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS. - PGAC_PROG_CC_CFLAGS_OPT([-mp1]) - # Make sure strict aliasing is off (though this is said to be the default) - PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) -elif test "$PORTNAME" = "aix"; then - # AIX's xlc has to have strict aliasing turned off too - PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias]) -elif test "$PORTNAME" = "hpux"; then - # On some versions of HP-UX, libm functions do not set errno by default. - # Fix that by using +Olibmerrno if the compiler recognizes it. - PGAC_PROG_CC_CFLAGS_OPT([+Olibmerrno]) -fi - -AC_SUBST(CFLAGS_VECTOR, $CFLAGS_VECTOR) - -# supply -g if --enable-debug -if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then - CFLAGS="$CFLAGS -g" -fi - -# enable code coverage if --enable-coverage -if test "$enable_coverage" = yes; then - if test "$GCC" = yes; then - CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" - else - AC_MSG_ERROR([--enable-coverage is supported only when using GCC]) - fi -fi - -# enable profiling if --enable-profiling -if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then - if test "$GCC" = yes; then - AC_DEFINE([PROFILE_PID_DIR], 1, - [Define to 1 to allow profiling output to be saved separately for each process.]) - CFLAGS="$CFLAGS -pg $PLATFORM_PROFILE_FLAGS" - else - AC_MSG_ERROR([--enable-profiling is supported only when using GCC]) - fi -fi - -# We already have this in Makefile.win32, but configure needs it too -if test "$PORTNAME" = "win32"; then - CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND" -fi - -# Check if the compiler still works with the template settings -AC_MSG_CHECKING([whether the C compiler still works]) -AC_TRY_LINK([], [return 0;], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_MSG_ERROR([cannot proceed])]) - -# Defend against gcc -ffast-math -if test "$GCC" = yes; then -AC_TRY_COMPILE([], [@%:@ifdef __FAST_MATH__ -choke me -@%:@endif], [], [AC_MSG_ERROR([do not put -ffast-math in CFLAGS])]) -fi - -AC_PROG_CPP -AC_SUBST(GCC) - - -# -# Set up TAS assembly code if needed; the template file has now had its -# chance to request this. -# -AC_CONFIG_LINKS([src/backend/port/tas.s:src/backend/port/tas/${tas_file}]) - -if test "$need_tas" = yes ; then - TAS=tas.o -else - TAS="" -fi -AC_SUBST(TAS) - - -# -# Automatic dependency tracking -# -PGAC_ARG_BOOL(enable, depend, no, [turn on automatic dependency tracking], - [autodepend=yes]) -AC_SUBST(autodepend) - - -# -# Enable assert checks -# -PGAC_ARG_BOOL(enable, cassert, no, [enable assertion checks (for debugging)], - [AC_DEFINE([USE_ASSERT_CHECKING], 1, - [Define to 1 to build with assertion checks. (--enable-cassert)])]) - - -# -# Include directories -# -ac_save_IFS=$IFS -IFS="${IFS}${PATH_SEPARATOR}" -# SRCH_INC comes from the template file -for dir in $with_includes $SRCH_INC; do - if test -d "$dir"; then - INCLUDES="$INCLUDES -I$dir" - else - AC_MSG_WARN([*** Include directory $dir does not exist.]) - fi -done -IFS=$ac_save_IFS -AC_SUBST(INCLUDES) - - -# -# Library directories -# -ac_save_IFS=$IFS -IFS="${IFS}${PATH_SEPARATOR}" -# LIBRARY_DIRS comes from command line, SRCH_LIB from template file. -for dir in $LIBRARY_DIRS $SRCH_LIB; do - if test -d "$dir"; then - LIBDIRS="$LIBDIRS -L$dir" - else - AC_MSG_WARN([*** Library directory $dir does not exist.]) - fi -done -IFS=$ac_save_IFS - -# -# Enable thread-safe client libraries -# -AC_MSG_CHECKING([allow thread-safe client libraries]) -PGAC_ARG_BOOL(enable, thread-safety, yes, [disable thread-safety in client libraries]) -if test "$enable_thread_safety" = yes; then - AC_DEFINE([ENABLE_THREAD_SAFETY], 1, - [Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety)]) -fi -AC_MSG_RESULT([$enable_thread_safety]) -AC_SUBST(enable_thread_safety) - -# -# Optionally build Tcl modules (PL/Tcl) -# -AC_MSG_CHECKING([whether to build with Tcl]) -PGAC_ARG_BOOL(with, tcl, no, [build Tcl modules (PL/Tcl)]) -AC_MSG_RESULT([$with_tcl]) -AC_SUBST([with_tcl]) - -# We see if the path to the Tcl/Tk configuration scripts is specified. -# This will override the use of tclsh to find the paths to search. - -PGAC_ARG_REQ(with, tclconfig, [DIR], [tclConfig.sh is in DIR]) - -# -# Optionally build Perl modules (PL/Perl) -# -AC_MSG_CHECKING([whether to build Perl modules]) -PGAC_ARG_BOOL(with, perl, no, [build Perl modules (PL/Perl)]) -AC_MSG_RESULT([$with_perl]) -AC_SUBST(with_perl) - -# -# Optionally build Python modules (PL/Python) -# -AC_MSG_CHECKING([whether to build Python modules]) -PGAC_ARG_BOOL(with, python, no, [build Python modules (PL/Python)]) -AC_MSG_RESULT([$with_python]) -AC_SUBST(with_python) - -# -# GSSAPI -# -AC_MSG_CHECKING([whether to build with GSSAPI support]) -PGAC_ARG_BOOL(with, gssapi, no, [build with GSSAPI support], -[ - AC_DEFINE(ENABLE_GSS, 1, [Define to build with GSSAPI support. (--with-gssapi)]) - krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab" -]) -AC_MSG_RESULT([$with_gssapi]) - - -AC_SUBST(krb_srvtab) - - -# -# Kerberos configuration parameters -# -PGAC_ARG_REQ(with, krb-srvnam, - [NAME], [default service principal name in Kerberos (GSSAPI) [postgres]], - [], - [with_krb_srvnam="postgres"]) -AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"], - [Define to the name of the default PostgreSQL service principal in Kerberos (GSSAPI). (--with-krb-srvnam=NAME)]) - - -# -# PAM -# -AC_MSG_CHECKING([whether to build with PAM support]) -PGAC_ARG_BOOL(with, pam, no, - [build with PAM support], - [AC_DEFINE([USE_PAM], 1, [Define to 1 to build with PAM support. (--with-pam)])]) -AC_MSG_RESULT([$with_pam]) - - -# -# LDAP -# -AC_MSG_CHECKING([whether to build with LDAP support]) -PGAC_ARG_BOOL(with, ldap, no, - [build with LDAP support], - [AC_DEFINE([USE_LDAP], 1, [Define to 1 to build with LDAP support. (--with-ldap)])]) -AC_MSG_RESULT([$with_ldap]) - - -# -# Bonjour -# -AC_MSG_CHECKING([whether to build with Bonjour support]) -PGAC_ARG_BOOL(with, bonjour, no, - [build with Bonjour support], - [AC_DEFINE([USE_BONJOUR], 1, [Define to 1 to build with Bonjour support. (--with-bonjour)])]) -AC_MSG_RESULT([$with_bonjour]) - - -# -# OpenSSL -# -AC_MSG_CHECKING([whether to build with OpenSSL support]) -PGAC_ARG_BOOL(with, openssl, no, [build with OpenSSL support], - [AC_DEFINE([USE_OPENSSL], 1, [Define to build with OpenSSL support. (--with-openssl)])]) -AC_MSG_RESULT([$with_openssl]) -AC_SUBST(with_openssl) - -# -# SELinux -# -AC_MSG_CHECKING([whether to build with SELinux support]) -PGAC_ARG_BOOL(with, selinux, no, [build with SELinux support]) -AC_SUBST(with_selinux) -AC_MSG_RESULT([$with_selinux]) - -# -# Readline -# -PGAC_ARG_BOOL(with, readline, yes, - [do not use GNU Readline nor BSD Libedit for editing]) -# readline on MinGW has problems with backslashes in psql and other bugs. -# This is particularly a problem with non-US code pages. -# Therefore disable its use until we understand the cause. 2004-07-20 -if test "$PORTNAME" = "win32"; then - if test "$with_readline" = yes; then - AC_MSG_WARN([*** Readline does not work on MinGW --- disabling]) - with_readline=no - fi -fi - - -# -# Prefer libedit -# -PGAC_ARG_BOOL(with, libedit-preferred, no, - [prefer BSD Libedit over GNU Readline]) - - -# -# UUID library -# -# There are at least three UUID libraries in common use: the FreeBSD/NetBSD -# library, the e2fsprogs libuuid (now part of util-linux-ng), and the OSSP -# UUID library. More than one of these might be present on a given platform, -# so we make the user say which one she wants. -# -PGAC_ARG_REQ(with, uuid, [LIB], [build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)]) -if test x"$with_uuid" = x"" ; then - with_uuid=no -fi -PGAC_ARG_BOOL(with, ossp-uuid, no, [obsolete spelling of --with-uuid=ossp]) -if test "$with_ossp_uuid" = yes ; then - with_uuid=ossp -fi - -if test "$with_uuid" = bsd ; then - AC_DEFINE([HAVE_UUID_BSD], 1, [Define to 1 if you have BSD UUID support.]) - UUID_EXTRA_OBJS="md5.o sha1.o" -elif test "$with_uuid" = e2fs ; then - AC_DEFINE([HAVE_UUID_E2FS], 1, [Define to 1 if you have E2FS UUID support.]) - UUID_EXTRA_OBJS="md5.o sha1.o" -elif test "$with_uuid" = ossp ; then - AC_DEFINE([HAVE_UUID_OSSP], 1, [Define to 1 if you have OSSP UUID support.]) - UUID_EXTRA_OBJS="" -elif test "$with_uuid" = no ; then - UUID_EXTRA_OBJS="" -else - AC_MSG_ERROR([--with-uuid must specify one of bsd, e2fs, or ossp]) -fi -AC_SUBST(with_uuid) -AC_SUBST(UUID_EXTRA_OBJS) - - -# -# XML -# -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)])]) - -if test "$with_libxml" = yes ; then - AC_CHECK_PROGS(XML2_CONFIG, xml2-config) - if test -n "$XML2_CONFIG"; then - for pgac_option in `$XML2_CONFIG --cflags`; do - case $pgac_option in - -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; - esac - done - for pgac_option in `$XML2_CONFIG --libs`; do - case $pgac_option in - -L*) LDFLAGS="$LDFLAGS $pgac_option";; - esac - done - fi -fi - -AC_SUBST(with_libxml) - -# -# XSLT -# -PGAC_ARG_BOOL(with, libxslt, no, [use XSLT support when building contrib/xml2], - [AC_DEFINE([USE_LIBXSLT], 1, [Define to 1 to use XSLT support when building contrib/xml2. (--with-libxslt)])]) - - -AC_SUBST(with_libxslt) - -# -# tzdata -# -PGAC_ARG_REQ(with, system-tzdata, - [DIR], [use system time zone data in DIR]) -AC_SUBST(with_system_tzdata) - -# -# Zlib -# -PGAC_ARG_BOOL(with, zlib, yes, - [do not use Zlib]) -AC_SUBST(with_zlib) - -# -# Elf -# - -# Assume system is ELF if it predefines __ELF__ as 1, -# otherwise believe host_os based default. -case $host_os in - freebsd1*|freebsd2*) elf=no;; - freebsd3*|freebsd4*) elf=yes;; -esac - -AC_EGREP_CPP(yes, -[#if __ELF__ - yes -#endif -], -[ELF_SYS=true], -[if test "X$elf" = "Xyes" ; then - ELF_SYS=true -else - ELF_SYS= -fi]) -AC_SUBST(ELF_SYS) - -# -# Assignments -# - -CPPFLAGS="$CPPFLAGS $INCLUDES" -LDFLAGS="$LDFLAGS $LIBDIRS" - -AC_ARG_VAR(LDFLAGS_EX, [extra linker flags for linking executables only]) -AC_ARG_VAR(LDFLAGS_SL, [extra linker flags for linking shared libraries only]) - -PGAC_PROG_LD -AC_SUBST(LD) -AC_SUBST(with_gnu_ld) -case $host_os in sysv5*) - AC_CACHE_CHECK([whether ld -R works], [pgac_cv_prog_ld_R], - [ - pgac_save_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -Wl,-R/usr/lib" - AC_TRY_LINK([], [], [pgac_cv_prog_ld_R=yes], [pgac_cv_prog_ld_R=no]) - LDFLAGS=$pgac_save_LDFLAGS - ]) - ld_R_works=$pgac_cv_prog_ld_R - AC_SUBST(ld_R_works) -esac -AC_PROG_RANLIB -PGAC_CHECK_STRIP -AC_CHECK_TOOL(AR, ar, ar) -if test "$PORTNAME" = "win32"; then - AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool) - AC_CHECK_TOOL(DLLWRAP, dllwrap, dllwrap) - AC_CHECK_TOOL(WINDRES, windres, windres) -fi - -AC_PROG_INSTALL -# When Autoconf chooses install-sh as install program it tries to generate -# a relative path to it in each makefile where it subsitutes it. This clashes -# with our Makefile.global concept. This workaround helps. -case $INSTALL in - *install-sh*) install_bin='';; - *) install_bin=$INSTALL;; -esac -AC_SUBST(install_bin) - -AC_PATH_PROG(TAR, tar) -AC_PROG_LN_S -AC_PROG_AWK -AC_PROG_MKDIR_P -# When Autoconf chooses install-sh as mkdir -p program it tries to generate -# a relative path to it in each makefile where it subsitutes it. This clashes -# with our Makefile.global concept. This workaround helps. -case $MKDIR_P in - *install-sh*) MKDIR_P='\${SHELL} \${top_srcdir}/config/install-sh -c -d';; -esac - -PGAC_PATH_BISON -PGAC_PATH_FLEX - -PGAC_PATH_PERL -if test "$with_perl" = yes; then - if test -z "$PERL"; then - AC_MSG_ERROR([Perl not found]) - fi - PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib]) - PGAC_CHECK_PERL_EMBED_LDFLAGS -fi - -if test "$with_python" = yes; then - PGAC_PATH_PYTHON - PGAC_CHECK_PYTHON_EMBED_SETUP -fi - -if test "$cross_compiling" = yes && test -z "$with_system_tzdata"; then - AC_PATH_PROG(ZIC, zic) - if test -z "$ZIC"; then - AC_MSG_ERROR([ -When cross-compiling, either use the option --with-system-tzdata to use -existing time-zone data, or set the environment variable ZIC to a zic -program to use during the build.]) - fi -fi - - -## -## Libraries -## -## Most libraries are included only if they demonstrably provide a function -## we need, but libm is an exception: always include it, because there are -## too many compilers that play cute optimization games that will break -## probes for standard functions such as pow(). -## - -AC_CHECK_LIB(m, main) -AC_SEARCH_LIBS(setproctitle, util) -AC_SEARCH_LIBS(dlopen, dl) -AC_SEARCH_LIBS(socket, [socket ws2_32]) -AC_SEARCH_LIBS(shl_load, dld) -# We only use libld in port/dynloader/aix.c -case $host_os in - aix*) - AC_SEARCH_LIBS(ldopen, ld) - ;; -esac -AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt]) -AC_SEARCH_LIBS(crypt, crypt) -AC_SEARCH_LIBS(shm_open, rt) -AC_SEARCH_LIBS(shm_unlink, rt) -# Solaris: -AC_SEARCH_LIBS(fdatasync, [rt posix4]) -# Required for thread_test.c on Solaris 2.5: -# Other ports use it too (HP-UX) so test unconditionally -AC_SEARCH_LIBS(gethostbyname_r, nsl) -# Cygwin: -AC_SEARCH_LIBS(shmget, cygipc) - -if test "$with_readline" = yes; then - PGAC_CHECK_READLINE - if test x"$pgac_cv_check_readline" = x"no"; then - AC_MSG_ERROR([readline library not found -If you have readline already installed, see config.log for details on the -failure. It is possible the compiler isn't looking in the proper directory. -Use --without-readline to disable readline support.]) - fi -fi - -if test "$with_zlib" = yes; then - AC_CHECK_LIB(z, inflate, [], - [AC_MSG_ERROR([zlib library not found -If you have zlib already installed, see config.log for details on the -failure. It is possible the compiler isn't looking in the proper directory. -Use --without-zlib to disable zlib support.])]) -fi - -if test "$enable_spinlocks" = yes; then - AC_DEFINE(HAVE_SPINLOCKS, 1, [Define to 1 if you have spinlocks.]) -else - AC_MSG_WARN([ -*** Not using spinlocks will cause poor performance.]) -fi - -if test "$enable_atomics" = yes; then - AC_DEFINE(HAVE_ATOMICS, 1, [Define to 1 if you want to use atomics if available.]) -else - AC_MSG_WARN([ -*** Not using atomic operations will cause poor performance.]) -fi - -if test "$with_gssapi" = yes ; then - if test "$PORTNAME" != "win32"; then - AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [], - [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])]) - else - LIBS="$LIBS -lgssapi32" - fi -fi - -if test "$with_openssl" = yes ; then - dnl Order matters! - if test "$PORTNAME" != "win32"; then - AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) - AC_CHECK_LIB(ssl, SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) - else - AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])]) - AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])]) - fi - AC_CHECK_FUNCS([SSL_get_current_compression]) -fi - -if test "$with_pam" = yes ; then - AC_CHECK_LIB(pam, pam_start, [], [AC_MSG_ERROR([library 'pam' is required for PAM])]) -fi - -if test "$with_libxml" = yes ; then - AC_CHECK_LIB(xml2, xmlSaveToBuffer, [], [AC_MSG_ERROR([library 'xml2' (version >= 2.6.23) is required for XML support])]) -fi - -if test "$with_libxslt" = yes ; then - AC_CHECK_LIB(xslt, xsltCleanupGlobals, [], [AC_MSG_ERROR([library 'xslt' is required for XSLT support])]) -fi - -# for contrib/sepgsql -if test "$with_selinux" = yes; then - AC_CHECK_LIB(selinux, security_compute_create_name, [], - [AC_MSG_ERROR([library 'libselinux', version 2.1.10 or newer, is required for SELinux support])]) -fi - -# for contrib/uuid-ossp -if test "$with_uuid" = bsd ; then - # On BSD, the UUID functions are in libc - AC_CHECK_FUNC(uuid_to_string, - [UUID_LIBS=""], - [AC_MSG_ERROR([BSD UUID functions are not present])]) -elif test "$with_uuid" = e2fs ; then - # On OS X, the UUID functions are in libc - AC_CHECK_FUNC(uuid_generate, - [UUID_LIBS=""], - [AC_CHECK_LIB(uuid, uuid_generate, - [UUID_LIBS="-luuid"], - [AC_MSG_ERROR([library 'uuid' is required for E2FS UUID])])]) -elif test "$with_uuid" = ossp ; then - AC_CHECK_LIB(ossp-uuid, uuid_export, - [UUID_LIBS="-lossp-uuid"], - [AC_CHECK_LIB(uuid, uuid_export, - [UUID_LIBS="-luuid"], - [AC_MSG_ERROR([library 'ossp-uuid' or 'uuid' is required for OSSP UUID])])]) -fi -AC_SUBST(UUID_LIBS) - - -## -## Header files -## - -dnl sys/socket.h is required by AC_FUNC_ACCEPT_ARGTYPES -AC_CHECK_HEADERS([atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h pwd.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h]) - -# On BSD, test for net/if.h will fail unless sys/socket.h -# is included first. -AC_CHECK_HEADERS(net/if.h, [], [], -[AC_INCLUDES_DEFAULT -#ifdef HAVE_SYS_SOCKET_H -#include <sys/socket.h> -#endif -]) - -# On OpenBSD, test for sys/ucred.h will fail unless sys/param.h -# is included first. -AC_CHECK_HEADERS(sys/ucred.h, [], [], -[AC_INCLUDES_DEFAULT -#include <sys/param.h> -]) - -# At least on IRIX, test for netinet/tcp.h will fail unless -# netinet/in.h is included first. -AC_CHECK_HEADERS(netinet/in.h) -AC_CHECK_HEADERS(netinet/tcp.h, [], [], -[AC_INCLUDES_DEFAULT -#ifdef HAVE_NETINET_IN_H -#include <netinet/in.h> -#endif -]) - -if expr x"$pgac_cv_check_readline" : 'x-lreadline' >/dev/null ; then - AC_CHECK_HEADERS(readline/readline.h, [], - [AC_CHECK_HEADERS(readline.h, [], - [AC_MSG_ERROR([readline header not found -If you have readline already installed, see config.log for details on the -failure. It is possible the compiler isn't looking in the proper directory. -Use --without-readline to disable readline support.])])]) - AC_CHECK_HEADERS(readline/history.h, [], - [AC_CHECK_HEADERS(history.h, [], - [AC_MSG_ERROR([history header not found -If you have readline already installed, see config.log for details on the -failure. It is possible the compiler isn't looking in the proper directory. -Use --without-readline to disable readline support.])])]) -fi - -if expr x"$pgac_cv_check_readline" : 'x-ledit' >/dev/null ; then -# Some installations of libedit usurp /usr/include/readline/, which seems -# bad practice, since in combined installations readline will have its headers -# there. We might have to resort to AC_EGREP checks to make sure we found -# the proper header... - AC_CHECK_HEADERS(editline/readline.h, [], - [AC_CHECK_HEADERS(readline.h, [], - [AC_CHECK_HEADERS(readline/readline.h, [], - [AC_MSG_ERROR([readline header not found -If you have libedit already installed, see config.log for details on the -failure. It is possible the compiler isn't looking in the proper directory. -Use --without-readline to disable libedit support.])])])]) -# Note: in a libedit installation, history.h is sometimes a dummy, and may -# not be there at all. Hence, don't complain if not found. We must check -# though, since in yet other versions it is an independent header. - AC_CHECK_HEADERS(editline/history.h, [], - [AC_CHECK_HEADERS(history.h, [], - [AC_CHECK_HEADERS(readline/history.h)])]) -fi - -if test "$with_zlib" = yes; then - AC_CHECK_HEADER(zlib.h, [], [AC_MSG_ERROR([zlib header not found -If you have zlib already installed, see config.log for details on the -failure. It is possible the compiler isn't looking in the proper directory. -Use --without-zlib to disable zlib support.])]) -fi - -if test "$with_gssapi" = yes ; then - AC_CHECK_HEADERS(gssapi/gssapi.h, [], - [AC_CHECK_HEADERS(gssapi.h, [], [AC_MSG_ERROR([gssapi.h header file is required for GSSAPI])])]) -fi - -if test "$with_openssl" = yes ; then - AC_CHECK_HEADER(openssl/ssl.h, [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])]) - AC_CHECK_HEADER(openssl/err.h, [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])]) -fi - -if test "$with_pam" = yes ; then - AC_CHECK_HEADERS(security/pam_appl.h, [], - [AC_CHECK_HEADERS(pam/pam_appl.h, [], - [AC_MSG_ERROR([header file <security/pam_appl.h> or <pam/pam_appl.h> is required for PAM.])])]) -fi - -if test "$with_libxml" = yes ; then - AC_CHECK_HEADER(libxml/parser.h, [], [AC_MSG_ERROR([header file <libxml/parser.h> is required for XML support])]) -fi - -if test "$with_libxslt" = yes ; then - AC_CHECK_HEADER(libxslt/xslt.h, [], [AC_MSG_ERROR([header file <libxslt/xslt.h> is required for XSLT support])]) -fi - -if test "$with_ldap" = yes ; then - if test "$PORTNAME" != "win32"; then - AC_CHECK_HEADERS(ldap.h, [], - [AC_MSG_ERROR([header file <ldap.h> is required for LDAP])]) - PGAC_LDAP_SAFE - else - AC_CHECK_HEADERS(winldap.h, [], - [AC_MSG_ERROR([header file <winldap.h> is required for LDAP])], - [AC_INCLUDES_DEFAULT -#include <windows.h> - ]) - fi -fi - -if test "$with_bonjour" = yes ; then - AC_CHECK_HEADER(dns_sd.h, [], [AC_MSG_ERROR([header file <dns_sd.h> is required for Bonjour])]) -fi - -# for contrib/uuid-ossp -if test "$with_uuid" = bsd ; then - AC_CHECK_HEADERS(uuid.h, - [AC_EGREP_HEADER([uuid_to_string], uuid.h, [], - [AC_MSG_ERROR([header file <uuid.h> does not match BSD UUID library])])], - [AC_MSG_ERROR([header file <uuid.h> is required for BSD UUID])]) -elif test "$with_uuid" = e2fs ; then - AC_CHECK_HEADERS(uuid/uuid.h, - [AC_EGREP_HEADER([uuid_generate], uuid/uuid.h, [], - [AC_MSG_ERROR([header file <uuid/uuid.h> does not match E2FS UUID library])])], - [AC_CHECK_HEADERS(uuid.h, - [AC_EGREP_HEADER([uuid_generate], uuid.h, [], - [AC_MSG_ERROR([header file <uuid.h> does not match E2FS UUID library])])], - [AC_MSG_ERROR([header file <uuid/uuid.h> or <uuid.h> is required for E2FS UUID])])]) -elif test "$with_uuid" = ossp ; then - AC_CHECK_HEADERS(ossp/uuid.h, - [AC_EGREP_HEADER([uuid_export], ossp/uuid.h, [], - [AC_MSG_ERROR([header file <ossp/uuid.h> does not match OSSP UUID library])])], - [AC_CHECK_HEADERS(uuid.h, - [AC_EGREP_HEADER([uuid_export], uuid.h, [], - [AC_MSG_ERROR([header file <uuid.h> does not match OSSP UUID library])])], - [AC_MSG_ERROR([header file <ossp/uuid.h> or <uuid.h> is required for OSSP UUID])])]) -fi - -if test "$PORTNAME" = "win32" ; then - AC_CHECK_HEADERS(crtdefs.h) -fi - -## -## Types, structures, compiler characteristics -## - -m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that. -AC_C_BIGENDIAN -PGAC_C_INLINE -AC_C_FLEXIBLE_ARRAY_MEMBER -PGAC_C_SIGNED -PGAC_C_FUNCNAME_SUPPORT -PGAC_C_STATIC_ASSERT -PGAC_C_TYPES_COMPATIBLE -PGAC_C_BUILTIN_CONSTANT_P -PGAC_C_BUILTIN_UNREACHABLE -PGAC_C_VA_ARGS -PGAC_STRUCT_TIMEZONE -PGAC_UNION_SEMUN -PGAC_STRUCT_SOCKADDR_UN -PGAC_STRUCT_SOCKADDR_STORAGE -PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS -PGAC_STRUCT_ADDRINFO -AC_TYPE_INTPTR_T -AC_TYPE_UINTPTR_T -AC_TYPE_LONG_LONG_INT - -PGAC_TYPE_LOCALE_T - -AC_CHECK_TYPES([struct cmsgcred], [], [], -[#include <sys/socket.h> -#include <sys/param.h> -#ifdef HAVE_SYS_UCRED_H -#include <sys/ucred.h> -#endif]) - -AC_CHECK_TYPES([struct option], [], [], -[#ifdef HAVE_GETOPT_H -#include <getopt.h> -#endif]) - -if test "$with_zlib" = yes; then - # Check that <zlib.h> defines z_streamp (versions before about 1.0.4 - # did not). While we could work around the lack of z_streamp, it - # seems unwise to encourage people to use such old zlib versions... - AC_CHECK_TYPE(z_streamp, [], [AC_MSG_ERROR([zlib version is too old -Use --without-zlib to disable zlib support.])], - [#include <zlib.h>]) -fi - -# On PPC, check if assembler supports LWARX instruction's mutex hint bit -case $host_cpu in - ppc*|powerpc*) - AC_MSG_CHECKING([whether assembler supports lwarx hint bit]) - AC_TRY_COMPILE([], - [int a = 0; int *p = &a; int r; - __asm__ __volatile__ (" lwarx %0,0,%1,1\n" : "=&r"(r) : "r"(p));], - [pgac_cv_have_ppc_mutex_hint=yes], - [pgac_cv_have_ppc_mutex_hint=no]) - AC_MSG_RESULT([$pgac_cv_have_ppc_mutex_hint]) - if test x"$pgac_cv_have_ppc_mutex_hint" = xyes ; then - AC_DEFINE(HAVE_PPC_LWARX_MUTEX_HINT, 1, [Define to 1 if the assembler supports PPC's LWARX mutex hint bit.]) - fi - ;; -esac - -# Check largefile support. You might think this is a system service not a -# compiler characteristic, but you'd be wrong. We must check this before -# probing existence of related functions such as fseeko, since the largefile -# defines can affect what is generated for that. -if test "$PORTNAME" != "win32"; then - AC_SYS_LARGEFILE - dnl Autoconf 2.69's AC_SYS_LARGEFILE believes it's a good idea to #define - dnl _DARWIN_USE_64_BIT_INODE, but it isn't: on OS X 10.5 that activates a - dnl bug that causes readdir() to sometimes return EINVAL. On later OS X - dnl versions where the feature actually works, it's on by default anyway. - AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],[]) -fi - -# Check for largefile support (must be after AC_SYS_LARGEFILE) -AC_CHECK_SIZEOF([off_t]) - -# If we don't have largefile support, can't handle segsize >= 2GB. -if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then - AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.]) -fi - - -## -## Functions, global variables -## - -PGAC_VAR_INT_TIMEZONE -AC_FUNC_ACCEPT_ARGTYPES -PGAC_FUNC_GETTIMEOFDAY_1ARG - -# Some versions of libedit contain strlcpy(), setproctitle(), and other -# symbols that that library has no business exposing to the world. Pending -# acquisition of a clue by those developers, ignore libedit (including its -# possible alias of libreadline) while checking for everything else. -LIBS_including_readline="$LIBS" -LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` - -AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat readlink setproctitle setsid shm_open sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l]) - -AC_REPLACE_FUNCS(fseeko) -case $host_os in - # NetBSD uses a custom fseeko/ftello built on fsetpos/fgetpos - # Mingw uses macros to access Win32 API calls - netbsd*|mingw*) - AC_DEFINE(HAVE_FSEEKO, 1, [Define to 1 because replacement version used.]) - ac_cv_func_fseeko=yes;; - *) - AC_FUNC_FSEEKO;; -esac - -# posix_fadvise() is a no-op on Solaris, so don't incur function overhead -# by calling it, 2009-04-02 -# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c -if test "$PORTNAME" != "solaris"; then -AC_CHECK_FUNCS(posix_fadvise) -AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>]) -fi - -AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) -AC_CHECK_DECLS([strlcat, strlcpy]) -# This is probably only present on Darwin, but may as well check always -AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>]) - -HAVE_IPV6=no -AC_CHECK_TYPE([struct sockaddr_in6], - [AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.]) - HAVE_IPV6=yes], - [], -[$ac_includes_default -#include <netinet/in.h>]) -AC_SUBST(HAVE_IPV6) - -AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS], -[AC_TRY_LINK( -[#include <machine/vmparam.h> -#include <sys/exec.h> -], -[PS_STRINGS->ps_nargvstr = 1; -PS_STRINGS->ps_argvstr = "foo";], -[pgac_cv_var_PS_STRINGS=yes], -[pgac_cv_var_PS_STRINGS=no])]) -if test "$pgac_cv_var_PS_STRINGS" = yes ; then - AC_DEFINE([HAVE_PS_STRINGS], 1, [Define to 1 if the PS_STRINGS thing exists.]) -fi - - -# We use our snprintf.c emulation if either snprintf() or vsnprintf() -# is missing. Yes, there are machines that have only one. We may -# also decide to use snprintf.c if snprintf() is present but does not -# have all the features we need --- see below. - -if test "$PORTNAME" = "win32"; then - # Win32 gets snprintf.c built unconditionally. - # - # To properly translate all NLS languages strings, we must support the - # *printf() %$ format, which allows *printf() arguments to be selected - # by position in the translated string. - # - # libintl versions < 0.13 use the native *printf() functions, and Win32 - # *printf() doesn't understand %$, so we must use our /port versions, - # which do understand %$. libintl versions >= 0.13 include their own - # *printf versions on Win32. The libintl 0.13 release note text is: - # - # C format strings with positions, as they arise when a translator - # needs to reorder a sentence, are now supported on all platforms. - # On those few platforms (NetBSD and Woe32) for which the native - # printf()/fprintf()/... functions don't support such format - # strings, replacements are provided through <libintl.h>. - # - # We could use libintl >= 0.13's *printf() if we were sure that we had - # a litint >= 0.13 at runtime, but seeing that there is no clean way - # to guarantee that, it is best to just use our own, so we are sure to - # get %$ support. In include/port.h we disable the *printf() macros - # that might have been defined by libintl. - # - # We do this unconditionally whether NLS is used or not so we are sure - # that all Win32 libraries and binaries behave the same. - pgac_need_repl_snprintf=yes -else - pgac_need_repl_snprintf=no - AC_CHECK_FUNCS(snprintf, [], pgac_need_repl_snprintf=yes) - AC_CHECK_FUNCS(vsnprintf, [], pgac_need_repl_snprintf=yes) -fi - - -# Check whether <stdio.h> declares snprintf() and vsnprintf(); if not, -# include/c.h will provide declarations. Note this is a separate test -# from whether the functions exist in the C library --- there are -# systems that have the functions but don't bother to declare them :-( - -AC_CHECK_DECLS([snprintf, vsnprintf]) - - -dnl Cannot use AC_CHECK_FUNC because isinf may be a macro -AC_CACHE_CHECK([for isinf], ac_cv_func_isinf, -[AC_TRY_LINK([ -#include <math.h> -double glob_double; -], -[return isinf(glob_double) ? 0 : 1;], -[ac_cv_func_isinf=yes], -[ac_cv_func_isinf=no])]) - -if test $ac_cv_func_isinf = yes ; then - AC_DEFINE(HAVE_ISINF, 1, [Define to 1 if you have isinf().]) -else - AC_LIBOBJ(isinf) - # Look for a way to implement a substitute for isinf() - AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break]) -fi - -AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy]) - -case $host_os in - - # Windows uses a specialised env handler - # and doesn't need a replacement getpeereid because it doesn't use - # Unix sockets. - mingw*) - AC_DEFINE(HAVE_UNSETENV, 1, [Define to 1 because replacement version used.]) - AC_DEFINE(HAVE_GETPEEREID, 1, [Define to 1 because function not required.]) - ac_cv_func_unsetenv=yes - ac_cv_func_getpeereid=yes;; - *) - AC_REPLACE_FUNCS([unsetenv getpeereid]) - ;; -esac - -# System's version of getaddrinfo(), if any, may be used only if we found -# a definition for struct addrinfo; see notes in src/include/getaddrinfo.h. -# We use only our own getaddrinfo.c on Windows, but it's time to revisit that. -if test x"$ac_cv_type_struct_addrinfo" = xyes && \ - test "$PORTNAME" != "win32"; then - AC_REPLACE_FUNCS([getaddrinfo]) -else - AC_LIBOBJ(getaddrinfo) -fi - -# Similarly, use system's getopt_long() only if system provides struct option. -if test x"$ac_cv_type_struct_option" = xyes ; then - AC_REPLACE_FUNCS([getopt_long]) -else - AC_LIBOBJ(getopt_long) -fi - -# Solaris' getopt() doesn't do what we want for long options, so always use -# our version on that platform. -if test "$PORTNAME" = "solaris"; then - AC_LIBOBJ(getopt) -fi - -# mingw has adopted a GNU-centric interpretation of optind/optreset, -# so always use our version on Windows. -if test "$PORTNAME" = "win32"; then - AC_LIBOBJ(getopt) - AC_LIBOBJ(getopt_long) -fi - -# Win32 support -if test "$PORTNAME" = "win32"; then - AC_REPLACE_FUNCS(gettimeofday) - AC_LIBOBJ(kill) - AC_LIBOBJ(open) - AC_LIBOBJ(system) - AC_LIBOBJ(win32env) - AC_LIBOBJ(win32error) - AC_LIBOBJ(win32setlocale) - AC_DEFINE([HAVE_SYMLINK], 1, - [Define to 1 if you have the `symlink' function.]) - AC_CHECK_TYPES(MINIDUMP_TYPE, [pgac_minidump_type=yes], [pgac_minidump_type=no], [ -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <string.h> -#include <dbghelp.h>]) -fi -if test x"$pgac_minidump_type" = x"yes" ; then - AC_SUBST(have_win32_dbghelp,yes) -else - AC_SUBST(have_win32_dbghelp,no) -fi - -dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro -dnl (especially on GNU libc) -dnl See also comments in c.h. -AC_CACHE_CHECK([for sigsetjmp], pgac_cv_func_sigsetjmp, -[AC_TRY_LINK([#include <setjmp.h>], - [sigjmp_buf x; sigsetjmp(x, 1);], - [pgac_cv_func_sigsetjmp=yes], - [pgac_cv_func_sigsetjmp=no])]) -if test x"$pgac_cv_func_sigsetjmp" = x"yes"; then - AC_DEFINE(HAVE_SIGSETJMP, 1, [Define to 1 if you have sigsetjmp().]) -fi - -AC_DECL_SYS_SIGLIST - -AC_CHECK_FUNC(syslog, - [AC_CHECK_HEADER(syslog.h, - [AC_DEFINE(HAVE_SYSLOG, 1, [Define to 1 if you have the syslog interface.])])]) - -AC_CACHE_CHECK([for opterr], pgac_cv_var_int_opterr, -[AC_TRY_LINK([#include <unistd.h>], - [extern int opterr; opterr = 1;], - [pgac_cv_var_int_opterr=yes], - [pgac_cv_var_int_opterr=no])]) -if test x"$pgac_cv_var_int_opterr" = x"yes"; then - AC_DEFINE(HAVE_INT_OPTERR, 1, [Define to 1 if you have the global variable 'int opterr'.]) -fi - -AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset, -[AC_TRY_LINK([#include <unistd.h>], - [extern int optreset; optreset = 1;], - [pgac_cv_var_int_optreset=yes], - [pgac_cv_var_int_optreset=no])]) -if test x"$pgac_cv_var_int_optreset" = x"yes"; then - AC_DEFINE(HAVE_INT_OPTRESET, 1, [Define to 1 if you have the global variable 'int optreset'.]) -fi - -AC_CHECK_FUNCS([strtoll strtoq], [break]) -AC_CHECK_FUNCS([strtoull strtouq], [break]) - -# Lastly, restore full LIBS list and check for readline/libedit symbols -LIBS="$LIBS_including_readline" - -if test "$with_readline" = yes; then - PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER - AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function]) - AC_CHECK_FUNCS([append_history history_truncate_file]) -fi - - -# -# Pthreads -# -# For each platform, we need to know about any special compile and link -# libraries, and whether the normal C function names are thread-safe. -# See the comment at the top of src/port/thread.c for more information. -# WIN32 doesn't need the pthread tests; it always uses threads -if test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"; then -ACX_PTHREAD # set thread flags - -# Some platforms use these, so just define them. They can't hurt if they -# are not supported. For example, on Solaris -D_POSIX_PTHREAD_SEMANTICS -# enables 5-arg getpwuid_r, among other things. -PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS" - -# Check for *_r functions -_CFLAGS="$CFLAGS" -_LIBS="$LIBS" -CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -LIBS="$LIBS $PTHREAD_LIBS" - -if test "$PORTNAME" != "win32"; then -AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([ -pthread.h not found; use --disable-thread-safety to disable thread safety])]) -fi - -AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r]) - -# Do test here with the proper thread flags -PGAC_FUNC_GETPWUID_R_5ARG -PGAC_FUNC_STRERROR_R_INT - -CFLAGS="$_CFLAGS" -LIBS="$_LIBS" - -else -# do not use values from template file -PTHREAD_CFLAGS= -PTHREAD_LIBS= -fi - -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_LIBS) - - -# We can test for libldap_r only after we know PTHREAD_LIBS -if test "$with_ldap" = yes ; then - _LIBS="$LIBS" - if test "$PORTNAME" != "win32"; then - AC_CHECK_LIB(ldap, ldap_bind, [], - [AC_MSG_ERROR([library 'ldap' is required for LDAP])], - [$EXTRA_LDAP_LIBS]) - LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" - if test "$enable_thread_safety" = yes; then - # on some platforms ldap_r fails to link without PTHREAD_LIBS - AC_CHECK_LIB(ldap_r, ldap_simple_bind, [], - [AC_MSG_ERROR([library 'ldap_r' is required for LDAP])], - [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) - LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS" - else - LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" - fi - else - AC_CHECK_LIB(wldap32, ldap_bind, [], [AC_MSG_ERROR([library 'wldap32' is required for LDAP])]) - LDAP_LIBS_FE="-lwldap32" - LDAP_LIBS_BE="-lwldap32" - fi - LIBS="$_LIBS" -fi -AC_SUBST(LDAP_LIBS_FE) -AC_SUBST(LDAP_LIBS_BE) - - -# This test makes sure that run tests work at all. Sometimes a shared -# library is found by the linker, but the runtime linker can't find it. -# This check should come after all modifications of compiler or linker -# variables, and before any other run tests. -AC_MSG_CHECKING([test program]) -AC_TRY_RUN([int main() { return 0; }], -[AC_MSG_RESULT(ok)], -[AC_MSG_RESULT(failed) -AC_MSG_ERROR([[ -Could not execute a simple test program. This may be a problem -related to locating shared libraries. Check the file 'config.log' -for the exact reason.]])], -[AC_MSG_RESULT([cross-compiling])]) - -# -------------------- -# Run tests below here -# -------------------- - -# Force use of our snprintf if system's doesn't do arg control -# See comment above at snprintf test for details. -if test "$enable_nls" = yes -a "$pgac_need_repl_snprintf" = no; then - PGAC_FUNC_SNPRINTF_ARG_CONTROL - if test $pgac_cv_snprintf_arg_control != yes ; then - pgac_need_repl_snprintf=yes - fi -fi - - -dnl Check to see if we have a working 64-bit integer type. -dnl This breaks down into two steps: -dnl (1) figure out if the compiler has a 64-bit int type with working -dnl arithmetic, and if so -dnl (2) see whether snprintf() can format the type correctly. (Currently, -dnl snprintf is the only library routine we really need for int8 support.) -dnl It's entirely possible to have a compiler that handles a 64-bit type -dnl when the C library doesn't; this is fairly likely when using gcc on -dnl an older platform, for example. -dnl If there is no native snprintf() or it does not handle the 64-bit type, -dnl we force our own version of snprintf() to be used instead. -dnl Note this test must be run after our initial check for snprintf/vsnprintf. - -dnl As of Postgres 8.4, we no longer support compilers without a working -dnl 64-bit type. But we still handle the case of snprintf being broken. - -PGAC_TYPE_64BIT_INT([long int]) - -if test x"$HAVE_LONG_INT_64" = x"yes" ; then - pg_int64_type="long int" -else - PGAC_TYPE_64BIT_INT([long long int]) - if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then - pg_int64_type="long long int" - else - AC_MSG_ERROR([Cannot find a working 64-bit integer type.]) - fi -fi - -AC_DEFINE_UNQUOTED(PG_INT64_TYPE, $pg_int64_type, - [Define to the name of a signed 64-bit integer type.]) - -dnl If we need to use "long long int", figure out whether nnnLL notation works. - -if test x"$HAVE_LONG_LONG_INT_64" = xyes ; then - AC_TRY_COMPILE([ -#define INT64CONST(x) x##LL -long long int foo = INT64CONST(0x1234567890123456); -], - [], - [AC_DEFINE(HAVE_LL_CONSTANTS, 1, [Define to 1 if constants of type 'long long int' should have the suffix LL.])], - []) -fi - - -# If we found "long int" is 64 bits, assume snprintf handles it. If -# we found we need to use "long long int", better check. We cope with -# snprintfs that use %lld, %qd, or %I64d as the format. If none of these -# work, fall back to our own snprintf emulation (which we know uses %lld). - -if test "$HAVE_LONG_LONG_INT_64" = yes ; then - if test $pgac_need_repl_snprintf = no; then - PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER - if test "$LONG_LONG_INT_MODIFIER" = ""; then - # Force usage of our own snprintf, since system snprintf is broken - pgac_need_repl_snprintf=yes - LONG_LONG_INT_MODIFIER='ll' - fi - else - # Here if we previously decided we needed to use our own snprintf - LONG_LONG_INT_MODIFIER='ll' - fi -else - # Here if we are not using 'long long int' at all - LONG_LONG_INT_MODIFIER='l' -fi - -INT64_MODIFIER="\"$LONG_LONG_INT_MODIFIER\"" - -AC_DEFINE_UNQUOTED(INT64_MODIFIER, $INT64_MODIFIER, - [Define to the appropriate snprintf length modifier for 64-bit ints.]) - -# Also force use of our snprintf if the system's doesn't support the %z flag. -if test "$pgac_need_repl_snprintf" = no; then - PGAC_FUNC_SNPRINTF_SIZE_T_SUPPORT - if test "$pgac_cv_snprintf_size_t_support" != yes; then - pgac_need_repl_snprintf=yes - fi -fi - -# Now we have checked all the reasons to replace snprintf -if test $pgac_need_repl_snprintf = yes; then - AC_DEFINE(USE_REPL_SNPRINTF, 1, [Use replacement snprintf() functions.]) - AC_LIBOBJ(snprintf) -fi - -# Check size of void *, size_t (enables tweaks for > 32bit address space) -AC_CHECK_SIZEOF([void *]) -AC_CHECK_SIZEOF([size_t]) -AC_CHECK_SIZEOF([long]) - -# Decide whether float4 is passed by value: user-selectable, enabled by default -AC_MSG_CHECKING([whether to build with float4 passed by value]) -PGAC_ARG_BOOL(enable, float4-byval, yes, [disable float4 passed by value], - [AC_DEFINE([USE_FLOAT4_BYVAL], 1, - [Define to 1 if you want float4 values to be passed by value. (--enable-float4-byval)]) - float4passbyval=true], - [float4passbyval=false]) -AC_MSG_RESULT([$enable_float4_byval]) -AC_DEFINE_UNQUOTED([FLOAT4PASSBYVAL], [$float4passbyval], [float4 values are passed by value if 'true', by reference if 'false']) - -# Decide whether float8 is passed by value. -# Note: this setting also controls int8 and related types such as timestamp. -# If sizeof(Datum) >= 8, this is user-selectable, enabled by default. -# If not, trying to select it is an error. -AC_MSG_CHECKING([whether to build with float8 passed by value]) -if test $ac_cv_sizeof_void_p -ge 8 ; then - PGAC_ARG_BOOL(enable, float8-byval, yes, [disable float8 passed by value]) -else - PGAC_ARG_BOOL(enable, float8-byval, no, [disable float8 passed by value]) - if test "$enable_float8_byval" = yes ; then - AC_MSG_ERROR([--enable-float8-byval is not supported on 32-bit platforms.]) - fi -fi -if test "$enable_float8_byval" = yes ; then - AC_DEFINE([USE_FLOAT8_BYVAL], 1, - [Define to 1 if you want float8, int8, etc values to be passed by value. (--enable-float8-byval)]) - float8passbyval=true -else - float8passbyval=false -fi -AC_MSG_RESULT([$enable_float8_byval]) -AC_DEFINE_UNQUOTED([FLOAT8PASSBYVAL], [$float8passbyval], [float8, int8, and related values are passed by value if 'true', by reference if 'false']) - -# Determine memory alignment requirements for the basic C data types. - -AC_CHECK_ALIGNOF(short) -AC_CHECK_ALIGNOF(int) -AC_CHECK_ALIGNOF(long) -if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then - AC_CHECK_ALIGNOF(long long int) -fi -AC_CHECK_ALIGNOF(double) - -# Compute maximum alignment of any basic type. -# We assume long's alignment is at least as strong as char, short, or int; -# but we must check long long (if it exists) and double. - -MAX_ALIGNOF=$ac_cv_alignof_long -if test $MAX_ALIGNOF -lt $ac_cv_alignof_double ; then - MAX_ALIGNOF=$ac_cv_alignof_double -fi -if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ; then - MAX_ALIGNOF="$ac_cv_alignof_long_long_int" -fi -AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.]) - - -# Some platforms predefine the types int8, int16, etc. Only check -# a (hopefully) representative subset. -AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [], -[#include <stdio.h>]) - -# We also check for sig_atomic_t, which *should* be defined per ANSI -# C, but is missing on some old platforms. -AC_CHECK_TYPES(sig_atomic_t, [], [], [#include <signal.h>]) - -# Check for various atomic operations now that we have checked how to declare -# 64bit integers. -PGAC_HAVE_GCC__SYNC_CHAR_TAS -PGAC_HAVE_GCC__SYNC_INT32_TAS -PGAC_HAVE_GCC__SYNC_INT32_CAS -PGAC_HAVE_GCC__SYNC_INT64_CAS -PGAC_HAVE_GCC__ATOMIC_INT32_CAS -PGAC_HAVE_GCC__ATOMIC_INT64_CAS - -if test "$PORTNAME" != "win32" -then -PGAC_FUNC_POSIX_SIGNALS -if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; then - AC_MSG_ERROR([ -Thread-safety requires POSIX signals, which are not supported by this -operating system; use --disable-thread-safety to disable thread safety.]) -fi -fi - - -# Select semaphore implementation type. -if test "$PORTNAME" != "win32"; then - if test x"$USE_NAMED_POSIX_SEMAPHORES" = x"1" ; then - AC_DEFINE(USE_NAMED_POSIX_SEMAPHORES, 1, [Define to select named POSIX semaphores.]) - SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c" - else - if test x"$USE_UNNAMED_POSIX_SEMAPHORES" = x"1" ; then - AC_DEFINE(USE_UNNAMED_POSIX_SEMAPHORES, 1, [Define to select unnamed POSIX semaphores.]) - SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c" - else - AC_DEFINE(USE_SYSV_SEMAPHORES, 1, [Define to select SysV-style semaphores.]) - SEMA_IMPLEMENTATION="src/backend/port/sysv_sema.c" - fi - fi -else - AC_DEFINE(USE_WIN32_SEMAPHORES, 1, [Define to select Win32-style semaphores.]) - SEMA_IMPLEMENTATION="src/backend/port/win32_sema.c" -fi - - -# Select shared-memory implementation type. -if test "$PORTNAME" != "win32"; then - AC_DEFINE(USE_SYSV_SHARED_MEMORY, 1, [Define to select SysV-style shared memory.]) - SHMEM_IMPLEMENTATION="src/backend/port/sysv_shmem.c" -else - AC_DEFINE(USE_WIN32_SHARED_MEMORY, 1, [Define to select Win32-style shared memory.]) - SHMEM_IMPLEMENTATION="src/backend/port/win32_shmem.c" -fi - -# Select latch implementation type. -if test "$PORTNAME" != "win32"; then - LATCH_IMPLEMENTATION="src/backend/port/unix_latch.c" -else - LATCH_IMPLEMENTATION="src/backend/port/win32_latch.c" -fi - -# If not set in template file, set bytes to use libc memset() -if test x"$MEMSET_LOOP_LIMIT" = x"" ; then - MEMSET_LOOP_LIMIT=1024 -fi -AC_DEFINE_UNQUOTED(MEMSET_LOOP_LIMIT, ${MEMSET_LOOP_LIMIT}, [Define bytes to use libc memset().]) - - -if test "$enable_nls" = yes ; then - PGAC_CHECK_GETTEXT -fi - -# Check for Tcl configuration script tclConfig.sh -if test "$with_tcl" = yes; then - PGAC_PATH_TCLCONFIGSH([$with_tclconfig]) - PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH], - [TCL_INCLUDE_SPEC,TCL_LIB_FILE,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD]) - AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one - # now that we have TCL_INCLUDE_SPEC, we can check for <tcl.h> - ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" - AC_CHECK_HEADER(tcl.h, [], [AC_MSG_ERROR([header file <tcl.h> is required for Tcl])]) - CPPFLAGS=$ac_save_CPPFLAGS -fi - -# check for <perl.h> -if test "$with_perl" = yes; then - ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE" - AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file <perl.h> is required for Perl])], - [#include <EXTERN.h>]) - # While we're at it, check that we can link to libperl. - # On most platforms, if perl.h is there then libperl.so will be too, but at - # this writing Debian packages them separately. There is no known reason to - # waste cycles on separate probes for the Tcl or Python libraries, though. - pgac_save_LIBS=$LIBS - LIBS="$perl_embed_ldflags" - AC_MSG_CHECKING([for libperl]) - AC_TRY_LINK([ -#include <EXTERN.h> -#include <perl.h> -], [perl_alloc();], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_MSG_ERROR([libperl library is required for Perl])]) - LIBS=$pgac_save_LIBS - CPPFLAGS=$ac_save_CPPFLAGS -fi - -# check for <Python.h> -if test "$with_python" = yes; then - ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$python_includespec $CPPFLAGS" - AC_CHECK_HEADER(Python.h, [], [AC_MSG_ERROR([header file <Python.h> is required for Python])]) - CPPFLAGS=$ac_save_CPPFLAGS -fi - -# -# Check for DocBook and tools -# -PGAC_PROG_NSGMLS -PGAC_PROG_JADE -PGAC_CHECK_DOCBOOK(4.2) -PGAC_PATH_DOCBOOK_STYLESHEETS -PGAC_PATH_COLLATEINDEX -AC_CHECK_PROGS(DBTOEPUB, dbtoepub) -AC_CHECK_PROGS(XMLLINT, xmllint) -AC_CHECK_PROGS(XSLTPROC, xsltproc) -AC_CHECK_PROGS(OSX, [osx sgml2xml sx]) - -# -# Check for test tools -# -if test "$enable_tap_tests" = yes; then - AC_CHECK_PROGS(PROVE, prove) - if test -z "$PROVE"; then - AC_MSG_ERROR([prove not found]) - fi - if test -z "$PERL"; then - AC_MSG_ERROR([Perl not found]) - fi -fi - -# Thread testing - -# We have to run the thread test near the end so we have all our symbols -# defined. Cross compiling throws a warning. -# -if test "$enable_thread_safety" = yes; then -if test "$PORTNAME" != "win32" -then -AC_MSG_CHECKING([thread safety of required library functions]) - -_CFLAGS="$CFLAGS" -_LIBS="$LIBS" -CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE" -LIBS="$LIBS $PTHREAD_LIBS" -AC_TRY_RUN([#include "$srcdir/src/test/thread/thread_test.c"], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_MSG_ERROR([thread test program failed -This platform is not thread-safe. Check the file 'config.log' or compile -and run src/test/thread/thread_test for the exact reason. -Use --disable-thread-safety to disable thread safety.])], - [AC_MSG_RESULT(maybe) - AC_MSG_WARN([ -*** Skipping thread test program because of cross-compile build. -*** Run the program in src/test/thread on the target machine. -])]) -CFLAGS="$_CFLAGS" -LIBS="$_LIBS" -else -AC_MSG_WARN([*** skipping thread test on Win32]) -fi -fi - -# If compiler will take -Wl,--as-needed (or various platform-specific -# spellings thereof) then add that to LDFLAGS. This is much easier than -# trying to filter LIBS to the minimum for each executable. -# On (at least) some Red-Hat-derived systems, this switch breaks linking to -# libreadline; therefore we postpone testing it until we know what library -# dependencies readline has. The test code will try to link with $LIBS. -if test "$with_readline" = yes; then - link_test_func=readline -else - link_test_func=exit -fi - -if test "$PORTNAME" = "darwin"; then - PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-dead_strip_dylibs], $link_test_func) -elif test "$PORTNAME" = "openbsd"; then - PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-Bdynamic], $link_test_func) -else - PGAC_PROG_CC_LDFLAGS_OPT([-Wl,--as-needed], $link_test_func) -fi - -# Create compiler version string -if test x"$GCC" = x"yes" ; then - cc_string=`${CC} --version | sed q` - case $cc_string in [[A-Za-z]]*) ;; *) cc_string="GCC $cc_string";; esac -elif test x"$SUN_STUDIO_CC" = x"yes" ; then - cc_string=`${CC} -V 2>&1 | sed q` -else - cc_string=$CC -fi - -AC_DEFINE_UNQUOTED(PG_VERSION_STR, - ["PostgreSQL $PG_VERSION on $host, compiled by $cc_string, `expr $ac_cv_sizeof_void_p \* 8`-bit"], - [A string containing the version number, platform, and C compiler]) - -# Supply a numeric version string for use by 3rd party add-ons -# awk -F is a regex on some platforms, and not on others, so make "." a tab -[PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | -tr '.' ' ' | -$AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"] -AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) - - -# Begin output steps - -AC_MSG_NOTICE([using compiler=$cc_string]) -AC_MSG_NOTICE([using CFLAGS=$CFLAGS]) -AC_MSG_NOTICE([using CPPFLAGS=$CPPFLAGS]) -AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS]) - -# prepare build tree if outside source tree -# Note 1: test -ef might not exist, but it's more reliable than `pwd`. -# Note 2: /bin/pwd might be better than shell's built-in at getting -# a symlink-free name. -if ( test "$srcdir" -ef . ) >/dev/null 2>&1 || test "`cd $srcdir && /bin/pwd`" = "`/bin/pwd`"; then - vpath_build=no -else - vpath_build=yes - if test "$no_create" != yes; then - _AS_ECHO_N([preparing build tree... ]) - pgac_abs_top_srcdir=`cd "$srcdir" && pwd` - $SHELL "$ac_aux_dir/prep_buildtree" "$pgac_abs_top_srcdir" "." \ - || AC_MSG_ERROR(failed) - AC_MSG_RESULT(done) - fi -fi -AC_SUBST(vpath_build) - - -AC_CONFIG_FILES([GNUmakefile src/Makefile.global]) - -AC_CONFIG_LINKS([ - src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c - src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} - src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} - src/backend/port/pg_latch.c:${LATCH_IMPLEMENTATION} - src/include/dynloader.h:src/backend/port/dynloader/${template}.h - src/include/pg_config_os.h:src/include/port/${template}.h - src/Makefile.port:src/makefiles/Makefile.${template} -]) - -if test "$PORTNAME" = "win32"; then -AC_CONFIG_COMMANDS([check_win32_symlinks],[ -# Links sometimes fail undetected on Mingw - -# so here we detect it and warn the user -for FILE in $CONFIG_LINKS - do - # test -e works for symlinks in the MinGW console - test -e `expr "$FILE" : '\([[^:]]*\)'` || AC_MSG_WARN([*** link for $FILE -- please fix by hand]) - done -]) -fi - -AC_CONFIG_HEADERS([src/include/pg_config.h], -[ -# Update timestamp for pg_config.h (see Makefile.global) -echo >src/include/stamp-h -]) - -AC_CONFIG_HEADERS([src/include/pg_config_ext.h], -[ -# Update timestamp for pg_config_ext.h (see Makefile.global) -echo >src/include/stamp-ext-h -]) - -AC_CONFIG_HEADERS([src/interfaces/ecpg/include/ecpg_config.h], - [echo >src/interfaces/ecpg/include/stamp-h]) - -AC_OUTPUT -- 2.0.4
signature.asc
Description: Digital signature