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