Skip to content
Snippets Groups Projects
configure.in 36.1 KiB
Newer Older
Bruce Momjian's avatar
Bruce Momjian committed
    AC_MSG_CHECKING(whether snprintf handles 'long long int' as %qd)
Marc G. Fournier's avatar
 
Marc G. Fournier committed
    AC_TRY_RUN([#include <stdio.h>
typedef long long int int64;
#define INT64_FORMAT "%qd"
Bruce Momjian's avatar
Bruce Momjian committed
 
Marc G. Fournier's avatar
 
Marc G. Fournier committed
int64 a = 20000001;
int64 b = 40000005;
Bruce Momjian's avatar
Bruce Momjian committed
 
Marc G. Fournier's avatar
 
Marc G. Fournier committed
int does_int64_snprintf_work()
Bruce Momjian's avatar
Bruce Momjian committed
{ 
Marc G. Fournier's avatar
 
Marc G. Fournier committed
  int64 c;
  char buf[100];

  if (sizeof(int64) != 8)
    return 0;     /* doesn't look like the right size */

  c = a * b;
  snprintf(buf, 100, INT64_FORMAT, c);
  if (strcmp(buf, "800000140000005") != 0)
    return 0;     /* either multiply or snprintf is busted */
  return 1;
}
main() {
  exit(! does_int64_snprintf_work());
}],
  [ AC_MSG_RESULT(yes)
    INT64_FORMAT='"%qd"'
  ],
  [ AC_MSG_RESULT(no)
	# Force usage of our own snprintf, since system snprintf is broken
        pgac_need_repl_snprintf=yes
  [ AC_MSG_RESULT([cannot test (not on host machine)])
	# Force usage of our own snprintf, since we cannot test foreign snprintf
        pgac_need_repl_snprintf=yes
	INT64_FORMAT='"%lld"'
  ]) ],
  [ AC_MSG_RESULT([cannot test (not on host machine)])
	# Force usage of our own snprintf, since we cannot test foreign snprintf
        pgac_need_repl_snprintf=yes
	INT64_FORMAT='"%lld"'
  ])
  else
    # here if we previously decided we needed to use our own snprintf
    INT64_FORMAT='"%lld"'
  fi
else
  # Here if we are not using 'long long int' at all
  INT64_FORMAT='"%ld"'
AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT,
                   [Define this as the appropriate snprintf format for 64-bit ints, if any])
if test $pgac_need_repl_snprintf = yes; then
  AC_LIBOBJ(snprintf)
fi
dnl Need a #define for the size of Datum (unsigned long)

AC_CHECK_SIZEOF([unsigned long])
AC_DEFINE_UNQUOTED(SIZEOF_DATUM, $ac_cv_sizeof_unsigned_long, [sizeof(Datum) -- don't change])
# 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 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_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
    # TCL_INCLUDE_SPEC is only provided in Tcl 8.4 and later
    if test "${TCL_INCLUDE_SPEC+set}" = set; then
	eval TCL_INCLUDE_SPEC=\"$TCL_INCLUDE_SPEC\"
    else
	TCL_INCLUDE_SPEC=''
    fi
    AC_SUBST(TCL_INCLUDE_SPEC)dnl
# 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)