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