blob: 2412a1a502f2268fb6f39a8222b0669196642cbe [file] [log] [blame]
dnl Process this file with autoconf to produce a configure script.
dnl $PostgreSQL: pgsql/configure.in,v 1.546.2.11 2009/01/30 02:59:28 scrappy Exp $
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([HAWQ], [8.2.15], [https://issues.apache.org/jira/browse/HAWQ])
AC_PREREQ(2.63)
dnl m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.63], [], [m4_fatal([Autoconf version 2.63 is required.
dnl Untested combinations of 'autoconf' and PostgreSQL versions are not
dnl recommended. You can remove the check from 'configure.in' but it is then
dnl your responsibility whether the result works or not.])])
AC_COPYRIGHT([Copyright (c) 1996-2010, PostgreSQL Global Development Group])
AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
AC_CONFIG_AUX_DIR(config)
AC_PREFIX_DEFAULT(/usr/local/hawq)
AC_SUBST(configure_args, [$ac_configure_args])
AC_DEFINE_UNQUOTED(PG_VERSION, "$PACKAGE_VERSION", [Postgres version HAWQ is based on])
[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])
AC_CANONICAL_HOST
template=
AC_MSG_CHECKING([which template to use])
PGAC_ARG_REQ(with, 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 ;;
bsdi*) template=bsdi ;;
cygwin*) template=cygwin ;;
darwin*) template=darwin ;;
dragonfly*) template=netbsd ;;
dgux*) template=dgux ;;
freebsd*) template=freebsd ;;
hpux*) template=hpux ;;
irix*) template=irix ;;
linux*|gnu*|k*bsd*-gnu)
template=linux ;;
mingw*) template=win32 ;;
netbsd*) template=netbsd ;;
nextstep*) template=nextstep ;;
openbsd*) template=openbsd ;;
osf*) template=osf ;;
sco*) template=sco ;;
solaris*) template=solaris ;;
sunos*) template=sunos4 ;;
sysv4.2*)
case $host_vendor in
univel) template=univel ;;
esac ;;
sysv4*) template=svr4 ;;
sysv5*) template=unixware ;;
ultrix*) template=ultrix4 ;;
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-bugs@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
##
#
# Installation directory for documentation
#
PGAC_ARG(with, docdir, [ --with-docdir=DIR install the documentation in DIR [[PREFIX/docs]]
--without-docdir do not install the documentation],
[AC_MSG_ERROR([option --with-docdir requires an argument])],
[docdir=],
[docdir=$withval],
[docdir='${prefix}/docs'])
AC_SUBST(docdir)
#
# Add non-standard directories to the include path
#
PGAC_ARG_REQ(with, includes, [ --with-includes=DIRS look for additional header files in DIRS])
#
# Add non-standard directories to the library search path
#
PGAC_ARG_REQ(with, libraries, [ --with-libraries=DIRS look for additional libraries in DIRS],
[LIBRARY_DIRS=$withval])
PGAC_ARG_REQ(with, libs, [ --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,
[[ --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, [ --with-pgport=PORTNUM change 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)
#
# Option to disable shared libraries
#
PGAC_ARG_BOOL(enable, shared, yes,
[ --disable-shared do not build shared libraries])
AC_SUBST(enable_shared)
#
# '-rpath'-like feature can be disabled
#
PGAC_ARG_BOOL(enable, rpath, yes,
[ --disable-rpath do not embed shared library search path in executables])
AC_SUBST(enable_rpath)
#
# Spinlocks
#
PGAC_ARG_BOOL(enable, spinlocks, yes,
[ --disable-spinlocks do not use spinlocks])
#
# --enable-debug adds -g to compiler flags
#
PGAC_ARG_BOOL(enable, debug, no,
[ --enable-debug build with debugging symbols (-g)])
AC_SUBST(enable_debug)
#
# --enable-profiling enables gcc profiling
#
PGAC_ARG_BOOL(enable, profiling, no,
[ --enable-profiling build with profiling enabled ])
AC_SUBST(enable_profiling)
#
# --enable-coverage enables generation of code coverage metrics with gcov
#
PGAC_ARG_BOOL(enable, coverage, no,
[ --enable-coverage 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,
[ --enable-dtrace build with DTrace support],
[AC_DEFINE([ENABLE_DTRACE], 1,
[Define to 1 to enable DTrace support. (--enable-dtrace)])
AC_CHECK_PROGS(DTRACE, dtrace)
if test -z "$DTRACE"; then
AC_MSG_ERROR([dtrace not found])
fi
AC_SUBST(DTRACEFLAGS)])
AC_SUBST(enable_dtrace)
#
# 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, [], [CC=$with_CC])
case $template in
aix) pgac_cc_list="gcc xlc";;
irix) pgac_cc_list="cc";; # no gcc
*) 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 -O3.
# 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
if test "$enable_debug" == yes; then
CFLAGS="-O0"
else
CFLAGS="-O3"
fi
else
# if the user selected debug mode, don't use -O
if test "$enable_debug" != yes; then
CFLAGS="-O"
fi
fi
# For GPDB, Use C99, rather than C89, compile rules
#
#
if test "$GCC" = yes; then
if test "$ICC" = yes; then
CFLAGS="$CFLAGS -c99 "
else
CFLAGS="$CFLAGS -std=gnu99 "
fi
fi
# Check for x86 cpuid instruction to determine if we can perform a
# runtime check
AC_CACHE_CHECK([for __get_cpuid], [pgac_cv__get_cpuid],
[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cpuid.h>],
[[unsigned int exx[4] = {0, 0, 0, 0};
__get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
]])],
[pgac_cv__get_cpuid="yes"],
[pgac_cv__get_cpuid="no"])])
if test x"$pgac_cv__get_cpuid" = x"yes"; then
AC_DEFINE(HAVE__GET_CPUID, 1, [Define to 1 if you have __get_cpuid.])
fi
AC_CACHE_CHECK([for __cpuid], [pgac_cv__cpuid],
[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <intrin.h>],
[[unsigned int exx[4] = {0, 0, 0, 0};
__get_cpuid(exx[0], 1);
]])],
[pgac_cv__cpuid="yes"],
[pgac_cv__cpuid="no"])])
if test x"$pgac_cv__cpuid" = x"yes"; then
AC_DEFINE(HAVE__CPUID, 1, [Define to 1 if you have __cpuid.])
fi
# Check for Intel SSE 4.2 intrinsics to do CRC calculations.
#
# First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
# with the default compiler flags. If not, check if adding the -msse4.2
# flag helps. CFLAGS_SSE42 is set to -msse4.2 if that's required.
PGAC_SSE42_CRC32_INTRINSICS([])
if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then
PGAC_SSE42_CRC32_INTRINSICS([-msse4.2])
fi
AC_SUBST(CFLAGS_SSE42)
# Are we targeting a processor that supports SSE 4.2? gcc, clang and icc all
# define __SSE4_2__ in that case.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
#ifndef __SSE4_2__
#error __SSE4_2__ not defined
#endif
])], [SSE4_2_TARGETED=1])
# Select CRC-32C implementation.
#
# If we are targeting a processor that has SSE 4.2 instructions, we can use the
# special CRC instructions for calculating CRC-32C. If we're not targeting such
# a processor, but we can nevertheless produce code that uses the SSE
# intrinsics, perhaps with some extra CFLAGS, compile both implementations and
# select which one to use at runtime, depending on whether SSE 4.2 is supported
# by the processor we're running on.
#
# You can override this logic by setting the appropriate USE_*_CRC32 flag to 1
# in the template or configure command line.
if test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"" && test x"$USE_SLICING_BY_8_CRC32C" = x""; then
if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && test x"$SSE4_2_TARGETED" = x"1" ; then
USE_SSE42_CRC32C=1
else
# the CPUID instruction is needed for the runtime check.
if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && (test x"$pgac_cv__get_cpuid" = x"yes" || test x"$pgac_cv__cpuid" = x"yes"); then
USE_SSE42_CRC32C_WITH_RUNTIME_CHECK=1
else
# fall back to slicing-by-8 algorithm which doesn't require any special
# CPU support.
USE_SLICING_BY_8_CRC32C=1
fi
fi
fi
# Set PG_CRC32C_OBJS appropriately depending on the selected implementation.
AC_MSG_CHECKING([which CRC-32C implementation to use])
if test x"$USE_SSE42_CRC32C" = x"1"; then
AC_DEFINE(USE_SSE42_CRC32C, 1, [Define to 1 use Intel SSE 4.2 CRC instructions.])
PG_CRC32C_OBJS="pg_crc32c_sse42.o"
AC_MSG_RESULT(SSE 4.2)
else
if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then
AC_DEFINE(USE_SSE42_CRC32C_WITH_RUNTIME_CHECK, 1, [Define to 1 to use Intel SSSE 4.2 CRC instructions with a runtime check.])
PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_choose.o"
AC_MSG_RESULT(SSE 4.2 with runtime check)
else
AC_DEFINE(USE_SLICING_BY_8_CRC32C, 1, [Define to 1 to use Intel SSE 4.2 CRC instructions with a runtime check.])
PG_CRC32C_OBJS="pg_crc32c_sb8.o"
AC_MSG_RESULT(slicing-by-8)
fi
fi
AC_SUBST(PG_CRC32C_OBJS)
# 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([-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 optimizations that do aggresive-loop-optimization for variable length array; needed for gcc 4.8+
PGAC_PROG_CC_CFLAGS_OPT([-fno-aggressive-loop-optimizations])
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])
fi
# supply -g if --enable-debug
if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then
if test "$GCC" = yes; then
CFLAGS="$CFLAGS -g -ggdb"
else
CFLAGS="$CFLAGS -g"
fi
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)
# Generate HAWQ version file.
if [[ -x getversion ]] ; then
./getversion > VERSION
fi
# Get the HAWQ version string from ./VERSION
# If there is no VERSION file, set the version to devel
if [[ -f VERSION ]] ; then
HQ_VERSION=`cat VERSION`
else
HQ_VERSION="devel"
fi
GP_VERSION='4.2.0 build 1'
GP_VERSION_IN="src/include/catalog/gp_version.in"
GP_VERSION_HEADER="src/include/catalog/gp_version.h"
if grep '\$\$' $GP_VERSION_IN > /dev/null 2>&1 ; then
sed "s,\\$.*\\$\\$,$HQ_VERSION," $GP_VERSION_IN > $GP_VERSION_HEADER
fi
# Create compiler version string
if test x"$GCC" = x"yes" ; then
cc_string="GCC `${CC} --version | sed q`"
else
cc_string=$CC
fi
AC_DEFINE_UNQUOTED(PG_VERSION_STR,
["PostgreSQL $PACKAGE_VERSION (Greenplum Database $GP_VERSION) (HAWQ $HQ_VERSION) on $host, compiled by $cc_string"],
[A string containing the version number, platform, and C compiler])
if `echo "$HQ_VERSION" | grep "main build" > /dev/null 2>&1` ; then
HQ_VERSION="1.0.0"
fi
AC_DEFINE_UNQUOTED(GP_VERSION,
["$GP_VERSION"],
[A string containing the Greenplum version number])
AC_DEFINE_UNQUOTED(HQ_VERSION,
["$HQ_VERSION"],
[A string containing the HAWQ version number])
dnl If we are a development build, fake a numeric version number
dnl this needs to be manually updated each time we branch a new version
[GP_MAJORVERSION=`expr "$GP_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`]
AC_SUBST(GP_MAJORVERSION)
AC_DEFINE_UNQUOTED(GP_MAJORVERSION, "$GP_MAJORVERSION", [Greenplum major version as a string])
[HQ_MAJORVERSION=`expr "$HQ_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`]
AC_SUBST(HQ_MAJORVERSION)
AC_DEFINE_UNQUOTED(HQ_MAJORVERSION, "$HQ_MAJORVERSION", [HAWQ major version as a string])
#
# 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, [ --enable-depend turn on automatic dependency tracking],
[autodepend=yes])
AC_SUBST(autodepend)
#
# Enable assert checks
#
PGAC_ARG_BOOL(enable, cassert, no, [ --enable-cassert enable assertion checks (for debugging)],
[AC_DEFINE([USE_ASSERT_CHECKING], 1,
[Define to 1 to build with assertion checks. (--enable-cassert)])])
#
# Enable forced plans
#
PGAC_ARG_BOOL(enable, forceplan, no, [ --enable-forceplan enable forcing of plans via EXPLAIN FORCE (for debugging)],
[AC_DEFINE([USE_FORCE_PLAN], 1,
[Define to 1 to build with plan forcing capabilities. (--enable-forceplan)])])
#
# Enable debug_break
#
PGAC_ARG_BOOL(enable, debugbreak, no, [ --enable-debugbreak enable debug_break and debug_break_n (for debugging)],
[AC_DEFINE([USE_DEBUG_BREAK], 1,
[Define to 1 to build with debug_break capabilities. (--enable-debugbreak)])])
# Enable debug ntuplestore
PGAC_ARG_BOOL(enable, debugntuplestore, no, [ --enable-ntuplestore enable debug_ntuplestore (for debugging)],
[AC_DEFINE([USE_DEBUG_NTUPLESTORE], 1,
[Define to 1 to build with debug_ntuplestore. (--enable-ntuplestore)])])
#
# Enable testing utilities
#
PGAC_ARG_BOOL(enable, testutils, no, [ --enable-testutils enable testing utilities],
[AC_DEFINE([USE_TEST_UTILS], 1,
[Define to 1 to build with testing utilities. (--enable-testutils)])])
#
# --enable-snmp enables snmp mib and trap/inform
#
PGAC_ARG_BOOL(enable, snmp, no, [ --enable-snmp enable snmp for MIB and alerts via TRAP/INFORM],
[AC_DEFINE([USE_SNMP], 1,
[Define to 1 to build with snmp capabilities. (--enable-snmp)])])
AC_MSG_RESULT([checking whether to build with snmp... $enable_snmp])
AC_SUBST(enable_snmp)
#
# --enable-gphdfs enables GPHDFS support
#
PGAC_ARG_BOOL(enable, gphdfs, no, [ --enable-gphdfs enables GPHDFS support],
[AC_DEFINE([USE_GPHDFS], 1,
[Define to 1 to build with gphdfs capabilities. (--enable-gphdfs)])])
AC_MSG_RESULT([checking whether to build with gphdfs...$enable_gphdfs])
AC_SUBST(enable_gphdfs)
#
# --enable-email enables email alerts
#
PGAC_ARG_BOOL(enable, email, no, [ --enable-email enable email alerts],
[AC_DEFINE([USE_EMAIL], 1,
[Define to 1 to build with email alert capabilities. (--enable-email)])])
AC_MSG_RESULT([checking whether to build with email...$enable_email])
AC_SUBST(enable_email)
#
# Enable Pivotal Query Optimizer
#
PGAC_ARG_BOOL(enable, orca, no, [ --enable-orca enable Pivotal Query Optimizer],
[AC_DEFINE([USE_ORCA], 1,
[Define to 1 to build with Pivotal Query Optimizer. (--enable-orca)])])
AC_SUBST(enable_orca)
#
# Enable hawq ranger plugin
#
PGAC_ARG_BOOL(enable, rps, no, [ --enable-rps enable hawq ranger plugin],
[AC_DEFINE([USE_RANGER], 1,
[Define to 1 to build with hawq ranger plugin. (--enable-rps)])])
AC_SUBST(enable_rps)
#
# Enable thread-safe client libraries
#
AC_MSG_CHECKING([allow thread-safe client libraries])
# GPDB wants the default here to be "yes", unlike PostgreSQL.
# it's also required for Win32 client builds.
PGAC_ARG_BOOL(enable, thread-safety, yes, [ --disable-thread-safety Do not make client libraries thread-safe])
PGAC_ARG_BOOL(enable, thread-safety-force, no, [ --enable-thread-safety-force force thread-safety despite thread test failure])
if test "$enable_thread_safety" = yes -o \
"$enable_thread_safety_force" = yes; then
enable_thread_safety="yes" # for 'force'
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, [ --with-tcl 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, [ --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, [ --with-perl 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, [ --with-python build Python modules (PL/Python)])
AC_MSG_RESULT([$with_python])
AC_SUBST(with_python)
#
# Optionally build Java modules (PL/Java)
#
AC_MSG_CHECKING([whether to build Java modules])
PGAC_ARG_BOOL(with, java, no, [ --with-java build Java modules (PL/Java)])
AC_MSG_RESULT([$with_java])
AC_SUBST(with_java)
#
# Optionally build R modules (PL/R)
#
AC_MSG_CHECKING([whether to build R modules])
PGAC_ARG_BOOL(with, r, no, [ --with-r build R modules (PL/R)])
AC_MSG_RESULT([$with_r])
AC_SUBST(with_r)
#
# Optionally build with pgcrypto.
#
AC_MSG_CHECKING([whether to build pgcrypto modules])
PGAC_ARG_BOOL(with, pgcrypto, no, [ --with-pgcrypto build with pgcrypto ])
AC_MSG_RESULT([$with_pgcrypto])
AC_SUBST(with_pgcrypto)
#
# Optionally build with orc format in pluggable storage framework.
#
AC_MSG_CHECKING([whether to build orc modules])
PGAC_ARG_BOOL(with, orc, yes, [ --with-orc build with orc format])
AC_MSG_RESULT([$with_orc])
AC_SUBST(with_orc)
#
#
# GSSAPI
#
AC_MSG_CHECKING([whether to build with GSSAPI support])
PGAC_ARG_BOOL(with, gssapi, no, [ --with-gssapi 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(with_gssapi)
#
# Kerberos 5
#
AC_MSG_CHECKING([whether to build with Kerberos 5 support])
PGAC_ARG_BOOL(with, krb5, no, [ --with-krb5 build with Kerberos 5 support],
[
AC_DEFINE(KRB5, 1, [Define to build with Kerberos 5 support. (--with-krb5)])
krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab"
])
AC_MSG_RESULT([$with_krb5])
AC_SUBST(with_krb5)
AC_SUBST(krb_srvtab)
#
# Kerberos configuration parameters
#
PGAC_ARG_REQ(with, krb-srvnam,
[ --with-krb-srvnam=NAME default service principal name in Kerberos [[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. (--with-krb-srvnam=NAME)])
#
# PAM
#
AC_MSG_CHECKING([whether to build with PAM support])
PGAC_ARG_BOOL(with, pam, no,
[ --with-pam build with PAM support],
[AC_DEFINE([USE_PAM], 1, [Define to 1 to build with PAM support. (--with-pam)])])
AC_MSG_RESULT([$with_pam])
AC_SUBST(with_pam)
#
# LDAP
#
AC_MSG_CHECKING([whether to build with LDAP support])
PGAC_ARG_BOOL(with, ldap, no,
[ --with-ldap build with LDAP support],
[AC_DEFINE([USE_LDAP], 1, [Define to 1 to build with LDAP support. (--with-ldap)])])
AC_MSG_RESULT([$with_ldap])
AC_SUBST(with_ldap)
#
# Bonjour
#
AC_MSG_CHECKING([whether to build with Bonjour support])
PGAC_ARG_BOOL(with, bonjour, no,
[ --with-bonjour build with Bonjour support],
[AC_DEFINE([USE_BONJOUR], 1, [Define to 1 to build with Bonjour support. (--with-bonjour)])])
AC_MSG_RESULT([$with_bonjour])
AC_SUBST(with_bonjour)
#
# OpenSSL
#
AC_MSG_CHECKING([whether to build with OpenSSL support])
PGAC_ARG_BOOL(with, openssl, no, [ --with-openssl build with OpenSSL support],
[AC_DEFINE([USE_SSL], 1, [Define to build with (Open)SSL support. (--with-openssl)])])
AC_MSG_RESULT([$with_openssl])
AC_SUBST(with_openssl)
#
# Readline
#
PGAC_ARG_BOOL(with, readline, yes,
[ --without-readline 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
#
# libyarn
#
PGAC_ARG_BOOL(with, libyarn, yes,
[ --without-libyarn do not build libyarn])
AC_SUBST(with_libyarn)
#
# libhdfs3
#
PGAC_ARG_BOOL(with, libhdfs3, yes,
[ --without-libhdfs3 do not build libhdfs3])
AC_SUBST(with_libhdfs3)
#
# dbcommon
#
PGAC_ARG_BOOL(with, dbcommon, yes,
[ --without-dbcommon do not build dbcommon])
AC_SUBST(with_dbcommon)
#
# univplan
#
PGAC_ARG_BOOL(with, univplan, yes,
[ --without-univplan do not build univplan])
AC_SUBST(with_univplan)
#
# storage
#
PGAC_ARG_BOOL(with, storage, yes,
[ --without-storage do not build storage])
AC_SUBST(with_storage)
#
# Prefer libedit
#
# In GPDB we want the default to be yes, because we don't want to link with GPL code.
#
PGAC_ARG_BOOL(with, libedit-preferred, yes,
[ --without-libedit-preferred Don't prefer BSD Libedit over GNU Readline])
#
# tzdata
#
PGAC_ARG_REQ(with, system-tzdata,
[ --with-system-tzdata=DIR use system time zone data in DIR])
AC_SUBST(with_system_tzdata)
#
# Zlib
#
PGAC_ARG_BOOL(with, zlib, yes,
[ --without-zlib do not use Zlib])
AC_SUBST(with_zlib)
#
# Realtime library
#
PGAC_ARG_BOOL(with, rt, yes,
[ --without-rt do not use Realtime Library])
AC_SUBST(with_rt)
#
# Elf
#
# Assume system is ELF if it predefines __ELF__ as 1,
# otherwise believe host_os based default.PostgreSQL
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)
#
# Include directories
#
#INCLUDES="$INCLUDES -I$ac_pwd/depends/thirdparty/googletest/googletest/include -I$ac_pwd/depends/thirdparty/googletest/googlemock/include"
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
#
#LIBDIRS="$LIBDIRS -L$ac_pwd/depends/thirdparty/googletest/build/googlemock/gtest -L$ac_pwd/depends/thirdparty/googletest/build/googlemock"
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
#
# 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])
AC_MSG_NOTICE([using CPPFLAGS=$CPPFLAGS])
AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS])
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_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_MAVEN
PGAC_PATH_GPERF
PGAC_PATH_PERL
PGAC_CHECK_PERL_MODULES([JSON])
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
PGAC_PATH_PYTHON
if test "$with_python" = yes; then
PGAC_CHECK_PYTHON_EMBED_SETUP
fi
if test "$with_java" = yes; then
PGAC_PATH_JAVA
PGAC_CHECK_JAVA_EMBED_SETUP
fi
if test "$enable_rps" = yes; then
PGAC_PATH_TOMCAT
PGAC_CHECK_TOMCAT_EMBED_SETUP
fi
ZIC=
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
# 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])
#
[GP_VERSION_NUM="`echo "$GP_VERSION" | sed 's/[A-Za-z].*$//' |
tr '.' ' ' |
$AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"]
AC_DEFINE_UNQUOTED(GP_VERSION_NUM, $GP_VERSION_NUM, [Greenplum version as a number])
[HQ_VERSION_NUM="`echo "$HQ_VERSION" | sed 's/[A-Za-z].*$//' |
tr '.' ' ' |
$AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"]
AC_DEFINE_UNQUOTED(HQ_VERSION_NUM, $HQ_VERSION_NUM, [HAWQ version as a number])
##
## 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 wsock32])
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)
# 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 "$with_r" = yes; then
AC_MSG_CHECKING([R_HOME])
if test "x${R_HOME}" = x; then
r_home_guess=`pkg-config --variable=rhome libR 2>/dev/null`
if test "x${r_home_guess}" != "x"; then
R_HOME=$r_home_guess
else
AC_MSG_ERROR([Failed to set R_HOME. R is not installed? Or R_HOME is not set
or pkg-config is not installed to find R_HOME automatically.
Check config.log for details or not use --with-r if you do not want the PL/R support.])
fi
fi
AC_MSG_RESULT(${R_HOME})
AC_SUBST(R_HOME)
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 "$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.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-gssapi if you don't want the GSSAPI support.])])
else
LIBS="$LIBS -lgssapi32"
fi
fi
if test "$with_krb5" = yes ; then
if test "$PORTNAME" != "win32"; then
AC_SEARCH_LIBS(com_err, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken' com_err 'com_err -lssl -lcrypto'], [],
[AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-krb5 if you don't want the Kerberos 5 support.])])
AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -lcrypto -ldes -lasn1 -lroken'], [],
[AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-krb5 if you don't want the Kerberos 5 support.])])
else
AC_SEARCH_LIBS(com_err, 'comerr32 -lkrb5_32', [],
[AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-krb5 if you don't want the Kerberos 5 support.])])
fi
fi
if test "$with_openssl" = yes ; then
dnl workaround for 'brew link openssl --force' error on MacOS 10.12
if test "$PORTNAME" == "darwin"; then
LDFLAGS = "$LDFLAGS -L/usr/local/opt/openssl/lib"
fi
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.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-openssl if you don't want the OpenSSL support.])])
AC_CHECK_LIB(ssl, SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-openssl if you don't want the OpenSSL support.])])
else
AC_CHECK_LIB(eay32, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'eay32' is required for OpenSSL.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-openssl if you don't want the OpenSSL support.])])
AC_CHECK_LIB(ssleay32, SSL_library_init, [], [AC_MSG_ERROR([library 'ssleay32' is required for OpenSSL.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-openssl if you don't want the OpenSSL support.])])
fi
fi
if test "$with_rt" = yes ; then
AC_CHECK_LIB(rt, clock_gettime, [],
[AC_MSG_WARN([Realtime library not found.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Use --without-rt to avoid using the Realtime library.])])
fi
if test "$with_pam" = yes ; then
AC_CHECK_LIB(pam, pam_start, [], [AC_MSG_ERROR([library 'pam' is required for PAM.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-pam if you don't want the PAM support.])])
fi
# Check for curl.
AC_CHECK_CURL([7.0.0])
CFLAGS="$CFLAGS $CURL_CFLAGS"
LIBS="$LIBS $CURL_LIBS"
# Check for bzip2
AC_CHECK_HEADERS(bzlib.h, [], [AC_MSG_ERROR([header file <bzlib.h> is required.
'bzip2' is used for table compression. Check config.log for details.
It is possible the compiler isn't looking in the proper directory.])])
AC_SEARCH_LIBS(BZ2_bzDecompress, bz2, [], [AC_MSG_ERROR([library 'bzip2' is required.
'bzip2' is used for table compression. Check config.log for details.
It is possible the compiler isn't looking in the proper directory.])])
# Check for snappy
AC_CHECK_HEADERS(snappy-c.h, [], [AC_MSG_ERROR([header file <snappy-c.h> is required.
'snappy' is used for table compression. Check config.log for details.
It is possible the compiler isn't looking in the proper directory.])])
AC_SEARCH_LIBS(snappy_max_compressed_length, snappy, [], [AC_MSG_ERROR([library 'snappy' is required.
'snappy' is used for table compression. Check config.log for details.
It is possible the compiler isn't looking in the proper directory.])])
AC_LANG_PUSH([C++])
# Check for thrift
AC_CHECK_HEADERS(thrift/protocol/TBinaryProtocol.h, [], [AC_MSG_ERROR([thrift is required])])
# Check for boost
AC_CHECK_HEADERS(boost/chrono.hpp, [], [AC_MSG_ERROR([boost is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
AC_LANG_POP([C++])
# Check for libyaml
AC_CHECK_HEADERS(yaml.h, [], [AC_MSG_ERROR([header file <yaml.h> is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
AC_SEARCH_LIBS(yaml_get_version, yaml, [], [AC_MSG_ERROR([library 'libyaml' is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
# Check for libevent
AC_CHECK_HEADERS(event.h, [], [AC_MSG_ERROR([header file <event.h> is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
AC_SEARCH_LIBS(event_init, event, [], [AC_MSG_ERROR([library 'libevent' is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
# Check for sigar
AC_SEARCH_LIBS(sigar_open, sigar)
# Check for net-snmp
if test "$enable_snmp" = yes ; then
AC_CHECK_LIB(netsnmp, netsnmp_ds_set_string, [], [AC_MSG_ERROR([library 'netsnmp' is required for snmp support.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --enable-snmp if you don't want to enable the snmp support.])])
fi
# Check for libesmtp
if test "$enable_email" = yes ; then
if test "$with_openssl" != yes ; then
AC_MSG_ERROR([--enable-email requires --with-openssl])
fi
AC_CHECK_LIB(esmtp, smtp_start_session, [], [AC_MSG_ERROR([library 'libesmtp' is required for email alert support.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --enable-email if you don't want to enable the email alert support.])])
fi
##
## Header files
##
dnl sys/socket.h is required by AC_FUNC_ACCEPT_ARGTYPES
AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.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 kernel/OS.h kernel/image.h SupportDefs.h])
# On BSD, cpp 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
])
# At least on IRIX, cpp 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.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-gssapi if you don't want the GSSAPI support.])])])
fi
if test "$with_krb5" = yes ; then
AC_CHECK_HEADER(krb5.h, [], [AC_MSG_ERROR([header file <krb5.h> is required for Kerberos 5.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-krb5 if you don't want the Kerberos 5 support.])])
fi
if test "$with_openssl" = yes ; then
dnl workaround for 'brew link openssl --force' error on MacOS 10.12
if test "$PORTNAME" == "darwin"; then
CPPFLAGS="$CPPFLAGS -I/usr/local/opt/openssl/include"
fi
AC_CHECK_HEADER(openssl/ssl.h, [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-openssl if you don't want to the OpenSSL support.])])
AC_CHECK_HEADER(openssl/err.h, [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-openssl if you don't want to the OpenSSL support.])])
AC_CHECK_FUNCS([ERR_set_mark])
fi
BACKUPCPPFLAG=${CPPFLAGS}
BACKUPLDFLAG=${LDFLAGS}
if test "$PORTNAME" == "darwin"; then
CPPFLAGS="-I/usr/local/opt/openssl/include $CPPFLAGS"
LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS"
fi
if test ! x"${DEPENDENCY_INSTALL_PREFIX}" == x""; then
CPPFLAGS="-I${DEPENDENCY_INSTALL_PREFIX}/include $CPPFLAGS"
LDFLAGS="-L${DEPENDENCY_INSTALL_PREFIX}/lib $LDFLAGS"
fi
AC_SEARCH_LIBS(EVP_aes_256_ctr,crypto, [], [AC_MSG_ERROR([function 'EVP_aes_256_ctr' in library 'openssl' is required by libhdfs3.You can export DEPENDENCY_INSTALL_PREFIX as custom path.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
CPPFLAGS=${BACKUPCPPFLAG}
LDFLAGS=${BACKUPLDFLAG}
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.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Use --without-pam to disable the PAM 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.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
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(DNSServiceDiscovery/DNSServiceDiscovery.h, [], [AC_MSG_ERROR([header file <DNSServiceDiscovery/DNSServiceDiscovery.h> is required for Bonjour.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
fi
# For processor affinity support in Linux on NUMA platforms such as
# AMD x86_64, the 'numactl' or 'libnuma' package is required. See
# http://lwn.net/Articles/67005/
# http://www.x86-64.org/pipermail/discuss/2003-May/003528.html
case $template in
linux*)
AC_CHECK_LIB(numa, numa_available)
AC_CHECK_HEADERS([numa.h])
;;
esac
# net-snmp
if test "$enable_snmp" = yes; then
AC_CHECK_HEADERS([net-snmp/net-snmp-config.h], [],
[AC_MSG_ERROR([header file <net-snmp/net-snmp-config.h> is required for snmp support.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Use --disable-snmp to disable the snmp support.])])
fi
# email
if test "$enable_email" = yes; then
AC_CHECK_HEADERS(libesmtp.h, [],
[AC_MSG_ERROR([header file <libesnmp.h> is required for email alert support.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Use --disable-email to disable the snmp support.])])
AC_CHECK_HEADERS(auth-client.h, [],
[AC_MSG_ERROR([header file <auth-client.h> is required for email alert support.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Use --disable-email to disable the snmp support.])])
fi
# realtime library header
if test "$with_rt" = yes; then
AC_CHECK_HEADERS([time.h], [],
[AC_MSG_ERROR([header file <time.h> is required for realtime library support.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Use --without-rt to avoid using realtime library.])])
fi
# json-c
AC_CHECK_HEADERS(json-c/json.h, [], [AC_MSG_ERROR([header file <json-c/json.h> is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
AC_SEARCH_LIBS(json_tokener_parse, json-c json, [], [AC_MSG_ERROR([library 'json-c' is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])], [])
# libxml2
AM_PATH_XML2([2.7.6], [], [AC_MSG_ERROR([libxml2 is required.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.])])
pgac_args="$pgac_args with_xml_prefix with_xml_exec_prefix enable_xmltest"
CFLAGS="$CFLAGS $XML_CPPFLAGS"
# apr for gpfdist
AC_CHECK_PROG([APR_CONFIG], [apr-1-config],[yes])
test -z "$APR_CONFIG" && AC_MSG_ERROR([Please install apr from http://apr.apache.org/ and add dir of 'apr-1-config' to env variable '$PATH'.])
##
## Types, structures, compiler characteristics
##
m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that.
AC_C_BIGENDIAN
AC_C_CONST
AC_C_INLINE
AC_C_STRINGIZE
PGAC_C_SIGNED
AC_C_VOLATILE
PGAC_C_FUNCNAME_SUPPORT
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
AC_CHECK_TYPES([struct cmsgcred, struct fcred, struct sockcred], [], [],
[#include <sys/param.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ucred.h>])
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
if test "$with_krb5" = yes; then
# Check for differences between MIT and Heimdal (KTH) releases
AC_CHECK_MEMBERS(krb5_ticket.enc_part2, [],
[AC_CHECK_MEMBERS(krb5_ticket.client, [],
[AC_MSG_ERROR([could not determine how to get client name from Kerberos 5 ticket])],
[#include <krb5.h>])],
[#include <krb5.h>])
AC_CHECK_MEMBERS(krb5_error.text.data, [],
[AC_CHECK_MEMBERS(krb5_error.e_data, [],
[AC_MSG_ERROR([could not determine how to extract Kerberos 5 error messages])],
[#include <krb5.h>])],
[#include <krb5.h>])
# Win32 requires headers to be loaded for __stdcall, so can't use
# AC_CHECK_FUNCS here.
AC_MSG_CHECKING(for krb5_free_unparsed_name)
AC_TRY_LINK([#include <krb5.h>],
[krb5_free_unparsed_name(NULL,NULL);],
[AC_DEFINE(HAVE_KRB5_FREE_UNPARSED_NAME, 1, [Define to 1 if you have krb5_free_unparsed_name])
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])
fi
##
## Functions, global variables
##
PGAC_VAR_INT_TIMEZONE
AC_FUNC_ACCEPT_ARGTYPES
PGAC_FUNC_GETTIMEOFDAY_1ARG
AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getifaddrs getpeereid getpeerucred getrlimit memmove poll pstat readlink setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs])
# 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], [], [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
# Some versions of libedit contain strlcpy(); so disregard that library while
# checking for these standard libc functions.
pgac_save_LIBS="$LIBS"
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g' -e 's/-lnetsnmp//g'`
AC_REPLACE_FUNCS([crypt fseeko getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul unsetenv])
case $host_os in
# Windows uses a specialised env handler
mingw*)
AC_DEFINE(HAVE_UNSETENV, 1, [Define to 1 because replacement version used.])
ac_cv_func_unsetenv=yes;;
*)
AC_REPLACE_FUNCS([unsetenv])
;;
esac
LIBS="$pgac_save_LIBS"
# 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.
# (Note: the AC_REPLACE_FUNCS probe fails on Windows, where the available
# versions of getaddrinfo don't follow normal C call protocol. This is OK
# because we want to use our own getaddrinfo.c on Windows anyway.)
if test x"$ac_cv_type_struct_addrinfo" = xyes ; 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
# Win32 support
if test "$PORTNAME" = "win32"; then
AC_REPLACE_FUNCS(gettimeofday)
AC_LIBOBJ(kill)
AC_LIBOBJ(open)
AC_LIBOBJ(rand)
AC_LIBOBJ(win32env)
AC_LIBOBJ(win32error)
AC_DEFINE([HAVE_SYMLINK], 1,
[Define to 1 if you have the `symlink' function.])
fi
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([replace_history_entry])
fi
dnl Cannot use AC_CHECK_FUNC because finite may be a macro
AC_MSG_CHECKING(for finite)
AC_TRY_LINK([
#include <math.h>
double glob_double;
],
[return finite(glob_double) ? 0 : 1;],
[AC_DEFINE(HAVE_FINITE, 1, [Define to 1 if you have finite().])
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])
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_MSG_CHECKING(for sigsetjmp)
AC_TRY_LINK([#include <setjmp.h>],
[sigjmp_buf x; sigsetjmp(x, 1);],
[AC_DEFINE(HAVE_SIGSETJMP, 1, [Define to 1 if you have sigsetjmp().])
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])
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])
# Check for one of atexit() or on_exit()
AC_CHECK_FUNCS(atexit, [],
[AC_CHECK_FUNCS(on_exit, [],
[AC_MSG_ERROR([neither atexit() nor on_exit() found])])])
AC_REPLACE_FUNCS(fseeko)
case $host_os in
# BSD/OS & NetBSD use a custom fseeko/ftello built on fsetpos/fgetpos
# Mingw uses macros to access Win32 API calls
bsdi*|netbsd*|mingw*)
AC_DEFINE(HAVE_FSEEKO, 1, [Define to 1 because replacement version used.])
ac_cv_func_fseeko=yes;;
*)
AC_FUNC_FSEEKO;;
esac
#
# 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"
# At this point, we don't want to muck with the compiler name for threading.
# Let's see who fails, perhaps AIX. 2004-04-23
if test "$PTHREAD_CC" != "$CC"; then
AC_MSG_ERROR([
PostgreSQL does not support platforms that require a special compiler
for thread safety.])
fi
if test "$THREAD_SUPPORT" = no; then
AC_MSG_ERROR([cannot enable threads on this platform
This platform is known to not support thread-safe programs. For details,
compile and run src/bin/pg_thread_test.])
fi
# 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, required for --enable-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_PRINTF_ARG_CONTROL
if test $pgac_cv_printf_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"no" ; then
PGAC_TYPE_64BIT_INT([long long int])
if test x"$HAVE_LONG_LONG_INT_64" = x"no" ; then
AC_MSG_ERROR([Cannot find a working 64-bit integer type.])
fi
fi
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_FORMAT
if test "$LONG_LONG_INT_FORMAT" = ""; then
# Force usage of our own snprintf, since system snprintf is broken
pgac_need_repl_snprintf=yes
LONG_LONG_INT_FORMAT='%lld'
fi
else
# Here if we previously decided we needed to use our own snprintf
LONG_LONG_INT_FORMAT='%lld'
fi
LONG_LONG_UINT_FORMAT=`echo "$LONG_LONG_INT_FORMAT" | sed 's/d$/u/'`
INT64_FORMAT="\"$LONG_LONG_INT_FORMAT\""
UINT64_FORMAT="\"$LONG_LONG_UINT_FORMAT\""
else
# Here if we are not using 'long long int' at all
INT64_FORMAT='"%ld"'
UINT64_FORMAT='"%lu"'
fi
AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT,
[Define to the appropriate snprintf format for 64-bit ints, if any.])
AC_DEFINE_UNQUOTED(UINT64_FORMAT, $UINT64_FORMAT,
[Define to the appropriate snprintf format for unsigned 64-bit ints, if any.])
# Define the length of char bytes needed to represent int32
AC_DEFINE(INT32_CHAR_SIZE, 12,
[Define number of bytes required to represent an Int32 in Char format])
# 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
# Need a #define for the size of Datum (unsigned long)
AC_CHECK_SIZEOF([unsigned long])
# And check size of void *, size_t (enables tweaks for > 32bit address space)
AC_CHECK_SIZEOF([void *])
AC_CHECK_SIZEOF([size_t])
# Determine memory alignment requirements for the basic C data types.
PGAC_CHECK_ALIGNOF(short)
PGAC_CHECK_ALIGNOF(int)
PGAC_CHECK_ALIGNOF(long)
if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then
PGAC_CHECK_ALIGNOF(long long int)
fi
PGAC_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=$pgac_cv_alignof_long
if test $MAX_ALIGNOF -lt $pgac_cv_alignof_double ; then
MAX_ALIGNOF=$pgac_cv_alignof_double
fi
if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $pgac_cv_alignof_long_long_int ; then
MAX_ALIGNOF="$pgac_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>
#ifdef HAVE_SUPPORTDEFS_H
#include <SupportDefs.h>
#endif])
# 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>])
# If the user did not disable integer datetimes, check that
# there is a working 64-bit integral type to use.
if test x"$USE_INTEGER_DATETIMES" = x"yes" &&
test x"$HAVE_LONG_INT_64" = x"no" &&
test x"$HAVE_LONG_LONG_INT_64" = x"no" &&
test x"$HAVE_INT64" = x"no" ; then
AC_MSG_ERROR([
Integer-based datetime support requires a 64-bit integer type,
but no such type could be found. The --disable-integer-datetimes
configure option can be used to disable integer-based storage
of datetime values.])
fi
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.])
fi
fi
if test $ac_cv_func_fseeko = yes; then
AC_SYS_LARGEFILE
AC_SUBST(enable_largefile)
else
enable_largefile=no
AC_SUBST(enable_largefile)
fi
# Check for largefile support (must be after AC_SYS_LARGEFILE)
AC_CHECK_SIZEOF([off_t])
if test "$PORTNAME" != "win32"; then
# 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
fi
# SunOS doesn't handle negative byte comparisons properly with +/- return
AC_FUNC_MEMCMP
# 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
# 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.
Check config.log for details. It is possible the compiler isn't looking in the proper directory.
Don't use --with-tcl if you don't want to enable to PL/Tcl funciontality.])])
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(SGMLSPL, sgmlspl)
# 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_force" = yes; then
if test "$PORTNAME" != "win32"
then
AC_MSG_WARN([
*** Skipping thread test program. --enable-thread-safety-force was used.
*** Run the program in src/test/thread on the your machine and add proper
*** locking function calls to your applications to guarantee thread safety.
])
else
AC_MSG_WARN([*** skipping thread test on Win32])
fi
elif 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' for the
exact reason.
You can use the configure option --enable-thread-safety-force to force
threads to be enabled. But you must then run the program in
src/test/thread and add locking function calls to your applications to
guarantee 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.
# (Note that shared library links won't use this switch, though.)
# 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
# Begin output steps
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/VERSIONS.mk depends/thirdparty/googletest/Makefile.global depends/libhdfs3/Makefile.global depends/libyarn/Makefile.global depends/dbcommon/Makefile.global depends/univplan/Makefile.global depends/storage/Makefile.global src/Makefile.global src/pl/pljava/src/java/Makefile.global ranger-plugin/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/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
# Remove build_timestamp file to make sure rebuild depends lib: libhdfs & libyarn & dbcommon & univplan & storage
rm -f depends/libhdfs3/build/libhdfs3_build_timestamp
rm -f depends/libyarn/build/libyarn_build_timestamp
rm -f depends/dbcommon/build/dbcommon_build_timestamp
rm -f depends/univplan/build/univplan_build_timestamp
rm -f depends/storage/build/storage_build_timestamp
rm -f depends/thirdparty/gporca_build_timestamp
rm -f depends/thirdparty/gpos_build_timestamp
rm -f depends/thirdparty/gp-xerces_build_timestamp
rm -f depends/thirdparty/gpos_build_timestamp
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/interfaces/ecpg/include/ecpg_config.h],
[echo >src/interfaces/ecpg/include/stamp-h])
AC_OUTPUT
# Warn about unknown options
PGAC_ARG_CHECK