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