Skip to content
Snippets Groups Projects
configure.in 38.9 KiB
Newer Older
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'.])
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_FUNC_FSEEKO

#
# 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.
if test "$enable_thread_safety" = yes; then
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --enable-thread-safetys])])
if test "$THREAD_SUPPORT" != yes; then
AC_MSG_ERROR([
Cannot enable threads on your platform.
Please report your platform threading info to the PostgreSQL mailing lists
so it can be added to the next release.  Report all compile flags, link flags,
functions, or libraries required for threading support.
See the comment at the top of src/port/thread.c for more information.
else
# do not use values from template file
THREAD_LIBS=
AC_SUBST(THREAD_SUPPORT)
#
# Check for re-entrant versions of certain functions
#
# Include special flags if threads are enabled _and_ if required for 
# threading on this platform.  Some platforms have *_r functions but
# their natively named funcs are threadsafe, and should be used instead.
#
# One trick here is that if we don't call AC_CHECK_FUNCS, the
# functions are marked "not found", which is perfect.
if test "$enable_thread_safety" = yes -a "$NEED_REENTRANT_FUNCS" = yes ; then
_LIBS="$LIBS"
CFLAGS="$CFLAGS $THREAD_CPPFLAGS"
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
LIBS="$_LIBS"

# 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])])


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.

PGAC_TYPE_64BIT_INT([long int])
if test x"$HAVE_LONG_INT_64" = x"no" ; then
  PGAC_TYPE_64BIT_INT([long long int])
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.])],
# 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 either %lld, %qd, or %I64d as the format.  If
# neither works, 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
    # Here if we previously decided we needed to use our own snprintf
    LONG_LONG_INT_FORMAT='%lld'
  INT64_FORMAT="\"$LONG_LONG_INT_FORMAT\""
else
  # Here if we are not using 'long long int' at all
  INT64_FORMAT='"%ld"'
AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT,
                   [Define to the appropriate snprintf format for 64-bit ints, if any.])
if test $pgac_need_repl_snprintf = yes; then
  AC_LIBOBJ(snprintf)
fi
# Need a #define for the size of Datum (unsigned long)
AC_CHECK_SIZEOF([unsigned long])
# 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)
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"
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>
# 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 test $ac_cv_func_fseeko = yes; then
AC_SYS_LARGEFILE
fi
# Select semaphore implementation type.
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


# Select shared-memory implementation type.
AC_DEFINE(USE_SYSV_SHARED_MEMORY, 1, [Define to select SysV-style shared memory.])
SHMEM_IMPLEMENTATION="src/backend/port/sysv_shmem.c"


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
# Check for Tk configuration script tkConfig.sh
if test "$with_tk" = yes; then
    PGAC_PATH_TKCONFIGSH([$with_tkconfig $with_tclconfig])
    PGAC_EVAL_TCLCONFIGSH([$TK_CONFIG_SH], [TK_LIBS,TK_LIB_SPEC,TK_XINCLUDES])
PGAC_PATH_DOCBOOK_STYLESHEETS
PGAC_PATH_COLLATEINDEX
AC_CHECK_PROGS(SGMLSPL, sgmlspl)
# 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 "$no_create" != yes; then
  if ( test "$srcdir" -ef . ) >/dev/null 2>&1 || test "`cd $srcdir && /bin/pwd`" = "`/bin/pwd`"; then
  else
    AC_SUBST(vpath_build, yes)
    _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)

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/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}
])

AC_CONFIG_HEADERS([src/include/pg_config.h],
# Update timestamp for pg_config.h (see Makefile.global)