1dnl Process this file with autoconf to produce a configure script. 2dnl configure.in 3dnl 4dnl Developers, please strive to achieve this order: 5dnl 6dnl 0. Initialization and options processing 7dnl 1. Programs 8dnl 2. Libraries 9dnl 3. Header files 10dnl 4. Types 11dnl 5. Structures 12dnl 6. Compiler characteristics 13dnl 7. Functions, global variables 14dnl 8. System services 15dnl 16dnl Read the Autoconf manual for details. 17dnl 18m4_pattern_forbid(^PGAC_)dnl to catch undefined macros 19 20AC_INIT([PostgreSQL], [13.5], [pgsql-bugs@lists.postgresql.org], [], [https://www.postgresql.org/]) 21 22m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required. 23Untested combinations of 'autoconf' and PostgreSQL versions are not 24recommended. You can remove the check from 'configure.in' but it is then 25your responsibility whether the result works or not.])]) 26AC_COPYRIGHT([Copyright (c) 1996-2020, PostgreSQL Global Development Group]) 27AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c]) 28AC_CONFIG_AUX_DIR(config) 29AC_PREFIX_DEFAULT(/usr/local/pgsql) 30AC_DEFINE_UNQUOTED(CONFIGURE_ARGS, ["$ac_configure_args"], [Saved arguments from configure]) 31 32[PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\)'`] 33[PG_MINORVERSION=`expr "$PACKAGE_VERSION" : '.*\.\([0-9][0-9]*\)'`] 34test -n "$PG_MINORVERSION" || PG_MINORVERSION=0 35AC_SUBST(PG_MAJORVERSION) 36AC_DEFINE_UNQUOTED(PG_MAJORVERSION, "$PG_MAJORVERSION", [PostgreSQL major version as a string]) 37AC_DEFINE_UNQUOTED(PG_MAJORVERSION_NUM, $PG_MAJORVERSION, [PostgreSQL major version number]) 38AC_DEFINE_UNQUOTED(PG_MINORVERSION_NUM, $PG_MINORVERSION, [PostgreSQL minor version number]) 39 40PGAC_ARG_REQ(with, extra-version, [STRING], [append STRING to version], 41 [PG_VERSION="$PACKAGE_VERSION$withval"], 42 [PG_VERSION="$PACKAGE_VERSION"]) 43AC_DEFINE_UNQUOTED(PG_VERSION, "$PG_VERSION", [PostgreSQL version as a string]) 44 45AC_CANONICAL_HOST 46 47template= 48AC_MSG_CHECKING([which template to use]) 49 50PGAC_ARG_REQ(with, template, [NAME], [override operating system template], 51[ 52 case $withval in 53 list) echo; ls "$srcdir/src/template"; exit;; 54 *) if test -f "$srcdir/src/template/$with_template" ; then 55 template=$withval 56 else 57 AC_MSG_ERROR(['$withval' is not a valid template name. Use 'list' for a list.]) 58 fi;; 59 esac 60], 61[ 62# --with-template not given 63 64case $host_os in 65 aix*) template=aix ;; 66 cygwin*|msys*) template=cygwin ;; 67 darwin*) template=darwin ;; 68dragonfly*) template=netbsd ;; 69 freebsd*) template=freebsd ;; 70 hpux*) template=hpux ;; 71 linux*|gnu*|k*bsd*-gnu) 72 template=linux ;; 73 mingw*) template=win32 ;; 74 netbsd*) template=netbsd ;; 75 openbsd*) template=openbsd ;; 76 solaris*) template=solaris ;; 77esac 78 79 if test x"$template" = x"" ; then 80 AC_MSG_ERROR([[ 81******************************************************************* 82PostgreSQL has apparently not been ported to your platform yet. 83To try a manual configuration, look into the src/template directory 84for a similar platform and use the '--with-template=' option. 85 86Please also contact <]AC_PACKAGE_BUGREPORT[> to see about 87rectifying this. Include the above 'checking host system type...' 88line. 89******************************************************************* 90]]) 91 fi 92 93]) 94 95AC_MSG_RESULT([$template]) 96 97PORTNAME=$template 98AC_SUBST(PORTNAME) 99 100# Initialize default assumption that we do not need separate assembly code 101# for TAS (test-and-set). This can be overridden by the template file 102# when it's executed. 103need_tas=no 104tas_file=dummy.s 105 106 107 108## 109## Command line options 110## 111 112# 113# Add non-standard directories to the include path 114# 115PGAC_ARG_REQ(with, includes, [DIRS], [look for additional header files in DIRS]) 116 117 118# 119# Add non-standard directories to the library search path 120# 121PGAC_ARG_REQ(with, libraries, [DIRS], [look for additional libraries in DIRS], 122 [LIBRARY_DIRS=$withval]) 123 124PGAC_ARG_REQ(with, libs, [DIRS], [alternative spelling of --with-libraries], 125 [LIBRARY_DIRS=$withval]) 126 127 128# 129# 64-bit integer date/time storage is now the only option, but to avoid 130# unnecessary breakage of build scripts, continue to accept an explicit 131# "--enable-integer-datetimes" switch. 132# 133PGAC_ARG_BOOL(enable, integer-datetimes, yes, [obsolete option, no longer supported], 134 [], 135 [AC_MSG_ERROR([--disable-integer-datetimes is no longer supported])]) 136 137 138# 139# NLS 140# 141AC_MSG_CHECKING([whether NLS is wanted]) 142PGAC_ARG_OPTARG(enable, nls, 143 [LANGUAGES], [enable Native Language Support], 144 [], 145 [WANTED_LANGUAGES=$enableval], 146 [AC_DEFINE(ENABLE_NLS, 1, 147 [Define to 1 if you want National Language Support. (--enable-nls)])]) 148AC_MSG_RESULT([$enable_nls]) 149AC_SUBST(enable_nls) 150AC_SUBST(WANTED_LANGUAGES) 151 152# 153# Default port number (--with-pgport), default 5432 154# 155AC_MSG_CHECKING([for default port number]) 156PGAC_ARG_REQ(with, pgport, [PORTNUM], [set default port number [5432]], 157 [default_port=$withval], 158 [default_port=5432]) 159AC_MSG_RESULT([$default_port]) 160# Need both of these because some places want an integer and some a string 161AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port}, 162[Define to the default TCP port number on which the server listens and 163to which clients will try to connect. This can be overridden at run-time, 164but it's convenient if your clients have the right default compiled in. 165(--with-pgport=PORTNUM)]) 166AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}", 167 [Define to the default TCP port number as a string constant.]) 168AC_SUBST(default_port) 169 170# It's worth validating port; you can get very confusing errors otherwise 171if test x"$default_port" = x""; then 172 AC_MSG_ERROR([invalid --with-pgport specification: empty string]) 173elif test ! x`echo "$default_port" | sed -e 's/[[0-9]]*//'` = x""; then 174 AC_MSG_ERROR([invalid --with-pgport specification: must be a number]) 175elif test ! x`echo "$default_port" | sed -e 's/^0.//'` = x"$default_port"; then 176 AC_MSG_ERROR([invalid --with-pgport specification: must not have leading 0]) 177elif test "$default_port" -lt "1" -o "$default_port" -gt "65535"; then 178 AC_MSG_ERROR([invalid --with-pgport specification: must be between 1 and 65535]) 179fi 180 181# 182# '-rpath'-like feature can be disabled 183# 184PGAC_ARG_BOOL(enable, rpath, yes, 185 [do not embed shared library search path in executables]) 186AC_SUBST(enable_rpath) 187 188# 189# Spinlocks 190# 191PGAC_ARG_BOOL(enable, spinlocks, yes, 192 [do not use spinlocks]) 193 194# 195# Atomic operations 196# 197PGAC_ARG_BOOL(enable, atomics, yes, 198 [do not use atomic operations]) 199 200# 201# --enable-debug adds -g to compiler flags 202# 203PGAC_ARG_BOOL(enable, debug, no, 204 [build with debugging symbols (-g)]) 205AC_SUBST(enable_debug) 206 207# 208# --enable-profiling enables gcc profiling 209# 210PGAC_ARG_BOOL(enable, profiling, no, 211 [build with profiling enabled ]) 212 213# 214# --enable-coverage enables generation of code coverage metrics with gcov 215# 216PGAC_ARG_BOOL(enable, coverage, no, 217 [build with coverage testing instrumentation], 218[PGAC_PATH_PROGS(GCOV, gcov) 219if test -z "$GCOV"; then 220 AC_MSG_ERROR([gcov not found]) 221fi 222PGAC_PATH_PROGS(LCOV, lcov) 223if test -z "$LCOV"; then 224 AC_MSG_ERROR([lcov not found]) 225fi 226PGAC_PATH_PROGS(GENHTML, genhtml) 227if test -z "$GENHTML"; then 228 AC_MSG_ERROR([genhtml not found]) 229fi]) 230AC_SUBST(enable_coverage) 231 232# 233# DTrace 234# 235PGAC_ARG_BOOL(enable, dtrace, no, 236 [build with DTrace support], 237[PGAC_PATH_PROGS(DTRACE, dtrace) 238if test -z "$DTRACE"; then 239 AC_MSG_ERROR([dtrace not found]) 240fi 241AC_SUBST(DTRACEFLAGS)]) 242AC_SUBST(enable_dtrace) 243 244# 245# TAP tests 246# 247PGAC_ARG_BOOL(enable, tap-tests, no, 248 [enable TAP tests (requires Perl and IPC::Run)]) 249AC_SUBST(enable_tap_tests) 250 251# 252# Block size 253# 254AC_MSG_CHECKING([for block size]) 255PGAC_ARG_REQ(with, blocksize, [BLOCKSIZE], [set table block size in kB [8]], 256 [blocksize=$withval], 257 [blocksize=8]) 258case ${blocksize} in 259 1) BLCKSZ=1024;; 260 2) BLCKSZ=2048;; 261 4) BLCKSZ=4096;; 262 8) BLCKSZ=8192;; 263 16) BLCKSZ=16384;; 264 32) BLCKSZ=32768;; 265 *) AC_MSG_ERROR([Invalid block size. Allowed values are 1,2,4,8,16,32.]) 266esac 267AC_MSG_RESULT([${blocksize}kB]) 268 269AC_DEFINE_UNQUOTED([BLCKSZ], ${BLCKSZ}, [ 270 Size of a disk block --- this also limits the size of a tuple. You 271 can set it bigger if you need bigger tuples (although TOAST should 272 reduce the need to have large tuples, since fields can be spread 273 across multiple tuples). 274 275 BLCKSZ must be a power of 2. The maximum possible value of BLCKSZ 276 is currently 2^15 (32768). This is determined by the 15-bit widths 277 of the lp_off and lp_len fields in ItemIdData (see 278 include/storage/itemid.h). 279 280 Changing BLCKSZ requires an initdb. 281]) 282 283# 284# Relation segment size 285# 286AC_MSG_CHECKING([for segment size]) 287PGAC_ARG_REQ(with, segsize, [SEGSIZE], [set table segment size in GB [1]], 288 [segsize=$withval], 289 [segsize=1]) 290# this expression is set up to avoid unnecessary integer overflow 291# blocksize is already guaranteed to be a factor of 1024 292RELSEG_SIZE=`expr '(' 1024 / ${blocksize} ')' '*' ${segsize} '*' 1024` 293test $? -eq 0 || exit 1 294AC_MSG_RESULT([${segsize}GB]) 295 296AC_DEFINE_UNQUOTED([RELSEG_SIZE], ${RELSEG_SIZE}, [ 297 RELSEG_SIZE is the maximum number of blocks allowed in one disk file. 298 Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ; 299 relations bigger than that are divided into multiple files. 300 301 RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size. 302 This is often 2 GB or 4GB in a 32-bit operating system, unless you 303 have large file support enabled. By default, we make the limit 1 GB 304 to avoid any possible integer-overflow problems within the OS. 305 A limit smaller than necessary only means we divide a large 306 relation into more chunks than necessary, so it seems best to err 307 in the direction of a small limit. 308 309 A power-of-2 value is recommended to save a few cycles in md.c, 310 but is not absolutely required. 311 312 Changing RELSEG_SIZE requires an initdb. 313]) 314 315# 316# WAL block size 317# 318AC_MSG_CHECKING([for WAL block size]) 319PGAC_ARG_REQ(with, wal-blocksize, [BLOCKSIZE], [set WAL block size in kB [8]], 320 [wal_blocksize=$withval], 321 [wal_blocksize=8]) 322case ${wal_blocksize} in 323 1) XLOG_BLCKSZ=1024;; 324 2) XLOG_BLCKSZ=2048;; 325 4) XLOG_BLCKSZ=4096;; 326 8) XLOG_BLCKSZ=8192;; 327 16) XLOG_BLCKSZ=16384;; 328 32) XLOG_BLCKSZ=32768;; 329 64) XLOG_BLCKSZ=65536;; 330 *) AC_MSG_ERROR([Invalid WAL block size. Allowed values are 1,2,4,8,16,32,64.]) 331esac 332AC_MSG_RESULT([${wal_blocksize}kB]) 333 334AC_DEFINE_UNQUOTED([XLOG_BLCKSZ], ${XLOG_BLCKSZ}, [ 335 Size of a WAL file block. This need have no particular relation to BLCKSZ. 336 XLOG_BLCKSZ must be a power of 2, and if your system supports O_DIRECT I/O, 337 XLOG_BLCKSZ must be a multiple of the alignment requirement for direct-I/O 338 buffers, else direct I/O may fail. 339 340 Changing XLOG_BLCKSZ requires an initdb. 341]) 342 343# 344# C compiler 345# 346 347# For historical reasons you can also use --with-CC to specify the C compiler 348# to use, although the standard way to do this is to set the CC environment 349# variable. 350PGAC_ARG_REQ(with, CC, [CMD], [set compiler (deprecated)], [CC=$with_CC]) 351 352case $template in 353 aix) pgac_cc_list="gcc xlc"; pgac_cxx_list="g++ xlC";; 354 *) pgac_cc_list="gcc cc"; pgac_cxx_list="g++ c++";; 355esac 356 357AC_PROG_CC([$pgac_cc_list]) 358AC_PROG_CC_C99() 359 360# Error out if the compiler does not support C99, as the codebase 361# relies on that. 362if test "$ac_cv_prog_cc_c99" = no; then 363 AC_MSG_ERROR([C compiler "$CC" does not support C99]) 364fi 365 366AC_PROG_CXX([$pgac_cxx_list]) 367 368# Check if it's Intel's compiler, which (usually) pretends to be gcc, 369# but has idiosyncrasies of its own. We assume icc will define 370# __INTEL_COMPILER regardless of CFLAGS. 371AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@ifndef __INTEL_COMPILER 372choke me 373@%:@endif])], [ICC=yes], [ICC=no]) 374 375# Check if it's Sun Studio compiler. We assume that 376# __SUNPRO_C will be defined for Sun Studio compilers 377AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@ifndef __SUNPRO_C 378choke me 379@%:@endif])], [SUN_STUDIO_CC=yes], [SUN_STUDIO_CC=no]) 380 381AC_SUBST(SUN_STUDIO_CC) 382 383 384# 385# LLVM 386# 387# Checked early because subsequent tests depend on it. 388PGAC_ARG_BOOL(with, llvm, no, [build with LLVM based JIT support], 389 [AC_DEFINE([USE_LLVM], 1, [Define to 1 to build with LLVM based JIT support. (--with-llvm)])]) 390AC_SUBST(with_llvm) 391dnl must use AS_IF here, else AC_REQUIRES inside PGAC_LLVM_SUPPORT malfunctions 392AS_IF([test "$with_llvm" = yes], [ 393 PGAC_LLVM_SUPPORT() 394]) # fi 395 396 397unset CFLAGS 398unset CXXFLAGS 399 400# 401# Read the template 402# 403. "$srcdir/src/template/$template" || exit 404 405# C[XX]FLAGS are selected so: 406# If the user specifies something in the environment, that is used. 407# else: If the template file set something, that is used. 408# else: If coverage was enabled, don't set anything. 409# else: If the compiler is GCC, then we use -O2. 410# else: If the compiler is something else, then we use -O, unless debugging. 411 412if test "$ac_env_CFLAGS_set" = set; then 413 CFLAGS=$ac_env_CFLAGS_value 414elif test "${CFLAGS+set}" = set; then 415 : # (keep what template set) 416elif test "$enable_coverage" = yes; then 417 : # no optimization by default 418elif test "$GCC" = yes; then 419 CFLAGS="-O2" 420else 421 # if the user selected debug mode, don't use -O 422 if test "$enable_debug" != yes; then 423 CFLAGS="-O" 424 fi 425fi 426 427if test "$ac_env_CXXFLAGS_set" = set; then 428 CXXFLAGS=$ac_env_CXXFLAGS_value 429elif test "${CXXFLAGS+set}" = set; then 430 : # (keep what template set) 431elif test "$enable_coverage" = yes; then 432 : # no optimization by default 433elif test "$GCC" = yes; then 434 CXXFLAGS="-O2" 435else 436 # if the user selected debug mode, don't use -O 437 if test "$enable_debug" != yes; then 438 CXXFLAGS="-O" 439 fi 440fi 441 442# When generating bitcode (for inlining) we always want to use -O2 443# even when --enable-debug is specified. The bitcode it's not going to 444# be used for line-by-line debugging, and JIT inlining doesn't work 445# without at least -O1 (otherwise clang will emit 'noinline' 446# attributes everywhere), which is bad for testing. Still allow the 447# environment to override if done explicitly. 448if test "$ac_env_BITCODE_CFLAGS_set" = set; then 449 BITCODE_CFLAGS=$ac_env_BITCODE_CFLAGS_value 450else 451 BITCODE_CFLAGS="-O2 $BITCODE_CFLAGS" 452fi 453if test "$ac_env_BITCODE_CXXFLAGS_set" = set; then 454 BITCODE_CXXFLAGS=$ac_env_BITCODE_CXXFLAGS_value 455else 456 BITCODE_CXXFLAGS="-O2 $BITCODE_CXXFLAGS" 457fi 458 459# C[XX]FLAGS we determined above will be added back at the end 460user_CFLAGS=$CFLAGS 461CFLAGS="" 462user_CXXFLAGS=$CXXFLAGS 463CXXFLAGS="" 464user_BITCODE_CFLAGS=$BITCODE_CFLAGS 465BITCODE_CFLAGS="" 466user_BITCODE_CXXFLAGS=$BITCODE_CXXFLAGS 467BITCODE_CXXFLAGS="" 468 469# set CFLAGS_VECTOR from the environment, if available 470if test "$ac_env_CFLAGS_VECTOR_set" = set; then 471 CFLAGS_VECTOR=$ac_env_CFLAGS_VECTOR_value 472fi 473 474# Some versions of GCC support some additional useful warning flags. 475# Check whether they are supported, and add them to CFLAGS if so. 476# ICC pretends to be GCC but it's lying; it doesn't support these flags, 477# but has its own. Also check other compiler-specific flags here. 478 479if test "$GCC" = yes -a "$ICC" = no; then 480 CFLAGS="-Wall -Wmissing-prototypes -Wpointer-arith" 481 CXXFLAGS="-Wall -Wpointer-arith" 482 # These work in some but not all gcc versions 483 save_CFLAGS=$CFLAGS 484 PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement]) 485 # -Wdeclaration-after-statement isn't applicable for C++. Specific C files 486 # disable it, so AC_SUBST the negative form. 487 PERMIT_DECLARATION_AFTER_STATEMENT= 488 if test x"$save_CFLAGS" != x"$CFLAGS"; then 489 PERMIT_DECLARATION_AFTER_STATEMENT=-Wno-declaration-after-statement 490 fi 491 AC_SUBST(PERMIT_DECLARATION_AFTER_STATEMENT) 492 # Really don't want VLAs to be used in our dialect of C 493 PGAC_PROG_CC_CFLAGS_OPT([-Werror=vla]) 494 # -Wvla is not applicable for C++ 495 PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels]) 496 PGAC_PROG_CXX_CFLAGS_OPT([-Wendif-labels]) 497 PGAC_PROG_CC_CFLAGS_OPT([-Wmissing-format-attribute]) 498 PGAC_PROG_CXX_CFLAGS_OPT([-Wmissing-format-attribute]) 499 PGAC_PROG_CC_CFLAGS_OPT([-Wimplicit-fallthrough=3]) 500 PGAC_PROG_CXX_CFLAGS_OPT([-Wimplicit-fallthrough=3]) 501 # This was included in -Wall/-Wformat in older GCC versions 502 PGAC_PROG_CC_CFLAGS_OPT([-Wformat-security]) 503 PGAC_PROG_CXX_CFLAGS_OPT([-Wformat-security]) 504 # Disable strict-aliasing rules; needed for gcc 3.3+ 505 PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) 506 PGAC_PROG_CXX_CFLAGS_OPT([-fno-strict-aliasing]) 507 # Disable optimizations that assume no overflow; needed for gcc 4.3+ 508 PGAC_PROG_CC_CFLAGS_OPT([-fwrapv]) 509 PGAC_PROG_CXX_CFLAGS_OPT([-fwrapv]) 510 # Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+ 511 PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard]) 512 PGAC_PROG_CXX_CFLAGS_OPT([-fexcess-precision=standard]) 513 # Optimization flags for specific files that benefit from vectorization 514 PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-funroll-loops]) 515 PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-ftree-vectorize]) 516 # We want to suppress clang's unhelpful unused-command-line-argument warnings 517 # but gcc won't complain about unrecognized -Wno-foo switches, so we have to 518 # test for the positive form and if that works, add the negative form 519 NOT_THE_CFLAGS="" 520 PGAC_PROG_CC_VAR_OPT(NOT_THE_CFLAGS, [-Wunused-command-line-argument]) 521 if test -n "$NOT_THE_CFLAGS"; then 522 CFLAGS="$CFLAGS -Wno-unused-command-line-argument" 523 fi 524 # Similarly disable useless truncation warnings from gcc 8+ 525 NOT_THE_CFLAGS="" 526 PGAC_PROG_CC_VAR_OPT(NOT_THE_CFLAGS, [-Wformat-truncation]) 527 if test -n "$NOT_THE_CFLAGS"; then 528 CFLAGS="$CFLAGS -Wno-format-truncation" 529 fi 530 NOT_THE_CFLAGS="" 531 PGAC_PROG_CC_VAR_OPT(NOT_THE_CFLAGS, [-Wstringop-truncation]) 532 if test -n "$NOT_THE_CFLAGS"; then 533 CFLAGS="$CFLAGS -Wno-stringop-truncation" 534 fi 535elif test "$ICC" = yes; then 536 # Intel's compiler has a bug/misoptimization in checking for 537 # division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS. 538 PGAC_PROG_CC_CFLAGS_OPT([-mp1]) 539 PGAC_PROG_CXX_CFLAGS_OPT([-mp1]) 540 # Make sure strict aliasing is off (though this is said to be the default) 541 PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing]) 542 PGAC_PROG_CXX_CFLAGS_OPT([-fno-strict-aliasing]) 543elif test "$PORTNAME" = "aix"; then 544 # AIX's xlc has to have strict aliasing turned off too 545 PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias]) 546 PGAC_PROG_CXX_CFLAGS_OPT([-qnoansialias]) 547 PGAC_PROG_CC_CFLAGS_OPT([-qlonglong]) 548 PGAC_PROG_CXX_CFLAGS_OPT([-qlonglong]) 549elif test "$PORTNAME" = "hpux"; then 550 # On some versions of HP-UX, libm functions do not set errno by default. 551 # Fix that by using +Olibmerrno if the compiler recognizes it. 552 PGAC_PROG_CC_CFLAGS_OPT([+Olibmerrno]) 553 PGAC_PROG_CXX_CFLAGS_OPT([+Olibmerrno]) 554fi 555 556AC_SUBST(CFLAGS_VECTOR) 557 558# Determine flags used to emit bitcode for JIT inlining. Need to test 559# for behaviour changing compiler flags, to keep compatibility with 560# compiler used for normal postgres code. 561if test "$with_llvm" = yes ; then 562 CLANGXX="$CLANG -xc++" 563 564 PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fno-strict-aliasing]) 565 PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fno-strict-aliasing]) 566 PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fwrapv]) 567 PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fwrapv]) 568 PGAC_PROG_VARCC_VARFLAGS_OPT(CLANG, BITCODE_CFLAGS, [-fexcess-precision=standard]) 569 PGAC_PROG_VARCXX_VARFLAGS_OPT(CLANGXX, BITCODE_CXXFLAGS, [-fexcess-precision=standard]) 570fi 571 572# supply -g if --enable-debug 573if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then 574 CFLAGS="$CFLAGS -g" 575fi 576 577if test "$enable_debug" = yes && test "$ac_cv_prog_cxx_g" = yes; then 578 CXXFLAGS="$CXXFLAGS -g" 579fi 580 581# enable code coverage if --enable-coverage 582if test "$enable_coverage" = yes; then 583 if test "$GCC" = yes; then 584 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage" 585 CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage" 586 else 587 AC_MSG_ERROR([--enable-coverage is supported only when using GCC]) 588 fi 589fi 590 591# enable profiling if --enable-profiling 592if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then 593 if test "$GCC" = yes; then 594 AC_DEFINE([PROFILE_PID_DIR], 1, 595 [Define to 1 to allow profiling output to be saved separately for each process.]) 596 CFLAGS="$CFLAGS -pg $PLATFORM_PROFILE_FLAGS" 597 CXXFLAGS="$CXXFLAGS -pg $PLATFORM_PROFILE_FLAGS" 598 else 599 AC_MSG_ERROR([--enable-profiling is supported only when using GCC]) 600 fi 601fi 602 603# We already have this in Makefile.win32, but configure needs it too 604if test "$PORTNAME" = "win32"; then 605 CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32" 606fi 607 608# Now that we're done automatically adding stuff to C[XX]FLAGS, put back the 609# user-specified flags (if any) at the end. This lets users override 610# the automatic additions. 611CFLAGS="$CFLAGS $user_CFLAGS" 612CXXFLAGS="$CXXFLAGS $user_CXXFLAGS" 613BITCODE_CFLAGS="$BITCODE_CFLAGS $user_BITCODE_CFLAGS" 614BITCODE_CXXFLAGS="$BITCODE_CXXFLAGS $user_BITCODE_CXXFLAGS" 615 616AC_SUBST(BITCODE_CFLAGS) 617AC_SUBST(BITCODE_CXXFLAGS) 618 619# The template file must set up CFLAGS_SL; we don't support user override 620AC_SUBST(CFLAGS_SL) 621 622# Check if the compiler still works with the final flag settings 623# (note, we're not checking that for CXX, which is optional) 624AC_MSG_CHECKING([whether the C compiler still works]) 625AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], 626 [AC_MSG_RESULT(yes)], 627 [AC_MSG_RESULT(no) 628 AC_MSG_ERROR([cannot proceed])]) 629 630# Defend against gcc -ffast-math 631if test "$GCC" = yes; then 632AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@ifdef __FAST_MATH__ 633choke me 634@%:@endif])], [], [AC_MSG_ERROR([do not put -ffast-math in CFLAGS])]) 635fi 636 637# Defend against clang being used on x86-32 without SSE2 enabled. As current 638# versions of clang do not understand -fexcess-precision=standard, the use of 639# x87 floating point operations leads to problems like isinf possibly returning 640# false for a value that is infinite when converted from the 80bit register to 641# the 8byte memory representation. 642# 643# Only perform the test if the compiler doesn't understand 644# -fexcess-precision=standard, that way a potentially fixed compiler will work 645# automatically. 646if test "$pgac_cv_prog_CC_cflags__fexcess_precision_standard" = no; then 647AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 648@%:@if defined(__clang__) && defined(__i386__) && !defined(__SSE2_MATH__) 649choke me 650@%:@endif 651])], [], 652[AC_MSG_ERROR([Compiling PostgreSQL with clang, on 32bit x86, requires SSE2 support. Use -msse2 or use gcc.])]) 653fi 654 655AC_PROG_CPP 656AC_SUBST(GCC) 657 658 659# 660# Set up TAS assembly code if needed; the template file has now had its 661# chance to request this. 662# 663AC_CONFIG_LINKS([src/backend/port/tas.s:src/backend/port/tas/${tas_file}]) 664 665if test "$need_tas" = yes ; then 666 TAS=tas.o 667else 668 TAS="" 669fi 670AC_SUBST(TAS) 671 672# 673# Set up pkg_config in case we need it below 674# 675PKG_PROG_PKG_CONFIG 676 677# 678# Automatic dependency tracking 679# 680PGAC_ARG_BOOL(enable, depend, no, [turn on automatic dependency tracking], 681 [autodepend=yes]) 682AC_SUBST(autodepend) 683 684 685# 686# Enable assert checks 687# 688PGAC_ARG_BOOL(enable, cassert, no, [enable assertion checks (for debugging)], 689 [AC_DEFINE([USE_ASSERT_CHECKING], 1, 690 [Define to 1 to build with assertion checks. (--enable-cassert)])]) 691 692 693# 694# Include directories 695# 696ac_save_IFS=$IFS 697IFS="${IFS}${PATH_SEPARATOR}" 698# SRCH_INC comes from the template file 699for dir in $with_includes $SRCH_INC; do 700 if test -d "$dir"; then 701 INCLUDES="$INCLUDES -I$dir" 702 else 703 AC_MSG_WARN([*** Include directory $dir does not exist.]) 704 fi 705done 706IFS=$ac_save_IFS 707AC_SUBST(INCLUDES) 708 709 710# 711# Library directories 712# 713ac_save_IFS=$IFS 714IFS="${IFS}${PATH_SEPARATOR}" 715# LIBRARY_DIRS comes from command line, SRCH_LIB from template file. 716for dir in $LIBRARY_DIRS $SRCH_LIB; do 717 if test -d "$dir"; then 718 LIBDIRS="$LIBDIRS -L$dir" 719 else 720 AC_MSG_WARN([*** Library directory $dir does not exist.]) 721 fi 722done 723IFS=$ac_save_IFS 724 725# 726# Enable thread-safe client libraries 727# 728AC_MSG_CHECKING([allow thread-safe client libraries]) 729PGAC_ARG_BOOL(enable, thread-safety, yes, [disable thread-safety in client libraries]) 730if test "$enable_thread_safety" = yes; then 731 AC_DEFINE([ENABLE_THREAD_SAFETY], 1, 732 [Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety)]) 733fi 734AC_MSG_RESULT([$enable_thread_safety]) 735AC_SUBST(enable_thread_safety) 736 737# 738# ICU 739# 740AC_MSG_CHECKING([whether to build with ICU support]) 741PGAC_ARG_BOOL(with, icu, no, [build with ICU support], 742 [AC_DEFINE([USE_ICU], 1, [Define to build with ICU support. (--with-icu)])]) 743AC_MSG_RESULT([$with_icu]) 744AC_SUBST(with_icu) 745 746if test "$with_icu" = yes; then 747 PKG_CHECK_MODULES(ICU, icu-uc icu-i18n) 748fi 749 750# 751# Optionally build Tcl modules (PL/Tcl) 752# 753AC_MSG_CHECKING([whether to build with Tcl]) 754PGAC_ARG_BOOL(with, tcl, no, [build Tcl modules (PL/Tcl)]) 755AC_MSG_RESULT([$with_tcl]) 756AC_SUBST([with_tcl]) 757 758# We see if the path to the Tcl/Tk configuration scripts is specified. 759# This will override the use of tclsh to find the paths to search. 760 761PGAC_ARG_REQ(with, tclconfig, [DIR], [tclConfig.sh is in DIR]) 762 763# 764# Optionally build Perl modules (PL/Perl) 765# 766AC_MSG_CHECKING([whether to build Perl modules]) 767PGAC_ARG_BOOL(with, perl, no, [build Perl modules (PL/Perl)]) 768AC_MSG_RESULT([$with_perl]) 769AC_SUBST(with_perl) 770 771# 772# Optionally build Python modules (PL/Python) 773# 774AC_MSG_CHECKING([whether to build Python modules]) 775PGAC_ARG_BOOL(with, python, no, [build Python modules (PL/Python)]) 776AC_MSG_RESULT([$with_python]) 777AC_SUBST(with_python) 778 779# 780# GSSAPI 781# 782AC_MSG_CHECKING([whether to build with GSSAPI support]) 783PGAC_ARG_BOOL(with, gssapi, no, [build with GSSAPI support], 784[ 785 AC_DEFINE(ENABLE_GSS, 1, [Define to build with GSSAPI support. (--with-gssapi)]) 786 krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab" 787]) 788AC_MSG_RESULT([$with_gssapi]) 789AC_SUBST(with_gssapi) 790 791 792AC_SUBST(krb_srvtab) 793 794 795# 796# Kerberos configuration parameters 797# 798PGAC_ARG_REQ(with, krb-srvnam, 799 [NAME], [default service principal name in Kerberos (GSSAPI) [postgres]], 800 [], 801 [with_krb_srvnam="postgres"]) 802AC_SUBST(with_krb_srvnam) 803AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"], 804 [Define to the name of the default PostgreSQL service principal in Kerberos (GSSAPI). (--with-krb-srvnam=NAME)]) 805 806 807# 808# PAM 809# 810AC_MSG_CHECKING([whether to build with PAM support]) 811PGAC_ARG_BOOL(with, pam, no, 812 [build with PAM support], 813 [AC_DEFINE([USE_PAM], 1, [Define to 1 to build with PAM support. (--with-pam)])]) 814AC_MSG_RESULT([$with_pam]) 815 816 817# 818# BSD AUTH 819# 820AC_MSG_CHECKING([whether to build with BSD Authentication support]) 821PGAC_ARG_BOOL(with, bsd-auth, no, 822 [build with BSD Authentication support], 823 [AC_DEFINE([USE_BSD_AUTH], 1, [Define to 1 to build with BSD Authentication support. (--with-bsd-auth)])]) 824AC_MSG_RESULT([$with_bsd_auth]) 825 826 827# 828# LDAP 829# 830AC_MSG_CHECKING([whether to build with LDAP support]) 831PGAC_ARG_BOOL(with, ldap, no, 832 [build with LDAP support], 833 [AC_DEFINE([USE_LDAP], 1, [Define to 1 to build with LDAP support. (--with-ldap)])]) 834AC_MSG_RESULT([$with_ldap]) 835AC_SUBST(with_ldap) 836 837 838# 839# Bonjour 840# 841AC_MSG_CHECKING([whether to build with Bonjour support]) 842PGAC_ARG_BOOL(with, bonjour, no, 843 [build with Bonjour support], 844 [AC_DEFINE([USE_BONJOUR], 1, [Define to 1 to build with Bonjour support. (--with-bonjour)])]) 845AC_MSG_RESULT([$with_bonjour]) 846 847 848# 849# OpenSSL 850# 851AC_MSG_CHECKING([whether to build with OpenSSL support]) 852PGAC_ARG_BOOL(with, openssl, no, [build with OpenSSL support], 853 [AC_DEFINE([USE_OPENSSL], 1, [Define to build with OpenSSL support. (--with-openssl)])]) 854AC_MSG_RESULT([$with_openssl]) 855AC_SUBST(with_openssl) 856 857# 858# SELinux 859# 860AC_MSG_CHECKING([whether to build with SELinux support]) 861PGAC_ARG_BOOL(with, selinux, no, [build with SELinux support]) 862AC_SUBST(with_selinux) 863AC_MSG_RESULT([$with_selinux]) 864 865# 866# Systemd 867# 868AC_MSG_CHECKING([whether to build with systemd support]) 869PGAC_ARG_BOOL(with, systemd, no, [build with systemd support], 870 [AC_DEFINE([USE_SYSTEMD], 1, [Define to build with systemd support. (--with-systemd)])]) 871AC_SUBST(with_systemd) 872AC_MSG_RESULT([$with_systemd]) 873 874# 875# Readline 876# 877PGAC_ARG_BOOL(with, readline, yes, 878 [do not use GNU Readline nor BSD Libedit for editing]) 879# readline on MinGW has problems with backslashes in psql and other bugs. 880# This is particularly a problem with non-US code pages. 881# Therefore disable its use until we understand the cause. 2004-07-20 882if test "$PORTNAME" = "win32"; then 883 if test "$with_readline" = yes; then 884 AC_MSG_WARN([*** Readline does not work on MinGW --- disabling]) 885 with_readline=no 886 fi 887fi 888AC_SUBST(with_readline) 889 890 891# 892# Prefer libedit 893# 894PGAC_ARG_BOOL(with, libedit-preferred, no, 895 [prefer BSD Libedit over GNU Readline]) 896 897 898# 899# UUID library 900# 901# There are at least three UUID libraries in common use: the FreeBSD/NetBSD 902# library, the e2fsprogs libuuid (now part of util-linux-ng), and the OSSP 903# UUID library. More than one of these might be present on a given platform, 904# so we make the user say which one she wants. 905# 906PGAC_ARG_REQ(with, uuid, [LIB], [build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)]) 907if test x"$with_uuid" = x"" ; then 908 with_uuid=no 909fi 910PGAC_ARG_BOOL(with, ossp-uuid, no, [obsolete spelling of --with-uuid=ossp]) 911if test "$with_ossp_uuid" = yes ; then 912 with_uuid=ossp 913fi 914 915if test "$with_uuid" = bsd ; then 916 AC_DEFINE([HAVE_UUID_BSD], 1, [Define to 1 if you have BSD UUID support.]) 917 UUID_EXTRA_OBJS="md5.o sha1.o" 918elif test "$with_uuid" = e2fs ; then 919 AC_DEFINE([HAVE_UUID_E2FS], 1, [Define to 1 if you have E2FS UUID support.]) 920 UUID_EXTRA_OBJS="md5.o sha1.o" 921elif test "$with_uuid" = ossp ; then 922 AC_DEFINE([HAVE_UUID_OSSP], 1, [Define to 1 if you have OSSP UUID support.]) 923 UUID_EXTRA_OBJS="" 924elif test "$with_uuid" = no ; then 925 UUID_EXTRA_OBJS="" 926else 927 AC_MSG_ERROR([--with-uuid must specify one of bsd, e2fs, or ossp]) 928fi 929AC_SUBST(with_uuid) 930AC_SUBST(UUID_EXTRA_OBJS) 931 932 933# 934# XML 935# 936AC_MSG_CHECKING([whether to build with XML support]) 937PGAC_ARG_BOOL(with, libxml, no, [build with XML support], 938 [AC_DEFINE([USE_LIBXML], 1, [Define to 1 to build with XML support. (--with-libxml)])]) 939AC_MSG_RESULT([$with_libxml]) 940AC_SUBST(with_libxml) 941 942if test "$with_libxml" = yes ; then 943 # Check pkg-config, then xml2-config. But for backwards compatibility, 944 # setting XML2_CONFIG overrides pkg-config. 945 AC_ARG_VAR(XML2_CONFIG, [path to xml2-config utility])dnl 946 have_libxml2_pkg_config=no 947 if test -z "$XML2_CONFIG" -a -n "$PKG_CONFIG"; then 948 PKG_CHECK_MODULES(XML2, [libxml-2.0 >= 2.6.23], 949 [have_libxml2_pkg_config=yes], [# do nothing]) 950 fi 951 if test "$have_libxml2_pkg_config" = no ; then 952 PGAC_PATH_PROGS(XML2_CONFIG, xml2-config) 953 if test -n "$XML2_CONFIG"; then 954 XML2_CFLAGS=`$XML2_CONFIG --cflags` 955 XML2_LIBS=`$XML2_CONFIG --libs` 956 fi 957 fi 958 # Note the user could also set XML2_CFLAGS/XML2_LIBS directly 959 for pgac_option in $XML2_CFLAGS; do 960 case $pgac_option in 961 -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";; 962 esac 963 done 964 for pgac_option in $XML2_LIBS; do 965 case $pgac_option in 966 -L*) LDFLAGS="$LDFLAGS $pgac_option";; 967 esac 968 done 969fi 970 971 972# 973# XSLT 974# 975PGAC_ARG_BOOL(with, libxslt, no, [use XSLT support when building contrib/xml2], 976 [AC_DEFINE([USE_LIBXSLT], 1, [Define to 1 to use XSLT support when building contrib/xml2. (--with-libxslt)])]) 977 978 979AC_SUBST(with_libxslt) 980 981# 982# tzdata 983# 984PGAC_ARG_REQ(with, system-tzdata, 985 [DIR], [use system time zone data in DIR]) 986AC_SUBST(with_system_tzdata) 987 988# 989# Zlib 990# 991PGAC_ARG_BOOL(with, zlib, yes, 992 [do not use Zlib]) 993AC_SUBST(with_zlib) 994 995# 996# Assignments 997# 998 999CPPFLAGS="$CPPFLAGS $INCLUDES" 1000LDFLAGS="$LDFLAGS $LIBDIRS" 1001 1002AC_ARG_VAR(LDFLAGS_EX, [extra linker flags for linking executables only]) 1003AC_ARG_VAR(LDFLAGS_SL, [extra linker flags for linking shared libraries only]) 1004 1005PGAC_PROG_LD 1006AC_SUBST(LD) 1007AC_SUBST(with_gnu_ld) 1008AC_PROG_RANLIB 1009PGAC_CHECK_STRIP 1010AC_CHECK_TOOL(AR, ar, ar) 1011if test "$PORTNAME" = "win32"; then 1012 AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool) 1013 AC_CHECK_TOOL(DLLWRAP, dllwrap, dllwrap) 1014 AC_CHECK_TOOL(WINDRES, windres, windres) 1015fi 1016 1017AC_PROG_INSTALL 1018# When Autoconf chooses install-sh as install program it tries to generate 1019# a relative path to it in each makefile where it substitutes it. This clashes 1020# with our Makefile.global concept. This workaround helps. 1021case $INSTALL in 1022 *install-sh*) install_bin='';; 1023 *) install_bin=$INSTALL;; 1024esac 1025AC_SUBST(install_bin) 1026 1027PGAC_PATH_PROGS(TAR, tar) 1028AC_PROG_LN_S 1029AC_PROG_MKDIR_P 1030# When Autoconf chooses install-sh as mkdir -p program it tries to generate 1031# a relative path to it in each makefile where it substitutes it. This clashes 1032# with our Makefile.global concept. This workaround helps. 1033case $MKDIR_P in 1034 *install-sh*) MKDIR_P='\${SHELL} \${top_srcdir}/config/install-sh -c -d';; 1035esac 1036 1037PGAC_PATH_BISON 1038PGAC_PATH_FLEX 1039 1040PGAC_PATH_PERL 1041if test "$with_perl" = yes; then 1042 if test -z "$PERL"; then 1043 AC_MSG_ERROR([Perl not found]) 1044 fi 1045 PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib]) 1046 if test "$perl_useshrplib" != yes && test "$perl_useshrplib" != true; then 1047 AC_MSG_ERROR([cannot build PL/Perl because libperl is not a shared library 1048You might have to rebuild your Perl installation. Refer to the 1049documentation for details. Use --without-perl to disable building 1050PL/Perl.]) 1051 fi 1052 # On most platforms, archlibexp is also where the Perl include files live ... 1053 perl_includespec="-I$perl_archlibexp/CORE" 1054 # ... but on newer macOS versions, we must use -iwithsysroot to look 1055 # under $PG_SYSROOT 1056 if test \! -f "$perl_archlibexp/CORE/perl.h" ; then 1057 if test -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then 1058 perl_includespec="-iwithsysroot $perl_archlibexp/CORE" 1059 fi 1060 fi 1061 AC_SUBST(perl_includespec)dnl 1062 PGAC_CHECK_PERL_EMBED_CCFLAGS 1063 PGAC_CHECK_PERL_EMBED_LDFLAGS 1064fi 1065 1066if test "$with_python" = yes; then 1067 PGAC_PATH_PYTHON 1068 PGAC_CHECK_PYTHON_EMBED_SETUP 1069fi 1070 1071if test "$cross_compiling" = yes && test -z "$with_system_tzdata"; then 1072 PGAC_PATH_PROGS(ZIC, zic) 1073 if test -z "$ZIC"; then 1074 AC_MSG_ERROR([ 1075When cross-compiling, either use the option --with-system-tzdata to use 1076existing time-zone data, or set the environment variable ZIC to a zic 1077program to use during the build.]) 1078 fi 1079fi 1080 1081# 1082# Pthreads 1083# 1084# For each platform, we need to know about any special compile and link 1085# libraries, and whether the normal C function names are thread-safe. 1086# See the comment at the top of src/port/thread.c for more information. 1087# WIN32 doesn't need the pthread tests; it always uses threads 1088# 1089# These tests are run before the library-tests, because linking with the 1090# other libraries can pull in the pthread functions as a side-effect. We 1091# want to use the -pthread or similar flags directly, and not rely on 1092# the side-effects of linking with some other library. 1093 1094dnl note: We have to use AS_IF here rather than plain if. The AC_CHECK_HEADER 1095dnl invocation below is the first one in the script, and autoconf generates 1096dnl additional code for that, which must not be inside the if-block. AS_IF 1097dnl knows how to do that. 1098AS_IF([test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"], 1099[ # then 1100AX_PTHREAD # set thread flags 1101 1102# Some platforms use these, so just define them. They can't hurt if they 1103# are not supported. For example, on Solaris -D_POSIX_PTHREAD_SEMANTICS 1104# enables 5-arg getpwuid_r, among other things. 1105PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS" 1106 1107# Check for *_r functions 1108_CFLAGS="$CFLAGS" 1109_LIBS="$LIBS" 1110CFLAGS="$CFLAGS $PTHREAD_CFLAGS" 1111LIBS="$LIBS $PTHREAD_LIBS" 1112 1113AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([ 1114pthread.h not found; use --disable-thread-safety to disable thread safety])]) 1115 1116AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r]) 1117 1118# Do test here with the proper thread flags 1119PGAC_FUNC_STRERROR_R_INT 1120 1121CFLAGS="$_CFLAGS" 1122LIBS="$_LIBS" 1123 1124], [ # else 1125# do not use values from template file 1126PTHREAD_CFLAGS= 1127PTHREAD_LIBS= 1128]) # fi 1129 1130AC_SUBST(PTHREAD_CFLAGS) 1131AC_SUBST(PTHREAD_LIBS) 1132 1133 1134## 1135## Libraries 1136## 1137## Most libraries are included only if they demonstrably provide a function 1138## we need, but libm is an exception: always include it, because there are 1139## too many compilers that play cute optimization games that will break 1140## probes for standard functions such as pow(). 1141## 1142 1143AC_CHECK_LIB(m, main) 1144AC_SEARCH_LIBS(setproctitle, util) 1145AC_SEARCH_LIBS(dlopen, dl) 1146AC_SEARCH_LIBS(socket, [socket ws2_32]) 1147AC_SEARCH_LIBS(shl_load, dld) 1148AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt]) 1149AC_SEARCH_LIBS(shm_open, rt) 1150AC_SEARCH_LIBS(shm_unlink, rt) 1151AC_SEARCH_LIBS(clock_gettime, [rt posix4]) 1152# Solaris: 1153AC_SEARCH_LIBS(fdatasync, [rt posix4]) 1154# Required for thread_test.c on Solaris 1155AC_SEARCH_LIBS(sched_yield, rt) 1156# Required for thread_test.c on Solaris 2.5: 1157# Other ports use it too (HP-UX) so test unconditionally 1158AC_SEARCH_LIBS(gethostbyname_r, nsl) 1159# Cygwin: 1160AC_SEARCH_LIBS(shmget, cygipc) 1161# *BSD: 1162AC_SEARCH_LIBS(backtrace_symbols, execinfo) 1163 1164if test "$with_readline" = yes; then 1165 PGAC_CHECK_READLINE 1166 if test x"$pgac_cv_check_readline" = x"no"; then 1167 AC_MSG_ERROR([readline library not found 1168If you have readline already installed, see config.log for details on the 1169failure. It is possible the compiler isn't looking in the proper directory. 1170Use --without-readline to disable readline support.]) 1171 fi 1172fi 1173 1174if test "$with_zlib" = yes; then 1175 AC_CHECK_LIB(z, inflate, [], 1176 [AC_MSG_ERROR([zlib library not found 1177If you have zlib already installed, see config.log for details on the 1178failure. It is possible the compiler isn't looking in the proper directory. 1179Use --without-zlib to disable zlib support.])]) 1180fi 1181 1182if test "$enable_spinlocks" = yes; then 1183 AC_DEFINE(HAVE_SPINLOCKS, 1, [Define to 1 if you have spinlocks.]) 1184else 1185 AC_MSG_WARN([ 1186*** Not using spinlocks will cause poor performance.]) 1187fi 1188 1189if test "$enable_atomics" = yes; then 1190 AC_DEFINE(HAVE_ATOMICS, 1, [Define to 1 if you want to use atomics if available.]) 1191else 1192 AC_MSG_WARN([ 1193*** Not using atomic operations will cause poor performance.]) 1194fi 1195 1196if test "$with_gssapi" = yes ; then 1197 if test "$PORTNAME" != "win32"; then 1198 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [], 1199 [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])]) 1200 else 1201 LIBS="$LIBS -lgssapi32" 1202 fi 1203fi 1204 1205if test "$with_openssl" = yes ; then 1206 dnl Order matters! 1207 if test "$PORTNAME" != "win32"; then 1208 AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) 1209 AC_CHECK_LIB(ssl, SSL_new, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])]) 1210 else 1211 AC_SEARCH_LIBS(CRYPTO_new_ex_data, [eay32 crypto], [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])]) 1212 AC_SEARCH_LIBS(SSL_new, [ssleay32 ssl], [], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])]) 1213 fi 1214 # Function introduced in OpenSSL 1.0.2. 1215 AC_CHECK_FUNCS([X509_get_signature_nid]) 1216 # Functions introduced in OpenSSL 1.1.0. We used to check for 1217 # OPENSSL_VERSION_NUMBER, but that didn't work with 1.1.0, because LibreSSL 1218 # defines OPENSSL_VERSION_NUMBER to claim version 2.0.0, even though it 1219 # doesn't have these OpenSSL 1.1.0 functions. So check for individual 1220 # functions. 1221 AC_CHECK_FUNCS([OPENSSL_init_ssl BIO_get_data BIO_meth_new ASN1_STRING_get0_data]) 1222 # OpenSSL versions before 1.1.0 required setting callback functions, for 1223 # thread-safety. In 1.1.0, it's no longer required, and CRYPTO_lock() 1224 # function was removed. 1225 AC_CHECK_FUNCS([CRYPTO_lock]) 1226fi 1227 1228if test "$with_pam" = yes ; then 1229 AC_CHECK_LIB(pam, pam_start, [], [AC_MSG_ERROR([library 'pam' is required for PAM])]) 1230fi 1231 1232if test "$with_libxml" = yes ; then 1233 AC_CHECK_LIB(xml2, xmlSaveToBuffer, [], [AC_MSG_ERROR([library 'xml2' (version >= 2.6.23) is required for XML support])]) 1234fi 1235 1236if test "$with_libxslt" = yes ; then 1237 AC_CHECK_LIB(xslt, xsltCleanupGlobals, [], [AC_MSG_ERROR([library 'xslt' is required for XSLT support])]) 1238fi 1239 1240# Note: We can test for libldap_r only after we know PTHREAD_LIBS; 1241# also, on AIX, we may need to have openssl in LIBS for this step. 1242if test "$with_ldap" = yes ; then 1243 _LIBS="$LIBS" 1244 if test "$PORTNAME" != "win32"; then 1245 AC_CHECK_LIB(ldap, ldap_bind, [], 1246 [AC_MSG_ERROR([library 'ldap' is required for LDAP])], 1247 [$EXTRA_LDAP_LIBS]) 1248 LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS" 1249 # This test is carried out against libldap. 1250 AC_CHECK_FUNCS([ldap_initialize]) 1251 if test "$enable_thread_safety" = yes; then 1252 # Use ldap_r for FE if available, else assume ldap is thread-safe. 1253 # On some platforms ldap_r fails to link without PTHREAD_LIBS. 1254 LIBS="$_LIBS" 1255 AC_CHECK_LIB(ldap_r, ldap_bind, 1256 [LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS"], 1257 [LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS"], 1258 [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS]) 1259 else 1260 LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS" 1261 fi 1262 else 1263 AC_CHECK_LIB(wldap32, ldap_bind, [], [AC_MSG_ERROR([library 'wldap32' is required for LDAP])]) 1264 LDAP_LIBS_FE="-lwldap32" 1265 LDAP_LIBS_BE="-lwldap32" 1266 fi 1267 LIBS="$_LIBS" 1268fi 1269AC_SUBST(LDAP_LIBS_FE) 1270AC_SUBST(LDAP_LIBS_BE) 1271 1272# for contrib/sepgsql 1273if test "$with_selinux" = yes; then 1274 AC_CHECK_LIB(selinux, security_compute_create_name, [], 1275 [AC_MSG_ERROR([library 'libselinux', version 2.1.10 or newer, is required for SELinux support])]) 1276fi 1277 1278# for contrib/uuid-ossp 1279if test "$with_uuid" = bsd ; then 1280 # On BSD, the UUID functions are in libc 1281 AC_CHECK_FUNC(uuid_to_string, 1282 [UUID_LIBS=""], 1283 [AC_MSG_ERROR([BSD UUID functions are not present])]) 1284elif test "$with_uuid" = e2fs ; then 1285 # On macOS, the UUID functions are in libc 1286 AC_CHECK_FUNC(uuid_generate, 1287 [UUID_LIBS=""], 1288 [AC_CHECK_LIB(uuid, uuid_generate, 1289 [UUID_LIBS="-luuid"], 1290 [AC_MSG_ERROR([library 'uuid' is required for E2FS UUID])])]) 1291elif test "$with_uuid" = ossp ; then 1292 AC_CHECK_LIB(ossp-uuid, uuid_export, 1293 [UUID_LIBS="-lossp-uuid"], 1294 [AC_CHECK_LIB(uuid, uuid_export, 1295 [UUID_LIBS="-luuid"], 1296 [AC_MSG_ERROR([library 'ossp-uuid' or 'uuid' is required for OSSP UUID])])]) 1297fi 1298AC_SUBST(UUID_LIBS) 1299 1300 1301## 1302## Header files 1303## 1304 1305AC_HEADER_STDBOOL 1306 1307AC_CHECK_HEADERS(m4_normalize([ 1308 atomic.h 1309 copyfile.h 1310 execinfo.h 1311 getopt.h 1312 ifaddrs.h 1313 langinfo.h 1314 mbarrier.h 1315 poll.h 1316 sys/epoll.h 1317 sys/event.h 1318 sys/ipc.h 1319 sys/prctl.h 1320 sys/procctl.h 1321 sys/pstat.h 1322 sys/resource.h 1323 sys/select.h 1324 sys/sem.h 1325 sys/shm.h 1326 sys/sockio.h 1327 sys/tas.h 1328 sys/un.h 1329 termios.h 1330 ucred.h 1331 wctype.h 1332])) 1333 1334# On BSD, test for net/if.h will fail unless sys/socket.h 1335# is included first. 1336AC_CHECK_HEADERS(net/if.h, [], [], 1337[AC_INCLUDES_DEFAULT 1338#include <sys/socket.h> 1339]) 1340 1341# On OpenBSD, test for sys/ucred.h will fail unless sys/param.h 1342# is included first. 1343AC_CHECK_HEADERS(sys/ucred.h, [], [], 1344[AC_INCLUDES_DEFAULT 1345#include <sys/param.h> 1346]) 1347 1348# At least on IRIX, test for netinet/tcp.h will fail unless 1349# netinet/in.h is included first. 1350AC_CHECK_HEADERS(netinet/tcp.h, [], [], 1351[AC_INCLUDES_DEFAULT 1352#include <netinet/in.h> 1353]) 1354 1355if expr x"$pgac_cv_check_readline" : 'x-lreadline' >/dev/null ; then 1356 AC_CHECK_HEADERS(readline/readline.h, [], 1357 [AC_CHECK_HEADERS(readline.h, [], 1358 [AC_MSG_ERROR([readline header not found 1359If you have readline already installed, see config.log for details on the 1360failure. It is possible the compiler isn't looking in the proper directory. 1361Use --without-readline to disable readline support.])])]) 1362 AC_CHECK_HEADERS(readline/history.h, [], 1363 [AC_CHECK_HEADERS(history.h, [], 1364 [AC_MSG_ERROR([history header not found 1365If you have readline already installed, see config.log for details on the 1366failure. It is possible the compiler isn't looking in the proper directory. 1367Use --without-readline to disable readline support.])])]) 1368fi 1369 1370if expr x"$pgac_cv_check_readline" : 'x-ledit' >/dev/null ; then 1371# Some installations of libedit usurp /usr/include/readline/, which seems 1372# bad practice, since in combined installations readline will have its headers 1373# there. We might have to resort to AC_EGREP checks to make sure we found 1374# the proper header... 1375 AC_CHECK_HEADERS(editline/readline.h, [], 1376 [AC_CHECK_HEADERS(readline.h, [], 1377 [AC_CHECK_HEADERS(readline/readline.h, [], 1378 [AC_MSG_ERROR([readline header not found 1379If you have libedit already installed, see config.log for details on the 1380failure. It is possible the compiler isn't looking in the proper directory. 1381Use --without-readline to disable libedit support.])])])]) 1382# Note: in a libedit installation, history.h is sometimes a dummy, and may 1383# not be there at all. Hence, don't complain if not found. We must check 1384# though, since in yet other versions it is an independent header. 1385 AC_CHECK_HEADERS(editline/history.h, [], 1386 [AC_CHECK_HEADERS(history.h, [], 1387 [AC_CHECK_HEADERS(readline/history.h)])]) 1388fi 1389 1390if test "$with_zlib" = yes; then 1391 AC_CHECK_HEADER(zlib.h, [], [AC_MSG_ERROR([zlib header not found 1392If you have zlib already installed, see config.log for details on the 1393failure. It is possible the compiler isn't looking in the proper directory. 1394Use --without-zlib to disable zlib support.])]) 1395fi 1396 1397if test "$with_gssapi" = yes ; then 1398 AC_CHECK_HEADERS(gssapi/gssapi.h, [], 1399 [AC_CHECK_HEADERS(gssapi.h, [], [AC_MSG_ERROR([gssapi.h header file is required for GSSAPI])])]) 1400fi 1401 1402if test "$with_openssl" = yes ; then 1403 AC_CHECK_HEADER(openssl/ssl.h, [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])]) 1404 AC_CHECK_HEADER(openssl/err.h, [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])]) 1405fi 1406 1407if test "$with_pam" = yes ; then 1408 AC_CHECK_HEADERS(security/pam_appl.h, [], 1409 [AC_CHECK_HEADERS(pam/pam_appl.h, [], 1410 [AC_MSG_ERROR([header file <security/pam_appl.h> or <pam/pam_appl.h> is required for PAM.])])]) 1411fi 1412 1413if test "$with_bsd_auth" = yes ; then 1414 AC_CHECK_HEADER(bsd_auth.h, [], [AC_MSG_ERROR([header file <bsd_auth.h> is required for BSD Authentication support])]) 1415fi 1416 1417if test "$with_systemd" = yes ; then 1418 AC_CHECK_HEADER(systemd/sd-daemon.h, [], [AC_MSG_ERROR([header file <systemd/sd-daemon.h> is required for systemd support])]) 1419fi 1420 1421if test "$with_libxml" = yes ; then 1422 AC_CHECK_HEADER(libxml/parser.h, [], [AC_MSG_ERROR([header file <libxml/parser.h> is required for XML support])]) 1423fi 1424 1425if test "$with_libxslt" = yes ; then 1426 AC_CHECK_HEADER(libxslt/xslt.h, [], [AC_MSG_ERROR([header file <libxslt/xslt.h> is required for XSLT support])]) 1427fi 1428 1429if test "$with_ldap" = yes ; then 1430 if test "$PORTNAME" != "win32"; then 1431 AC_CHECK_HEADERS(ldap.h, [], 1432 [AC_MSG_ERROR([header file <ldap.h> is required for LDAP])]) 1433 PGAC_LDAP_SAFE 1434 else 1435 AC_CHECK_HEADERS(winldap.h, [], 1436 [AC_MSG_ERROR([header file <winldap.h> is required for LDAP])], 1437 [AC_INCLUDES_DEFAULT 1438#include <windows.h> 1439 ]) 1440 fi 1441fi 1442 1443if test "$with_bonjour" = yes ; then 1444 AC_CHECK_HEADER(dns_sd.h, [], [AC_MSG_ERROR([header file <dns_sd.h> is required for Bonjour])]) 1445dnl At some point we might add something like 1446dnl AC_SEARCH_LIBS(DNSServiceRegister, dns_sd) 1447dnl but right now, what that would mainly accomplish is to encourage 1448dnl people to try to use the avahi implementation, which does not work. 1449dnl If you want to use Apple's own Bonjour code on another platform, 1450dnl just add -ldns_sd to LIBS manually. 1451fi 1452 1453# for contrib/uuid-ossp 1454if test "$with_uuid" = bsd ; then 1455 AC_CHECK_HEADERS(uuid.h, 1456 [AC_EGREP_HEADER([uuid_to_string], uuid.h, [], 1457 [AC_MSG_ERROR([header file <uuid.h> does not match BSD UUID library])])], 1458 [AC_MSG_ERROR([header file <uuid.h> is required for BSD UUID])]) 1459elif test "$with_uuid" = e2fs ; then 1460 AC_CHECK_HEADERS(uuid/uuid.h, 1461 [AC_EGREP_HEADER([uuid_generate], uuid/uuid.h, [], 1462 [AC_MSG_ERROR([header file <uuid/uuid.h> does not match E2FS UUID library])])], 1463 [AC_CHECK_HEADERS(uuid.h, 1464 [AC_EGREP_HEADER([uuid_generate], uuid.h, [], 1465 [AC_MSG_ERROR([header file <uuid.h> does not match E2FS UUID library])])], 1466 [AC_MSG_ERROR([header file <uuid/uuid.h> or <uuid.h> is required for E2FS UUID])])]) 1467elif test "$with_uuid" = ossp ; then 1468 AC_CHECK_HEADERS(ossp/uuid.h, 1469 [AC_EGREP_HEADER([uuid_export], ossp/uuid.h, [], 1470 [AC_MSG_ERROR([header file <ossp/uuid.h> does not match OSSP UUID library])])], 1471 [AC_CHECK_HEADERS(uuid.h, 1472 [AC_EGREP_HEADER([uuid_export], uuid.h, [], 1473 [AC_MSG_ERROR([header file <uuid.h> does not match OSSP UUID library])])], 1474 [AC_MSG_ERROR([header file <ossp/uuid.h> or <uuid.h> is required for OSSP UUID])])]) 1475fi 1476 1477if test "$PORTNAME" = "win32" ; then 1478 AC_CHECK_HEADERS(crtdefs.h) 1479fi 1480 1481## 1482## Types, structures, compiler characteristics 1483## 1484 1485m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that. 1486AC_C_BIGENDIAN 1487AC_C_INLINE 1488PGAC_PRINTF_ARCHETYPE 1489PGAC_C_FUNCNAME_SUPPORT 1490PGAC_C_STATIC_ASSERT 1491PGAC_C_TYPEOF 1492PGAC_C_TYPES_COMPATIBLE 1493PGAC_C_BUILTIN_CONSTANT_P 1494PGAC_C_BUILTIN_UNREACHABLE 1495PGAC_C_COMPUTED_GOTO 1496PGAC_STRUCT_TIMEZONE 1497PGAC_UNION_SEMUN 1498PGAC_STRUCT_SOCKADDR_UN 1499PGAC_STRUCT_SOCKADDR_STORAGE 1500PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS 1501PGAC_STRUCT_ADDRINFO 1502 1503PGAC_TYPE_LOCALE_T 1504 1505# MSVC doesn't cope well with defining restrict to __restrict, the 1506# spelling it understands, because it conflicts with 1507# __declspec(restrict). Therefore we define pg_restrict to the 1508# appropriate definition, which presumably won't conflict. 1509# 1510# Allow platforms with buggy compilers to force restrict to not be 1511# used by setting $FORCE_DISABLE_RESTRICT=yes in the relevant 1512# template. 1513AC_C_RESTRICT 1514if test "$ac_cv_c_restrict" = "no" -o "x$FORCE_DISABLE_RESTRICT" = "xyes"; then 1515 pg_restrict="" 1516else 1517 pg_restrict="$ac_cv_c_restrict" 1518fi 1519AC_DEFINE_UNQUOTED([pg_restrict], [$pg_restrict], 1520[Define to keyword to use for C99 restrict support, or to nothing if not 1521supported]) 1522 1523AC_CHECK_TYPES([struct cmsgcred], [], [], 1524[#include <sys/socket.h> 1525#include <sys/param.h> 1526#ifdef HAVE_SYS_UCRED_H 1527#include <sys/ucred.h> 1528#endif]) 1529 1530AC_CHECK_TYPES([struct option], [], [], 1531[#ifdef HAVE_GETOPT_H 1532#include <getopt.h> 1533#endif]) 1534 1535if test "$with_zlib" = yes; then 1536 # Check that <zlib.h> defines z_streamp (versions before about 1.0.4 1537 # did not). While we could work around the lack of z_streamp, it 1538 # seems unwise to encourage people to use such old zlib versions... 1539 AC_CHECK_TYPE(z_streamp, [], [AC_MSG_ERROR([zlib version is too old 1540Use --without-zlib to disable zlib support.])], 1541 [#include <zlib.h>]) 1542fi 1543 1544case $host_cpu in 1545 x86_64) 1546 # On x86_64, check if we can compile a popcntq instruction 1547 AC_CACHE_CHECK([whether assembler supports x86_64 popcntq], 1548 [pgac_cv_have_x86_64_popcntq], 1549 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 1550 [long long x = 1; long long r; 1551 __asm__ __volatile__ (" popcntq %1,%0\n" : "=q"(r) : "rm"(x));])], 1552 [pgac_cv_have_x86_64_popcntq=yes], 1553 [pgac_cv_have_x86_64_popcntq=no])]) 1554 if test x"$pgac_cv_have_x86_64_popcntq" = xyes ; then 1555 AC_DEFINE(HAVE_X86_64_POPCNTQ, 1, [Define to 1 if the assembler supports X86_64's POPCNTQ instruction.]) 1556 fi 1557 ;; 1558 ppc*|powerpc*) 1559 # On PPC, check if assembler supports LWARX instruction's mutex hint bit 1560 AC_CACHE_CHECK([whether assembler supports lwarx hint bit], 1561 [pgac_cv_have_ppc_mutex_hint], 1562 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 1563 [int a = 0; int *p = &a; int r; 1564 __asm__ __volatile__ (" lwarx %0,0,%1,1\n" : "=&r"(r) : "r"(p));])], 1565 [pgac_cv_have_ppc_mutex_hint=yes], 1566 [pgac_cv_have_ppc_mutex_hint=no])]) 1567 if test x"$pgac_cv_have_ppc_mutex_hint" = xyes ; then 1568 AC_DEFINE(HAVE_PPC_LWARX_MUTEX_HINT, 1, [Define to 1 if the assembler supports PPC's LWARX mutex hint bit.]) 1569 fi 1570 # Check if compiler accepts "i"(x) when __builtin_constant_p(x). 1571 AC_CACHE_CHECK([whether __builtin_constant_p(x) implies "i"(x) acceptance], 1572 [pgac_cv_have_i_constraint__builtin_constant_p], 1573 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 1574 [static inline int 1575 addi(int ra, int si) 1576 { 1577 int res = 0; 1578 if (__builtin_constant_p(si)) 1579 __asm__ __volatile__( 1580 " addi %0,%1,%2\n" : "=r"(res) : "b"(ra), "i"(si)); 1581 return res; 1582 } 1583 int test_adds(int x) { return addi(3, x) + addi(x, 5); }], [])], 1584 [pgac_cv_have_i_constraint__builtin_constant_p=yes], 1585 [pgac_cv_have_i_constraint__builtin_constant_p=no])]) 1586 if test x"$pgac_cv_have_i_constraint__builtin_constant_p" = xyes ; then 1587 AC_DEFINE(HAVE_I_CONSTRAINT__BUILTIN_CONSTANT_P, 1, 1588 [Define to 1 if __builtin_constant_p(x) implies "i"(x) acceptance.]) 1589 fi 1590 ;; 1591esac 1592 1593# Check largefile support. You might think this is a system service not a 1594# compiler characteristic, but you'd be wrong. We must check this before 1595# probing existence of related functions such as fseeko, since the largefile 1596# defines can affect what is generated for that. 1597if test "$PORTNAME" != "win32"; then 1598 AC_SYS_LARGEFILE 1599 dnl Autoconf 2.69's AC_SYS_LARGEFILE believes it's a good idea to #define 1600 dnl _DARWIN_USE_64_BIT_INODE, but it isn't: on macOS 10.5 that activates a 1601 dnl bug that causes readdir() to sometimes return EINVAL. On later macOS 1602 dnl versions where the feature actually works, it's on by default anyway. 1603 AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],[]) 1604fi 1605 1606dnl Check for largefile support (must be after AC_SYS_LARGEFILE) 1607AC_CHECK_SIZEOF([off_t]) 1608 1609# If we don't have largefile support, can't handle segsize >= 2GB. 1610if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then 1611 AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.]) 1612fi 1613 1614AC_CHECK_SIZEOF([bool], [], 1615[#ifdef HAVE_STDBOOL_H 1616#include <stdbool.h> 1617#endif]) 1618 1619dnl We use <stdbool.h> if we have it and it declares type bool as having 1620dnl size 1. Otherwise, c.h will fall back to declaring bool as unsigned char. 1621if test "$ac_cv_header_stdbool_h" = yes -a "$ac_cv_sizeof_bool" = 1; then 1622 AC_DEFINE([PG_USE_STDBOOL], 1, 1623 [Define to 1 to use <stdbool.h> to define type bool.]) 1624fi 1625 1626 1627## 1628## Functions, global variables 1629## 1630 1631PGAC_VAR_INT_TIMEZONE 1632AC_FUNC_ACCEPT_ARGTYPES 1633PGAC_FUNC_GETTIMEOFDAY_1ARG 1634PGAC_FUNC_WCSTOMBS_L 1635 1636# Some versions of libedit contain strlcpy(), setproctitle(), and other 1637# symbols that that library has no business exposing to the world. Pending 1638# acquisition of a clue by those developers, ignore libedit (including its 1639# possible alias of libreadline) while checking for everything else. 1640LIBS_including_readline="$LIBS" 1641LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` 1642 1643AC_CHECK_FUNCS(m4_normalize([ 1644 backtrace_symbols 1645 clock_gettime 1646 copyfile 1647 fdatasync 1648 getifaddrs 1649 getpeerucred 1650 getrlimit 1651 kqueue 1652 mbstowcs_l 1653 memset_s 1654 poll 1655 posix_fallocate 1656 ppoll 1657 pstat 1658 pthread_is_threaded_np 1659 readlink 1660 setproctitle 1661 setproctitle_fast 1662 setsid 1663 shm_open 1664 strchrnul 1665 strsignal 1666 symlink 1667 sync_file_range 1668 uselocale 1669 wcstombs_l 1670])) 1671 1672# These typically are compiler builtins, for which AC_CHECK_FUNCS fails. 1673PGAC_CHECK_BUILTIN_FUNC([__builtin_bswap16], [int x]) 1674PGAC_CHECK_BUILTIN_FUNC([__builtin_bswap32], [int x]) 1675PGAC_CHECK_BUILTIN_FUNC([__builtin_bswap64], [long int x]) 1676# We assume that we needn't test all widths of these explicitly: 1677PGAC_CHECK_BUILTIN_FUNC([__builtin_clz], [unsigned int x]) 1678PGAC_CHECK_BUILTIN_FUNC([__builtin_ctz], [unsigned int x]) 1679PGAC_CHECK_BUILTIN_FUNC([__builtin_popcount], [unsigned int x]) 1680 1681# We require 64-bit fseeko() to be available, but run this check anyway 1682# in case it finds that _LARGEFILE_SOURCE has to be #define'd for that. 1683AC_FUNC_FSEEKO 1684 1685# posix_fadvise() is a no-op on Solaris, so don't incur function overhead 1686# by calling it, 2009-04-02 1687# http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c 1688dnl must use AS_IF here, else AC_REQUIRES inside AC_CHECK_DECLS malfunctions 1689AS_IF([test "$PORTNAME" != "solaris"], [ 1690AC_CHECK_FUNCS(posix_fadvise) 1691AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>]) 1692]) # fi 1693 1694AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) 1695AC_CHECK_DECLS([strlcat, strlcpy, strnlen]) 1696# This is probably only present on macOS, but may as well check always 1697AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>]) 1698 1699AC_CHECK_DECLS([RTLD_GLOBAL, RTLD_NOW], [], [], [#include <dlfcn.h>]) 1700 1701AC_CHECK_TYPE([struct sockaddr_in6], 1702 [AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])], 1703 [], 1704[$ac_includes_default 1705#include <netinet/in.h>]) 1706 1707AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS], 1708[AC_LINK_IFELSE([AC_LANG_PROGRAM( 1709[#include <machine/vmparam.h> 1710#include <sys/exec.h> 1711], 1712[PS_STRINGS->ps_nargvstr = 1; 1713PS_STRINGS->ps_argvstr = "foo";])], 1714[pgac_cv_var_PS_STRINGS=yes], 1715[pgac_cv_var_PS_STRINGS=no])]) 1716if test "$pgac_cv_var_PS_STRINGS" = yes ; then 1717 AC_DEFINE([HAVE_PS_STRINGS], 1, [Define to 1 if the PS_STRINGS thing exists.]) 1718fi 1719 1720AC_REPLACE_FUNCS(m4_normalize([ 1721 dlopen 1722 explicit_bzero 1723 fls 1724 getopt 1725 getpeereid 1726 getrusage 1727 inet_aton 1728 link 1729 mkdtemp 1730 pread 1731 pwrite 1732 random 1733 srandom 1734 strlcat 1735 strlcpy 1736 strnlen 1737 strtof 1738])) 1739 1740if test "$PORTNAME" = "win32" -o "$PORTNAME" = "cygwin"; then 1741 # Cygwin and (apparently, based on test results) Mingw both 1742 # have a broken strtof(), so substitute the same replacement 1743 # code we use with VS2013. That's not a perfect fix, since 1744 # (unlike with VS2013) it doesn't avoid double-rounding, but 1745 # we have no better options. To get that, though, we have to 1746 # force the file to be compiled despite HAVE_STRTOF. 1747 AC_LIBOBJ([strtof]) 1748 AC_MSG_NOTICE([On $host_os we will use our strtof wrapper.]) 1749fi 1750 1751case $host_os in 1752 # Windows uses a specialised env handler 1753 mingw*) 1754 AC_DEFINE(HAVE_SETENV, 1, [Define to 1 because replacement version used.]) 1755 AC_DEFINE(HAVE_UNSETENV, 1, [Define to 1 because replacement version used.]) 1756 ac_cv_func_setenv=yes 1757 ac_cv_func_unsetenv=yes 1758 ;; 1759 *) 1760 AC_REPLACE_FUNCS([setenv unsetenv]) 1761 ;; 1762esac 1763 1764# System's version of getaddrinfo(), if any, may be used only if we found 1765# a definition for struct addrinfo; see notes in src/include/getaddrinfo.h. 1766# We use only our own getaddrinfo.c on Windows, but it's time to revisit that. 1767if test x"$ac_cv_type_struct_addrinfo" = xyes && \ 1768 test "$PORTNAME" != "win32"; then 1769 AC_REPLACE_FUNCS([getaddrinfo]) 1770else 1771 AC_LIBOBJ(getaddrinfo) 1772fi 1773 1774# Similarly, use system's getopt_long() only if system provides struct option. 1775if test x"$ac_cv_type_struct_option" = xyes ; then 1776 AC_REPLACE_FUNCS([getopt_long]) 1777else 1778 AC_LIBOBJ(getopt_long) 1779fi 1780 1781# On OpenBSD and Solaris, getopt() doesn't do what we want for long options 1782# (i.e., allow '-' as a flag character), so use our version on those platforms. 1783if test "$PORTNAME" = "openbsd" -o "$PORTNAME" = "solaris"; then 1784 AC_LIBOBJ(getopt) 1785fi 1786 1787# mingw has adopted a GNU-centric interpretation of optind/optreset, 1788# so always use our version on Windows. 1789if test "$PORTNAME" = "win32"; then 1790 AC_LIBOBJ(getopt) 1791 AC_LIBOBJ(getopt_long) 1792fi 1793 1794# Win32 (really MinGW) support 1795if test "$PORTNAME" = "win32"; then 1796 AC_CHECK_FUNCS(_configthreadlocale) 1797 AC_REPLACE_FUNCS(gettimeofday) 1798 AC_LIBOBJ(dirmod) 1799 AC_LIBOBJ(kill) 1800 AC_LIBOBJ(open) 1801 AC_LIBOBJ(system) 1802 AC_LIBOBJ(win32env) 1803 AC_LIBOBJ(win32error) 1804 AC_LIBOBJ(win32security) 1805 AC_LIBOBJ(win32setlocale) 1806 AC_DEFINE([HAVE_SYMLINK], 1, 1807 [Define to 1 if you have the `symlink' function.]) 1808 AC_CHECK_TYPES(MINIDUMP_TYPE, [pgac_minidump_type=yes], [pgac_minidump_type=no], [ 1809#define WIN32_LEAN_AND_MEAN 1810#include <windows.h> 1811#include <string.h> 1812#include <dbghelp.h>]) 1813fi 1814if test x"$pgac_minidump_type" = x"yes" ; then 1815 AC_SUBST(have_win32_dbghelp,yes) 1816else 1817 AC_SUBST(have_win32_dbghelp,no) 1818fi 1819 1820# Cygwin needs only a bit of that 1821if test "$PORTNAME" = "cygwin"; then 1822 AC_LIBOBJ(dirmod) 1823fi 1824 1825AC_CHECK_FUNC(syslog, 1826 [AC_CHECK_HEADER(syslog.h, 1827 [AC_DEFINE(HAVE_SYSLOG, 1, [Define to 1 if you have the syslog interface.])])]) 1828 1829AC_CACHE_CHECK([for opterr], pgac_cv_var_int_opterr, 1830[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], 1831 [extern int opterr; opterr = 1;])], 1832 [pgac_cv_var_int_opterr=yes], 1833 [pgac_cv_var_int_opterr=no])]) 1834if test x"$pgac_cv_var_int_opterr" = x"yes"; then 1835 AC_DEFINE(HAVE_INT_OPTERR, 1, [Define to 1 if you have the global variable 'int opterr'.]) 1836fi 1837 1838AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset, 1839[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>], 1840 [extern int optreset; optreset = 1;])], 1841 [pgac_cv_var_int_optreset=yes], 1842 [pgac_cv_var_int_optreset=no])]) 1843if test x"$pgac_cv_var_int_optreset" = x"yes"; then 1844 AC_DEFINE(HAVE_INT_OPTRESET, 1, [Define to 1 if you have the global variable 'int optreset'.]) 1845fi 1846 1847AC_CHECK_FUNCS([strtoll __strtoll strtoq], [break]) 1848AC_CHECK_FUNCS([strtoull __strtoull strtouq], [break]) 1849# strto[u]ll may exist but not be declared 1850AC_CHECK_DECLS([strtoll, strtoull]) 1851 1852if test "$with_icu" = yes; then 1853 ac_save_CPPFLAGS=$CPPFLAGS 1854 CPPFLAGS="$ICU_CFLAGS $CPPFLAGS" 1855 1856 # Verify we have ICU's header files 1857 AC_CHECK_HEADER(unicode/ucol.h, [], 1858 [AC_MSG_ERROR([header file <unicode/ucol.h> is required for ICU])]) 1859 1860 CPPFLAGS=$ac_save_CPPFLAGS 1861fi 1862 1863if test "$with_llvm" = yes; then 1864 PGAC_CHECK_LLVM_FUNCTIONS() 1865fi 1866 1867# Lastly, restore full LIBS list and check for readline/libedit symbols 1868LIBS="$LIBS_including_readline" 1869 1870if test "$with_readline" = yes; then 1871 PGAC_READLINE_VARIABLES 1872 AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function rl_reset_screen_size]) 1873 AC_CHECK_FUNCS([append_history history_truncate_file]) 1874fi 1875 1876 1877# This test makes sure that run tests work at all. Sometimes a shared 1878# library is found by the linker, but the runtime linker can't find it. 1879# This check should come after all modifications of compiler or linker 1880# variables, and before any other run tests. 1881AC_MSG_CHECKING([test program]) 1882AC_RUN_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])], 1883[AC_MSG_RESULT(ok)], 1884[AC_MSG_RESULT(failed) 1885AC_MSG_ERROR([[ 1886Could not execute a simple test program. This may be a problem 1887related to locating shared libraries. Check the file 'config.log' 1888for the exact reason.]])], 1889[AC_MSG_RESULT([cross-compiling])]) 1890 1891# -------------------- 1892# Run tests below here 1893# -------------------- 1894 1895dnl Check to see if we have a working 64-bit integer type. 1896dnl Since Postgres 8.4, we no longer support compilers without a working 1897dnl 64-bit type; but we have to determine whether that type is called 1898dnl "long int" or "long long int". 1899 1900PGAC_TYPE_64BIT_INT([long int]) 1901 1902if test x"$HAVE_LONG_INT_64" = x"yes" ; then 1903 pg_int64_type="long int" 1904else 1905 PGAC_TYPE_64BIT_INT([long long int]) 1906 if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then 1907 pg_int64_type="long long int" 1908 else 1909 AC_MSG_ERROR([Cannot find a working 64-bit integer type.]) 1910 fi 1911fi 1912 1913AC_DEFINE_UNQUOTED(PG_INT64_TYPE, $pg_int64_type, 1914 [Define to the name of a signed 64-bit integer type.]) 1915 1916# Select the printf length modifier that goes with that, too. 1917if test x"$pg_int64_type" = x"long long int" ; then 1918 INT64_MODIFIER='"ll"' 1919else 1920 INT64_MODIFIER='"l"' 1921fi 1922 1923AC_DEFINE_UNQUOTED(INT64_MODIFIER, $INT64_MODIFIER, 1924 [Define to the appropriate printf length modifier for 64-bit ints.]) 1925 1926# has to be down here, rather than with the other builtins, because 1927# the test uses PG_INT64_TYPE. 1928PGAC_C_BUILTIN_OP_OVERFLOW 1929 1930# Check size of void *, size_t (enables tweaks for > 32bit address space) 1931AC_CHECK_SIZEOF([void *]) 1932AC_CHECK_SIZEOF([size_t]) 1933AC_CHECK_SIZEOF([long]) 1934 1935# Determine memory alignment requirements for the basic C data types. 1936 1937AC_CHECK_ALIGNOF(short) 1938AC_CHECK_ALIGNOF(int) 1939AC_CHECK_ALIGNOF(long) 1940if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then 1941 AC_CHECK_ALIGNOF(long long int) 1942fi 1943AC_CHECK_ALIGNOF(double) 1944 1945# Compute maximum alignment of any basic type. 1946# We assume long's alignment is at least as strong as char, short, or int; 1947# but we must check long long (if it is being used for int64) and double. 1948# Note that we intentionally do not consider any types wider than 64 bits, 1949# as allowing MAXIMUM_ALIGNOF to exceed 8 would be too much of a penalty 1950# for disk and memory space. 1951 1952MAX_ALIGNOF=$ac_cv_alignof_long 1953if test $MAX_ALIGNOF -lt $ac_cv_alignof_double ; then 1954 MAX_ALIGNOF=$ac_cv_alignof_double 1955fi 1956if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ; then 1957 MAX_ALIGNOF="$ac_cv_alignof_long_long_int" 1958fi 1959AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.]) 1960 1961 1962# Some platforms predefine the types int8, int16, etc. Only check 1963# a (hopefully) representative subset. 1964AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [], 1965[#include <stdio.h>]) 1966 1967# Some compilers offer a 128-bit integer scalar type. 1968PGAC_TYPE_128BIT_INT 1969 1970# Check for various atomic operations now that we have checked how to declare 1971# 64bit integers. 1972PGAC_HAVE_GCC__SYNC_CHAR_TAS 1973PGAC_HAVE_GCC__SYNC_INT32_TAS 1974PGAC_HAVE_GCC__SYNC_INT32_CAS 1975PGAC_HAVE_GCC__SYNC_INT64_CAS 1976PGAC_HAVE_GCC__ATOMIC_INT32_CAS 1977PGAC_HAVE_GCC__ATOMIC_INT64_CAS 1978 1979 1980# Check for x86 cpuid instruction 1981AC_CACHE_CHECK([for __get_cpuid], [pgac_cv__get_cpuid], 1982[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cpuid.h>], 1983 [[unsigned int exx[4] = {0, 0, 0, 0}; 1984 __get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]); 1985 ]])], 1986 [pgac_cv__get_cpuid="yes"], 1987 [pgac_cv__get_cpuid="no"])]) 1988if test x"$pgac_cv__get_cpuid" = x"yes"; then 1989 AC_DEFINE(HAVE__GET_CPUID, 1, [Define to 1 if you have __get_cpuid.]) 1990fi 1991 1992AC_CACHE_CHECK([for __cpuid], [pgac_cv__cpuid], 1993[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <intrin.h>], 1994 [[unsigned int exx[4] = {0, 0, 0, 0}; 1995 __get_cpuid(exx[0], 1); 1996 ]])], 1997 [pgac_cv__cpuid="yes"], 1998 [pgac_cv__cpuid="no"])]) 1999if test x"$pgac_cv__cpuid" = x"yes"; then 2000 AC_DEFINE(HAVE__CPUID, 1, [Define to 1 if you have __cpuid.]) 2001fi 2002 2003# Check for Intel SSE 4.2 intrinsics to do CRC calculations. 2004# 2005# First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used 2006# with the default compiler flags. If not, check if adding the -msse4.2 2007# flag helps. CFLAGS_SSE42 is set to -msse4.2 if that's required. 2008PGAC_SSE42_CRC32_INTRINSICS([]) 2009if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then 2010 PGAC_SSE42_CRC32_INTRINSICS([-msse4.2]) 2011fi 2012AC_SUBST(CFLAGS_SSE42) 2013 2014# Are we targeting a processor that supports SSE 4.2? gcc, clang and icc all 2015# define __SSE4_2__ in that case. 2016AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ 2017#ifndef __SSE4_2__ 2018#error __SSE4_2__ not defined 2019#endif 2020])], [SSE4_2_TARGETED=1]) 2021 2022# Check for ARMv8 CRC Extension intrinsics to do CRC calculations. 2023# 2024# First check if __crc32c* intrinsics can be used with the default compiler 2025# flags. If not, check if adding -march=armv8-a+crc flag helps. 2026# CFLAGS_ARMV8_CRC32C is set if the extra flag is required. 2027PGAC_ARMV8_CRC32C_INTRINSICS([]) 2028if test x"$pgac_armv8_crc32c_intrinsics" != x"yes"; then 2029 PGAC_ARMV8_CRC32C_INTRINSICS([-march=armv8-a+crc]) 2030fi 2031AC_SUBST(CFLAGS_ARMV8_CRC32C) 2032 2033# Select CRC-32C implementation. 2034# 2035# If we are targeting a processor that has Intel SSE 4.2 instructions, we can 2036# use the special CRC instructions for calculating CRC-32C. If we're not 2037# targeting such a processor, but we can nevertheless produce code that uses 2038# the SSE intrinsics, perhaps with some extra CFLAGS, compile both 2039# implementations and select which one to use at runtime, depending on whether 2040# SSE 4.2 is supported by the processor we're running on. 2041# 2042# Similarly, if we are targeting an ARM processor that has the CRC 2043# instructions that are part of the ARMv8 CRC Extension, use them. And if 2044# we're not targeting such a processor, but can nevertheless produce code that 2045# uses the CRC instructions, compile both, and select at runtime. 2046# 2047# You can override this logic by setting the appropriate USE_*_CRC32 flag to 1 2048# in the template or configure command line. 2049if test x"$USE_SLICING_BY_8_CRC32C" = x"" && test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"" && test x"$USE_ARMV8_CRC32C" = x"" && test x"$USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK" = x""; then 2050 # Use Intel SSE 4.2 if available. 2051 if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && test x"$SSE4_2_TARGETED" = x"1" ; then 2052 USE_SSE42_CRC32C=1 2053 else 2054 # Intel SSE 4.2, with runtime check? The CPUID instruction is needed for 2055 # the runtime check. 2056 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 2057 USE_SSE42_CRC32C_WITH_RUNTIME_CHECK=1 2058 else 2059 # Use ARM CRC Extension if available. 2060 if test x"$pgac_armv8_crc32c_intrinsics" = x"yes" && test x"$CFLAGS_ARMV8_CRC32C" = x""; then 2061 USE_ARMV8_CRC32C=1 2062 else 2063 # ARM CRC Extension, with runtime check? 2064 if test x"$pgac_armv8_crc32c_intrinsics" = x"yes"; then 2065 USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK=1 2066 else 2067 # fall back to slicing-by-8 algorithm, which doesn't require any 2068 # special CPU support. 2069 USE_SLICING_BY_8_CRC32C=1 2070 fi 2071 fi 2072 fi 2073 fi 2074fi 2075 2076# Set PG_CRC32C_OBJS appropriately depending on the selected implementation. 2077AC_MSG_CHECKING([which CRC-32C implementation to use]) 2078if test x"$USE_SSE42_CRC32C" = x"1"; then 2079 AC_DEFINE(USE_SSE42_CRC32C, 1, [Define to 1 use Intel SSE 4.2 CRC instructions.]) 2080 PG_CRC32C_OBJS="pg_crc32c_sse42.o" 2081 AC_MSG_RESULT(SSE 4.2) 2082else 2083 if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then 2084 AC_DEFINE(USE_SSE42_CRC32C_WITH_RUNTIME_CHECK, 1, [Define to 1 to use Intel SSE 4.2 CRC instructions with a runtime check.]) 2085 PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_sse42_choose.o" 2086 AC_MSG_RESULT(SSE 4.2 with runtime check) 2087 else 2088 if test x"$USE_ARMV8_CRC32C" = x"1"; then 2089 AC_DEFINE(USE_ARMV8_CRC32C, 1, [Define to 1 to use ARMv8 CRC Extension.]) 2090 PG_CRC32C_OBJS="pg_crc32c_armv8.o" 2091 AC_MSG_RESULT(ARMv8 CRC instructions) 2092 else 2093 if test x"$USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then 2094 AC_DEFINE(USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK, 1, [Define to 1 to use ARMv8 CRC Extension with a runtime check.]) 2095 PG_CRC32C_OBJS="pg_crc32c_armv8.o pg_crc32c_sb8.o pg_crc32c_armv8_choose.o" 2096 AC_MSG_RESULT(ARMv8 CRC instructions with runtime check) 2097 else 2098 AC_DEFINE(USE_SLICING_BY_8_CRC32C, 1, [Define to 1 to use software CRC-32C implementation (slicing-by-8).]) 2099 PG_CRC32C_OBJS="pg_crc32c_sb8.o" 2100 AC_MSG_RESULT(slicing-by-8) 2101 fi 2102 fi 2103 fi 2104fi 2105AC_SUBST(PG_CRC32C_OBJS) 2106 2107 2108# Select semaphore implementation type. 2109if test "$PORTNAME" != "win32"; then 2110 if test x"$PREFERRED_SEMAPHORES" = x"NAMED_POSIX" ; then 2111 # Need sem_open for this 2112 AC_SEARCH_LIBS(sem_open, [rt pthread], [USE_NAMED_POSIX_SEMAPHORES=1]) 2113 fi 2114 if test x"$PREFERRED_SEMAPHORES" = x"UNNAMED_POSIX" ; then 2115 # Need sem_init for this 2116 AC_SEARCH_LIBS(sem_init, [rt pthread], [USE_UNNAMED_POSIX_SEMAPHORES=1]) 2117 fi 2118 AC_MSG_CHECKING([which semaphore API to use]) 2119 if test x"$USE_NAMED_POSIX_SEMAPHORES" = x"1" ; then 2120 AC_DEFINE(USE_NAMED_POSIX_SEMAPHORES, 1, [Define to select named POSIX semaphores.]) 2121 SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c" 2122 sematype="named POSIX" 2123 else 2124 if test x"$USE_UNNAMED_POSIX_SEMAPHORES" = x"1" ; then 2125 AC_DEFINE(USE_UNNAMED_POSIX_SEMAPHORES, 1, [Define to select unnamed POSIX semaphores.]) 2126 SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c" 2127 sematype="unnamed POSIX" 2128 else 2129 AC_DEFINE(USE_SYSV_SEMAPHORES, 1, [Define to select SysV-style semaphores.]) 2130 SEMA_IMPLEMENTATION="src/backend/port/sysv_sema.c" 2131 sematype="System V" 2132 fi 2133 fi 2134 AC_MSG_RESULT([$sematype]) 2135else 2136 AC_DEFINE(USE_WIN32_SEMAPHORES, 1, [Define to select Win32-style semaphores.]) 2137 SEMA_IMPLEMENTATION="src/backend/port/win32_sema.c" 2138fi 2139 2140 2141# Select shared-memory implementation type. 2142if test "$PORTNAME" != "win32"; then 2143 AC_DEFINE(USE_SYSV_SHARED_MEMORY, 1, [Define to select SysV-style shared memory.]) 2144 SHMEM_IMPLEMENTATION="src/backend/port/sysv_shmem.c" 2145else 2146 AC_DEFINE(USE_WIN32_SHARED_MEMORY, 1, [Define to select Win32-style shared memory.]) 2147 SHMEM_IMPLEMENTATION="src/backend/port/win32_shmem.c" 2148fi 2149 2150# Select random number source 2151# 2152# You can override this logic by setting the appropriate USE_*RANDOM flag to 1 2153# in the template or configure command line. 2154 2155# If not selected manually, try to select a source automatically. 2156if test x"$USE_OPENSSL_RANDOM" = x"" && test x"$USE_WIN32_RANDOM" = x"" && test x"$USE_DEV_URANDOM" = x"" ; then 2157 if test x"$with_openssl" = x"yes" ; then 2158 USE_OPENSSL_RANDOM=1 2159 elif test "$PORTNAME" = "win32" ; then 2160 USE_WIN32_RANDOM=1 2161 else 2162 AC_CHECK_FILE([/dev/urandom], [], []) 2163 2164 if test x"$ac_cv_file__dev_urandom" = x"yes" ; then 2165 USE_DEV_URANDOM=1 2166 fi 2167 fi 2168fi 2169 2170AC_MSG_CHECKING([which random number source to use]) 2171if test x"$USE_OPENSSL_RANDOM" = x"1" ; then 2172 AC_DEFINE(USE_OPENSSL_RANDOM, 1, [Define to use OpenSSL for random number generation]) 2173 AC_MSG_RESULT([OpenSSL]) 2174elif test x"$USE_WIN32_RANDOM" = x"1" ; then 2175 AC_DEFINE(USE_WIN32_RANDOM, 1, [Define to use native Windows API for random number generation]) 2176 AC_MSG_RESULT([Windows native]) 2177elif test x"$USE_DEV_URANDOM" = x"1" ; then 2178 AC_DEFINE(USE_DEV_URANDOM, 1, [Define to use /dev/urandom for random number generation]) 2179 AC_MSG_RESULT([/dev/urandom]) 2180else 2181 AC_MSG_ERROR([ 2182no source of strong random numbers was found 2183PostgreSQL can use OpenSSL or /dev/urandom as a source of random numbers.]) 2184fi 2185 2186# If not set in template file, set bytes to use libc memset() 2187if test x"$MEMSET_LOOP_LIMIT" = x"" ; then 2188 MEMSET_LOOP_LIMIT=1024 2189fi 2190AC_DEFINE_UNQUOTED(MEMSET_LOOP_LIMIT, ${MEMSET_LOOP_LIMIT}, [Define bytes to use libc memset().]) 2191 2192 2193if test "$enable_nls" = yes ; then 2194 PGAC_CHECK_GETTEXT 2195fi 2196 2197# Check for Tcl configuration script tclConfig.sh 2198if test "$with_tcl" = yes; then 2199 PGAC_PATH_TCLCONFIGSH([$with_tclconfig]) 2200 PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH], 2201 [TCL_INCLUDE_SPEC,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD]) 2202 AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one 2203 if test "$TCL_SHARED_BUILD" != 1; then 2204 AC_MSG_ERROR([cannot build PL/Tcl because Tcl is not a shared library 2205Use --without-tcl to disable building PL/Tcl.]) 2206 fi 2207 # now that we have TCL_INCLUDE_SPEC, we can check for <tcl.h> 2208 ac_save_CPPFLAGS=$CPPFLAGS 2209 CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" 2210 AC_CHECK_HEADER(tcl.h, [], [AC_MSG_ERROR([header file <tcl.h> is required for Tcl])]) 2211 CPPFLAGS=$ac_save_CPPFLAGS 2212fi 2213 2214# check for <perl.h> 2215if test "$with_perl" = yes; then 2216 ac_save_CPPFLAGS=$CPPFLAGS 2217 CPPFLAGS="$CPPFLAGS $perl_includespec" 2218 AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file <perl.h> is required for Perl])], 2219 [#include <EXTERN.h>]) 2220 # While we're at it, check that we can link to libperl. 2221 # On most platforms, if perl.h is there then libperl.so will be too, but at 2222 # this writing Debian packages them separately. There is no known reason to 2223 # waste cycles on separate probes for the Tcl or Python libraries, though. 2224 # On some Red Hat platforms, the link attempt can fail if we don't use 2225 # CFLAGS_SL while building the test program. 2226 ac_save_CFLAGS=$CFLAGS 2227 CFLAGS="$CFLAGS $CFLAGS_SL" 2228 pgac_save_LIBS=$LIBS 2229 LIBS="$perl_embed_ldflags" 2230 AC_MSG_CHECKING([for libperl]) 2231 AC_LINK_IFELSE([AC_LANG_PROGRAM([ 2232#include <EXTERN.h> 2233#include <perl.h> 2234], [perl_alloc();])], 2235 [AC_MSG_RESULT(yes)], 2236 [AC_MSG_RESULT(no) 2237 AC_MSG_ERROR([libperl library is required for Perl])]) 2238 LIBS=$pgac_save_LIBS 2239 CFLAGS=$ac_save_CFLAGS 2240 CPPFLAGS=$ac_save_CPPFLAGS 2241fi 2242 2243# check for <Python.h> 2244if test "$with_python" = yes; then 2245 ac_save_CPPFLAGS=$CPPFLAGS 2246 CPPFLAGS="$python_includespec $CPPFLAGS" 2247 AC_CHECK_HEADER(Python.h, [], [AC_MSG_ERROR([header file <Python.h> is required for Python])]) 2248 CPPFLAGS=$ac_save_CPPFLAGS 2249fi 2250 2251# 2252# Check for documentation-building tools 2253# 2254PGAC_PATH_PROGS(XMLLINT, xmllint) 2255PGAC_PATH_PROGS(XSLTPROC, xsltproc) 2256PGAC_PATH_PROGS(FOP, fop) 2257PGAC_PATH_PROGS(DBTOEPUB, dbtoepub) 2258 2259# 2260# Check for test tools 2261# 2262if test "$enable_tap_tests" = yes; then 2263 # Check for necessary modules, unless user has specified the "prove" to use; 2264 # in that case it's her responsibility to have a working configuration. 2265 # (prove might be part of a different Perl installation than perl, eg on 2266 # MSys, so the result of AX_PROG_PERL_MODULES could be irrelevant anyway.) 2267 if test -z "$PROVE"; then 2268 # Test::More and Time::HiRes are supposed to be part of core Perl, 2269 # but some distros omit them in a minimal installation. 2270 AX_PROG_PERL_MODULES([IPC::Run Test::More=0.87 Time::HiRes], , 2271 [AC_MSG_ERROR([Additional Perl modules are required to run TAP tests])]) 2272 fi 2273 # Now make sure we know where prove is 2274 PGAC_PATH_PROGS(PROVE, prove) 2275 if test -z "$PROVE"; then 2276 AC_MSG_ERROR([prove not found]) 2277 fi 2278fi 2279 2280# Thread testing 2281 2282# We have to run the thread test near the end so we have all our symbols 2283# defined. Cross compiling throws a warning. 2284# 2285if test "$enable_thread_safety" = yes; then 2286if test "$PORTNAME" != "win32" 2287then 2288AC_MSG_CHECKING([thread safety of required library functions]) 2289 2290_CFLAGS="$CFLAGS" 2291_LIBS="$LIBS" 2292CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE" 2293LIBS="$LIBS $PTHREAD_LIBS" 2294AC_RUN_IFELSE( 2295 [AC_LANG_SOURCE([[#include "$srcdir/src/test/thread/thread_test.c"]])], 2296 [AC_MSG_RESULT(yes)], 2297 [AC_MSG_RESULT(no) 2298 AC_MSG_ERROR([thread test program failed 2299This platform is not thread-safe. Check the file 'config.log' or compile 2300and run src/test/thread/thread_test for the exact reason. 2301Use --disable-thread-safety to disable thread safety.])], 2302 [AC_MSG_RESULT(maybe) 2303 AC_MSG_WARN([ 2304*** Skipping thread test program because of cross-compile build. 2305*** Run the program in src/test/thread on the target machine. 2306])]) 2307CFLAGS="$_CFLAGS" 2308LIBS="$_LIBS" 2309else 2310AC_MSG_WARN([*** skipping thread test on Win32]) 2311fi 2312fi 2313 2314# If compiler will take -Wl,--as-needed (or various platform-specific 2315# spellings thereof) then add that to LDFLAGS. This is much easier than 2316# trying to filter LIBS to the minimum for each executable. 2317# On (at least) some Red-Hat-derived systems, this switch breaks linking to 2318# libreadline; therefore we postpone testing it until we know what library 2319# dependencies readline has. The test code will try to link with $LIBS. 2320if test "$with_readline" = yes; then 2321 link_test_func=readline 2322else 2323 link_test_func=exit 2324fi 2325 2326if test "$PORTNAME" = "darwin"; then 2327 PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-dead_strip_dylibs], $link_test_func) 2328elif test "$PORTNAME" = "openbsd"; then 2329 PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-Bdynamic], $link_test_func) 2330else 2331 PGAC_PROG_CC_LDFLAGS_OPT([-Wl,--as-needed], $link_test_func) 2332fi 2333 2334# Create compiler version string 2335if test x"$GCC" = x"yes" ; then 2336 cc_string=`${CC} --version | sed q` 2337 case $cc_string in [[A-Za-z]]*) ;; *) cc_string="GCC $cc_string";; esac 2338elif test x"$SUN_STUDIO_CC" = x"yes" ; then 2339 cc_string=`${CC} -V 2>&1 | sed q` 2340else 2341 cc_string=$CC 2342fi 2343 2344AC_DEFINE_UNQUOTED(PG_VERSION_STR, 2345 ["PostgreSQL $PG_VERSION on $host, compiled by $cc_string, `expr $ac_cv_sizeof_void_p \* 8`-bit"], 2346 [A string containing the version number, platform, and C compiler]) 2347 2348# Supply a numeric version string for use by 3rd party add-ons 2349# awk -F is a regex on some platforms, and not on others, so make "." a tab 2350[PG_VERSION_NUM="`echo $PG_MAJORVERSION $PG_MINORVERSION | 2351$AWK '{printf "%d%04d", $1, $2}'`"] 2352AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) 2353AC_SUBST(PG_VERSION_NUM) 2354 2355# If we are inserting PG_SYSROOT into CPPFLAGS, do so symbolically not 2356# literally, so that it's possible to override it at build time using 2357# a command like "make ... PG_SYSROOT=path". This has to be done after 2358# we've finished all configure checks that depend on CPPFLAGS. 2359# The same for LDFLAGS, too. 2360if test x"$PG_SYSROOT" != x; then 2361 CPPFLAGS=`echo "$CPPFLAGS" | sed -e "s| $PG_SYSROOT | \\\$(PG_SYSROOT) |"` 2362 LDFLAGS=`echo "$LDFLAGS" | sed -e "s| $PG_SYSROOT | \\\$(PG_SYSROOT) |"` 2363fi 2364AC_SUBST(PG_SYSROOT) 2365 2366 2367# Begin output steps 2368 2369AC_MSG_NOTICE([using compiler=$cc_string]) 2370AC_MSG_NOTICE([using CFLAGS=$CFLAGS]) 2371AC_MSG_NOTICE([using CPPFLAGS=$CPPFLAGS]) 2372AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS]) 2373# Currently only used when LLVM is used 2374if test "$with_llvm" = yes ; then 2375 AC_MSG_NOTICE([using CXX=$CXX]) 2376 AC_MSG_NOTICE([using CXXFLAGS=$CXXFLAGS]) 2377 AC_MSG_NOTICE([using CLANG=$CLANG]) 2378 AC_MSG_NOTICE([using BITCODE_CFLAGS=$BITCODE_CFLAGS]) 2379 AC_MSG_NOTICE([using BITCODE_CXXFLAGS=$BITCODE_CXXFLAGS]) 2380fi 2381 2382# prepare build tree if outside source tree 2383# Note 1: test -ef might not exist, but it's more reliable than `pwd`. 2384# Note 2: /bin/pwd might be better than shell's built-in at getting 2385# a symlink-free name. 2386if ( test "$srcdir" -ef . ) >/dev/null 2>&1 || test "`cd $srcdir && /bin/pwd`" = "`/bin/pwd`"; then 2387 vpath_build=no 2388else 2389 vpath_build=yes 2390 if test "$no_create" != yes; then 2391 _AS_ECHO_N([preparing build tree... ]) 2392 pgac_abs_top_srcdir=`cd "$srcdir" && pwd` 2393 $SHELL "$ac_aux_dir/prep_buildtree" "$pgac_abs_top_srcdir" "." \ 2394 || AC_MSG_ERROR(failed) 2395 AC_MSG_RESULT(done) 2396 fi 2397fi 2398AC_SUBST(vpath_build) 2399 2400 2401AC_CONFIG_FILES([GNUmakefile src/Makefile.global]) 2402 2403AC_CONFIG_LINKS([ 2404 src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} 2405 src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} 2406 src/include/pg_config_os.h:src/include/port/${template}.h 2407 src/Makefile.port:src/makefiles/Makefile.${template} 2408]) 2409 2410if test "$PORTNAME" = "win32"; then 2411AC_CONFIG_COMMANDS([check_win32_symlinks],[ 2412# Links sometimes fail undetected on Mingw - 2413# so here we detect it and warn the user 2414for FILE in $CONFIG_LINKS 2415 do 2416 # test -e works for symlinks in the MinGW console 2417 test -e `expr "$FILE" : '\([[^:]]*\)'` || AC_MSG_WARN([*** link for $FILE -- please fix by hand]) 2418 done 2419]) 2420fi 2421 2422AC_CONFIG_HEADERS([src/include/pg_config.h], 2423[ 2424# Update timestamp for pg_config.h (see Makefile.global) 2425echo >src/include/stamp-h 2426]) 2427 2428AC_CONFIG_HEADERS([src/include/pg_config_ext.h], 2429[ 2430# Update timestamp for pg_config_ext.h (see Makefile.global) 2431echo >src/include/stamp-ext-h 2432]) 2433 2434AC_CONFIG_HEADERS([src/interfaces/ecpg/include/ecpg_config.h], 2435 [echo >src/interfaces/ecpg/include/stamp-h]) 2436 2437AC_OUTPUT 2438