OSDN Git Service

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