1 dnl Process this file with autoconf to produce a configure script.
4 dnl Developers, please strive to achieve this order:
6 dnl 0. Initialization and options processing
12 dnl 6. Compiler characteristics
13 dnl 7. Functions, global variables
14 dnl 8. System services
16 dnl Read the Autoconf manual for details.
18 m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
20 AC_INIT([PostgreSQL], [9.6beta4], [pgsql-bugs@postgresql.org])
22 m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required.
23 Untested combinations of 'autoconf' and PostgreSQL versions are not
24 recommended. You can remove the check from 'configure.in' but it is then
25 your responsibility whether the result works or not.])])
26 AC_COPYRIGHT([Copyright (c) 1996-2016, PostgreSQL Global Development Group])
27 AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
28 AC_CONFIG_AUX_DIR(config)
29 AC_PREFIX_DEFAULT(/usr/local/pgsql)
30 AC_SUBST(configure_args, [$ac_configure_args])
32 [PG_MAJORVERSION=`expr "$PACKAGE_VERSION" : '\([0-9][0-9]*\.[0-9][0-9]*\)'`]
33 AC_SUBST(PG_MAJORVERSION)
34 AC_DEFINE_UNQUOTED(PG_MAJORVERSION, "$PG_MAJORVERSION", [PostgreSQL major version as a string])
36 PGAC_ARG_REQ(with, extra-version, [STRING], [append STRING to version],
37 [PG_VERSION="$PACKAGE_VERSION$withval"],
38 [PG_VERSION="$PACKAGE_VERSION"])
39 AC_DEFINE_UNQUOTED(PG_VERSION, "$PG_VERSION", [PostgreSQL version as a string])
44 AC_MSG_CHECKING([which template to use])
46 PGAC_ARG_REQ(with, template, [NAME], [override operating system template],
49 list) echo; ls "$srcdir/src/template"; exit;;
50 *) if test -f "$srcdir/src/template/$with_template" ; then
53 AC_MSG_ERROR(['$withval' is not a valid template name. Use 'list' for a list.])
58 # --with-template not given
62 cygwin*) template=cygwin ;;
63 darwin*) template=darwin ;;
64 dragonfly*) template=netbsd ;;
65 freebsd*) template=freebsd ;;
66 hpux*) template=hpux ;;
67 linux*|gnu*|k*bsd*-gnu)
69 mingw*) template=win32 ;;
70 netbsd*) template=netbsd ;;
71 openbsd*) template=openbsd ;;
73 solaris*) template=solaris ;;
74 sysv5*) template=unixware ;;
77 if test x"$template" = x"" ; then
79 *******************************************************************
80 PostgreSQL has apparently not been ported to your platform yet.
81 To try a manual configuration, look into the src/template directory
82 for a similar platform and use the '--with-template=' option.
84 Please also contact <pgsql-bugs@postgresql.org> to see about
85 rectifying this. Include the above 'checking host system type...'
87 *******************************************************************
93 AC_MSG_RESULT([$template])
98 # Initialize default assumption that we do not need separate assembly code
99 # for TAS (test-and-set). This can be overridden by the template file
100 # when it's executed.
107 ## Command line options
111 # Add non-standard directories to the include path
113 PGAC_ARG_REQ(with, includes, [DIRS], [look for additional header files in DIRS])
117 # Add non-standard directories to the library search path
119 PGAC_ARG_REQ(with, libraries, [DIRS], [look for additional libraries in DIRS],
120 [LIBRARY_DIRS=$withval])
122 PGAC_ARG_REQ(with, libs, [DIRS], [alternative spelling of --with-libraries],
123 [LIBRARY_DIRS=$withval])
127 # 64-bit integer date/time storage: enabled by default.
129 AC_MSG_CHECKING([whether to build with 64-bit integer date/time support])
130 PGAC_ARG_BOOL(enable, integer-datetimes, yes, [disable 64-bit integer date/time support],
131 [AC_DEFINE([USE_INTEGER_DATETIMES], 1,
132 [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])])
133 AC_MSG_RESULT([$enable_integer_datetimes])
139 AC_MSG_CHECKING([whether NLS is wanted])
140 PGAC_ARG_OPTARG(enable, nls,
141 [LANGUAGES], [enable Native Language Support],
143 [WANTED_LANGUAGES=$enableval],
144 [AC_DEFINE(ENABLE_NLS, 1,
145 [Define to 1 if you want National Language Support. (--enable-nls)])])
146 AC_MSG_RESULT([$enable_nls])
148 AC_SUBST(WANTED_LANGUAGES)
151 # Default port number (--with-pgport), default 5432
153 AC_MSG_CHECKING([for default port number])
154 PGAC_ARG_REQ(with, pgport, [PORTNUM], [set default port number [5432]],
155 [default_port=$withval],
157 AC_MSG_RESULT([$default_port])
158 # Need both of these because some places want an integer and some a string
159 AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port},
160 [Define to the default TCP port number on which the server listens and
161 to which clients will try to connect. This can be overridden at run-time,
162 but it's convenient if your clients have the right default compiled in.
163 (--with-pgport=PORTNUM)])
164 AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}",
165 [Define to the default TCP port number as a string constant.])
166 AC_SUBST(default_port)
168 # It's worth validating port; you can get very confusing errors otherwise
169 if test x"$default_port" = x""; then
170 AC_MSG_ERROR([invalid --with-pgport specification: empty string])
171 elif test ! x`echo "$default_port" | sed -e 's/[[0-9]]*//'` = x""; then
172 AC_MSG_ERROR([invalid --with-pgport specification: must be a number])
173 elif test ! x`echo "$default_port" | sed -e 's/^0.//'` = x"$default_port"; then
174 AC_MSG_ERROR([invalid --with-pgport specification: must not have leading 0])
175 elif test "$default_port" -lt "1" -o "$default_port" -gt "65535"; then
176 AC_MSG_ERROR([invalid --with-pgport specification: must be between 1 and 65535])
180 # '-rpath'-like feature can be disabled
182 PGAC_ARG_BOOL(enable, rpath, yes,
183 [do not embed shared library search path in executables])
184 AC_SUBST(enable_rpath)
189 PGAC_ARG_BOOL(enable, spinlocks, yes,
190 [do not use spinlocks])
195 PGAC_ARG_BOOL(enable, atomics, yes,
196 [do not use atomic operations])
199 # --enable-debug adds -g to compiler flags
201 PGAC_ARG_BOOL(enable, debug, no,
202 [build with debugging symbols (-g)])
203 AC_SUBST(enable_debug)
206 # --enable-profiling enables gcc profiling
208 PGAC_ARG_BOOL(enable, profiling, no,
209 [build with profiling enabled ])
212 # --enable-coverage enables generation of code coverage metrics with gcov
214 PGAC_ARG_BOOL(enable, coverage, no,
215 [build with coverage testing instrumentation],
216 [AC_CHECK_PROGS(GCOV, gcov)
217 if test -z "$GCOV"; then
218 AC_MSG_ERROR([gcov not found])
220 AC_CHECK_PROGS(LCOV, lcov)
221 if test -z "$LCOV"; then
222 AC_MSG_ERROR([lcov not found])
224 AC_CHECK_PROGS(GENHTML, genhtml)
225 if test -z "$GENHTML"; then
226 AC_MSG_ERROR([genhtml not found])
228 AC_SUBST(enable_coverage)
233 PGAC_ARG_BOOL(enable, dtrace, no,
234 [build with DTrace support],
235 [AC_CHECK_PROGS(DTRACE, dtrace)
236 if test -z "$DTRACE"; then
237 AC_MSG_ERROR([dtrace not found])
239 AC_SUBST(DTRACEFLAGS)])
240 AC_SUBST(enable_dtrace)
245 PGAC_ARG_BOOL(enable, tap-tests, no,
246 [enable TAP tests (requires Perl and IPC::Run)])
247 AC_SUBST(enable_tap_tests)
252 AC_MSG_CHECKING([for block size])
253 PGAC_ARG_REQ(with, blocksize, [BLOCKSIZE], [set table block size in kB [8]],
254 [blocksize=$withval],
263 *) AC_MSG_ERROR([Invalid block size. Allowed values are 1,2,4,8,16,32.])
265 AC_MSG_RESULT([${blocksize}kB])
267 AC_DEFINE_UNQUOTED([BLCKSZ], ${BLCKSZ}, [
268 Size of a disk block --- this also limits the size of a tuple. You
269 can set it bigger if you need bigger tuples (although TOAST should
270 reduce the need to have large tuples, since fields can be spread
271 across multiple tuples).
273 BLCKSZ must be a power of 2. The maximum possible value of BLCKSZ
274 is currently 2^15 (32768). This is determined by the 15-bit widths
275 of the lp_off and lp_len fields in ItemIdData (see
276 include/storage/itemid.h).
278 Changing BLCKSZ requires an initdb.
282 # Relation segment size
284 AC_MSG_CHECKING([for segment size])
285 PGAC_ARG_REQ(with, segsize, [SEGSIZE], [set table segment size in GB [1]],
288 # this expression is set up to avoid unnecessary integer overflow
289 # blocksize is already guaranteed to be a factor of 1024
290 RELSEG_SIZE=`expr '(' 1024 / ${blocksize} ')' '*' ${segsize} '*' 1024`
291 test $? -eq 0 || exit 1
292 AC_MSG_RESULT([${segsize}GB])
294 AC_DEFINE_UNQUOTED([RELSEG_SIZE], ${RELSEG_SIZE}, [
295 RELSEG_SIZE is the maximum number of blocks allowed in one disk file.
296 Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ;
297 relations bigger than that are divided into multiple files.
299 RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size.
300 This is often 2 GB or 4GB in a 32-bit operating system, unless you
301 have large file support enabled. By default, we make the limit 1 GB
302 to avoid any possible integer-overflow problems within the OS.
303 A limit smaller than necessary only means we divide a large
304 relation into more chunks than necessary, so it seems best to err
305 in the direction of a small limit.
307 A power-of-2 value is recommended to save a few cycles in md.c,
308 but is not absolutely required.
310 Changing RELSEG_SIZE requires an initdb.
316 AC_MSG_CHECKING([for WAL block size])
317 PGAC_ARG_REQ(with, wal-blocksize, [BLOCKSIZE], [set WAL block size in kB [8]],
318 [wal_blocksize=$withval],
320 case ${wal_blocksize} in
321 1) XLOG_BLCKSZ=1024;;
322 2) XLOG_BLCKSZ=2048;;
323 4) XLOG_BLCKSZ=4096;;
324 8) XLOG_BLCKSZ=8192;;
325 16) XLOG_BLCKSZ=16384;;
326 32) XLOG_BLCKSZ=32768;;
327 64) XLOG_BLCKSZ=65536;;
328 *) AC_MSG_ERROR([Invalid WAL block size. Allowed values are 1,2,4,8,16,32,64.])
330 AC_MSG_RESULT([${wal_blocksize}kB])
332 AC_DEFINE_UNQUOTED([XLOG_BLCKSZ], ${XLOG_BLCKSZ}, [
333 Size of a WAL file block. This need have no particular relation to BLCKSZ.
334 XLOG_BLCKSZ must be a power of 2, and if your system supports O_DIRECT I/O,
335 XLOG_BLCKSZ must be a multiple of the alignment requirement for direct-I/O
336 buffers, else direct I/O may fail.
338 Changing XLOG_BLCKSZ requires an initdb.
344 AC_MSG_CHECKING([for WAL segment size])
345 PGAC_ARG_REQ(with, wal-segsize, [SEGSIZE], [set WAL segment size in MB [16]],
346 [wal_segsize=$withval],
348 case ${wal_segsize} in
356 *) AC_MSG_ERROR([Invalid WAL segment size. Allowed values are 1,2,4,8,16,32,64.])
358 AC_MSG_RESULT([${wal_segsize}MB])
360 AC_DEFINE_UNQUOTED([XLOG_SEG_SIZE], [(${wal_segsize} * 1024 * 1024)], [
361 XLOG_SEG_SIZE is the size of a single WAL file. This must be a power of 2
362 and larger than XLOG_BLCKSZ (preferably, a great deal larger than
365 Changing XLOG_SEG_SIZE requires an initdb.
372 # For historical reasons you can also use --with-CC to specify the C compiler
373 # to use, although the standard way to do this is to set the CC environment
375 PGAC_ARG_REQ(with, CC, [CMD], [set compiler (deprecated)], [CC=$with_CC])
378 aix) pgac_cc_list="gcc xlc";;
379 *) pgac_cc_list="gcc cc";;
382 AC_PROG_CC([$pgac_cc_list])
384 # Check if it's Intel's compiler, which (usually) pretends to be gcc,
385 # but has idiosyncrasies of its own. We assume icc will define
386 # __INTEL_COMPILER regardless of CFLAGS.
387 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@ifndef __INTEL_COMPILER
389 @%:@endif])], [ICC=yes], [ICC=no])
391 # Check if it's Sun Studio compiler. We assume that
392 # __SUNPRO_C will be defined for Sun Studio compilers
393 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@ifndef __SUNPRO_C
395 @%:@endif])], [SUN_STUDIO_CC=yes], [SUN_STUDIO_CC=no])
397 AC_SUBST(SUN_STUDIO_CC)
404 . "$srcdir/src/template/$template" || exit
406 # CFLAGS are selected so:
407 # If the user specifies something in the environment, that is used.
408 # else: If the template file set something, that is used.
409 # else: If coverage was enabled, don't set anything.
410 # else: If the compiler is GCC, then we use -O2.
411 # else: If the compiler is something else, then we use -O, unless debugging.
413 if test "$ac_env_CFLAGS_set" = set; then
414 CFLAGS=$ac_env_CFLAGS_value
415 elif test "${CFLAGS+set}" = set; then
416 : # (keep what template set)
417 elif test "$enable_coverage" = yes; then
418 : # no optimization by default
419 elif test "$GCC" = yes; then
422 # if the user selected debug mode, don't use -O
423 if test "$enable_debug" != yes; then
428 # CFLAGS we determined above will be added back at the end
432 # set CFLAGS_VECTOR from the environment, if available
433 if test "$ac_env_CFLAGS_VECTOR_set" = set; then
434 CFLAGS_VECTOR=$ac_env_CFLAGS_VECTOR_value
437 # Some versions of GCC support some additional useful warning flags.
438 # Check whether they are supported, and add them to CFLAGS if so.
439 # ICC pretends to be GCC but it's lying; it doesn't support these flags,
440 # but has its own. Also check other compiler-specific flags here.
442 if test "$GCC" = yes -a "$ICC" = no; then
443 CFLAGS="-Wall -Wmissing-prototypes -Wpointer-arith"
444 # These work in some but not all gcc versions
445 PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement])
446 PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels])
447 PGAC_PROG_CC_CFLAGS_OPT([-Wmissing-format-attribute])
448 # This was included in -Wall/-Wformat in older GCC versions
449 PGAC_PROG_CC_CFLAGS_OPT([-Wformat-security])
450 # Disable strict-aliasing rules; needed for gcc 3.3+
451 PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing])
452 # Disable optimizations that assume no overflow; needed for gcc 4.3+
453 PGAC_PROG_CC_CFLAGS_OPT([-fwrapv])
454 # Disable FP optimizations that cause various errors on gcc 4.5+ or maybe 4.6+
455 PGAC_PROG_CC_CFLAGS_OPT([-fexcess-precision=standard])
456 # Optimization flags for specific files that benefit from vectorization
457 PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-funroll-loops])
458 PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-ftree-vectorize])
459 # We want to suppress clang's unhelpful unused-command-line-argument warnings
460 # but gcc won't complain about unrecognized -Wno-foo switches, so we have to
461 # test for the positive form and if that works, add the negative form
462 PGAC_PROG_CC_VAR_OPT(NOT_THE_CFLAGS, [-Wunused-command-line-argument])
463 if test -n "$NOT_THE_CFLAGS"; then
464 CFLAGS="$CFLAGS -Wno-unused-command-line-argument"
466 elif test "$ICC" = yes; then
467 # Intel's compiler has a bug/misoptimization in checking for
468 # division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.
469 PGAC_PROG_CC_CFLAGS_OPT([-mp1])
470 # Make sure strict aliasing is off (though this is said to be the default)
471 PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing])
472 elif test "$PORTNAME" = "aix"; then
473 # AIX's xlc has to have strict aliasing turned off too
474 PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias])
475 PGAC_PROG_CC_CFLAGS_OPT([-qlonglong])
476 elif test "$PORTNAME" = "hpux"; then
477 # On some versions of HP-UX, libm functions do not set errno by default.
478 # Fix that by using +Olibmerrno if the compiler recognizes it.
479 PGAC_PROG_CC_CFLAGS_OPT([+Olibmerrno])
482 AC_SUBST(CFLAGS_VECTOR, $CFLAGS_VECTOR)
484 # supply -g if --enable-debug
485 if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then
489 # enable code coverage if --enable-coverage
490 if test "$enable_coverage" = yes; then
491 if test "$GCC" = yes; then
492 CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
494 AC_MSG_ERROR([--enable-coverage is supported only when using GCC])
498 # enable profiling if --enable-profiling
499 if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then
500 if test "$GCC" = yes; then
501 AC_DEFINE([PROFILE_PID_DIR], 1,
502 [Define to 1 to allow profiling output to be saved separately for each process.])
503 CFLAGS="$CFLAGS -pg $PLATFORM_PROFILE_FLAGS"
505 AC_MSG_ERROR([--enable-profiling is supported only when using GCC])
509 # We already have this in Makefile.win32, but configure needs it too
510 if test "$PORTNAME" = "win32"; then
511 CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND"
514 # Now that we're done automatically adding stuff to CFLAGS, put back the
515 # user-specified flags (if any) at the end. This lets users override
516 # the automatic additions.
517 CFLAGS="$CFLAGS $user_CFLAGS"
519 # Check if the compiler still works with the final flag settings
520 AC_MSG_CHECKING([whether the C compiler still works])
521 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])],
522 [AC_MSG_RESULT(yes)],
524 AC_MSG_ERROR([cannot proceed])])
526 # Defend against gcc -ffast-math
527 if test "$GCC" = yes; then
528 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [@%:@ifdef __FAST_MATH__
530 @%:@endif])], [], [AC_MSG_ERROR([do not put -ffast-math in CFLAGS])])
538 # Set up TAS assembly code if needed; the template file has now had its
539 # chance to request this.
541 AC_CONFIG_LINKS([src/backend/port/tas.s:src/backend/port/tas/${tas_file}])
543 if test "$need_tas" = yes ; then
552 # Automatic dependency tracking
554 PGAC_ARG_BOOL(enable, depend, no, [turn on automatic dependency tracking],
560 # Enable assert checks
562 PGAC_ARG_BOOL(enable, cassert, no, [enable assertion checks (for debugging)],
563 [AC_DEFINE([USE_ASSERT_CHECKING], 1,
564 [Define to 1 to build with assertion checks. (--enable-cassert)])])
568 # Include directories
571 IFS="${IFS}${PATH_SEPARATOR}"
572 # SRCH_INC comes from the template file
573 for dir in $with_includes $SRCH_INC; do
574 if test -d "$dir"; then
575 INCLUDES="$INCLUDES -I$dir"
577 AC_MSG_WARN([*** Include directory $dir does not exist.])
585 # Library directories
588 IFS="${IFS}${PATH_SEPARATOR}"
589 # LIBRARY_DIRS comes from command line, SRCH_LIB from template file.
590 for dir in $LIBRARY_DIRS $SRCH_LIB; do
591 if test -d "$dir"; then
592 LIBDIRS="$LIBDIRS -L$dir"
594 AC_MSG_WARN([*** Library directory $dir does not exist.])
600 # Enable thread-safe client libraries
602 AC_MSG_CHECKING([allow thread-safe client libraries])
603 PGAC_ARG_BOOL(enable, thread-safety, yes, [disable thread-safety in client libraries])
604 if test "$enable_thread_safety" = yes; then
605 AC_DEFINE([ENABLE_THREAD_SAFETY], 1,
606 [Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety)])
608 AC_MSG_RESULT([$enable_thread_safety])
609 AC_SUBST(enable_thread_safety)
612 # Optionally build Tcl modules (PL/Tcl)
614 AC_MSG_CHECKING([whether to build with Tcl])
615 PGAC_ARG_BOOL(with, tcl, no, [build Tcl modules (PL/Tcl)])
616 AC_MSG_RESULT([$with_tcl])
619 # We see if the path to the Tcl/Tk configuration scripts is specified.
620 # This will override the use of tclsh to find the paths to search.
622 PGAC_ARG_REQ(with, tclconfig, [DIR], [tclConfig.sh is in DIR])
625 # Optionally build Perl modules (PL/Perl)
627 AC_MSG_CHECKING([whether to build Perl modules])
628 PGAC_ARG_BOOL(with, perl, no, [build Perl modules (PL/Perl)])
629 AC_MSG_RESULT([$with_perl])
633 # Optionally build Python modules (PL/Python)
635 AC_MSG_CHECKING([whether to build Python modules])
636 PGAC_ARG_BOOL(with, python, no, [build Python modules (PL/Python)])
637 AC_MSG_RESULT([$with_python])
638 AC_SUBST(with_python)
643 AC_MSG_CHECKING([whether to build with GSSAPI support])
644 PGAC_ARG_BOOL(with, gssapi, no, [build with GSSAPI support],
646 AC_DEFINE(ENABLE_GSS, 1, [Define to build with GSSAPI support. (--with-gssapi)])
647 krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab"
649 AC_MSG_RESULT([$with_gssapi])
656 # Kerberos configuration parameters
658 PGAC_ARG_REQ(with, krb-srvnam,
659 [NAME], [default service principal name in Kerberos (GSSAPI) [postgres]],
661 [with_krb_srvnam="postgres"])
662 AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"],
663 [Define to the name of the default PostgreSQL service principal in Kerberos (GSSAPI). (--with-krb-srvnam=NAME)])
669 AC_MSG_CHECKING([whether to build with PAM support])
670 PGAC_ARG_BOOL(with, pam, no,
671 [build with PAM support],
672 [AC_DEFINE([USE_PAM], 1, [Define to 1 to build with PAM support. (--with-pam)])])
673 AC_MSG_RESULT([$with_pam])
679 AC_MSG_CHECKING([whether to build with BSD Authentication support])
680 PGAC_ARG_BOOL(with, bsd-auth, no,
681 [build with BSD Authentication support],
682 [AC_DEFINE([USE_BSD_AUTH], 1, [Define to 1 to build with BSD Authentication support. (--with-bsd-auth)])])
683 AC_MSG_RESULT([$with_bsd_auth])
689 AC_MSG_CHECKING([whether to build with LDAP support])
690 PGAC_ARG_BOOL(with, ldap, no,
691 [build with LDAP support],
692 [AC_DEFINE([USE_LDAP], 1, [Define to 1 to build with LDAP support. (--with-ldap)])])
693 AC_MSG_RESULT([$with_ldap])
699 AC_MSG_CHECKING([whether to build with Bonjour support])
700 PGAC_ARG_BOOL(with, bonjour, no,
701 [build with Bonjour support],
702 [AC_DEFINE([USE_BONJOUR], 1, [Define to 1 to build with Bonjour support. (--with-bonjour)])])
703 AC_MSG_RESULT([$with_bonjour])
709 AC_MSG_CHECKING([whether to build with OpenSSL support])
710 PGAC_ARG_BOOL(with, openssl, no, [build with OpenSSL support],
711 [AC_DEFINE([USE_OPENSSL], 1, [Define to build with OpenSSL support. (--with-openssl)])])
712 AC_MSG_RESULT([$with_openssl])
713 AC_SUBST(with_openssl)
718 AC_MSG_CHECKING([whether to build with SELinux support])
719 PGAC_ARG_BOOL(with, selinux, no, [build with SELinux support])
720 AC_SUBST(with_selinux)
721 AC_MSG_RESULT([$with_selinux])
726 AC_MSG_CHECKING([whether to build with systemd support])
727 PGAC_ARG_BOOL(with, systemd, no, [build with systemd support],
728 [AC_DEFINE([USE_SYSTEMD], 1, [Define to build with systemd support. (--with-systemd)])])
729 AC_SUBST(with_systemd)
730 AC_MSG_RESULT([$with_systemd])
735 PGAC_ARG_BOOL(with, readline, yes,
736 [do not use GNU Readline nor BSD Libedit for editing])
737 # readline on MinGW has problems with backslashes in psql and other bugs.
738 # This is particularly a problem with non-US code pages.
739 # Therefore disable its use until we understand the cause. 2004-07-20
740 if test "$PORTNAME" = "win32"; then
741 if test "$with_readline" = yes; then
742 AC_MSG_WARN([*** Readline does not work on MinGW --- disabling])
751 PGAC_ARG_BOOL(with, libedit-preferred, no,
752 [prefer BSD Libedit over GNU Readline])
758 # There are at least three UUID libraries in common use: the FreeBSD/NetBSD
759 # library, the e2fsprogs libuuid (now part of util-linux-ng), and the OSSP
760 # UUID library. More than one of these might be present on a given platform,
761 # so we make the user say which one she wants.
763 PGAC_ARG_REQ(with, uuid, [LIB], [build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)])
764 if test x"$with_uuid" = x"" ; then
767 PGAC_ARG_BOOL(with, ossp-uuid, no, [obsolete spelling of --with-uuid=ossp])
768 if test "$with_ossp_uuid" = yes ; then
772 if test "$with_uuid" = bsd ; then
773 AC_DEFINE([HAVE_UUID_BSD], 1, [Define to 1 if you have BSD UUID support.])
774 UUID_EXTRA_OBJS="md5.o sha1.o"
775 elif test "$with_uuid" = e2fs ; then
776 AC_DEFINE([HAVE_UUID_E2FS], 1, [Define to 1 if you have E2FS UUID support.])
777 UUID_EXTRA_OBJS="md5.o sha1.o"
778 elif test "$with_uuid" = ossp ; then
779 AC_DEFINE([HAVE_UUID_OSSP], 1, [Define to 1 if you have OSSP UUID support.])
781 elif test "$with_uuid" = no ; then
784 AC_MSG_ERROR([--with-uuid must specify one of bsd, e2fs, or ossp])
787 AC_SUBST(UUID_EXTRA_OBJS)
793 PGAC_ARG_BOOL(with, libxml, no, [build with XML support],
794 [AC_DEFINE([USE_LIBXML], 1, [Define to 1 to build with XML support. (--with-libxml)])])
796 if test "$with_libxml" = yes ; then
797 AC_CHECK_PROGS(XML2_CONFIG, xml2-config)
798 if test -n "$XML2_CONFIG"; then
799 for pgac_option in `$XML2_CONFIG --cflags`; do
801 -I*|-D*) CPPFLAGS="$CPPFLAGS $pgac_option";;
804 for pgac_option in `$XML2_CONFIG --libs`; do
806 -L*) LDFLAGS="$LDFLAGS $pgac_option";;
812 AC_SUBST(with_libxml)
817 PGAC_ARG_BOOL(with, libxslt, no, [use XSLT support when building contrib/xml2],
818 [AC_DEFINE([USE_LIBXSLT], 1, [Define to 1 to use XSLT support when building contrib/xml2. (--with-libxslt)])])
821 AC_SUBST(with_libxslt)
826 PGAC_ARG_REQ(with, system-tzdata,
827 [DIR], [use system time zone data in DIR])
828 AC_SUBST(with_system_tzdata)
833 PGAC_ARG_BOOL(with, zlib, yes,
841 # Assume system is ELF if it predefines __ELF__ as 1,
842 # otherwise believe host_os based default.
844 freebsd1*|freebsd2*) elf=no;;
845 freebsd3*|freebsd4*) elf=yes;;
854 [if test "X$elf" = "Xyes" ; then
865 CPPFLAGS="$CPPFLAGS $INCLUDES"
866 LDFLAGS="$LDFLAGS $LIBDIRS"
868 AC_ARG_VAR(LDFLAGS_EX, [extra linker flags for linking executables only])
869 AC_ARG_VAR(LDFLAGS_SL, [extra linker flags for linking shared libraries only])
873 AC_SUBST(with_gnu_ld)
874 case $host_os in sysv5*)
875 AC_CACHE_CHECK([whether ld -R works], [pgac_cv_prog_ld_R],
877 pgac_save_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -Wl,-R/usr/lib"
878 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
879 [pgac_cv_prog_ld_R=yes],
880 [pgac_cv_prog_ld_R=no])
881 LDFLAGS=$pgac_save_LDFLAGS
883 ld_R_works=$pgac_cv_prog_ld_R
888 AC_CHECK_TOOL(AR, ar, ar)
889 if test "$PORTNAME" = "win32"; then
890 AC_CHECK_TOOL(DLLTOOL, dlltool, dlltool)
891 AC_CHECK_TOOL(DLLWRAP, dllwrap, dllwrap)
892 AC_CHECK_TOOL(WINDRES, windres, windres)
896 # When Autoconf chooses install-sh as install program it tries to generate
897 # a relative path to it in each makefile where it subsitutes it. This clashes
898 # with our Makefile.global concept. This workaround helps.
900 *install-sh*) install_bin='';;
901 *) install_bin=$INSTALL;;
903 AC_SUBST(install_bin)
905 AC_PATH_PROG(TAR, tar)
909 # When Autoconf chooses install-sh as mkdir -p program it tries to generate
910 # a relative path to it in each makefile where it subsitutes it. This clashes
911 # with our Makefile.global concept. This workaround helps.
913 *install-sh*) MKDIR_P='\${SHELL} \${top_srcdir}/config/install-sh -c -d';;
920 if test "$with_perl" = yes; then
921 if test -z "$PERL"; then
922 AC_MSG_ERROR([Perl not found])
924 PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib])
925 if test "$perl_useshrplib" != yes && test "$perl_useshrplib" != true; then
926 AC_MSG_ERROR([cannot build PL/Perl because libperl is not a shared library
927 You might have to rebuild your Perl installation. Refer to the
928 documentation for details. Use --without-perl to disable building
931 PGAC_CHECK_PERL_EMBED_LDFLAGS
934 if test "$with_python" = yes; then
936 PGAC_CHECK_PYTHON_EMBED_SETUP
938 # We need libpython as a shared library. With Python >=2.5, we
939 # check the Py_ENABLE_SHARED setting. On Debian, the setting is not
940 # correct before the jessie release (http://bugs.debian.org/695979).
941 # We also want to support older Python versions. So as a fallback
942 # we see if there is a file that is named like a shared library.
944 if test "$python_enable_shared" != 1; then
945 if test "$PORTNAME" = darwin; then
946 # OS X does supply a .dylib even though Py_ENABLE_SHARED does
947 # not get set. The file detection logic below doesn't succeed
948 # on older OS X versions, so make it explicit.
949 python_enable_shared=1
950 elif test "$PORTNAME" = win32; then
951 # Windows also needs an explicit override.
952 python_enable_shared=1
954 # We don't know the platform shared library extension here yet,
955 # so we try some candidates.
956 for dlsuffix in .so .sl; do
957 if ls "$python_libdir"/libpython*${dlsuffix}* >/dev/null 2>&1; then
958 python_enable_shared=1
965 if test "$python_enable_shared" != 1; then
966 AC_MSG_ERROR([cannot build PL/Python because libpython is not a shared library
967 You might have to rebuild your Python installation. Refer to the
968 documentation for details. Use --without-python to disable building
973 if test "$cross_compiling" = yes && test -z "$with_system_tzdata"; then
974 AC_PATH_PROG(ZIC, zic)
975 if test -z "$ZIC"; then
977 When cross-compiling, either use the option --with-system-tzdata to use
978 existing time-zone data, or set the environment variable ZIC to a zic
979 program to use during the build.])
986 # For each platform, we need to know about any special compile and link
987 # libraries, and whether the normal C function names are thread-safe.
988 # See the comment at the top of src/port/thread.c for more information.
989 # WIN32 doesn't need the pthread tests; it always uses threads
991 # These tests are run before the library-tests, because linking with the
992 # other libraries can pull in the pthread functions as a side-effect. We
993 # want to use the -pthread or similar flags directly, and not rely on
994 # the side-effects of linking with some other library.
996 # note: We have to use AS_IF here rather than plain if. The AC_CHECK_HEADER
997 # invocation below is the first one in the script, and autoconf generates
998 # additional code for that, which must not be inside the if-block. AS_IF
999 # knows how to do that.
1000 AS_IF([test "$enable_thread_safety" = yes -a "$PORTNAME" != "win32"],
1002 AX_PTHREAD # set thread flags
1004 # Some platforms use these, so just define them. They can't hurt if they
1005 # are not supported. For example, on Solaris -D_POSIX_PTHREAD_SEMANTICS
1006 # enables 5-arg getpwuid_r, among other things.
1007 PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS"
1009 # Check for *_r functions
1012 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
1013 LIBS="$LIBS $PTHREAD_LIBS"
1015 AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([
1016 pthread.h not found; use --disable-thread-safety to disable thread safety])])
1018 AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
1020 # Do test here with the proper thread flags
1021 PGAC_FUNC_STRERROR_R_INT
1027 # do not use values from template file
1032 AC_SUBST(PTHREAD_CFLAGS)
1033 AC_SUBST(PTHREAD_LIBS)
1039 ## Most libraries are included only if they demonstrably provide a function
1040 ## we need, but libm is an exception: always include it, because there are
1041 ## too many compilers that play cute optimization games that will break
1042 ## probes for standard functions such as pow().
1045 AC_CHECK_LIB(m, main)
1046 AC_SEARCH_LIBS(setproctitle, util)
1047 AC_SEARCH_LIBS(dlopen, dl)
1048 AC_SEARCH_LIBS(socket, [socket ws2_32])
1049 AC_SEARCH_LIBS(shl_load, dld)
1050 # We only use libld in port/dynloader/aix.c
1053 AC_SEARCH_LIBS(ldopen, ld)
1056 AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt])
1057 AC_SEARCH_LIBS(crypt, crypt)
1058 AC_SEARCH_LIBS(shm_open, rt)
1059 AC_SEARCH_LIBS(shm_unlink, rt)
1061 AC_SEARCH_LIBS(fdatasync, [rt posix4])
1062 # Required for thread_test.c on Solaris
1063 AC_SEARCH_LIBS(sched_yield, rt)
1064 # Required for thread_test.c on Solaris 2.5:
1065 # Other ports use it too (HP-UX) so test unconditionally
1066 AC_SEARCH_LIBS(gethostbyname_r, nsl)
1068 AC_SEARCH_LIBS(shmget, cygipc)
1070 if test "$with_readline" = yes; then
1072 if test x"$pgac_cv_check_readline" = x"no"; then
1073 AC_MSG_ERROR([readline library not found
1074 If you have readline already installed, see config.log for details on the
1075 failure. It is possible the compiler isn't looking in the proper directory.
1076 Use --without-readline to disable readline support.])
1080 if test "$with_zlib" = yes; then
1081 AC_CHECK_LIB(z, inflate, [],
1082 [AC_MSG_ERROR([zlib library not found
1083 If you have zlib already installed, see config.log for details on the
1084 failure. It is possible the compiler isn't looking in the proper directory.
1085 Use --without-zlib to disable zlib support.])])
1088 if test "$enable_spinlocks" = yes; then
1089 AC_DEFINE(HAVE_SPINLOCKS, 1, [Define to 1 if you have spinlocks.])
1092 *** Not using spinlocks will cause poor performance.])
1095 if test "$enable_atomics" = yes; then
1096 AC_DEFINE(HAVE_ATOMICS, 1, [Define to 1 if you want to use atomics if available.])
1099 *** Not using atomic operations will cause poor performance.])
1102 if test "$with_gssapi" = yes ; then
1103 if test "$PORTNAME" != "win32"; then
1104 AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
1105 [AC_MSG_ERROR([could not find function 'gss_init_sec_context' required for GSSAPI])])
1107 LIBS="$LIBS -lgssapi32"
1111 if test "$with_openssl" = yes ; then
1113 if test "$PORTNAME" != "win32"; then
1114 AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1115 AC_CHECK_LIB(ssl, SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1117 AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1118 AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1120 AC_CHECK_FUNCS([SSL_get_current_compression])
1123 if test "$with_pam" = yes ; then
1124 AC_CHECK_LIB(pam, pam_start, [], [AC_MSG_ERROR([library 'pam' is required for PAM])])
1127 if test "$with_libxml" = yes ; then
1128 AC_CHECK_LIB(xml2, xmlSaveToBuffer, [], [AC_MSG_ERROR([library 'xml2' (version >= 2.6.23) is required for XML support])])
1131 if test "$with_libxslt" = yes ; then
1132 AC_CHECK_LIB(xslt, xsltCleanupGlobals, [], [AC_MSG_ERROR([library 'xslt' is required for XSLT support])])
1135 # Note: We can test for libldap_r only after we know PTHREAD_LIBS
1136 if test "$with_ldap" = yes ; then
1138 if test "$PORTNAME" != "win32"; then
1139 AC_CHECK_LIB(ldap, ldap_bind, [],
1140 [AC_MSG_ERROR([library 'ldap' is required for LDAP])],
1142 LDAP_LIBS_BE="-lldap $EXTRA_LDAP_LIBS"
1143 if test "$enable_thread_safety" = yes; then
1144 # on some platforms ldap_r fails to link without PTHREAD_LIBS
1145 AC_CHECK_LIB(ldap_r, ldap_simple_bind, [],
1146 [AC_MSG_ERROR([library 'ldap_r' is required for LDAP])],
1147 [$PTHREAD_CFLAGS $PTHREAD_LIBS $EXTRA_LDAP_LIBS])
1148 LDAP_LIBS_FE="-lldap_r $EXTRA_LDAP_LIBS"
1150 LDAP_LIBS_FE="-lldap $EXTRA_LDAP_LIBS"
1153 AC_CHECK_LIB(wldap32, ldap_bind, [], [AC_MSG_ERROR([library 'wldap32' is required for LDAP])])
1154 LDAP_LIBS_FE="-lwldap32"
1155 LDAP_LIBS_BE="-lwldap32"
1159 AC_SUBST(LDAP_LIBS_FE)
1160 AC_SUBST(LDAP_LIBS_BE)
1162 # for contrib/sepgsql
1163 if test "$with_selinux" = yes; then
1164 AC_CHECK_LIB(selinux, security_compute_create_name, [],
1165 [AC_MSG_ERROR([library 'libselinux', version 2.1.10 or newer, is required for SELinux support])])
1168 # for contrib/uuid-ossp
1169 if test "$with_uuid" = bsd ; then
1170 # On BSD, the UUID functions are in libc
1171 AC_CHECK_FUNC(uuid_to_string,
1173 [AC_MSG_ERROR([BSD UUID functions are not present])])
1174 elif test "$with_uuid" = e2fs ; then
1175 # On OS X, the UUID functions are in libc
1176 AC_CHECK_FUNC(uuid_generate,
1178 [AC_CHECK_LIB(uuid, uuid_generate,
1179 [UUID_LIBS="-luuid"],
1180 [AC_MSG_ERROR([library 'uuid' is required for E2FS UUID])])])
1181 elif test "$with_uuid" = ossp ; then
1182 AC_CHECK_LIB(ossp-uuid, uuid_export,
1183 [UUID_LIBS="-lossp-uuid"],
1184 [AC_CHECK_LIB(uuid, uuid_export,
1185 [UUID_LIBS="-luuid"],
1186 [AC_MSG_ERROR([library 'ossp-uuid' or 'uuid' is required for OSSP UUID])])])
1195 dnl sys/socket.h is required by AC_FUNC_ACCEPT_ARGTYPES
1196 AC_CHECK_HEADERS([atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h pwd.h sys/epoll.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h])
1198 # On BSD, test for net/if.h will fail unless sys/socket.h
1199 # is included first.
1200 AC_CHECK_HEADERS(net/if.h, [], [],
1201 [AC_INCLUDES_DEFAULT
1202 #ifdef HAVE_SYS_SOCKET_H
1203 #include <sys/socket.h>
1207 # On OpenBSD, test for sys/ucred.h will fail unless sys/param.h
1208 # is included first.
1209 AC_CHECK_HEADERS(sys/ucred.h, [], [],
1210 [AC_INCLUDES_DEFAULT
1211 #include <sys/param.h>
1214 # At least on IRIX, test for netinet/tcp.h will fail unless
1215 # netinet/in.h is included first.
1216 AC_CHECK_HEADERS(netinet/in.h)
1217 AC_CHECK_HEADERS(netinet/tcp.h, [], [],
1218 [AC_INCLUDES_DEFAULT
1219 #ifdef HAVE_NETINET_IN_H
1220 #include <netinet/in.h>
1224 if expr x"$pgac_cv_check_readline" : 'x-lreadline' >/dev/null ; then
1225 AC_CHECK_HEADERS(readline/readline.h, [],
1226 [AC_CHECK_HEADERS(readline.h, [],
1227 [AC_MSG_ERROR([readline header not found
1228 If you have readline already installed, see config.log for details on the
1229 failure. It is possible the compiler isn't looking in the proper directory.
1230 Use --without-readline to disable readline support.])])])
1231 AC_CHECK_HEADERS(readline/history.h, [],
1232 [AC_CHECK_HEADERS(history.h, [],
1233 [AC_MSG_ERROR([history header not found
1234 If you have readline already installed, see config.log for details on the
1235 failure. It is possible the compiler isn't looking in the proper directory.
1236 Use --without-readline to disable readline support.])])])
1239 if expr x"$pgac_cv_check_readline" : 'x-ledit' >/dev/null ; then
1240 # Some installations of libedit usurp /usr/include/readline/, which seems
1241 # bad practice, since in combined installations readline will have its headers
1242 # there. We might have to resort to AC_EGREP checks to make sure we found
1243 # the proper header...
1244 AC_CHECK_HEADERS(editline/readline.h, [],
1245 [AC_CHECK_HEADERS(readline.h, [],
1246 [AC_CHECK_HEADERS(readline/readline.h, [],
1247 [AC_MSG_ERROR([readline header not found
1248 If you have libedit already installed, see config.log for details on the
1249 failure. It is possible the compiler isn't looking in the proper directory.
1250 Use --without-readline to disable libedit support.])])])])
1251 # Note: in a libedit installation, history.h is sometimes a dummy, and may
1252 # not be there at all. Hence, don't complain if not found. We must check
1253 # though, since in yet other versions it is an independent header.
1254 AC_CHECK_HEADERS(editline/history.h, [],
1255 [AC_CHECK_HEADERS(history.h, [],
1256 [AC_CHECK_HEADERS(readline/history.h)])])
1259 if test "$with_zlib" = yes; then
1260 AC_CHECK_HEADER(zlib.h, [], [AC_MSG_ERROR([zlib header not found
1261 If you have zlib already installed, see config.log for details on the
1262 failure. It is possible the compiler isn't looking in the proper directory.
1263 Use --without-zlib to disable zlib support.])])
1266 if test "$with_gssapi" = yes ; then
1267 AC_CHECK_HEADERS(gssapi/gssapi.h, [],
1268 [AC_CHECK_HEADERS(gssapi.h, [], [AC_MSG_ERROR([gssapi.h header file is required for GSSAPI])])])
1271 if test "$with_openssl" = yes ; then
1272 AC_CHECK_HEADER(openssl/ssl.h, [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])])
1273 AC_CHECK_HEADER(openssl/err.h, [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])])
1276 if test "$with_pam" = yes ; then
1277 AC_CHECK_HEADERS(security/pam_appl.h, [],
1278 [AC_CHECK_HEADERS(pam/pam_appl.h, [],
1279 [AC_MSG_ERROR([header file <security/pam_appl.h> or <pam/pam_appl.h> is required for PAM.])])])
1282 if test "$with_bsd_auth" = yes ; then
1283 AC_CHECK_HEADER(bsd_auth.h, [], [AC_MSG_ERROR([header file <bsd_auth.h> is required for BSD Authentication support])])
1286 if test "$with_systemd" = yes ; then
1287 AC_CHECK_HEADER(systemd/sd-daemon.h, [], [AC_MSG_ERROR([header file <systemd/sd-daemon.h> is required for systemd support])])
1290 if test "$with_libxml" = yes ; then
1291 AC_CHECK_HEADER(libxml/parser.h, [], [AC_MSG_ERROR([header file <libxml/parser.h> is required for XML support])])
1294 if test "$with_libxslt" = yes ; then
1295 AC_CHECK_HEADER(libxslt/xslt.h, [], [AC_MSG_ERROR([header file <libxslt/xslt.h> is required for XSLT support])])
1298 if test "$with_ldap" = yes ; then
1299 if test "$PORTNAME" != "win32"; then
1300 AC_CHECK_HEADERS(ldap.h, [],
1301 [AC_MSG_ERROR([header file <ldap.h> is required for LDAP])])
1304 AC_CHECK_HEADERS(winldap.h, [],
1305 [AC_MSG_ERROR([header file <winldap.h> is required for LDAP])],
1306 [AC_INCLUDES_DEFAULT
1307 #include <windows.h>
1312 if test "$with_bonjour" = yes ; then
1313 AC_CHECK_HEADER(dns_sd.h, [], [AC_MSG_ERROR([header file <dns_sd.h> is required for Bonjour])])
1316 # for contrib/uuid-ossp
1317 if test "$with_uuid" = bsd ; then
1318 AC_CHECK_HEADERS(uuid.h,
1319 [AC_EGREP_HEADER([uuid_to_string], uuid.h, [],
1320 [AC_MSG_ERROR([header file <uuid.h> does not match BSD UUID library])])],
1321 [AC_MSG_ERROR([header file <uuid.h> is required for BSD UUID])])
1322 elif test "$with_uuid" = e2fs ; then
1323 AC_CHECK_HEADERS(uuid/uuid.h,
1324 [AC_EGREP_HEADER([uuid_generate], uuid/uuid.h, [],
1325 [AC_MSG_ERROR([header file <uuid/uuid.h> does not match E2FS UUID library])])],
1326 [AC_CHECK_HEADERS(uuid.h,
1327 [AC_EGREP_HEADER([uuid_generate], uuid.h, [],
1328 [AC_MSG_ERROR([header file <uuid.h> does not match E2FS UUID library])])],
1329 [AC_MSG_ERROR([header file <uuid/uuid.h> or <uuid.h> is required for E2FS UUID])])])
1330 elif test "$with_uuid" = ossp ; then
1331 AC_CHECK_HEADERS(ossp/uuid.h,
1332 [AC_EGREP_HEADER([uuid_export], ossp/uuid.h, [],
1333 [AC_MSG_ERROR([header file <ossp/uuid.h> does not match OSSP UUID library])])],
1334 [AC_CHECK_HEADERS(uuid.h,
1335 [AC_EGREP_HEADER([uuid_export], uuid.h, [],
1336 [AC_MSG_ERROR([header file <uuid.h> does not match OSSP UUID library])])],
1337 [AC_MSG_ERROR([header file <ossp/uuid.h> or <uuid.h> is required for OSSP UUID])])])
1340 if test "$PORTNAME" = "win32" ; then
1341 AC_CHECK_HEADERS(crtdefs.h)
1345 ## Types, structures, compiler characteristics
1348 m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that.
1351 PGAC_PRINTF_ARCHETYPE
1352 AC_C_FLEXIBLE_ARRAY_MEMBER
1354 PGAC_C_FUNCNAME_SUPPORT
1355 PGAC_C_STATIC_ASSERT
1356 PGAC_C_TYPES_COMPATIBLE
1357 PGAC_C_BUILTIN_BSWAP32
1358 PGAC_C_BUILTIN_BSWAP64
1359 PGAC_C_BUILTIN_CONSTANT_P
1360 PGAC_C_BUILTIN_UNREACHABLE
1362 PGAC_STRUCT_TIMEZONE
1364 PGAC_STRUCT_SOCKADDR_UN
1365 PGAC_STRUCT_SOCKADDR_STORAGE
1366 PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS
1367 PGAC_STRUCT_ADDRINFO
1370 AC_TYPE_LONG_LONG_INT
1374 AC_CHECK_TYPES([struct cmsgcred], [], [],
1375 [#include <sys/socket.h>
1376 #include <sys/param.h>
1377 #ifdef HAVE_SYS_UCRED_H
1378 #include <sys/ucred.h>
1381 AC_CHECK_TYPES([struct option], [], [],
1382 [#ifdef HAVE_GETOPT_H
1386 if test "$with_zlib" = yes; then
1387 # Check that <zlib.h> defines z_streamp (versions before about 1.0.4
1388 # did not). While we could work around the lack of z_streamp, it
1389 # seems unwise to encourage people to use such old zlib versions...
1390 AC_CHECK_TYPE(z_streamp, [], [AC_MSG_ERROR([zlib version is too old
1391 Use --without-zlib to disable zlib support.])],
1392 [#include <zlib.h>])
1395 # On PPC, check if assembler supports LWARX instruction's mutex hint bit
1398 AC_MSG_CHECKING([whether assembler supports lwarx hint bit])
1399 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
1400 [int a = 0; int *p = &a; int r;
1401 __asm__ __volatile__ (" lwarx %0,0,%1,1\n" : "=&r"(r) : "r"(p));])],
1402 [pgac_cv_have_ppc_mutex_hint=yes],
1403 [pgac_cv_have_ppc_mutex_hint=no])
1404 AC_MSG_RESULT([$pgac_cv_have_ppc_mutex_hint])
1405 if test x"$pgac_cv_have_ppc_mutex_hint" = xyes ; then
1406 AC_DEFINE(HAVE_PPC_LWARX_MUTEX_HINT, 1, [Define to 1 if the assembler supports PPC's LWARX mutex hint bit.])
1411 # Check largefile support. You might think this is a system service not a
1412 # compiler characteristic, but you'd be wrong. We must check this before
1413 # probing existence of related functions such as fseeko, since the largefile
1414 # defines can affect what is generated for that.
1415 if test "$PORTNAME" != "win32"; then
1417 dnl Autoconf 2.69's AC_SYS_LARGEFILE believes it's a good idea to #define
1418 dnl _DARWIN_USE_64_BIT_INODE, but it isn't: on OS X 10.5 that activates a
1419 dnl bug that causes readdir() to sometimes return EINVAL. On later OS X
1420 dnl versions where the feature actually works, it's on by default anyway.
1421 AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],[])
1424 # Check for largefile support (must be after AC_SYS_LARGEFILE)
1425 AC_CHECK_SIZEOF([off_t])
1427 # If we don't have largefile support, can't handle segsize >= 2GB.
1428 if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then
1429 AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.])
1434 ## Functions, global variables
1437 PGAC_VAR_INT_TIMEZONE
1438 AC_FUNC_ACCEPT_ARGTYPES
1439 PGAC_FUNC_GETTIMEOFDAY_1ARG
1440 PGAC_FUNC_WCSTOMBS_L
1442 # Some versions of libedit contain strlcpy(), setproctitle(), and other
1443 # symbols that that library has no business exposing to the world. Pending
1444 # acquisition of a clue by those developers, ignore libedit (including its
1445 # possible alias of libreadline) while checking for everything else.
1446 LIBS_including_readline="$LIBS"
1447 LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
1449 AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setproctitle setsid shm_open symlink sync_file_range towlower utime utimes wcstombs wcstombs_l])
1451 AC_REPLACE_FUNCS(fseeko)
1453 # NetBSD uses a custom fseeko/ftello built on fsetpos/fgetpos
1454 # Mingw uses macros to access Win32 API calls
1456 AC_DEFINE(HAVE_FSEEKO, 1, [Define to 1 because replacement version used.])
1457 ac_cv_func_fseeko=yes;;
1462 # posix_fadvise() is a no-op on Solaris, so don't incur function overhead
1463 # by calling it, 2009-04-02
1464 # http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/posix_fadvise.c
1465 if test "$PORTNAME" != "solaris"; then
1466 AC_CHECK_FUNCS(posix_fadvise)
1467 AC_CHECK_DECLS(posix_fadvise, [], [], [#include <fcntl.h>])
1470 AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
1471 AC_CHECK_DECLS([strlcat, strlcpy])
1472 # This is probably only present on Darwin, but may as well check always
1473 AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
1476 AC_CHECK_TYPE([struct sockaddr_in6],
1477 [AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])
1480 [$ac_includes_default
1481 #include <netinet/in.h>])
1484 AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
1485 [AC_LINK_IFELSE([AC_LANG_PROGRAM(
1486 [#include <machine/vmparam.h>
1487 #include <sys/exec.h>
1489 [PS_STRINGS->ps_nargvstr = 1;
1490 PS_STRINGS->ps_argvstr = "foo";])],
1491 [pgac_cv_var_PS_STRINGS=yes],
1492 [pgac_cv_var_PS_STRINGS=no])])
1493 if test "$pgac_cv_var_PS_STRINGS" = yes ; then
1494 AC_DEFINE([HAVE_PS_STRINGS], 1, [Define to 1 if the PS_STRINGS thing exists.])
1498 # We use our snprintf.c emulation if either snprintf() or vsnprintf()
1499 # is missing. Yes, there are machines that have only one. We may
1500 # also decide to use snprintf.c if snprintf() is present but does not
1501 # have all the features we need --- see below.
1503 if test "$PORTNAME" = "win32"; then
1504 # Win32 gets snprintf.c built unconditionally.
1506 # To properly translate all NLS languages strings, we must support the
1507 # *printf() %$ format, which allows *printf() arguments to be selected
1508 # by position in the translated string.
1510 # libintl versions < 0.13 use the native *printf() functions, and Win32
1511 # *printf() doesn't understand %$, so we must use our /port versions,
1512 # which do understand %$. libintl versions >= 0.13 include their own
1513 # *printf versions on Win32. The libintl 0.13 release note text is:
1515 # C format strings with positions, as they arise when a translator
1516 # needs to reorder a sentence, are now supported on all platforms.
1517 # On those few platforms (NetBSD and Woe32) for which the native
1518 # printf()/fprintf()/... functions don't support such format
1519 # strings, replacements are provided through <libintl.h>.
1521 # We could use libintl >= 0.13's *printf() if we were sure that we had
1522 # a litint >= 0.13 at runtime, but seeing that there is no clean way
1523 # to guarantee that, it is best to just use our own, so we are sure to
1524 # get %$ support. In include/port.h we disable the *printf() macros
1525 # that might have been defined by libintl.
1527 # We do this unconditionally whether NLS is used or not so we are sure
1528 # that all Win32 libraries and binaries behave the same.
1529 pgac_need_repl_snprintf=yes
1531 pgac_need_repl_snprintf=no
1532 AC_CHECK_FUNCS(snprintf, [], pgac_need_repl_snprintf=yes)
1533 AC_CHECK_FUNCS(vsnprintf, [], pgac_need_repl_snprintf=yes)
1537 # Check whether <stdio.h> declares snprintf() and vsnprintf(); if not,
1538 # include/c.h will provide declarations. Note this is a separate test
1539 # from whether the functions exist in the C library --- there are
1540 # systems that have the functions but don't bother to declare them :-(
1542 AC_CHECK_DECLS([snprintf, vsnprintf])
1545 dnl Cannot use AC_CHECK_FUNC because isinf may be a macro
1546 AC_CACHE_CHECK([for isinf], ac_cv_func_isinf,
1547 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
1551 [return isinf(glob_double) ? 0 : 1;])],
1552 [ac_cv_func_isinf=yes],
1553 [ac_cv_func_isinf=no])])
1555 if test $ac_cv_func_isinf = yes ; then
1556 AC_DEFINE(HAVE_ISINF, 1, [Define to 1 if you have isinf().])
1559 # Look for a way to implement a substitute for isinf()
1560 AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
1563 AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy])
1567 # Windows uses a specialised env handler
1568 # and doesn't need a replacement getpeereid because it doesn't use
1571 AC_DEFINE(HAVE_UNSETENV, 1, [Define to 1 because replacement version used.])
1572 AC_DEFINE(HAVE_GETPEEREID, 1, [Define to 1 because function not required.])
1573 ac_cv_func_unsetenv=yes
1574 ac_cv_func_getpeereid=yes;;
1576 AC_REPLACE_FUNCS([unsetenv getpeereid])
1580 # System's version of getaddrinfo(), if any, may be used only if we found
1581 # a definition for struct addrinfo; see notes in src/include/getaddrinfo.h.
1582 # We use only our own getaddrinfo.c on Windows, but it's time to revisit that.
1583 if test x"$ac_cv_type_struct_addrinfo" = xyes && \
1584 test "$PORTNAME" != "win32"; then
1585 AC_REPLACE_FUNCS([getaddrinfo])
1587 AC_LIBOBJ(getaddrinfo)
1590 # Similarly, use system's getopt_long() only if system provides struct option.
1591 if test x"$ac_cv_type_struct_option" = xyes ; then
1592 AC_REPLACE_FUNCS([getopt_long])
1594 AC_LIBOBJ(getopt_long)
1597 # Solaris' getopt() doesn't do what we want for long options, so always use
1598 # our version on that platform.
1599 if test "$PORTNAME" = "solaris"; then
1603 # mingw has adopted a GNU-centric interpretation of optind/optreset,
1604 # so always use our version on Windows.
1605 if test "$PORTNAME" = "win32"; then
1607 AC_LIBOBJ(getopt_long)
1610 # Win32 (really MinGW) support
1611 if test "$PORTNAME" = "win32"; then
1612 AC_REPLACE_FUNCS(gettimeofday)
1618 AC_LIBOBJ(win32error)
1619 AC_LIBOBJ(win32security)
1620 AC_LIBOBJ(win32setlocale)
1621 AC_DEFINE([HAVE_SYMLINK], 1,
1622 [Define to 1 if you have the `symlink' function.])
1623 AC_CHECK_TYPES(MINIDUMP_TYPE, [pgac_minidump_type=yes], [pgac_minidump_type=no], [
1624 #define WIN32_LEAN_AND_MEAN
1625 #include <windows.h>
1627 #include <dbghelp.h>])
1629 if test x"$pgac_minidump_type" = x"yes" ; then
1630 AC_SUBST(have_win32_dbghelp,yes)
1632 AC_SUBST(have_win32_dbghelp,no)
1635 # Cygwin needs only a bit of that
1636 if test "$PORTNAME" = "cygwin"; then
1640 AC_CHECK_DECLS([sys_siglist], [], [],
1641 [#include <signal.h>
1642 /* NetBSD declares sys_siglist in unistd.h. */
1643 #ifdef HAVE_UNISTD_H
1644 # include <unistd.h>
1648 AC_CHECK_FUNC(syslog,
1649 [AC_CHECK_HEADER(syslog.h,
1650 [AC_DEFINE(HAVE_SYSLOG, 1, [Define to 1 if you have the syslog interface.])])])
1652 AC_CACHE_CHECK([for opterr], pgac_cv_var_int_opterr,
1653 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>],
1654 [extern int opterr; opterr = 1;])],
1655 [pgac_cv_var_int_opterr=yes],
1656 [pgac_cv_var_int_opterr=no])])
1657 if test x"$pgac_cv_var_int_opterr" = x"yes"; then
1658 AC_DEFINE(HAVE_INT_OPTERR, 1, [Define to 1 if you have the global variable 'int opterr'.])
1661 AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset,
1662 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>],
1663 [extern int optreset; optreset = 1;])],
1664 [pgac_cv_var_int_optreset=yes],
1665 [pgac_cv_var_int_optreset=no])])
1666 if test x"$pgac_cv_var_int_optreset" = x"yes"; then
1667 AC_DEFINE(HAVE_INT_OPTRESET, 1, [Define to 1 if you have the global variable 'int optreset'.])
1670 AC_CHECK_FUNCS([strtoll strtoq], [break])
1671 AC_CHECK_FUNCS([strtoull strtouq], [break])
1673 # Lastly, restore full LIBS list and check for readline/libedit symbols
1674 LIBS="$LIBS_including_readline"
1676 if test "$with_readline" = yes; then
1677 PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
1678 AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function rl_reset_screen_size])
1679 AC_CHECK_FUNCS([append_history history_truncate_file])
1683 # This test makes sure that run tests work at all. Sometimes a shared
1684 # library is found by the linker, but the runtime linker can't find it.
1685 # This check should come after all modifications of compiler or linker
1686 # variables, and before any other run tests.
1687 AC_MSG_CHECKING([test program])
1688 AC_RUN_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])],
1689 [AC_MSG_RESULT(ok)],
1690 [AC_MSG_RESULT(failed)
1692 Could not execute a simple test program. This may be a problem
1693 related to locating shared libraries. Check the file 'config.log'
1694 for the exact reason.]])],
1695 [AC_MSG_RESULT([cross-compiling])])
1697 # --------------------
1698 # Run tests below here
1699 # --------------------
1701 # Force use of our snprintf if system's doesn't do arg control
1702 # See comment above at snprintf test for details.
1703 if test "$enable_nls" = yes -a "$pgac_need_repl_snprintf" = no; then
1704 PGAC_FUNC_SNPRINTF_ARG_CONTROL
1705 if test $pgac_cv_snprintf_arg_control != yes ; then
1706 pgac_need_repl_snprintf=yes
1711 dnl Check to see if we have a working 64-bit integer type.
1712 dnl This breaks down into two steps:
1713 dnl (1) figure out if the compiler has a 64-bit int type with working
1714 dnl arithmetic, and if so
1715 dnl (2) see whether snprintf() can format the type correctly. (Currently,
1716 dnl snprintf is the only library routine we really need for int8 support.)
1717 dnl It's entirely possible to have a compiler that handles a 64-bit type
1718 dnl when the C library doesn't; this is fairly likely when using gcc on
1719 dnl an older platform, for example.
1720 dnl If there is no native snprintf() or it does not handle the 64-bit type,
1721 dnl we force our own version of snprintf() to be used instead.
1722 dnl Note this test must be run after our initial check for snprintf/vsnprintf.
1724 dnl As of Postgres 8.4, we no longer support compilers without a working
1725 dnl 64-bit type. But we still handle the case of snprintf being broken.
1727 PGAC_TYPE_64BIT_INT([long int])
1729 if test x"$HAVE_LONG_INT_64" = x"yes" ; then
1730 pg_int64_type="long int"
1732 PGAC_TYPE_64BIT_INT([long long int])
1733 if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then
1734 pg_int64_type="long long int"
1736 AC_MSG_ERROR([Cannot find a working 64-bit integer type.])
1740 AC_DEFINE_UNQUOTED(PG_INT64_TYPE, $pg_int64_type,
1741 [Define to the name of a signed 64-bit integer type.])
1743 dnl If we need to use "long long int", figure out whether nnnLL notation works.
1745 if test x"$HAVE_LONG_LONG_INT_64" = xyes ; then
1746 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1747 #define INT64CONST(x) x##LL
1748 long long int foo = INT64CONST(0x1234567890123456);
1750 [AC_DEFINE(HAVE_LL_CONSTANTS, 1, [Define to 1 if constants of type 'long long int' should have the suffix LL.])],
1755 # If we found "long int" is 64 bits, assume snprintf handles it. If
1756 # we found we need to use "long long int", better check. We cope with
1757 # snprintfs that use %lld, %qd, or %I64d as the format. If none of these
1758 # work, fall back to our own snprintf emulation (which we know uses %lld).
1760 if test "$HAVE_LONG_LONG_INT_64" = yes ; then
1761 if test $pgac_need_repl_snprintf = no; then
1762 PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER
1763 if test "$LONG_LONG_INT_MODIFIER" = ""; then
1764 # Force usage of our own snprintf, since system snprintf is broken
1765 pgac_need_repl_snprintf=yes
1766 LONG_LONG_INT_MODIFIER='ll'
1769 # Here if we previously decided we needed to use our own snprintf
1770 LONG_LONG_INT_MODIFIER='ll'
1773 # Here if we are not using 'long long int' at all
1774 LONG_LONG_INT_MODIFIER='l'
1777 INT64_MODIFIER="\"$LONG_LONG_INT_MODIFIER\""
1779 AC_DEFINE_UNQUOTED(INT64_MODIFIER, $INT64_MODIFIER,
1780 [Define to the appropriate snprintf length modifier for 64-bit ints.])
1782 # Also force use of our snprintf if the system's doesn't support the %z flag.
1783 if test "$pgac_need_repl_snprintf" = no; then
1784 PGAC_FUNC_SNPRINTF_SIZE_T_SUPPORT
1785 if test "$pgac_cv_snprintf_size_t_support" != yes; then
1786 pgac_need_repl_snprintf=yes
1790 # Now we have checked all the reasons to replace snprintf
1791 if test $pgac_need_repl_snprintf = yes; then
1792 AC_DEFINE(USE_REPL_SNPRINTF, 1, [Use replacement snprintf() functions.])
1796 # Check size of void *, size_t (enables tweaks for > 32bit address space)
1797 AC_CHECK_SIZEOF([void *])
1798 AC_CHECK_SIZEOF([size_t])
1799 AC_CHECK_SIZEOF([long])
1801 # Decide whether float4 is passed by value: user-selectable, enabled by default
1802 AC_MSG_CHECKING([whether to build with float4 passed by value])
1803 PGAC_ARG_BOOL(enable, float4-byval, yes, [disable float4 passed by value],
1804 [AC_DEFINE([USE_FLOAT4_BYVAL], 1,
1805 [Define to 1 if you want float4 values to be passed by value. (--enable-float4-byval)])
1806 float4passbyval=true],
1807 [float4passbyval=false])
1808 AC_MSG_RESULT([$enable_float4_byval])
1809 AC_DEFINE_UNQUOTED([FLOAT4PASSBYVAL], [$float4passbyval], [float4 values are passed by value if 'true', by reference if 'false'])
1811 # Decide whether float8 is passed by value.
1812 # Note: this setting also controls int8 and related types such as timestamp.
1813 # If sizeof(Datum) >= 8, this is user-selectable, enabled by default.
1814 # If not, trying to select it is an error.
1815 AC_MSG_CHECKING([whether to build with float8 passed by value])
1816 if test $ac_cv_sizeof_void_p -ge 8 ; then
1817 PGAC_ARG_BOOL(enable, float8-byval, yes, [disable float8 passed by value])
1819 PGAC_ARG_BOOL(enable, float8-byval, no, [disable float8 passed by value])
1820 if test "$enable_float8_byval" = yes ; then
1821 AC_MSG_ERROR([--enable-float8-byval is not supported on 32-bit platforms.])
1824 if test "$enable_float8_byval" = yes ; then
1825 AC_DEFINE([USE_FLOAT8_BYVAL], 1,
1826 [Define to 1 if you want float8, int8, etc values to be passed by value. (--enable-float8-byval)])
1827 float8passbyval=true
1829 float8passbyval=false
1831 AC_MSG_RESULT([$enable_float8_byval])
1832 AC_DEFINE_UNQUOTED([FLOAT8PASSBYVAL], [$float8passbyval], [float8, int8, and related values are passed by value if 'true', by reference if 'false'])
1834 # Determine memory alignment requirements for the basic C data types.
1836 AC_CHECK_ALIGNOF(short)
1837 AC_CHECK_ALIGNOF(int)
1838 AC_CHECK_ALIGNOF(long)
1839 if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then
1840 AC_CHECK_ALIGNOF(long long int)
1842 AC_CHECK_ALIGNOF(double)
1844 # Compute maximum alignment of any basic type.
1845 # We assume long's alignment is at least as strong as char, short, or int;
1846 # but we must check long long (if it exists) and double.
1848 MAX_ALIGNOF=$ac_cv_alignof_long
1849 if test $MAX_ALIGNOF -lt $ac_cv_alignof_double ; then
1850 MAX_ALIGNOF=$ac_cv_alignof_double
1852 if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $ac_cv_alignof_long_long_int ; then
1853 MAX_ALIGNOF="$ac_cv_alignof_long_long_int"
1855 AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.])
1858 # Some platforms predefine the types int8, int16, etc. Only check
1859 # a (hopefully) representative subset.
1860 AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [],
1861 [#include <stdio.h>])
1863 # Check for extensions offering the integer scalar type __int128.
1864 PGAC_TYPE_128BIT_INT
1866 # Check for various atomic operations now that we have checked how to declare
1868 PGAC_HAVE_GCC__SYNC_CHAR_TAS
1869 PGAC_HAVE_GCC__SYNC_INT32_TAS
1870 PGAC_HAVE_GCC__SYNC_INT32_CAS
1871 PGAC_HAVE_GCC__SYNC_INT64_CAS
1872 PGAC_HAVE_GCC__ATOMIC_INT32_CAS
1873 PGAC_HAVE_GCC__ATOMIC_INT64_CAS
1876 # Check for x86 cpuid instruction
1877 AC_CACHE_CHECK([for __get_cpuid], [pgac_cv__get_cpuid],
1878 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cpuid.h>],
1879 [[unsigned int exx[4] = {0, 0, 0, 0};
1880 __get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
1882 [pgac_cv__get_cpuid="yes"],
1883 [pgac_cv__get_cpuid="no"])])
1884 if test x"$pgac_cv__get_cpuid" = x"yes"; then
1885 AC_DEFINE(HAVE__GET_CPUID, 1, [Define to 1 if you have __get_cpuid.])
1888 AC_CACHE_CHECK([for __cpuid], [pgac_cv__cpuid],
1889 [AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <intrin.h>],
1890 [[unsigned int exx[4] = {0, 0, 0, 0};
1891 __get_cpuid(exx[0], 1);
1893 [pgac_cv__cpuid="yes"],
1894 [pgac_cv__cpuid="no"])])
1895 if test x"$pgac_cv__cpuid" = x"yes"; then
1896 AC_DEFINE(HAVE__CPUID, 1, [Define to 1 if you have __cpuid.])
1899 # Check for Intel SSE 4.2 intrinsics to do CRC calculations.
1901 # First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
1902 # with the default compiler flags. If not, check if adding the -msse4.2
1903 # flag helps. CFLAGS_SSE42 is set to -msse4.2 if that's required.
1904 PGAC_SSE42_CRC32_INTRINSICS([])
1905 if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then
1906 PGAC_SSE42_CRC32_INTRINSICS([-msse4.2])
1908 AC_SUBST(CFLAGS_SSE42)
1910 # Are we targeting a processor that supports SSE 4.2? gcc, clang and icc all
1911 # define __SSE4_2__ in that case.
1912 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
1914 #error __SSE4_2__ not defined
1916 ])], [SSE4_2_TARGETED=1])
1918 # Select CRC-32C implementation.
1920 # If we are targeting a processor that has SSE 4.2 instructions, we can use the
1921 # special CRC instructions for calculating CRC-32C. If we're not targeting such
1922 # a processor, but we can nevertheless produce code that uses the SSE
1923 # intrinsics, perhaps with some extra CFLAGS, compile both implementations and
1924 # select which one to use at runtime, depending on whether SSE 4.2 is supported
1925 # by the processor we're running on.
1927 # You can override this logic by setting the appropriate USE_*_CRC32 flag to 1
1928 # in the template or configure command line.
1929 if test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"" && test x"$USE_SLICING_BY_8_CRC32C" = x""; then
1930 if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && test x"$SSE4_2_TARGETED" = x"1" ; then
1933 # the CPUID instruction is needed for the runtime check.
1934 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
1935 USE_SSE42_CRC32C_WITH_RUNTIME_CHECK=1
1937 # fall back to slicing-by-8 algorithm which doesn't require any special
1939 USE_SLICING_BY_8_CRC32C=1
1944 # Set PG_CRC32C_OBJS appropriately depending on the selected implementation.
1945 AC_MSG_CHECKING([which CRC-32C implementation to use])
1946 if test x"$USE_SSE42_CRC32C" = x"1"; then
1947 AC_DEFINE(USE_SSE42_CRC32C, 1, [Define to 1 use Intel SSE 4.2 CRC instructions.])
1948 PG_CRC32C_OBJS="pg_crc32c_sse42.o"
1949 AC_MSG_RESULT(SSE 4.2)
1951 if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then
1952 AC_DEFINE(USE_SSE42_CRC32C_WITH_RUNTIME_CHECK, 1, [Define to 1 to use Intel SSSE 4.2 CRC instructions with a runtime check.])
1953 PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_choose.o"
1954 AC_MSG_RESULT(SSE 4.2 with runtime check)
1956 AC_DEFINE(USE_SLICING_BY_8_CRC32C, 1, [Define to 1 to use Intel SSE 4.2 CRC instructions with a runtime check.])
1957 PG_CRC32C_OBJS="pg_crc32c_sb8.o"
1958 AC_MSG_RESULT(slicing-by-8)
1961 AC_SUBST(PG_CRC32C_OBJS)
1964 # Select semaphore implementation type.
1965 if test "$PORTNAME" != "win32"; then
1966 if test x"$USE_NAMED_POSIX_SEMAPHORES" = x"1" ; then
1967 AC_DEFINE(USE_NAMED_POSIX_SEMAPHORES, 1, [Define to select named POSIX semaphores.])
1968 SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c"
1970 if test x"$USE_UNNAMED_POSIX_SEMAPHORES" = x"1" ; then
1971 AC_DEFINE(USE_UNNAMED_POSIX_SEMAPHORES, 1, [Define to select unnamed POSIX semaphores.])
1972 SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c"
1974 AC_DEFINE(USE_SYSV_SEMAPHORES, 1, [Define to select SysV-style semaphores.])
1975 SEMA_IMPLEMENTATION="src/backend/port/sysv_sema.c"
1979 AC_DEFINE(USE_WIN32_SEMAPHORES, 1, [Define to select Win32-style semaphores.])
1980 SEMA_IMPLEMENTATION="src/backend/port/win32_sema.c"
1984 # Select shared-memory implementation type.
1985 if test "$PORTNAME" != "win32"; then
1986 AC_DEFINE(USE_SYSV_SHARED_MEMORY, 1, [Define to select SysV-style shared memory.])
1987 SHMEM_IMPLEMENTATION="src/backend/port/sysv_shmem.c"
1989 AC_DEFINE(USE_WIN32_SHARED_MEMORY, 1, [Define to select Win32-style shared memory.])
1990 SHMEM_IMPLEMENTATION="src/backend/port/win32_shmem.c"
1993 # If not set in template file, set bytes to use libc memset()
1994 if test x"$MEMSET_LOOP_LIMIT" = x"" ; then
1995 MEMSET_LOOP_LIMIT=1024
1997 AC_DEFINE_UNQUOTED(MEMSET_LOOP_LIMIT, ${MEMSET_LOOP_LIMIT}, [Define bytes to use libc memset().])
2000 if test "$enable_nls" = yes ; then
2004 # Check for Tcl configuration script tclConfig.sh
2005 if test "$with_tcl" = yes; then
2006 PGAC_PATH_TCLCONFIGSH([$with_tclconfig])
2007 PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH],
2008 [TCL_INCLUDE_SPEC,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD])
2009 AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one
2010 if test "$TCL_SHARED_BUILD" != 1; then
2011 AC_MSG_ERROR([cannot build PL/Tcl because Tcl is not a shared library
2012 Use --without-tcl to disable building PL/Tcl.])
2014 # now that we have TCL_INCLUDE_SPEC, we can check for <tcl.h>
2015 ac_save_CPPFLAGS=$CPPFLAGS
2016 CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS"
2017 AC_CHECK_HEADER(tcl.h, [], [AC_MSG_ERROR([header file <tcl.h> is required for Tcl])])
2018 CPPFLAGS=$ac_save_CPPFLAGS
2021 # check for <perl.h>
2022 if test "$with_perl" = yes; then
2023 ac_save_CPPFLAGS=$CPPFLAGS
2024 CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE"
2025 AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file <perl.h> is required for Perl])],
2026 [#include <EXTERN.h>])
2027 # While we're at it, check that we can link to libperl.
2028 # On most platforms, if perl.h is there then libperl.so will be too, but at
2029 # this writing Debian packages them separately. There is no known reason to
2030 # waste cycles on separate probes for the Tcl or Python libraries, though.
2031 pgac_save_LIBS=$LIBS
2032 LIBS="$perl_embed_ldflags"
2033 AC_MSG_CHECKING([for libperl])
2034 AC_LINK_IFELSE([AC_LANG_PROGRAM([
2037 ], [perl_alloc();])],
2038 [AC_MSG_RESULT(yes)],
2040 AC_MSG_ERROR([libperl library is required for Perl])])
2041 LIBS=$pgac_save_LIBS
2042 CPPFLAGS=$ac_save_CPPFLAGS
2045 # check for <Python.h>
2046 if test "$with_python" = yes; then
2047 ac_save_CPPFLAGS=$CPPFLAGS
2048 CPPFLAGS="$python_includespec $CPPFLAGS"
2049 AC_CHECK_HEADER(Python.h, [], [AC_MSG_ERROR([header file <Python.h> is required for Python])])
2050 CPPFLAGS=$ac_save_CPPFLAGS
2054 # Check for DocBook and tools
2058 PGAC_CHECK_DOCBOOK(4.2)
2059 PGAC_PATH_DOCBOOK_STYLESHEETS
2060 PGAC_PATH_COLLATEINDEX
2061 AC_CHECK_PROGS(DBTOEPUB, dbtoepub)
2062 AC_CHECK_PROGS(XMLLINT, xmllint)
2063 AC_CHECK_PROGS(XSLTPROC, xsltproc)
2064 AC_CHECK_PROGS(OSX, [osx sgml2xml sx])
2067 # Check for test tools
2069 if test "$enable_tap_tests" = yes; then
2070 AC_CHECK_PROGS(PROVE, prove)
2071 if test -z "$PROVE"; then
2072 AC_MSG_ERROR([prove not found])
2074 if test -z "$PERL"; then
2075 AC_MSG_ERROR([Perl not found])
2081 # We have to run the thread test near the end so we have all our symbols
2082 # defined. Cross compiling throws a warning.
2084 if test "$enable_thread_safety" = yes; then
2085 if test "$PORTNAME" != "win32"
2087 AC_MSG_CHECKING([thread safety of required library functions])
2091 CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE"
2092 LIBS="$LIBS $PTHREAD_LIBS"
2094 [AC_LANG_SOURCE([[#include "$srcdir/src/test/thread/thread_test.c"]])],
2095 [AC_MSG_RESULT(yes)],
2097 AC_MSG_ERROR([thread test program failed
2098 This platform is not thread-safe. Check the file 'config.log' or compile
2099 and run src/test/thread/thread_test for the exact reason.
2100 Use --disable-thread-safety to disable thread safety.])],
2101 [AC_MSG_RESULT(maybe)
2103 *** Skipping thread test program because of cross-compile build.
2104 *** Run the program in src/test/thread on the target machine.
2109 AC_MSG_WARN([*** skipping thread test on Win32])
2113 # If compiler will take -Wl,--as-needed (or various platform-specific
2114 # spellings thereof) then add that to LDFLAGS. This is much easier than
2115 # trying to filter LIBS to the minimum for each executable.
2116 # On (at least) some Red-Hat-derived systems, this switch breaks linking to
2117 # libreadline; therefore we postpone testing it until we know what library
2118 # dependencies readline has. The test code will try to link with $LIBS.
2119 if test "$with_readline" = yes; then
2120 link_test_func=readline
2125 if test "$PORTNAME" = "darwin"; then
2126 PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-dead_strip_dylibs], $link_test_func)
2127 elif test "$PORTNAME" = "openbsd"; then
2128 PGAC_PROG_CC_LDFLAGS_OPT([-Wl,-Bdynamic], $link_test_func)
2130 PGAC_PROG_CC_LDFLAGS_OPT([-Wl,--as-needed], $link_test_func)
2133 # Create compiler version string
2134 if test x"$GCC" = x"yes" ; then
2135 cc_string=`${CC} --version | sed q`
2136 case $cc_string in [[A-Za-z]]*) ;; *) cc_string="GCC $cc_string";; esac
2137 elif test x"$SUN_STUDIO_CC" = x"yes" ; then
2138 cc_string=`${CC} -V 2>&1 | sed q`
2143 AC_DEFINE_UNQUOTED(PG_VERSION_STR,
2144 ["PostgreSQL $PG_VERSION on $host, compiled by $cc_string, `expr $ac_cv_sizeof_void_p \* 8`-bit"],
2145 [A string containing the version number, platform, and C compiler])
2147 # Supply a numeric version string for use by 3rd party add-ons
2148 # awk -F is a regex on some platforms, and not on others, so make "." a tab
2149 [PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' |
2151 $AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"]
2152 AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number])
2153 AC_SUBST(PG_VERSION_NUM)
2156 # Begin output steps
2158 AC_MSG_NOTICE([using compiler=$cc_string])
2159 AC_MSG_NOTICE([using CFLAGS=$CFLAGS])
2160 AC_MSG_NOTICE([using CPPFLAGS=$CPPFLAGS])
2161 AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS])
2163 # prepare build tree if outside source tree
2164 # Note 1: test -ef might not exist, but it's more reliable than `pwd`.
2165 # Note 2: /bin/pwd might be better than shell's built-in at getting
2166 # a symlink-free name.
2167 if ( test "$srcdir" -ef . ) >/dev/null 2>&1 || test "`cd $srcdir && /bin/pwd`" = "`/bin/pwd`"; then
2171 if test "$no_create" != yes; then
2172 _AS_ECHO_N([preparing build tree... ])
2173 pgac_abs_top_srcdir=`cd "$srcdir" && pwd`
2174 $SHELL "$ac_aux_dir/prep_buildtree" "$pgac_abs_top_srcdir" "." \
2175 || AC_MSG_ERROR(failed)
2179 AC_SUBST(vpath_build)
2182 AC_CONFIG_FILES([GNUmakefile src/Makefile.global])
2185 src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c
2186 src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION}
2187 src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION}
2188 src/include/dynloader.h:src/backend/port/dynloader/${template}.h
2189 src/include/pg_config_os.h:src/include/port/${template}.h
2190 src/Makefile.port:src/makefiles/Makefile.${template}
2193 if test "$PORTNAME" = "win32"; then
2194 AC_CONFIG_COMMANDS([check_win32_symlinks],[
2195 # Links sometimes fail undetected on Mingw -
2196 # so here we detect it and warn the user
2197 for FILE in $CONFIG_LINKS
2199 # test -e works for symlinks in the MinGW console
2200 test -e `expr "$FILE" : '\([[^:]]*\)'` || AC_MSG_WARN([*** link for $FILE -- please fix by hand])
2205 AC_CONFIG_HEADERS([src/include/pg_config.h],
2207 # Update timestamp for pg_config.h (see Makefile.global)
2208 echo >src/include/stamp-h
2211 AC_CONFIG_HEADERS([src/include/pg_config_ext.h],
2213 # Update timestamp for pg_config_ext.h (see Makefile.global)
2214 echo >src/include/stamp-ext-h
2217 AC_CONFIG_HEADERS([src/interfaces/ecpg/include/ecpg_config.h],
2218 [echo >src/interfaces/ecpg/include/stamp-h])