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