]> granicus.if.org Git - postgresql/blob - configure.in
Final markup for 7.1 hardcopy release. Mostly typo and table-fitting
[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.1'
32 AC_SUBST(VERSION)
33 AC_DEFINE_UNQUOTED(PG_VERSION, "$VERSION")
34
35 unset CDPATH
36
37 AC_CANONICAL_HOST
38 AC_SUBST(host)
39 AC_SUBST(host_cpu)
40 AC_SUBST(host_os)
41
42 template=
43 AC_MSG_CHECKING([which template to use])
44
45 PGAC_ARG_REQ(with, template, [],
46 [
47   case $withval in
48     list)   echo; ls "$srcdir/src/template"; exit;;
49     *)      if test -f "$srcdir/src/template/$with_template" ; then
50               template=$withval
51             else
52               AC_MSG_ERROR(['$withval' is not a valid template name. Use 'list' for a list.])
53             fi;;
54   esac
55 ],
56 [
57   # --with-template not given
58
59 case $host_os in
60      aix*) template=aix ;;
61     beos*) template=beos ;;
62     bsdi*) template=bsdi ;;
63   cygwin*) template=win ;;
64   darwin*) template=darwin ;;
65     dgux*) template=dgux ;;
66  freebsd*) template=freebsd ;;
67     hpux*) template=hpux ;;
68     irix*) template=irix5 ;;
69    linux*) template=linux ;;
70   netbsd*) template=netbsd ;;
71 nextstep*) template=nextstep ;;
72  openbsd*) template=openbsd ;;
73      osf*) template=osf ;;
74      qnx*) template=qnx4 ;;
75      sco*) template=sco ;;
76  solaris*) template=solaris ;;
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 src/include/storage/s_lock.h, so we just use
115 # a dummy file here.
116 case $host in
117   *-*-hpux*)        need_tas=yes; tas_file=hpux.s ;;
118   sparc-*-solaris*) need_tas=yes; tas_file=solaris_sparc.s ;;
119   i?86-*-solaris)   need_tas=yes; tas_file=solaris_i386.s ;;
120   *)                need_tas=no;  tas_file=dummy.s ;;
121 esac
122 AC_LINK_FILES([src/backend/port/tas/${tas_file}], [src/backend/port/tas.s])
123
124 if test "$need_tas" = yes ; then
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 # Unicode conversion (--enable-unicode-conversion)
204 #
205 AC_MSG_CHECKING([whether to build with Unicode conversion support])
206 PGAC_ARG_BOOL(enable, unicode-conversion, no,
207               [  --enable-unicode-conversion  enable unicode conversion support],
208 [if test -z "$MULTIBYTE"; then
209   AC_MSG_ERROR([--enable-unicode-conversion only works with --enable-multibyte])
210 fi
211 AC_DEFINE([UNICODE_CONVERSION], 1,
212           [Set to 1 if you want Unicode conversion support (--enable-unicode-conversion)])])
213 AC_MSG_RESULT([$enable_unicode_conversion])
214
215 #
216 # Default port number (--with-pgport), default 5432
217 #
218 AC_MSG_CHECKING([for default port number])
219 PGAC_ARG_REQ(with, pgport, [  --with-pgport=PORTNUM   change default port number [5432]],
220              [default_port=$withval],
221              [default_port=5432])
222 AC_MSG_RESULT([$default_port])
223 # Need both of these because some places want an integer and some a string
224 AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port})
225 AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}")
226 AC_SUBST(default_port)
227
228 #
229 # Maximum number of allowed connections (--with-maxbackends), default 32
230 #
231 AC_MSG_CHECKING([for default soft limit on number of connections])
232 PGAC_ARG_REQ(with, maxbackends, [  --with-maxbackends=N    set default maximum number of connections [32]],
233              [],
234              [with_maxbackends=32])
235 AC_MSG_RESULT([$with_maxbackends])
236 AC_DEFINE_UNQUOTED([DEF_MAXBACKENDS], [$with_maxbackends],
237                    [The default soft limit on the number of concurrent connections, i.e., the default for the postmaster -N switch (--with-maxbackends)])
238
239
240 #
241 # Option to disable shared libraries
242 #
243 PGAC_ARG_BOOL(enable, shared, yes,
244               [  --disable-shared        do not build shared libraries])
245 AC_SUBST(enable_shared)
246
247 #
248 # '-rpath'-like feature can be disabled
249 #
250 PGAC_ARG_BOOL(enable, rpath, yes,
251               [  --disable-rpath         do not embed shared library search path in executables])
252 AC_SUBST(enable_rpath)
253
254
255 #
256 # --enable-debug adds -g to compiler flags
257 #
258 PGAC_ARG_BOOL(enable, debug, no,
259               [  --enable-debug          build with debugging symbols (-g)])
260
261
262 #
263 # C compiler
264 #
265
266 # For historical reasons you can also use --with-CC to specify the C compiler
267 # to use, although the standard way to do this is to set the CC environment
268 # variable.
269 PGAC_ARG_REQ(with, CC, [], [CC=$with_CC])
270
271 # On AIX, default compiler to xlc.
272 if test "$template" = aix && test -z "$CC" ; then CC=xlc; fi
273
274 # Save CFLAGS from the environment
275 has_environ_CFLAGS="${CFLAGS+yes}"
276 save_CFLAGS=$CFLAGS
277
278 AC_PROG_CC
279 # Read the template
280 . "$srcdir/src/template/$template" || exit
281
282 if test "$has_environ_CFLAGS" = yes; then
283   CFLAGS=$save_CFLAGS
284 fi
285 if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then
286   CFLAGS="$CFLAGS -g"
287 fi
288 echo "using CFLAGS=$CFLAGS"
289 # Check if the compiler still works with the template settings
290 AC_PROG_CC_WORKS
291 AC_EXEEXT
292 AC_PROG_CPP
293 AC_PROG_GCC_TRADITIONAL
294 AC_SUBST(GCC)
295
296 # Create compiler version string
297 if test x"$GCC" = x"yes" ; then
298   cc_string="GCC `${CC} --version`"
299 else
300   cc_string=$CC
301 fi
302 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])
303
304
305 #
306 # Automatic dependency tracking
307 #
308 PGAC_ARG_BOOL(enable, depend, no, [  --enable-depend         turn on automatic dependency tracking],
309               [autodepend=yes])
310 AC_SUBST(autodepend)
311
312
313 #
314 # Enable assert checks
315 #
316 PGAC_ARG_BOOL(enable, cassert, no, [  --enable-cassert        enable assertion checks (for debugging)],
317               [AC_DEFINE([USE_ASSERT_CHECKING], 1,
318                          [Define to 1 to build with assertion checks])])
319
320
321 #
322 # Include directories
323 #
324 ac_save_IFS=$IFS
325 IFS="${IFS}:"
326 # SRCH_INC comes from the template file
327 for dir in $with_includes $SRCH_INC; do
328   if test -d "$dir"; then
329     INCLUDES="$INCLUDES -I$dir"
330   else
331     AC_MSG_WARN([*** Include directory $dir does not exist.])
332   fi
333 done
334 IFS=$ac_save_IFS
335 AC_SUBST(INCLUDES)
336
337
338 #
339 # Library directories
340 #
341 ac_save_IFS=$IFS
342 IFS="${IFS}:"
343 # LIBRARY_DIRS comes from command line, SRCH_LIB from template file.
344 for dir in $LIBRARY_DIRS $SRCH_LIB; do
345   if test -d "$dir"; then
346     LIBDIRS="$LIBDIRS -L$dir"
347   else
348     AC_MSG_WARN([*** Library directory $dir does not exist.])
349   fi
350 done
351 IFS=$ac_save_IFS
352
353
354 #
355 # Tcl/Tk
356 #
357 AC_MSG_CHECKING([whether to build with Tcl])
358 PGAC_ARG_BOOL(with, tcl, no, [  --with-tcl              build Tcl and Tk interfaces])
359 AC_MSG_RESULT([$with_tcl])
360 AC_SUBST([with_tcl])
361
362 # If Tcl is enabled (above) then Tk is also, unless the user disables it using --without-tk
363 AC_MSG_CHECKING([whether to build with Tk])
364 if test "$with_tcl" = yes; then
365   PGAC_ARG_BOOL(with, tk, yes, [  --without-tk            do not build Tk interfaces if Tcl is enabled])
366 else
367   with_tk=no
368 fi
369 AC_MSG_RESULT([$with_tk])
370 AC_SUBST([with_tk])
371
372
373 # We see if the path to the TCL/TK configuration scripts is specified.
374 # This will override the use of tclsh to find the paths to search.
375
376 PGAC_ARG_REQ(with, tclconfig, [  --with-tclconfig=DIR    tclConfig.sh and tkConfig.sh are in DIR])
377
378 # We see if the path to the TK configuration scripts is specified.
379 # This will override the use of tclsh to find the paths to search.
380
381 PGAC_ARG_REQ(with, tkconfig,  [  --with-tkconfig=DIR     tkConfig.sh is in DIR])
382
383
384 #
385 # Optionally build Perl modules (Pg.pm and PL/Perl)
386 #
387 AC_MSG_CHECKING([whether to build Perl modules])
388 PGAC_ARG_BOOL(with, perl, no, [  --with-perl             build Perl interface and PL/Perl])
389 AC_MSG_RESULT([$with_perl])
390 AC_SUBST(with_perl)
391
392
393 #
394 # Optionally build Python interface module
395 #
396 AC_MSG_CHECKING([whether to build Python modules])
397 PGAC_ARG_BOOL(with, python, no, [  --with-python           build Python interface module],
398 [AC_MSG_RESULT(yes)
399 PGAC_PROG_PYTHON
400 PGAC_PATH_PYTHONDIR],
401 [AC_MSG_RESULT(no)])
402 AC_SUBST(with_python)
403
404 #
405 # Optionally build the Java/JDBC tools
406 #
407 AC_MSG_CHECKING([whether to build Java/JDBC tools])
408 PGAC_ARG_BOOL(with, java, no, [  --with-java             build JDBC interface and Java tools],
409 [AC_MSG_RESULT(yes)
410 PGAC_PATH_ANT
411 if test -z "$ANT"; then
412   AC_MSG_ERROR([Ant is required to build Java components])
413 fi],
414 [AC_MSG_RESULT(no)])
415 AC_SUBST(with_java)
416
417 dnl A note on the Kerberos and OpenSSL options:
418 dnl
419 dnl The user can give an argument to the option in order the specify
420 dnl the base path of the respective installation (what he specified
421 dnl perhaps as --prefix). If no argument is given ($withval is "yes")
422 dnl then we take the path where the package installs by default. This
423 dnl way the user doesn't have to use redundant --with-includes and
424 dnl --with-libraries options, but he can still use them if the layout
425 dnl is non-standard.
426
427 #
428 # Kerberos 4
429 #
430 PGAC_ARG_OPTARG(with, krb4, [  --with-krb4[=DIR]       build with Kerberos 4 support [/usr/athena]],
431                 [krb4_prefix=/usr/athena],
432                 [krb4_prefix=$withval],
433 [
434   AC_MSG_RESULT([building with Kerberos 4 support])
435   AC_DEFINE(KRB4, 1, [Define if you are building with Kerberos 4 support.])
436
437   if test -d "$krb4_prefix/include"; then
438     INCLUDES="$INCLUDES -I$krb4_prefix/include"
439   fi
440   if test -d "$krb4_prefix/lib"; then
441     LIBDIRS="$LIBDIRS -L$krb4_prefix/lib"
442   fi
443
444   krb_srvtab="/etc/srvtab"
445 ])
446
447 AC_SUBST(with_krb4)
448
449
450 #
451 # Kerberos 5
452 #
453 PGAC_ARG_OPTARG(with, krb5, [  --with-krb5[=DIR]       build with Kerberos 5 support [/usr/athena]],
454               [krb5_prefix=/usr/athena],
455               [krb5_prefix=$withval],
456 [
457   AC_MSG_RESULT([building with Kerberos 5 support])
458   AC_DEFINE(KRB5, 1, [Define if you are building with Kerberos 5 support.])
459
460   if test -d "$krb5_prefix/include"; then
461     INCLUDES="$INCLUDES -I$krb5_prefix/include"
462   fi
463   if test -d "$krb5_prefix/lib"; then
464     LIBDIRS="$LIBDIRS -L$krb5_prefix/lib"
465   fi
466
467   krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab"
468 ])
469
470 AC_SUBST(with_krb5)
471
472
473 # Using both Kerberos 4 and Kerberos 5 at the same time isn't going to work.
474 if test "$with_krb4" = yes && test "$with_krb5" = yes ; then
475   AC_MSG_ERROR([Kerberos 4 and Kerberos 5 support cannot be combined])
476 fi
477
478 AC_SUBST(krb_srvtab)
479
480
481 #
482 # Kerberos configuration parameters
483 #
484 PGAC_ARG_REQ(with, krb-srvnam,
485              [  --with-krb-srvnam=NAME  name of the service principal in Kerberos [postgres]],
486              [],
487              [with_krb_srvnam="postgres"])
488 AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"],
489                    [The name of the PostgreSQL service principal in Kerberos])
490
491
492
493 #
494 # OpenSSL
495 #
496 PGAC_ARG_OPTARG(with, openssl,
497                 [  --with-openssl[=DIR]    build with OpenSSL support [/usr/local/ssl]],
498                 [openssl_prefix=/usr/local/ssl],
499                 [openssl_prefix=$withval],
500 [
501   AC_MSG_RESULT([building with OpenSSL support])
502   AC_DEFINE([USE_SSL], 1, [Define to build with (Open)SSL support])
503
504   if test -d "${openssl_prefix}/include" ; then
505     INCLUDES="$INCLUDES -I${openssl_prefix}/include"
506   fi
507   if test -d "${openssl_prefix}/lib" ; then
508     LIBDIRS="$LIBDIRS -L${openssl_prefix}/lib"
509   fi
510 ])
511
512 AC_SUBST(with_openssl)
513
514
515
516 #
517 # Optionally enable the building of the ODBC driver
518 #
519  
520 # Old option name
521 if test "${with_odbc+set}" = set && test "${enable_odbc+set}" != set; then
522   enable_odbc=$with_odbc
523 fi
524  
525 AC_MSG_CHECKING([whether to build the ODBC driver])
526 PGAC_ARG_BOOL(enable, odbc, no, [  --enable-odbc           build the ODBC driver package])
527 AC_MSG_RESULT([$enable_odbc])
528 AC_SUBST([enable_odbc])
529
530
531 # Allow for overriding the default location of the odbcinst.ini
532 # file which is normally ${sysconfdir} (i.e., ${prefix}/etc).
533 PGAC_ARG_REQ(with, odbcinst,
534              [  --with-odbcinst=DIR     default directory for odbcinst.ini [sysconfdir]],
535              [odbcinst_ini_dir=$withval],
536              [odbcinst_ini_dir="\${sysconfdir}"])
537 AC_SUBST([odbcinst_ini_dir])
538
539
540
541 # Assume system is ELF if it predefines __ELF__ as 1,
542 # otherwise believe host_os based default.
543 case $host_os in
544   freebsd1*|freebsd2*) elf=yes;;
545 esac
546
547 AC_EGREP_CPP(yes,
548 [#if __ELF__
549   yes
550 #endif
551 ],
552 [ELF_SYS=true],
553 [if test "X$elf" = "Xyes" ; then
554   ELF_SYS=true
555 else
556   ELF_SYS=
557 fi])
558 AC_SUBST(ELF_SYS)
559
560
561
562 #
563 # Optionally build C++ code (i.e., libpq++)
564 #
565 AC_MSG_CHECKING([whether to build C++ modules])
566 PGAC_ARG_OPTARG(with, CXX, [  --with-CXX              build C++ modules (libpq++)],
567                 [],
568                 [CXX=$withval],
569 [
570   AC_MSG_RESULT(yes)
571
572   # If the user has specified CXXFLAGS in the environment, leave it
573   # alone, else use a default.
574
575   has_environ_CXXFLAGS="${CXXFLAGS+yes}"
576   AC_PROG_CXX
577   if test "$has_environ_CXXFLAGS" != yes; then
578     if test "$GXX" = yes; then
579       CXXFLAGS=-O2
580     else
581       case $template in
582         osf)            CXXFLAGS='-O4 -Olimit 2000' ;;
583         unixware)       CXXFLAGS='-O' ;;
584         *)              CXXFLAGS= ;;
585       esac
586     fi
587   fi
588   if test "$enable_debug" = yes && test "$ac_cv_prog_cxx_g" = yes; then
589     CXXFLAGS="$CXXFLAGS -g"
590   fi
591   echo "using CXXFLAGS=$CXXFLAGS"
592
593   AC_PROG_CXXCPP
594   AC_SUBST(GXX)
595   PGAC_CLASS_STRING
596   PGAC_CXX_NAMESPACE_STD
597 ],
598 [AC_MSG_RESULT(no)])
599 AC_SUBST(with_CXX)
600
601 CPPFLAGS="$CPPFLAGS $INCLUDES"
602 LDFLAGS="$LDFLAGS $LIBDIRS"
603
604 echo "using CPPFLAGS=$CPPFLAGS"
605 echo "using LDFLAGS=$LDFLAGS"
606
607
608 AC_PROG_AWK
609 PGAC_PATH_FLEX
610 AC_PROG_LN_S
611 AC_PROG_LD
612 AC_SUBST(LD)
613 AC_SUBST(with_gnu_ld)
614 case $host_os in sysv5uw*)
615   AC_CACHE_CHECK([whether ld -R works], [pgac_cv_prog_ld_R],
616   [
617     pgac_save_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -Wl,-R/usr/lib"
618     AC_TRY_LINK([], [], [pgac_cv_prog_ld_R=yes], [pgac_cv_prog_ld_R=no])
619     LDFLAGS=$pgac_save_LDFLAGS
620   ])
621   ld_R_works=$pgac_cv_prog_ld_R
622   AC_SUBST(ld_R_works)
623 esac
624 AC_PROG_RANLIB
625 AC_CHECK_PROGS(LORDER, lorder)
626 AC_PATH_PROG(TAR, tar)
627 AC_CHECK_PROGS(PERL, perl)
628
629 AC_CHECK_PROGS(YACC, ['bison -y'])
630 if test -z "$YACC"; then
631   AC_MSG_WARN([
632 *** Without Bison you will not be able to build PostgreSQL from CVS or
633 *** change any of the parser definition files.  You can obtain Bison from
634 *** a GNU mirror site.  (If you are using the official distribution of
635 *** PostgreSQL then you do not need to worry about this because the Bison
636 *** output is pre-generated.)  To use a different yacc program (possible,
637 *** but not recommended), set the environment variable YACC before running
638 *** 'configure'.])
639 fi
640 AC_SUBST(YFLAGS)
641
642 if test "$with_tk" = yes; then
643     AC_PATH_PROG(WISH, wish)
644     test -z "$WISH" && AC_MSG_ERROR(['wish' is required for Tk support])
645 fi
646
647
648 ##
649 ## Libraries
650 ##
651
652 PGAC_CHECK_READLINE
653 AC_SEARCH_LIBS(using_history, history, [AC_DEFINE(HAVE_HISTORY_FUNCTIONS)])
654
655 if test "$PORTNAME" != "aix" -a "$PORTNAME" != "alpha"
656 then
657         AC_CHECK_LIB(bsd,      main)
658 fi
659 AC_CHECK_LIB(util,     setproctitle)
660 AC_CHECK_LIB(m,        main)
661 AC_CHECK_LIB(dl,       main)
662 AC_CHECK_LIB(socket,   main)
663 AC_CHECK_LIB(nsl,      main)
664 AC_CHECK_LIB(ipc,      main)
665 AC_CHECK_LIB(IPC,      main)
666 AC_CHECK_LIB(lc,       main)
667 AC_CHECK_LIB(dld,      main)
668 AC_CHECK_LIB(ld,       main)
669 AC_CHECK_LIB(compat,   main)
670 AC_CHECK_LIB(BSD,      main)
671 AC_CHECK_LIB(gen,      main)
672 AC_CHECK_LIB(PW,       main)
673 AC_CHECK_LIB(resolv,   main)
674 AC_CHECK_LIB([[unix]], main)
675 AC_SEARCH_LIBS(crypt,  crypt)
676 AC_CHECK_LIB(bind,     __inet_ntoa)
677 dnl only consider libz to be present if we find <zlib.h> as well
678 AC_CHECK_HEADER(zlib.h, [
679 AC_CHECK_LIB(z,        inflate)
680 ])
681
682
683 if test "$with_krb4" = yes ; then
684   AC_CHECK_LIB(des, [des_encrypt], [], [AC_MSG_ERROR([library 'des' is required for Kerberos 4])])
685   AC_CHECK_LIB(krb, [krb_sendauth], [], [AC_MSG_ERROR([library 'krb' is required for Kerberos 4])])
686 fi
687
688 if test "$with_krb5" = yes ; then
689   AC_CHECK_LIB(com_err, [com_err], [], [AC_MSG_ERROR([library 'com_err' is required for Kerberos 5])])
690   AC_CHECK_LIB(crypto,  [krb5_encrypt], [],
691     [AC_CHECK_LIB(k5crypto, [krb5_encrypt], [], [AC_MSG_ERROR([library 'crypto' or 'k5crypto' is required for Kerberos 5])])])
692   AC_CHECK_LIB(krb5,    [krb5_sendauth], [], [AC_MSG_ERROR([library 'krb5' is required for Kerberos 5])])
693 fi
694
695 if test "$with_openssl" = yes ; then
696   dnl Order matters!
697   AC_CHECK_LIB(crypto, [CRYPTO_new_ex_data], [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
698   AC_CHECK_LIB(ssl,    [SSL_library_init], [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
699 fi
700
701
702 ##
703 ## Header files
704 ##
705 dnl sys/socket.h and sys/types.h are required by AC_FUNC_ACCEPT_ARGTYPES
706 AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h pwd.h sys/ipc.h sys/pstat.h sys/select.h sys/sem.h sys/socket.h sys/shm.h sys/types.h sys/un.h termios.h kernel/OS.h kernel/image.h SupportDefs.h])
707
708 dnl At least on IRIX, cpp test for netinet/tcp.h will fail unless netinet/in.h
709 dnl is included first.  So can't just use AC_CHECK_HEADERS; do it this way:
710 AC_CHECK_HEADERS([netinet/in.h])
711 AC_MSG_CHECKING([for netinet/tcp.h])
712 AC_TRY_CPP([
713 #ifdef HAVE_NETINET_IN_H
714 #include <netinet/in.h>
715 #endif
716 #include <netinet/tcp.h>
717 ], [AC_DEFINE(HAVE_NETINET_TCP_H) AC_MSG_RESULT(yes)],
718 [AC_MSG_RESULT(no)])
719
720 PGAC_HEADER_STRING
721
722 AC_CHECK_HEADERS([readline/readline.h readline.h], [break])
723 AC_CHECK_HEADERS([readline/history.h history.h], [break])
724
725 if test "$with_krb4" = yes ; then
726   AC_CHECK_HEADER(krb.h, [], [AC_MSG_ERROR([header file <krb.h> is required for Kerberos 4])])
727 fi
728
729 if test "$with_krb5" = yes ; then
730   AC_CHECK_HEADER(krb5.h, [], [AC_MSG_ERROR([header file <krb5.h> is required for Kerberos 5])])
731   AC_CHECK_HEADER(com_err.h, [], [AC_MSG_ERROR([header file <com_err.h> is required for Kerberos 5])])
732 fi
733
734 if test "$with_openssl" = yes ; then
735   AC_CHECK_HEADER([openssl/ssl.h], [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])])
736   AC_CHECK_HEADER([openssl/err.h], [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])])
737 fi
738
739
740 ##
741 ## Types, structures, compiler characteristics
742 ##
743 AC_C_CONST
744 AC_C_INLINE
745 AC_C_STRINGIZE
746 PGAC_C_SIGNED
747 PGAC_C_VOLATILE
748 AC_STRUCT_TIMEZONE
749 PGAC_UNION_SEMUN
750 PGAC_STRUCT_SOCKADDR_UN
751
752 ##
753 ## Functions, global variables
754 ##
755 PGAC_VAR_INT_TIMEZONE
756 AC_FUNC_ACCEPT_ARGTYPES
757 PGAC_FUNC_GETTIMEOFDAY_1ARG
758
759 AC_CHECK_FUNCS([fcvt getopt_long memmove pstat setproctitle setsid sigprocmask sysconf waitpid dlopen fdatasync])
760
761 dnl Check whether <unistd.h> declares fdatasync().
762 AC_EGREP_HEADER(fdatasync, unistd.h, AC_DEFINE(HAVE_FDATASYNC_DECL))
763
764 AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
765 [AC_TRY_LINK(
766 [#include <machine/vmparam.h>
767 #include <sys/exec.h>
768 ],
769 [PS_STRINGS->ps_nargvstr = 1;
770 PS_STRINGS->ps_argvstr = "foo";],
771 [pgac_cv_var_PS_STRINGS=yes],
772 [pgac_cv_var_PS_STRINGS=no])])
773 if test "$pgac_cv_var_PS_STRINGS" = yes ; then
774   AC_DEFINE([HAVE_PS_STRINGS], [], [Define if the PS_STRINGS thing exists.])
775 fi
776
777 dnl We use our snprintf.c emulation if either snprintf() or vsnprintf()
778 dnl is missing.  Yes, there are machines that have only one.
779 dnl We may also decide to use snprintf.c if snprintf() is present but does
780 dnl not have working "long long int" support -- see below.
781 SNPRINTF=''
782 AC_CHECK_FUNC(snprintf,
783               AC_DEFINE(HAVE_SNPRINTF),
784               SNPRINTF='snprintf.o')
785 AC_CHECK_FUNC(vsnprintf,
786               AC_DEFINE(HAVE_VSNPRINTF),
787               SNPRINTF='snprintf.o')
788 AC_SUBST(SNPRINTF)
789 dnl Check whether <stdio.h> declares snprintf() and vsnprintf(); if not,
790 dnl include/c.h will provide declarations.  Note this is a separate test
791 dnl from whether the functions exist in the C library --- there are systems
792 dnl that have the functions but don't bother to declare them :-(
793 dnl Note: simple-minded pattern here will do wrong thing if stdio.h
794 dnl declares vsnprintf() but not snprintf().  Hopefully there are no
795 dnl systems that are *that* brain-damaged...
796 AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_DECL))
797 AC_EGREP_HEADER(vsnprintf, stdio.h, AC_DEFINE(HAVE_VSNPRINTF_DECL))
798
799 # do this one the hard way in case isinf() is a macro
800 AC_CACHE_CHECK([for isinf], ac_cv_func_isinf,
801 [AC_TRY_LINK(
802 [#include <math.h>
803 ],
804 [double x = 0.0; int res = isinf(x);],
805 [ac_cv_func_isinf=yes],
806 [ac_cv_func_isinf=no])])
807
808 if test $ac_cv_func_isinf = yes ; then
809   AC_DEFINE(HAVE_ISINF)
810   ISINF=
811 else
812   ISINF='isinf.o'
813   # Look for a way to implement a substitute for isinf()
814   AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
815 fi
816 AC_SUBST(ISINF)
817
818 AC_CHECK_FUNC(getrusage,
819               AC_DEFINE(HAVE_GETRUSAGE),
820               GETRUSAGE='getrusage.o')
821 AC_SUBST(GETRUSAGE)
822 AC_CHECK_FUNC(srandom,
823               AC_DEFINE(HAVE_SRANDOM),
824               SRANDOM='srandom.o')
825 AC_SUBST(SRANDOM)
826 AC_CHECK_FUNC(gethostname,
827               AC_DEFINE(HAVE_GETHOSTNAME),
828               GETHOSTNAME='gethostname.o')
829 AC_SUBST(GETHOSTNAME)
830 AC_CHECK_FUNC(random,
831               AC_DEFINE(HAVE_RANDOM),
832               MISSING_RANDOM='random.o')
833 AC_SUBST(MISSING_RANDOM)
834 AC_CHECK_FUNC(inet_aton,
835               AC_DEFINE(HAVE_INET_ATON),
836               INET_ATON='inet_aton.o')
837 AC_SUBST(INET_ATON)
838 AC_CHECK_FUNC(strerror,
839               AC_DEFINE(HAVE_STRERROR),
840               STRERROR='strerror.o')
841 AC_SUBST(STRERROR)
842 AC_CHECK_FUNC(strdup,
843               AC_DEFINE(HAVE_STRDUP),
844               STRDUP='../../utils/strdup.o')
845 AC_SUBST(STRDUP)
846 AC_CHECK_FUNC(strtol,
847               AC_DEFINE(HAVE_STRTOL),
848               STRTOL='strtol.o')
849 AC_SUBST(STRTOL)
850 AC_CHECK_FUNC(strtoul,
851               AC_DEFINE(HAVE_STRTOUL),
852               STRTOUL='strtoul.o')
853 AC_SUBST(STRTOUL)
854 AC_CHECK_FUNC(strcasecmp,
855               AC_DEFINE(HAVE_STRCASECMP),
856               STRCASECMP='strcasecmp.o')
857 AC_SUBST(STRCASECMP)
858 AC_CHECK_FUNC(cbrt,
859               AC_DEFINE(HAVE_CBRT),
860               AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT)))
861
862 # On HPUX 9, rint() is not in regular libm.a but in /lib/pa1.1/libm.a;
863 # this hackery with HPUXMATHLIB allows us to cope.
864 HPUXMATHLIB=""
865 case $host_cpu in
866   hppa1.1) 
867         if [[ -r /lib/pa1.1/libm.a ]] ; then
868             HPUXMATHLIB="-L /lib/pa1.1 -lm"
869         fi ;;
870 esac
871 AC_SUBST(HPUXMATHLIB)
872
873 AC_CHECK_FUNC(rint,
874               AC_DEFINE(HAVE_RINT),
875               AC_CHECK_LIB(m, rint, AC_DEFINE(HAVE_RINT), , $HPUXMATHLIB))
876
877
878 # Readline versions < 2.1 don't have rl_completion_append_character
879 AC_MSG_CHECKING([for rl_completion_append_character])
880 AC_TRY_LINK([#include <stdio.h>
881 #ifdef HAVE_READLINE_READLINE_H
882 # include <readline/readline.h>
883 #elif defined(HAVE_READLINE_H)
884 # include <readline.h>
885 #endif
886 ],
887 [rl_completion_append_character = 'x';],
888 [AC_MSG_RESULT(yes)
889 AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER)],
890 [AC_MSG_RESULT(no)])
891
892 AC_CHECK_FUNCS([rl_completion_matches])
893
894
895 dnl Cannot use AC_CHECK_FUNC because finite may be a macro
896 AC_MSG_CHECKING(for finite)
897 AC_TRY_LINK([#include <math.h>],
898         [int dummy=finite(1.0);],
899         [AC_DEFINE(HAVE_FINITE) AC_MSG_RESULT(yes)],
900         AC_MSG_RESULT(no))
901
902 dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro
903 dnl (especially on GNU libc)
904 dnl See also comments in config.h.
905 AC_MSG_CHECKING(for sigsetjmp)
906 AC_TRY_LINK([#include <setjmp.h>],
907         [sigjmp_buf x; sigsetjmp(x, 1);],
908         [AC_DEFINE(HAVE_SIGSETJMP) AC_MSG_RESULT(yes)],
909         AC_MSG_RESULT(no))
910
911
912 PGAC_ARG_BOOL(enable, syslog, no, [  --enable-syslog         enable logging to syslog],
913               [AC_CHECK_FUNC(syslog,
914                              [AC_DEFINE([ENABLE_SYSLOG], 1,
915                                         [Define to 1 if to enable the syslogging code])],
916                              [AC_MSG_ERROR([no syslog interface found])])])
917
918
919 AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset,
920 [AC_TRY_LINK([#include <unistd.h>],
921   [extern int optreset; optreset = 1;],
922   [pgac_cv_var_int_optreset=yes],
923   [pgac_cv_var_int_optreset=no])])
924 if test x"$pgac_cv_var_int_optreset" = x"yes"; then
925   AC_DEFINE(HAVE_INT_OPTRESET, 1)
926 fi
927
928
929 # This test makes sure that run tests work at all.  Sometimes a shared
930 # library is found by the linker, but the runtime linker can't find it.
931 # This check should come after all modifications of compiler or linker
932 # variables, and before any other run tests.
933 AC_MSG_CHECKING([test program])
934 AC_TRY_RUN([int main() { return 0; }],
935 [AC_MSG_RESULT(ok)],
936 [AC_MSG_RESULT(failed)
937 AC_MSG_ERROR([[
938 *** Could not execute a simple test program.  This may be a problem
939 *** related to locating shared libraries.  Check the file 'config.log'
940 *** for the exact reason.]])],
941 [AC_MSG_RESULT([cross-compiling])])
942
943
944 dnl Check to see if we have a working 64-bit integer type.
945 dnl This breaks down into two steps:
946 dnl (1) figure out if the compiler has a 64-bit int type with working
947 dnl arithmetic, and if so
948 dnl (2) see whether snprintf() can format the type correctly.  (Currently,
949 dnl snprintf is the only library routine we really need for int8 support.)
950 dnl It's entirely possible to have a compiler that handles a 64-bit type
951 dnl when the C library doesn't; this is fairly likely when using gcc on
952 dnl an older platform, for example.
953 dnl If there is no native snprintf() or it does not handle the 64-bit type,
954 dnl we force our own version of snprintf() to be used instead.
955 dnl Note this test must be run after our initial check for snprintf/vsnprintf.
956
957 PGAC_TYPE_64BIT_INT([long int])
958
959 if test x"$HAVE_LONG_INT_64" = x"no" ; then
960   PGAC_TYPE_64BIT_INT([long long int])
961 fi
962
963
964 dnl If we need to use "long long int", figure out whether nnnLL notation works.
965
966 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
967   AC_TRY_COMPILE([
968 #define INT64CONST(x)  x##LL
969 long long int foo = INT64CONST(0x1234567890123456);
970 ],
971         [],
972         [AC_DEFINE(HAVE_LL_CONSTANTS)],
973         [])
974 fi
975
976
977 dnl If we found "long int" is 64 bits, assume snprintf handles it.
978 dnl If we found we need to use "long long int", better check.
979 dnl We cope with snprintfs that use either %lld or %qd as the format.
980 dnl If neither works, fall back to our own snprintf emulation (which we
981 dnl know uses %lld).
982
983 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
984   if [[ x$SNPRINTF = x ]] ; then
985     AC_MSG_CHECKING(whether snprintf handles 'long long int' as %lld)
986     AC_TRY_RUN([#include <stdio.h>
987 typedef long long int int64;
988 #define INT64_FORMAT "%lld"
989
990 int64 a = 20000001;
991 int64 b = 40000005;
992
993 int does_int64_snprintf_work()
994 {
995   int64 c;
996   char buf[100];
997
998   if (sizeof(int64) != 8)
999     return 0;                   /* doesn't look like the right size */
1000
1001   c = a * b;
1002   snprintf(buf, 100, INT64_FORMAT, c);
1003   if (strcmp(buf, "800000140000005") != 0)
1004     return 0;                   /* either multiply or snprintf is busted */
1005   return 1;
1006 }
1007 main() {
1008   exit(! does_int64_snprintf_work());
1009 }],
1010         [ AC_MSG_RESULT(yes)
1011           INT64_FORMAT='"%lld"'
1012         ],
1013   [ AC_MSG_RESULT(no)
1014     AC_MSG_CHECKING(whether snprintf handles 'long long int' as %qd) 
1015     AC_TRY_RUN([#include <stdio.h>
1016 typedef long long int int64;
1017 #define INT64_FORMAT "%qd"
1018    
1019 int64 a = 20000001;
1020 int64 b = 40000005;
1021    
1022 int does_int64_snprintf_work()
1023 {  
1024   int64 c;
1025   char buf[100];
1026
1027   if (sizeof(int64) != 8)
1028     return 0;     /* doesn't look like the right size */
1029
1030   c = a * b;
1031   snprintf(buf, 100, INT64_FORMAT, c);
1032   if (strcmp(buf, "800000140000005") != 0)
1033     return 0;     /* either multiply or snprintf is busted */
1034   return 1;
1035 }
1036 main() {
1037   exit(! does_int64_snprintf_work());
1038 }],
1039   [ AC_MSG_RESULT(yes)
1040     INT64_FORMAT='"%qd"'
1041   ],
1042   [ AC_MSG_RESULT(no)
1043         # Force usage of our own snprintf, since system snprintf is broken
1044         SNPRINTF='snprintf.o'
1045         INT64_FORMAT='"%lld"'
1046   ],
1047   [ AC_MSG_RESULT(assuming not on target machine)
1048         # Force usage of our own snprintf, since we cannot test foreign snprintf
1049         SNPRINTF='snprintf.o'
1050         INT64_FORMAT='"%lld"'
1051   ]) ],
1052   [ AC_MSG_RESULT(assuming not on target machine)
1053         # Force usage of our own snprintf, since we cannot test foreign snprintf
1054         SNPRINTF='snprintf.o'
1055         INT64_FORMAT='"%lld"'
1056   ])
1057   else
1058     # here if we previously decided we needed to use our own snprintf
1059     INT64_FORMAT='"%lld"'
1060   fi
1061 else
1062   # Here if we are not using 'long long int' at all
1063   INT64_FORMAT='"%ld"'
1064 fi
1065
1066 AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT)
1067
1068
1069 AC_CHECK_FUNCS([strtoll strtoq], [break])
1070 AC_CHECK_FUNCS([strtoull strtouq], [break])
1071
1072 dnl psql needs atexit() or on_exit()
1073 AC_CHECK_FUNC(atexit,
1074         [AC_DEFINE(HAVE_ATEXIT)],
1075         [AC_CHECK_FUNCS(on_exit,
1076                 [AC_DEFINE(HAVE_ON_EXIT)],
1077                 [AC_MSG_ERROR([atexi() nor on_exit() found])])])
1078
1079 dnl Need a #define for the size of Datum (unsigned long)
1080
1081 AC_CHECK_SIZEOF(unsigned long, 4)
1082 AC_DEFINE_UNQUOTED(SIZEOF_DATUM, $ac_cv_sizeof_unsigned_long)
1083
1084 dnl Determine memory alignment requirements for the basic C datatypes.
1085
1086 PGAC_CHECK_ALIGNOF(short)
1087 PGAC_CHECK_ALIGNOF(int)
1088 PGAC_CHECK_ALIGNOF(long)
1089 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
1090   PGAC_CHECK_ALIGNOF(long long int)
1091 fi
1092 PGAC_CHECK_ALIGNOF(double)
1093
1094 dnl Compute maximum alignment of any basic type.
1095 dnl We assume long's alignment is at least as strong as char, short, or int;
1096 dnl but we must check long long (if it exists) and double.
1097
1098 if test $pgac_cv_alignof_double != 'sizeof(double)' ; then
1099   MAX_ALIGNOF=$pgac_cv_alignof_long
1100   if test $MAX_ALIGNOF -lt $pgac_cv_alignof_double ; then
1101     MAX_ALIGNOF=$pgac_cv_alignof_double
1102   fi
1103   if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $pgac_cv_alignof_long_long_int ; then
1104     MAX_ALIGNOF="$pgac_cv_alignof_long_long_int"
1105   fi
1106 else
1107   dnl cross-compiling: assume that double's alignment is worst case
1108   MAX_ALIGNOF="$pgac_cv_alignof_double"
1109 fi
1110 AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any type])
1111
1112 PGAC_FUNC_POSIX_SIGNALS
1113
1114
1115 # Check for Tcl configuration script tclConfig.sh
1116 if test "$with_tcl" = yes; then
1117     PGAC_PATH_TCLCONFIGSH([$with_tclconfig])
1118 fi
1119
1120 # Check for Tk configuration script tkConfig.sh
1121 if test "$with_tk" = yes; then
1122     PGAC_PATH_TKCONFIGSH([$with_tkconfig $with_tclconfig])
1123 fi
1124
1125
1126 #
1127 # Check for DocBook and tools
1128 #
1129 PGAC_PROG_NSGMLS
1130 # If you don't have nsgmls you won't get very far, so save the cycles.
1131 if test -n "$NSGMLS"; then
1132   PGAC_PROG_JADE
1133   PGAC_CHECK_DOCBOOK([3.1])
1134   PGAC_PATH_DOCBOOK_STYLESHEETS
1135   AC_CHECK_PROGS(SGMLSPL, sgmlspl)
1136 fi
1137
1138 # check whether 'test -ef' works
1139 if (test "$srcdir" -ef "$srcdir") >/dev/null 2>&1 ; then
1140   test_ef_works=yes
1141 else
1142   test_ef_works=no
1143 fi
1144
1145 abs_top_srcdir=
1146 AC_SUBST(abs_top_srcdir)
1147
1148 if test "$test_ef_works" = yes ; then
1149 # prepare build tree if outside source tree
1150   if test "$srcdir" -ef . ; then : ; else
1151     abs_top_srcdir=`cd $srcdir && pwd`
1152     echo $ac_n "preparing build tree... $ac_c" 1>&6
1153     /bin/sh "$srcdir/config/prep_buildtree" "$abs_top_srcdir" "." \
1154       || AC_MSG_ERROR(failed)
1155     AC_MSG_RESULT(done)
1156   fi
1157 fi
1158
1159 AC_OUTPUT(
1160 [
1161   GNUmakefile
1162   src/GNUmakefile
1163   src/Makefile.global
1164   src/backend/port/Makefile
1165 ],
1166 [
1167 # Update timestamp for config.h (see Makefile.global)
1168 test x"$CONFIG_HEADERS" != x"" && echo >src/include/stamp-h
1169 ])