OSDN Git Service

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