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