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