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