]> granicus.if.org Git - postgresql/blob - configure.in
BufferAlloc() doesn't allocate write error buffers.
[postgresql] / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl Developers, please strive to achieve this order:
4 dnl
5 dnl 0. Initialization and options processing
6 dnl 1. Programs
7 dnl 2. Libraries
8 dnl 3. Header files
9 dnl 4. Types
10 dnl 5. Structures
11 dnl 6. Compiler characteristics
12 dnl 7. Functions, global variables
13 dnl 8. System services
14 dnl
15 dnl Read the Autoconf manual for details.
16
17 dnl The GNU folks apparently haven't heard that some people don't use
18 dnl Texinfo. Use this sorcery to use "docdir" instead of "infodir".
19 define([info], [doc])
20 define([infodir], [docdir])
21 AC_INIT(src/backend/access/common/heaptuple.c)
22 undefine([infodir])
23 undefine([info])
24
25 AC_PREFIX_DEFAULT(/usr/local/pgsql)
26 AC_CONFIG_HEADER(src/include/config.h)
27
28 AC_PREREQ(2.13)
29 AC_CONFIG_AUX_DIR(config)
30
31 VERSION='7.1devel'
32 AC_SUBST(VERSION)
33 AC_DEFINE_UNQUOTED(PG_VERSION, "$VERSION")
34
35 AC_CANONICAL_HOST
36
37 template=
38 AC_MSG_CHECKING([which template to use])
39
40 PGAC_ARG_REQ(with, template, [],
41 [
42   case $withval in
43     list)   echo; ls "$srcdir/src/template"; exit;;
44     *)      if test -f "$srcdir/src/template/$with_template" ; then
45               template=$withval
46             else
47               AC_MSG_ERROR([\`$withval' is not a valid template name. Use \`list' for a list.])
48             fi;;
49   esac
50 ],
51 [
52   # --with-template not given
53
54 case $host_os in
55      aix*) template=aix ;;
56     bsdi*) template=bsdi ;;
57   cygwin*) template=win ;;
58     dgux*) template=dgux ;;
59  freebsd*) template=freebsd ;;
60     hpux*) template=hpux ;;
61     irix*) template=irix5 ;;
62    linux*) template=linux ;;
63   netbsd*) template=netbsd ;;
64 nextstep*) template=nextstep ;;
65  openbsd*) template=openbsd ;;
66      osf*) template=osf ;;
67      qnx*) template=qnx4 ;;
68      sco*) template=sco ;;
69  solaris*)
70         case $host_cpu in
71           sparc) template=solaris_sparc ;;
72            i?86) template=solaris_i386 ;;
73         esac ;;
74    sunos*) template=sunos4 ;;
75  sysv4.2*)
76         case $host_vendor in
77           univel) template=univel ;;
78         esac ;;
79    sysv4*) template=svr4 ;;
80  sysv5uw*) template=unixware ;;
81   ultrix*) template=ultrix4 ;;
82 esac
83
84   if test x"$template" = x"" ; then
85     AC_MSG_ERROR([
86 *******************************************************************
87 PostgreSQL has apparently not been ported to your platform yet.
88 To try a manual configuration, look into the src/template directory
89 for a similar platform and use the \`--with-template=' option.
90
91 Please also contact <pgsql-ports@postgresql.org> to see about
92 rectifying this.  Include the above \`checking host system type...'
93 line.
94 *******************************************************************
95 ])
96   fi
97
98 ])
99
100 AC_MSG_RESULT([$template])
101
102 PORTNAME=$template
103 CPU=$host_cpu
104 AC_SUBST(PORTNAME)
105 AC_SUBST(CPU)
106
107 AC_LINK_FILES([src/backend/port/dynloader/${template}.c], [src/backend/port/dynloader.c])
108 AC_LINK_FILES([src/backend/port/dynloader/${template}.h], [src/include/dynloader.h])
109 AC_LINK_FILES([src/include/port/${template}.h], [src/include/os.h])
110 AC_LINK_FILES([src/makefiles/Makefile.${template}], [src/Makefile.port])
111
112 # Pick right test-and-set (TAS) code. Most platforms have inline
113 # assembler code in their port include file, so we just use a dummy
114 # file here.
115 tas_file=dummy.s
116 need_tas=no
117 case $template in
118   hpux)           need_tas=yes; tas_file=hpux.s ;;
119   solaris_sparc)  need_tas=yes; tas_file=solaris_sparc.s ;;
120   solaris_i386)   need_tas=yes; tas_file=solaris_i386.s ;;
121 esac
122
123 if test "$need_tas" = yes ; then
124   AC_LINK_FILES([src/backend/port/tas/${tas_file}], [src/backend/port/tas.s])
125   TAS=tas.o
126 fi
127 AC_SUBST(TAS)
128
129
130
131 ##
132 ## Command line options
133 ##
134
135
136 #
137 # Add non-standard directories to the include path
138 #
139 PGAC_ARG_REQ(with, includes, [  --with-includes=DIRS    look for additional header files in DIRS])
140
141
142 #
143 # Add non-standard directories to the library search path
144 #
145 PGAC_ARG_REQ(with, libraries, [  --with-libraries=DIRS   look for additional libraries in DIRS],
146              [LIBRARY_DIRS=$withval])
147
148 PGAC_ARG_REQ(with, libs,      [  --with-libs=DIRS        alternative spelling of --with-libraries],
149              [LIBRARY_DIRS=$withval])
150
151
152 #
153 # Locale (--enable-locale)
154 #
155 AC_MSG_CHECKING([whether to build with locale support])
156 PGAC_ARG_BOOL(enable, locale, no, [  --enable-locale         enable locale support],
157               [AC_DEFINE([USE_LOCALE], 1,
158                          [Set to 1 if you want LOCALE support (--enable-locale)])])
159 AC_MSG_RESULT([$enable_locale])
160
161
162 #
163 # Character set recode (--enable-recode)
164 #
165 AC_MSG_CHECKING([whether to build with recode support])
166 PGAC_ARG_BOOL(enable, recode, no, [  --enable-recode         enable character set recode support],
167               [AC_DEFINE([CYR_RECODE], 1,
168                          [Set to 1 if you want cyrillic recode support (--enable-recode)])])
169 AC_MSG_RESULT([$enable_recode])
170
171
172 #
173 # Multibyte support
174 #
175 MULTIBYTE=
176 AC_MSG_CHECKING([whether to build with multibyte character support])
177
178 PGAC_ARG_OPTARG(enable, multibyte, [  --enable-multibyte      enable multibyte character support],
179 [MULTIBYTE=SQL_ASCII],
180 [
181   case $enableval in
182     SQL_ASCII|EUC_JP|EUC_CN|EUC_KR|EUC_TW|UNICODE|MULE_INTERNAL|LATIN1|LATIN2|LATIN3|LATIN4|LATIN5|KOI8|WIN|ALT)
183       MULTIBYTE=$enableval;;
184     *)
185       AC_MSG_ERROR(
186 [argument to --enable-multibyte must be one of:
187   SQL_ASCII, EUC_JP, EUC_CN, EUC_KR, EUC_TW,
188   UNICODE, MULE_INTERNAL,
189   LATIN1, LATIN2, LATIN3, LATIN4, LATIN5,
190   KOI8, WIN, ALT
191 Or do not specify an argument to the option to use the default.]);;
192   esac
193 ],
194 [
195   AC_DEFINE(MULTIBYTE, 1, [Set to 1 if you want to use multibyte characters (--enable-multibyte)])
196   AC_MSG_RESULT([yes, default $MULTIBYTE])
197 ],
198 [AC_MSG_RESULT(no)])
199
200 AC_SUBST(MULTIBYTE)
201
202
203 #
204 # Default port number (--with-pgport), default 5432
205 #
206 AC_MSG_CHECKING([for default port number])
207 PGAC_ARG_REQ(with, pgport, [  --with-pgport=PORTNUM   change default port number [5432]],
208              [default_port=$withval],
209              [default_port=5432])
210 # Need both of these because backend wants an integer and frontend a string
211 AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port})
212 AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}")
213 AC_MSG_RESULT([$default_port])
214
215
216 #
217 # Maximum number of allowed connections (--with-maxbackends), default 32
218 #
219 AC_MSG_CHECKING([for default soft limit on number of connections])
220 PGAC_ARG_REQ(with, maxbackends, [  --with-maxbackends=N    set default maximum number of connections [32]],
221              [],
222              [with_maxbackends=32])
223 AC_MSG_RESULT([$with_maxbackends])
224 AC_DEFINE_UNQUOTED([DEF_MAXBACKENDS], [$with_maxbackends],
225                    [The default soft limit on the number of concurrent connections, i.e., the default for the postmaster -N switch (--with-maxbackends)])
226
227
228 #
229 # C compiler
230 #
231
232 # For historical reasons you can also use --with-CC to specify the C compiler
233 # to use, although the standard way to do this is to set the CC environment
234 # variable.
235 PGAC_ARG_REQ(with, CC, [], [CC=$with_CC])
236
237 # On AIX, default compiler to xlc.
238 if test "$template" = aix && test -z "$CC" ; then CC=xlc; fi
239
240 AC_PROG_CC
241 # Read the template
242 . "$srcdir/src/template/$template" || exit
243 echo "using CFLAGS=$CFLAGS"
244 # Check if the compiler still works with the template settings
245 AC_PROG_CC_WORKS
246 AC_EXEEXT
247 AC_PROG_CPP
248 AC_PROG_GCC_TRADITIONAL
249
250 AC_SUBST(GCC)
251 AC_SUBST(AROPT)
252 AC_SUBST(SHARED_LIB)
253 AC_SUBST(DLSUFFIX)
254 AC_SUBST(DL_LIB)
255
256 # Create compiler version string
257 if test x"$GCC" = x"yes" ; then
258   cc_string="GCC `${CC} --version`"
259 else
260   cc_string=$CC
261 fi
262 AC_DEFINE_UNQUOTED(PG_VERSION_STR, ["PostgreSQL $VERSION on $host, compiled by $cc_string"], [A canonical string containing the version number, platform, and C compiler])
263
264
265 #
266 # Automatic dependency tracking
267 #
268 PGAC_ARG_BOOL(enable, depend, no, [  --enable-depend         turn on automatic dependency tracking],
269               [autodepend=yes])
270 AC_SUBST(autodepend)
271
272
273 #
274 # --enable-debug adds -g to compiler flags
275 #
276 PGAC_ARG_BOOL(enable, debug, no, [  --enable-debug          build with debugging symbols (-g)],
277               [CFLAGS="$CFLAGS -g"])
278
279
280 #
281 # Enable assert checks
282 #
283 PGAC_ARG_BOOL(enable, cassert, no, [  --enable-cassert        enable assertion checks (for debugging)],
284               [AC_DEFINE([USE_ASSERT_CHECKING], 1,
285                          [Define to 1 to build with assertion checks])])
286
287
288 #
289 # Include directories
290 #
291 ac_save_IFS=$IFS
292 IFS=':'
293 # SRCH_INC comes from the template file
294 for dir in $with_includes $SRCH_INC; do
295   if test -d "$dir"; then
296     INCLUDES="$INCLUDES -I$dir"
297   else
298     AC_MSG_WARN([*** Include directory $dir does not exist.])
299   fi
300 done
301 IFS=$ac_save_IFS
302 AC_SUBST(INCLUDES)
303
304
305 #
306 # Library directories
307 #
308 ac_save_IFS=$IFS
309 IFS=':'
310 # LIBRARY_DIRS comes from command line, SRCH_LIB from template file.
311 for dir in $LIBRARY_DIRS $SRCH_LIB; do
312   if test -d "$dir"; then
313     PGSQL_LDFLAGS="$PGSQL_LDFLAGS -L$dir"
314   else
315     AC_MSG_WARN([*** Library directory $dir does not exist.])
316   fi
317 done
318 IFS=$ac_save_IFS
319
320
321 #
322 # Tcl/Tk
323 #
324 AC_MSG_CHECKING([whether to build with Tcl])
325 PGAC_ARG_BOOL(with, tcl, no, [  --with-tcl              build Tcl and Tk interfaces])
326 AC_MSG_RESULT([$with_tcl])
327 AC_SUBST([with_tcl])
328
329 # If Tcl is enabled (above) then Tk is also, unless the user disables it using --without-tk
330 AC_MSG_CHECKING([whether to build with Tk])
331 if test "$with_tcl" = yes; then
332   PGAC_ARG_BOOL(with, tk, yes, [  --without-tk            do not build Tk interfaces if Tcl is enabled])
333 else
334   with_tk=no
335 fi
336 AC_MSG_RESULT([$with_tk])
337 AC_SUBST([with_tk])
338
339
340 # We see if the path to the TCL/TK configuration scripts is specified.
341 # This will override the use of tclsh to find the paths to search.
342
343 PGAC_ARG_REQ(with, tclconfig, [  --with-tclconfig=DIR    tclConfig.sh and tkConfig.sh are in DIR])
344
345 # We see if the path to the TK configuration scripts is specified.
346 # This will override the use of tclsh to find the paths to search.
347
348 PGAC_ARG_REQ(with, tkconfig,  [  --with-tkconfig=DIR     tkConfig.sh is in DIR])
349
350
351 #
352 # Optionally build Perl modules (Pg.pm and PL/Perl)
353 #
354 AC_MSG_CHECKING([whether to build Perl modules])
355 PGAC_ARG_BOOL(with, perl, no, [  --with-perl             build Perl interface and PL/Perl])
356 AC_MSG_RESULT([$with_perl])
357 AC_SUBST(with_perl)
358
359
360 #
361 # Optionally build Python interface module
362 #
363 AC_MSG_CHECKING([whether to build Python modules])
364 PGAC_ARG_BOOL(with, python, no, [  --with-python           build Python interface module],
365 [AC_MSG_RESULT(yes)
366 PGAC_PROG_PYTHON
367 PGAC_PATH_PYTHONDIR],
368 [AC_MSG_RESULT(no)])
369 AC_SUBST(with_python)
370
371
372 dnl A note on the Kerberos and OpenSSL options:
373 dnl
374 dnl The user can give an argument to the option in order the specify
375 dnl the base path of the respective installation (what he specified
376 dnl perhaps as --prefix). If no argument is given ($withval is "yes")
377 dnl then we take the path where the package installs by default. This
378 dnl way the user doesn't have to use redundant --with-includes and
379 dnl --with-libraries options, but he can still use them if the layout
380 dnl is non-standard.
381
382 #
383 # Kerberos 4
384 #
385 PGAC_ARG_OPTARG(with, krb4, [  --with-krb4[=DIR]       build with Kerberos 4 support [/usr/athena]],
386                 [krb4_prefix=/usr/athena],
387                 [krb4_prefix=$withval],
388 [
389   AC_MSG_RESULT([building with Kerberos 4 support])
390   AC_DEFINE(KRB4, 1, [Define if you are building with Kerberos 4 support.])
391
392   if test -d "$krb4_prefix"; then
393     if test -d "$krb4_prefix/include"; then
394       INCLUDES="$INCLUDES -I$krb4_prefix/include"
395     fi
396     if test -d "$krb4_prefix/lib"; then
397       krb_libdir="-L$krb4_prefix/lib"
398       LIBS="$krb_libdir $LIBS"
399     fi
400   fi
401   # Test for these libraries is below
402   KRB_LIBS="$krb_libdir -lkrb -ldes"
403
404   krb_srvtab="/etc/srvtab"
405 ])
406
407 AC_SUBST(with_krb4)
408
409
410 #
411 # Kerberos 5
412 #
413 PGAC_ARG_OPTARG(with, krb5, [  --with-krb5[=DIR]       build with Kerberos 5 support [/usr/athena]],
414               [krb5_prefix=/usr/athena],
415               [krb5_prefix=$withval],
416 [
417   AC_MSG_RESULT([building with Kerberos 5 support])
418   AC_DEFINE(KRB5, 1, [Define if you are building with Kerberos 5 support.])
419
420   if test -d "$krb5_prefix"; then
421     if test -d "$krb5_prefix/include"; then
422       INCLUDES="$INCLUDES -I$krb5_prefix/include"
423     fi
424     if test -d "$krb5_prefix/lib"; then
425       krb_libdir="-L$krb5_prefix/lib"
426       LIBS="$krb_libdir $LIBS"
427     fi
428   fi
429
430   # Test for these libraries is below
431   KRB_LIBS="$krb_libdir -lkrb5 -lcrypto -lcom_err"
432
433   krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab"
434 ])
435
436 AC_SUBST(with_krb5)
437
438
439 # Using both Kerberos 4 and Kerberos 5 at the same time isn't going to work.
440 if test "$with_krb4" = yes && test "$with_krb5" = yes ; then
441   AC_MSG_ERROR([Kerberos 4 and Kerberos 5 support cannot be combined])
442 fi
443
444 AC_SUBST(krb_srvtab)
445 dnl Necessary for special libpq link
446 AC_SUBST(KRB_LIBS)
447
448
449 #
450 # Kerberos configuration parameters
451 #
452 PGAC_ARG_REQ(with, krb-srvnam,
453              [  --with-krb-srvnam=NAME  name of the PostgreSQL service principal in Kerberos [postgres]],
454              [],
455              [with_krb_srvnam="postgres"])
456 AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"],
457                    [The name of the PostgreSQL service principal in Kerberos])
458
459
460
461 #
462 # OpenSSL
463 #
464 PGAC_ARG_OPTARG(with, openssl,
465                 [  --with-openssl[=DIR]    build with OpenSSL support [/usr/local/ssl]],
466                 [openssl_prefix=/usr/local/ssl],
467                 [openssl_prefix=$withval],
468 [
469   AC_MSG_RESULT([building with OpenSSL support])
470   AC_DEFINE([USE_SSL], 1, [Define to build with (Open)SSL support])
471
472   if test -d "${openssl_prefix}/include" ; then
473     INCLUDES="$INCLUDES -I${openssl_prefix}/include"
474   fi
475   if test -d "${openssl_prefix}/lib" ; then
476     openssl_libdir="${openssl_prefix}/lib"
477     LIBS="$LIBS -L${openssl_prefix}/lib"
478   else
479     openssl_libdir="${openssl_prefix}"
480     LIBS="$LIBS -L${openssl_prefix}"
481   fi
482 ])
483
484 AC_SUBST(with_openssl)
485
486
487 # OpenSSL and Kerberos 5 both have a `crypto' library, so if you want to
488 # use both of them you'll have to figure it out yourself.
489 if test "$with_openssl" = yes && test "$with_krb5" = yes ; then
490   AC_MSG_ERROR([OpenSSL and Kerberos 5 support cannot be combined])
491 fi
492
493
494 #
495 # Optionally enable the building of the ODBC driver
496 #
497  
498 # Old option name
499 if test "${with_odbc+set}" = set && test "${enable_odbc+set}" != set; then
500   enable_odbc=$with_odbc
501 fi
502  
503 AC_MSG_CHECKING([whether to build the ODBC driver])
504 PGAC_ARG_BOOL(enable, odbc, no, [  --enable-odbc           build the ODBC driver package])
505 AC_MSG_RESULT([$enable_odbc])
506 AC_SUBST([enable_odbc])
507
508
509 # Allow for overriding the default location of the odbcinst.ini
510 # file which is normally ${sysconfdir} (i.e., ${prefix}/etc).
511 PGAC_ARG_REQ(with, odbcinst,
512              [  --with-odbcinst=DIR     default directory for odbcinst.ini [sysconfdir]],
513              [odbcinst_ini_dir=$withval],
514              [odbcinst_ini_dir="\${sysconfdir}"])
515 AC_SUBST([odbcinst_ini_dir])
516
517
518
519 # Assume system is ELF if it predefines __ELF__ as 1,
520 # otherwise believe host_os based default.
521 case $host_os in
522   freebsd1*|freebsd2*) elf=yes;;
523 esac
524
525 AC_EGREP_CPP(yes,
526 [#if __ELF__
527   yes
528 #endif
529 ],
530 [ELF_SYS=true],
531 [if test "X$elf" = "Xyes" ; then
532   ELF_SYS=true
533 else
534   ELF_SYS=
535 fi])
536 AC_SUBST(ELF_SYS)
537
538
539
540 #
541 # Optionally build C++ code (i.e., libpq++)
542 #
543 AC_MSG_CHECKING([whether to build C++ modules])
544 PGAC_ARG_OPTARG(with, CXX, [  --with-CXX              build C++ modules (libpq++)],
545                 [],
546                 [CXX=$withval],
547 [
548   AC_MSG_RESULT(yes)
549   AC_PROG_CXX
550   AC_PROG_CXXCPP
551   PGAC_CLASS_STRING
552   PGAC_CXX_NAMESPACE_STD
553 ],
554 [AC_MSG_RESULT(no)])
555 AC_SUBST(with_CXX)
556
557
558 CPPFLAGS="$CPPFLAGS $INCLUDES"
559 LDFLAGS="$LDFLAGS $PGSQL_LDFLAGS"
560
561 echo "using CPPFLAGS=$CPPFLAGS"
562 echo "using LDFLAGS=$LDFLAGS"
563
564
565 # Figure out how to invoke "install" and what install options to use.
566
567 AC_PROG_INSTALL
568 # When Autoconf chooses install-sh as install program it tries to generate
569 # a relative path to it in each makefile where it subsitutes it. This clashes
570 # with our Makefile.global concept. This workaround helps.
571 case $INSTALL in
572   *install-sh*) INSTALL='\${SHELL} \${top_srcdir}/config/install-sh -c';;
573 esac
574
575 # Fix Autoconf's brain-dead defaults for script installs.
576 INSTALL_SCRIPT="\${INSTALL} -m 755"
577
578 # HPUX wants shared libs to be mode 555. Add your platform's special
579 # needs here if necessary.
580 case $host_os in
581     hpux*)      INSTL_SHLIB_OPTS="-m 555" ;;
582     *)          INSTL_SHLIB_OPTS="-m 644" ;;
583 esac
584
585 INSTALL_SHLIB="\${INSTALL} $INSTL_SHLIB_OPTS"
586 AC_SUBST(INSTALL_SHLIB)
587
588
589 mkinstalldirs="\$(SHELL) \$(top_srcdir)/config/mkinstalldirs"
590 AC_SUBST(mkinstalldirs)
591
592
593 AC_PROG_AWK
594 PGAC_PATH_FLEX
595 AC_PROG_LN_S
596 AC_PROG_RANLIB
597 AC_PATH_PROG(tar, tar)
598 AC_CHECK_PROGS(PERL, perl,)
599 AC_PROG_YACC
600 AC_SUBST(YFLAGS)
601 if test "$with_tk" = yes; then
602     AC_PATH_PROG(WISH, wish)
603     test -z "$WISH" && AC_MSG_ERROR([\`wish' is required for Tk support])
604 fi
605
606
607 ##
608 ## Libraries
609 ##
610
611 AC_CHECK_LIB(sfio,     main)
612 AC_CHECK_LIB(ncurses,  main, [], [AC_CHECK_LIB(curses, main)])
613 AC_CHECK_LIB(termcap,  main)
614 AC_CHECK_LIB(readline, main)
615 AC_CHECK_LIB(readline, using_history, AC_DEFINE(HAVE_HISTORY_IN_READLINE),
616     AC_CHECK_LIB(history,  main) )
617
618 if test "$PORTNAME" != "aix" -a "$PORTNAME" != "alpha"
619 then
620         AC_CHECK_LIB(bsd,      main)
621 fi
622 AC_CHECK_LIB(util,     setproctitle)
623 AC_CHECK_LIB(m,        main)
624 AC_CHECK_LIB(dl,       main)
625 AC_CHECK_LIB(socket,   main)
626 AC_CHECK_LIB(nsl,      main)
627 AC_CHECK_LIB(ipc,      main)
628 AC_CHECK_LIB(IPC,      main)
629 AC_CHECK_LIB(lc,       main)
630 AC_CHECK_LIB(dld,      main)
631 AC_CHECK_LIB(ln,       main)
632 AC_CHECK_LIB(ld,       main)
633 AC_CHECK_LIB(compat,   main)
634 AC_CHECK_LIB(BSD,      main)
635 AC_CHECK_LIB(gen,      main)
636 AC_CHECK_LIB(PW,       main)
637 AC_SEARCH_LIBS(crypt,  crypt)
638 AC_CHECK_LIB(z,        inflate)
639
640 if test "$with_krb4" = yes ; then
641   AC_CHECK_LIB(des, [des_encrypt], [], [AC_MSG_ERROR([library \`des' is required for Kerberos 4])])
642   AC_CHECK_LIB(krb, [krb_sendauth], [], [AC_MSG_ERROR([library \`krb' is required for Kerberos 4])])
643 fi
644
645 if test "$with_krb5" = yes ; then
646   AC_CHECK_LIB(com_err, main, [], [AC_MSG_ERROR([library \`com_err' is required for Kerberos 5])])
647   AC_CHECK_LIB(crypto,  main, [], [AC_MSG_ERROR([library \`crypto' is required for Kerberos 5])])
648   AC_CHECK_LIB(krb5,    main, [], [AC_MSG_ERROR([library \`krb5' is required for Kerberos 5])])
649 fi
650
651 if test "$with_openssl" = yes ; then
652   dnl Order matters!
653   AC_CHECK_LIB(crypto, [CRYPTO_new_ex_data], [], [AC_MSG_ERROR([library \`ssl' is required for OpenSSL])])
654   AC_CHECK_LIB(ssl,    [SSL_library_init], [], [AC_MSG_ERROR([library \`ssl' is required for OpenSSL])])
655 fi
656
657
658 ##
659 ## Header files
660 ##
661 dnl sys/socket.h and sys/types.h are required by AC_FUNC_ACCEPT_ARGTYPES
662 AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h netinet/tcp.h pwd.h sys/pstat.h sys/select.h sys/socket.h sys/types.h sys/un.h termios.h])
663
664 AC_CHECK_HEADERS([readline/readline.h readline.h], [break])
665 AC_CHECK_HEADERS([readline/history.h history.h], [break])
666
667 if test "$with_krb4" = yes ; then
668   AC_CHECK_HEADER(krb.h, [], [AC_MSG_ERROR([header file <krb.h> is required for Kerberos 4])])
669 fi
670
671 if test "$with_krb5" = yes ; then
672   AC_CHECK_HEADER(krb5.h, [], [AC_MSG_ERROR([header file <krb5.h> is required for Kerberos 5])])
673   AC_CHECK_HEADER(com_err.h, [], [AC_MSG_ERROR([header file <com_err.h> is required for Kerberos 5])])
674 fi
675
676 if test "$with_openssl" = yes ; then
677   AC_CHECK_HEADER([openssl/ssl.h], [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])])
678   AC_CHECK_HEADER([openssl/err.h], [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])])
679 fi
680
681
682 ##
683 ## Types, structures, compiler characteristics
684 ##
685 AC_C_CONST
686 AC_C_INLINE
687 AC_C_STRINGIZE
688 PGAC_C_SIGNED
689 PGAC_C_VOLATILE
690 AC_STRUCT_TIMEZONE
691 PGAC_UNION_SEMUN
692 PGAC_STRUCT_SOCKADDR_UN
693
694 ##
695 ## Functions, global variables
696 ##
697 PGAC_VAR_INT_TIMEZONE
698 AC_FUNC_ACCEPT_ARGTYPES
699 PGAC_FUNC_GETTIMEOFDAY_1ARG
700
701 AC_MSG_CHECKING([for fcntl(F_SETLK)])
702 case $host_os in
703   linux*)       AC_MSG_RESULT([broken on Linux]) ;;
704   *)
705 AC_TRY_LINK(
706 [#include <stdio.h>
707 #include <fcntl.h>
708 ],
709 [struct flock lck;
710 lck.l_whence = SEEK_SET; lck.l_start = lck.l_len = 0;
711 lck.l_type = F_WRLCK;
712 fcntl(0, F_SETLK, &lck);],
713 [AC_DEFINE(HAVE_FCNTL_SETLK) AC_MSG_RESULT(yes)],
714 [AC_MSG_RESULT(no)])
715         ;;
716 esac
717
718 AC_CHECK_FUNCS([fcvt getopt_long memmove pstat setproctitle setsid sigprocmask sysconf waitpid])
719
720 AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
721 [AC_TRY_LINK(
722 [#include <machine/vmparam.h>
723 #include <sys/exec.h>
724 ],
725 [PS_STRINGS->ps_nargvstr = 1;
726 PS_STRINGS->ps_argvstr = "foo";],
727 [pgac_cv_var_PS_STRINGS=yes],
728 [pgac_cv_var_PS_STRINGS=no])])
729 if test "$pgac_cv_var_PS_STRINGS" = yes ; then
730   AC_DEFINE([HAVE_PS_STRINGS], [], [Define if the PS_STRINGS thing exists.])
731 fi
732
733 dnl We use our snprintf.c emulation if either snprintf() or vsnprintf()
734 dnl is missing.  Yes, there are machines that have only one.
735 dnl We may also decide to use snprintf.c if snprintf() is present but does
736 dnl not have working "long long int" support -- see below.
737 SNPRINTF=''
738 AC_CHECK_FUNC(snprintf,
739               AC_DEFINE(HAVE_SNPRINTF),
740               SNPRINTF='snprintf.o')
741 AC_CHECK_FUNC(vsnprintf,
742               AC_DEFINE(HAVE_VSNPRINTF),
743               SNPRINTF='snprintf.o')
744 AC_SUBST(SNPRINTF)
745 dnl Check whether <stdio.h> declares snprintf() and vsnprintf(); if not,
746 dnl include/c.h will provide declarations.  Note this is a separate test
747 dnl from whether the functions exist in the C library --- there are systems
748 dnl that have the functions but don't bother to declare them :-(
749 dnl Note: simple-minded pattern here will do wrong thing if stdio.h
750 dnl declares vsnprintf() but not snprintf().  Hopefully there are no
751 dnl systems that are *that* brain-damaged...
752 AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_DECL))
753 AC_EGREP_HEADER(vsnprintf, stdio.h, AC_DEFINE(HAVE_VSNPRINTF_DECL))
754
755 # do this one the hard way in case isinf() is a macro
756 AC_CACHE_CHECK([for isinf], ac_cv_func_isinf,
757 [AC_TRY_LINK(
758 [#include <math.h>
759 ],
760 [double x = 0.0; int res = isinf(x);],
761 [ac_cv_func_isinf=yes],
762 [ac_cv_func_isinf=no])])
763
764 if test $ac_cv_func_isinf = yes ; then
765   AC_DEFINE(HAVE_ISINF)
766   ISINF=
767 else
768   ISINF='isinf.o'
769   # Look for a way to implement a substitute for isinf()
770   AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
771 fi
772 AC_SUBST(ISINF)
773
774 AC_CHECK_FUNC(getrusage,
775               AC_DEFINE(HAVE_GETRUSAGE),
776               GETRUSAGE='getrusage.o')
777 AC_SUBST(GETRUSAGE)
778 AC_CHECK_FUNC(srandom,
779               AC_DEFINE(HAVE_SRANDOM),
780               SRANDOM='srandom.o')
781 AC_SUBST(SRANDOM)
782 AC_CHECK_FUNC(gethostname,
783               AC_DEFINE(HAVE_GETHOSTNAME),
784               GETHOSTNAME='gethostname.o')
785 AC_SUBST(GETHOSTNAME)
786 AC_CHECK_FUNC(random,
787               AC_DEFINE(HAVE_RANDOM),
788               MISSING_RANDOM='random.o')
789 AC_SUBST(MISSING_RANDOM)
790 AC_CHECK_FUNC(inet_aton,
791               AC_DEFINE(HAVE_INET_ATON),
792               INET_ATON='inet_aton.o')
793 AC_SUBST(INET_ATON)
794 AC_CHECK_FUNC(strerror,
795               AC_DEFINE(HAVE_STRERROR),
796               [STRERROR='strerror.o' STRERROR2='../../backend/port/strerror.o'])
797 AC_SUBST(STRERROR)
798 AC_SUBST(STRERROR2)
799 AC_CHECK_FUNC(strdup,
800               AC_DEFINE(HAVE_STRDUP),
801               STRDUP='../../utils/strdup.o')
802 AC_SUBST(STRDUP)
803 AC_CHECK_FUNC(strtol,
804               AC_DEFINE(HAVE_STRTOL),
805               STRTOL='strtol.o')
806 AC_SUBST(STRTOL)
807 AC_CHECK_FUNC(strtoul,
808               AC_DEFINE(HAVE_STRTOUL),
809               STRTOL='strtoul.o')
810 AC_SUBST(STRTOUL)
811 AC_CHECK_FUNC(strcasecmp,
812               AC_DEFINE(HAVE_STRCASECMP),
813               STRCASECMP='strcasecmp.o')
814 AC_SUBST(STRCASECMP)
815 AC_CHECK_FUNC(cbrt,
816               AC_DEFINE(HAVE_CBRT),
817               AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT)))
818
819 # On HPUX 9, rint() is not in regular libm.a but in /lib/pa1.1/libm.a;
820 # this hackery with HPUXMATHLIB allows us to cope.
821 HPUXMATHLIB=""
822 case $host_cpu in
823   hppa1.1) 
824         if [[ -r /lib/pa1.1/libm.a ]] ; then
825             HPUXMATHLIB="-L /lib/pa1.1 -lm"
826         fi ;;
827 esac
828 AC_SUBST(HPUXMATHLIB)
829
830 AC_CHECK_FUNC(rint,
831               AC_DEFINE(HAVE_RINT),
832               AC_CHECK_LIB(m, rint, AC_DEFINE(HAVE_RINT), , $HPUXMATHLIB))
833
834 dnl Some old versions of libreadline don't have rl_completion_append_character
835 AC_EGREP_HEADER(rl_completion_append_character, readline.h,
836         AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER),
837         [AC_EGREP_HEADER(rl_completion_append_character, readline/readline.h,
838                 AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER))])
839 AC_SUBST(HAVE_RL_COMPLETION_APPEND_CHARACTER)
840
841 dnl Check for readline's filename_completion_function.
842 dnl Some versions have it but it's not in the headers, so we have to take
843 dnl care of that, too.
844 AC_CHECK_FUNCS(filename_completion_function,
845     AC_EGREP_HEADER(filename_completion_function, readline.h,
846         AC_DEFINE(HAVE_FILENAME_COMPLETION_FUNCTION_DECL),
847         [AC_EGREP_HEADER(filename_completion_function, readline/readline.h,
848             AC_DEFINE(HAVE_FILENAME_COMPLETION_FUNCTION_DECL))])
849 )
850 AC_SUBST(HAVE_FILENAME_COMPLETION_FUNCTION)
851 AC_SUBST(HAVE_FILENAME_COMPLETION_FUNCTION_DECL)
852
853
854 dnl Cannot use AC_CHECK_FUNC because finite may be a macro
855 AC_MSG_CHECKING(for finite)
856 AC_TRY_LINK([#include <math.h>],
857         [int dummy=finite(1.0);],
858         [AC_DEFINE(HAVE_FINITE) AC_MSG_RESULT(yes)],
859         AC_MSG_RESULT(no))
860
861 dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro
862 dnl (especially on GNU libc)
863 dnl See also comments in config.h.
864 AC_MSG_CHECKING(for sigsetjmp)
865 AC_TRY_LINK([#include <setjmp.h>],
866         [sigjmp_buf x; sigsetjmp(x, 1);],
867         [AC_DEFINE(HAVE_SIGSETJMP) AC_MSG_RESULT(yes)],
868         AC_MSG_RESULT(no))
869
870
871 PGAC_ARG_BOOL(enable, syslog, no, [  --enable-syslog         enable logging to syslog],
872               [AC_CHECK_FUNC(syslog,
873                              [AC_DEFINE([ENABLE_SYSLOG], 1,
874                                         [Define to 1 if to enable the syslogging code])],
875                              [AC_MSG_ERROR([no syslog interface found])])])
876
877
878 dnl Check to see if we have a working 64-bit integer type.
879 dnl This breaks down into two steps:
880 dnl (1) figure out if the compiler has a 64-bit int type with working
881 dnl arithmetic, and if so
882 dnl (2) see whether snprintf() can format the type correctly.  (Currently,
883 dnl snprintf is the only library routine we really need for int8 support.)
884 dnl It's entirely possible to have a compiler that handles a 64-bit type
885 dnl when the C library doesn't; this is fairly likely when using gcc on
886 dnl an older platform, for example.
887 dnl If there is no native snprintf() or it does not handle the 64-bit type,
888 dnl we force our own version of snprintf() to be used instead.
889 dnl Note this test must be run after our initial check for snprintf/vsnprintf.
890
891 PGAC_TYPE_64BIT_INT([long int])
892
893 if test x"$HAVE_LONG_INT_64" = x"no" ; then
894   PGAC_TYPE_64BIT_INT([long long int])
895 fi
896
897
898 dnl If we found "long int" is 64 bits, assume snprintf handles it.
899 dnl If we found we need to use "long long int", better check.
900 dnl We cope with snprintfs that use either %lld or %qd as the format.
901 dnl If neither works, fall back to our own snprintf emulation (which we
902 dnl know uses %lld).
903
904 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
905   if [[ x$SNPRINTF = x ]] ; then
906     AC_MSG_CHECKING(whether snprintf handles 'long long int' as %lld)
907     AC_TRY_RUN([#include <stdio.h>
908 typedef long long int int64;
909 #define INT64_FORMAT "%lld"
910
911 int64 a = 20000001;
912 int64 b = 40000005;
913
914 int does_int64_snprintf_work()
915 {
916   int64 c;
917   char buf[100];
918
919   if (sizeof(int64) != 8)
920     return 0;                   /* doesn't look like the right size */
921
922   c = a * b;
923   snprintf(buf, 100, INT64_FORMAT, c);
924   if (strcmp(buf, "800000140000005") != 0)
925     return 0;                   /* either multiply or snprintf is busted */
926   return 1;
927 }
928 main() {
929   exit(! does_int64_snprintf_work());
930 }],
931         [ AC_MSG_RESULT(yes)
932           INT64_FORMAT='"%lld"'
933         ],
934   [ AC_MSG_RESULT(no)
935     AC_MSG_CHECKING(whether snprintf handles 'long long int' as %qd) 
936     AC_TRY_RUN([#include <stdio.h>
937 typedef long long int int64;
938 #define INT64_FORMAT "%qd"
939    
940 int64 a = 20000001;
941 int64 b = 40000005;
942    
943 int does_int64_snprintf_work()
944 {  
945   int64 c;
946   char buf[100];
947
948   if (sizeof(int64) != 8)
949     return 0;     /* doesn't look like the right size */
950
951   c = a * b;
952   snprintf(buf, 100, INT64_FORMAT, c);
953   if (strcmp(buf, "800000140000005") != 0)
954     return 0;     /* either multiply or snprintf is busted */
955   return 1;
956 }
957 main() {
958   exit(! does_int64_snprintf_work());
959 }],
960   [ AC_MSG_RESULT(yes)
961     INT64_FORMAT='"%qd"'
962   ],
963   [ AC_MSG_RESULT(no)
964         # Force usage of our own snprintf, since system snprintf is broken
965         SNPRINTF='snprintf.o'
966         INT64_FORMAT='"%lld"'
967   ],
968   [ AC_MSG_RESULT(assuming not on target machine)
969         # Force usage of our own snprintf, since we cannot test foreign snprintf
970         SNPRINTF='snprintf.o'
971         INT64_FORMAT='"%lld"'
972   ]) ],
973   [ AC_MSG_RESULT(assuming not on target machine)
974         # Force usage of our own snprintf, since we cannot test foreign snprintf
975         SNPRINTF='snprintf.o'
976         INT64_FORMAT='"%lld"'
977   ])
978   else
979     # here if we previously decided we needed to use our own snprintf
980     INT64_FORMAT='"%lld"'
981   fi
982 else
983   # Here if we are not using 'long long int' at all
984   INT64_FORMAT='"%ld"'
985 fi
986
987 AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT)
988
989
990 dnl Determine memory alignment requirements for the basic C datatypes.
991
992 PGAC_CHECK_ALIGNOF(short)
993 PGAC_CHECK_ALIGNOF(int)
994 PGAC_CHECK_ALIGNOF(long)
995 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
996   PGAC_CHECK_ALIGNOF(long long int)
997 fi
998 PGAC_CHECK_ALIGNOF(double)
999
1000 dnl Compute maximum alignment of any basic type.
1001 dnl We assume long's alignment is at least as strong as char, short, or int;
1002 dnl but we must check long long (if it exists) and double.
1003
1004 if test $pgac_cv_alignof_double != 'sizeof(double)' ; then
1005   MAX_ALIGNOF=$pgac_cv_alignof_long
1006   if test $MAX_ALIGNOF -lt $pgac_cv_alignof_double ; then
1007     MAX_ALIGNOF=$pgac_cv_alignof_double
1008   fi
1009   if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $pgac_cv_alignof_long_long_int ; then
1010     MAX_ALIGNOF="$pgac_cv_alignof_long_long_int"
1011   fi
1012 else
1013   dnl cross-compiling: assume that double's alignment is worst case
1014   MAX_ALIGNOF="$pgac_cv_alignof_double"
1015 fi
1016 AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any type])
1017
1018 PGAC_FUNC_POSIX_SIGNALS
1019
1020
1021 # Check for Tcl configuration script tclConfig.sh
1022 if test "$with_tcl" = yes; then
1023     PGAC_PATH_TCLCONFIGSH([$with_tclconfig])
1024 fi
1025
1026 # Check for Tk configuration script tkConfig.sh
1027 if test "$with_tk" = yes; then
1028     PGAC_PATH_TKCONFIGSH([$with_tkconfig $with_tclconfig])
1029 fi
1030
1031
1032 # Finally ready to produce output files ...
1033
1034 AC_OUTPUT(
1035 [
1036   GNUmakefile
1037   src/GNUmakefile
1038   src/Makefile.global
1039   src/backend/port/Makefile
1040 ],
1041 [echo "timestamp file" > src/include/stamp-h]
1042 )