OSDN Git Service

Some updates for 7.1.1.
[pg-rex/syncrep.git] / 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.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 dnl furthermore, check that <zlib.h> defines z_streamp (versions before
679 dnl about 1.0.4 did not).  While we could work around the lack of z_streamp,
680 dnl it seems unwise to encourage people to use such old zlib versions...
681 AC_EGREP_HEADER(z_streamp, zlib.h, [
682 AC_CHECK_LIB(z,        inflate)
683 ])
684
685
686 if test "$with_krb4" = yes ; then
687   AC_CHECK_LIB(des, [des_encrypt], [], [AC_MSG_ERROR([library 'des' is required for Kerberos 4])])
688   AC_CHECK_LIB(krb, [krb_sendauth], [], [AC_MSG_ERROR([library 'krb' is required for Kerberos 4])])
689 fi
690
691 if test "$with_krb5" = yes ; then
692   AC_CHECK_LIB(com_err, [com_err], [], [AC_MSG_ERROR([library 'com_err' is required for Kerberos 5])])
693   AC_CHECK_LIB(crypto,  [krb5_encrypt], [],
694     [AC_CHECK_LIB(k5crypto, [krb5_encrypt], [], [AC_MSG_ERROR([library 'crypto' or 'k5crypto' is required for Kerberos 5])])])
695   AC_CHECK_LIB(krb5,    [krb5_sendauth], [], [AC_MSG_ERROR([library 'krb5' is required for Kerberos 5])])
696 fi
697
698 if test "$with_openssl" = yes ; then
699   dnl Order matters!
700   AC_CHECK_LIB(crypto, [CRYPTO_new_ex_data], [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
701   AC_CHECK_LIB(ssl,    [SSL_library_init], [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
702 fi
703
704
705 ##
706 ## Header files
707 ##
708 dnl sys/socket.h and sys/types.h are required by AC_FUNC_ACCEPT_ARGTYPES
709 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])
710
711 dnl At least on IRIX, cpp test for netinet/tcp.h will fail unless netinet/in.h
712 dnl is included first.  So can't just use AC_CHECK_HEADERS; do it this way:
713 AC_CHECK_HEADERS([netinet/in.h])
714 AC_MSG_CHECKING([for netinet/tcp.h])
715 AC_TRY_CPP([
716 #ifdef HAVE_NETINET_IN_H
717 #include <netinet/in.h>
718 #endif
719 #include <netinet/tcp.h>
720 ], [AC_DEFINE(HAVE_NETINET_TCP_H) AC_MSG_RESULT(yes)],
721 [AC_MSG_RESULT(no)])
722
723 PGAC_HEADER_STRING
724
725 AC_CHECK_HEADERS([readline/readline.h readline.h], [break])
726 AC_CHECK_HEADERS([readline/history.h history.h], [break])
727
728 if test "$with_krb4" = yes ; then
729   AC_CHECK_HEADER(krb.h, [], [AC_MSG_ERROR([header file <krb.h> is required for Kerberos 4])])
730 fi
731
732 if test "$with_krb5" = yes ; then
733   AC_CHECK_HEADER(krb5.h, [], [AC_MSG_ERROR([header file <krb5.h> is required for Kerberos 5])])
734   AC_CHECK_HEADER(com_err.h, [], [AC_MSG_ERROR([header file <com_err.h> is required for Kerberos 5])])
735 fi
736
737 if test "$with_openssl" = yes ; then
738   AC_CHECK_HEADER([openssl/ssl.h], [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])])
739   AC_CHECK_HEADER([openssl/err.h], [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])])
740 fi
741
742
743 ##
744 ## Types, structures, compiler characteristics
745 ##
746 AC_C_CONST
747 AC_C_INLINE
748 AC_C_STRINGIZE
749 PGAC_C_SIGNED
750 PGAC_C_VOLATILE
751 AC_STRUCT_TIMEZONE
752 PGAC_UNION_SEMUN
753 PGAC_STRUCT_SOCKADDR_UN
754
755 ##
756 ## Functions, global variables
757 ##
758 PGAC_VAR_INT_TIMEZONE
759 AC_FUNC_ACCEPT_ARGTYPES
760 PGAC_FUNC_GETTIMEOFDAY_1ARG
761
762 AC_CHECK_FUNCS([fcvt getopt_long memmove pstat setproctitle setsid sigprocmask sysconf waitpid dlopen fdatasync])
763
764 dnl Check whether <unistd.h> declares fdatasync().
765 AC_EGREP_HEADER(fdatasync, unistd.h, AC_DEFINE(HAVE_FDATASYNC_DECL))
766
767 AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
768 [AC_TRY_LINK(
769 [#include <machine/vmparam.h>
770 #include <sys/exec.h>
771 ],
772 [PS_STRINGS->ps_nargvstr = 1;
773 PS_STRINGS->ps_argvstr = "foo";],
774 [pgac_cv_var_PS_STRINGS=yes],
775 [pgac_cv_var_PS_STRINGS=no])])
776 if test "$pgac_cv_var_PS_STRINGS" = yes ; then
777   AC_DEFINE([HAVE_PS_STRINGS], [], [Define if the PS_STRINGS thing exists.])
778 fi
779
780 dnl We use our snprintf.c emulation if either snprintf() or vsnprintf()
781 dnl is missing.  Yes, there are machines that have only one.
782 dnl We may also decide to use snprintf.c if snprintf() is present but does
783 dnl not have working "long long int" support -- see below.
784 SNPRINTF=''
785 AC_CHECK_FUNC(snprintf,
786               AC_DEFINE(HAVE_SNPRINTF),
787               SNPRINTF='snprintf.o')
788 AC_CHECK_FUNC(vsnprintf,
789               AC_DEFINE(HAVE_VSNPRINTF),
790               SNPRINTF='snprintf.o')
791 AC_SUBST(SNPRINTF)
792 dnl Check whether <stdio.h> declares snprintf() and vsnprintf(); if not,
793 dnl include/c.h will provide declarations.  Note this is a separate test
794 dnl from whether the functions exist in the C library --- there are systems
795 dnl that have the functions but don't bother to declare them :-(
796 dnl Note: simple-minded pattern here will do wrong thing if stdio.h
797 dnl declares vsnprintf() but not snprintf().  Hopefully there are no
798 dnl systems that are *that* brain-damaged...
799 AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_DECL))
800 AC_EGREP_HEADER(vsnprintf, stdio.h, AC_DEFINE(HAVE_VSNPRINTF_DECL))
801
802 # do this one the hard way in case isinf() is a macro
803 AC_CACHE_CHECK([for isinf], ac_cv_func_isinf,
804 [AC_TRY_LINK(
805 [#include <math.h>
806 ],
807 [double x = 0.0; int res = isinf(x);],
808 [ac_cv_func_isinf=yes],
809 [ac_cv_func_isinf=no])])
810
811 if test $ac_cv_func_isinf = yes ; then
812   AC_DEFINE(HAVE_ISINF)
813   ISINF=
814 else
815   ISINF='isinf.o'
816   # Look for a way to implement a substitute for isinf()
817   AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
818 fi
819 AC_SUBST(ISINF)
820
821 AC_CHECK_FUNC(getrusage,
822               AC_DEFINE(HAVE_GETRUSAGE),
823               GETRUSAGE='getrusage.o')
824 AC_SUBST(GETRUSAGE)
825 AC_CHECK_FUNC(srandom,
826               AC_DEFINE(HAVE_SRANDOM),
827               SRANDOM='srandom.o')
828 AC_SUBST(SRANDOM)
829 AC_CHECK_FUNC(gethostname,
830               AC_DEFINE(HAVE_GETHOSTNAME),
831               GETHOSTNAME='gethostname.o')
832 AC_SUBST(GETHOSTNAME)
833 AC_CHECK_FUNC(random,
834               AC_DEFINE(HAVE_RANDOM),
835               MISSING_RANDOM='random.o')
836 AC_SUBST(MISSING_RANDOM)
837 AC_CHECK_FUNC(inet_aton,
838               AC_DEFINE(HAVE_INET_ATON),
839               INET_ATON='inet_aton.o')
840 AC_SUBST(INET_ATON)
841 AC_CHECK_FUNC(strerror,
842               AC_DEFINE(HAVE_STRERROR),
843               STRERROR='strerror.o')
844 AC_SUBST(STRERROR)
845 AC_CHECK_FUNC(strdup,
846               AC_DEFINE(HAVE_STRDUP),
847               STRDUP='../../utils/strdup.o')
848 AC_SUBST(STRDUP)
849 AC_CHECK_FUNC(strtol,
850               AC_DEFINE(HAVE_STRTOL),
851               STRTOL='strtol.o')
852 AC_SUBST(STRTOL)
853 AC_CHECK_FUNC(strtoul,
854               AC_DEFINE(HAVE_STRTOUL),
855               STRTOUL='strtoul.o')
856 AC_SUBST(STRTOUL)
857 AC_CHECK_FUNC(strcasecmp,
858               AC_DEFINE(HAVE_STRCASECMP),
859               STRCASECMP='strcasecmp.o')
860 AC_SUBST(STRCASECMP)
861 AC_CHECK_FUNC(cbrt,
862               AC_DEFINE(HAVE_CBRT),
863               AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT)))
864
865 # On HPUX 9, rint() is not in regular libm.a but in /lib/pa1.1/libm.a;
866 # this hackery with HPUXMATHLIB allows us to cope.
867 HPUXMATHLIB=""
868 case $host_cpu in
869   hppa1.1) 
870         if [[ -r /lib/pa1.1/libm.a ]] ; then
871             HPUXMATHLIB="-L /lib/pa1.1 -lm"
872         fi ;;
873 esac
874 AC_SUBST(HPUXMATHLIB)
875
876 AC_CHECK_FUNC(rint,
877               AC_DEFINE(HAVE_RINT),
878               AC_CHECK_LIB(m, rint, AC_DEFINE(HAVE_RINT), , $HPUXMATHLIB))
879
880
881 # Readline versions < 2.1 don't have rl_completion_append_character
882 AC_MSG_CHECKING([for rl_completion_append_character])
883 AC_TRY_LINK([#include <stdio.h>
884 #ifdef HAVE_READLINE_READLINE_H
885 # include <readline/readline.h>
886 #elif defined(HAVE_READLINE_H)
887 # include <readline.h>
888 #endif
889 ],
890 [rl_completion_append_character = 'x';],
891 [AC_MSG_RESULT(yes)
892 AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER)],
893 [AC_MSG_RESULT(no)])
894
895 AC_CHECK_FUNCS([rl_completion_matches])
896
897
898 dnl Cannot use AC_CHECK_FUNC because finite may be a macro
899 AC_MSG_CHECKING(for finite)
900 AC_TRY_LINK([#include <math.h>],
901         [int dummy=finite(1.0);],
902         [AC_DEFINE(HAVE_FINITE) AC_MSG_RESULT(yes)],
903         AC_MSG_RESULT(no))
904
905 dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro
906 dnl (especially on GNU libc)
907 dnl See also comments in config.h.
908 AC_MSG_CHECKING(for sigsetjmp)
909 AC_TRY_LINK([#include <setjmp.h>],
910         [sigjmp_buf x; sigsetjmp(x, 1);],
911         [AC_DEFINE(HAVE_SIGSETJMP) AC_MSG_RESULT(yes)],
912         AC_MSG_RESULT(no))
913
914
915 PGAC_ARG_BOOL(enable, syslog, no, [  --enable-syslog         enable logging to syslog],
916               [AC_CHECK_FUNC(syslog,
917                              [AC_DEFINE([ENABLE_SYSLOG], 1,
918                                         [Define to 1 if to enable the syslogging code])],
919                              [AC_MSG_ERROR([no syslog interface found])])])
920
921
922 AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset,
923 [AC_TRY_LINK([#include <unistd.h>],
924   [extern int optreset; optreset = 1;],
925   [pgac_cv_var_int_optreset=yes],
926   [pgac_cv_var_int_optreset=no])])
927 if test x"$pgac_cv_var_int_optreset" = x"yes"; then
928   AC_DEFINE(HAVE_INT_OPTRESET, 1)
929 fi
930
931
932 # This test makes sure that run tests work at all.  Sometimes a shared
933 # library is found by the linker, but the runtime linker can't find it.
934 # This check should come after all modifications of compiler or linker
935 # variables, and before any other run tests.
936 AC_MSG_CHECKING([test program])
937 AC_TRY_RUN([int main() { return 0; }],
938 [AC_MSG_RESULT(ok)],
939 [AC_MSG_RESULT(failed)
940 AC_MSG_ERROR([[
941 *** Could not execute a simple test program.  This may be a problem
942 *** related to locating shared libraries.  Check the file 'config.log'
943 *** for the exact reason.]])],
944 [AC_MSG_RESULT([cross-compiling])])
945
946
947 dnl Check to see if we have a working 64-bit integer type.
948 dnl This breaks down into two steps:
949 dnl (1) figure out if the compiler has a 64-bit int type with working
950 dnl arithmetic, and if so
951 dnl (2) see whether snprintf() can format the type correctly.  (Currently,
952 dnl snprintf is the only library routine we really need for int8 support.)
953 dnl It's entirely possible to have a compiler that handles a 64-bit type
954 dnl when the C library doesn't; this is fairly likely when using gcc on
955 dnl an older platform, for example.
956 dnl If there is no native snprintf() or it does not handle the 64-bit type,
957 dnl we force our own version of snprintf() to be used instead.
958 dnl Note this test must be run after our initial check for snprintf/vsnprintf.
959
960 PGAC_TYPE_64BIT_INT([long int])
961
962 if test x"$HAVE_LONG_INT_64" = x"no" ; then
963   PGAC_TYPE_64BIT_INT([long long int])
964 fi
965
966
967 dnl If we need to use "long long int", figure out whether nnnLL notation works.
968
969 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
970   AC_TRY_COMPILE([
971 #define INT64CONST(x)  x##LL
972 long long int foo = INT64CONST(0x1234567890123456);
973 ],
974         [],
975         [AC_DEFINE(HAVE_LL_CONSTANTS)],
976         [])
977 fi
978
979
980 dnl If we found "long int" is 64 bits, assume snprintf handles it.
981 dnl If we found we need to use "long long int", better check.
982 dnl We cope with snprintfs that use either %lld or %qd as the format.
983 dnl If neither works, fall back to our own snprintf emulation (which we
984 dnl know uses %lld).
985
986 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
987   if [[ x$SNPRINTF = x ]] ; then
988     AC_MSG_CHECKING(whether snprintf handles 'long long int' as %lld)
989     AC_TRY_RUN([#include <stdio.h>
990 typedef long long int int64;
991 #define INT64_FORMAT "%lld"
992
993 int64 a = 20000001;
994 int64 b = 40000005;
995
996 int does_int64_snprintf_work()
997 {
998   int64 c;
999   char buf[100];
1000
1001   if (sizeof(int64) != 8)
1002     return 0;                   /* doesn't look like the right size */
1003
1004   c = a * b;
1005   snprintf(buf, 100, INT64_FORMAT, c);
1006   if (strcmp(buf, "800000140000005") != 0)
1007     return 0;                   /* either multiply or snprintf is busted */
1008   return 1;
1009 }
1010 main() {
1011   exit(! does_int64_snprintf_work());
1012 }],
1013         [ AC_MSG_RESULT(yes)
1014           INT64_FORMAT='"%lld"'
1015         ],
1016   [ AC_MSG_RESULT(no)
1017     AC_MSG_CHECKING(whether snprintf handles 'long long int' as %qd) 
1018     AC_TRY_RUN([#include <stdio.h>
1019 typedef long long int int64;
1020 #define INT64_FORMAT "%qd"
1021    
1022 int64 a = 20000001;
1023 int64 b = 40000005;
1024    
1025 int does_int64_snprintf_work()
1026 {  
1027   int64 c;
1028   char buf[100];
1029
1030   if (sizeof(int64) != 8)
1031     return 0;     /* doesn't look like the right size */
1032
1033   c = a * b;
1034   snprintf(buf, 100, INT64_FORMAT, c);
1035   if (strcmp(buf, "800000140000005") != 0)
1036     return 0;     /* either multiply or snprintf is busted */
1037   return 1;
1038 }
1039 main() {
1040   exit(! does_int64_snprintf_work());
1041 }],
1042   [ AC_MSG_RESULT(yes)
1043     INT64_FORMAT='"%qd"'
1044   ],
1045   [ AC_MSG_RESULT(no)
1046         # Force usage of our own snprintf, since system snprintf is broken
1047         SNPRINTF='snprintf.o'
1048         INT64_FORMAT='"%lld"'
1049   ],
1050   [ AC_MSG_RESULT(assuming not on target machine)
1051         # Force usage of our own snprintf, since we cannot test foreign snprintf
1052         SNPRINTF='snprintf.o'
1053         INT64_FORMAT='"%lld"'
1054   ]) ],
1055   [ AC_MSG_RESULT(assuming not on target machine)
1056         # Force usage of our own snprintf, since we cannot test foreign snprintf
1057         SNPRINTF='snprintf.o'
1058         INT64_FORMAT='"%lld"'
1059   ])
1060   else
1061     # here if we previously decided we needed to use our own snprintf
1062     INT64_FORMAT='"%lld"'
1063   fi
1064 else
1065   # Here if we are not using 'long long int' at all
1066   INT64_FORMAT='"%ld"'
1067 fi
1068
1069 AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT)
1070
1071
1072 AC_CHECK_FUNCS([strtoll strtoq], [break])
1073 AC_CHECK_FUNCS([strtoull strtouq], [break])
1074
1075 dnl psql needs atexit() or on_exit()
1076 AC_CHECK_FUNC(atexit,
1077         [AC_DEFINE(HAVE_ATEXIT)],
1078         [AC_CHECK_FUNCS(on_exit,
1079                 [AC_DEFINE(HAVE_ON_EXIT)],
1080                 [AC_MSG_ERROR([atexi() nor on_exit() found])])])
1081
1082 dnl Need a #define for the size of Datum (unsigned long)
1083
1084 AC_CHECK_SIZEOF(unsigned long, 4)
1085 AC_DEFINE_UNQUOTED(SIZEOF_DATUM, $ac_cv_sizeof_unsigned_long)
1086
1087 dnl Determine memory alignment requirements for the basic C datatypes.
1088
1089 PGAC_CHECK_ALIGNOF(short)
1090 PGAC_CHECK_ALIGNOF(int)
1091 PGAC_CHECK_ALIGNOF(long)
1092 if [[ x"$HAVE_LONG_LONG_INT_64" = xyes ]] ; then
1093   PGAC_CHECK_ALIGNOF(long long int)
1094 fi
1095 PGAC_CHECK_ALIGNOF(double)
1096
1097 dnl Compute maximum alignment of any basic type.
1098 dnl We assume long's alignment is at least as strong as char, short, or int;
1099 dnl but we must check long long (if it exists) and double.
1100
1101 if test $pgac_cv_alignof_double != 'sizeof(double)' ; then
1102   MAX_ALIGNOF=$pgac_cv_alignof_long
1103   if test $MAX_ALIGNOF -lt $pgac_cv_alignof_double ; then
1104     MAX_ALIGNOF=$pgac_cv_alignof_double
1105   fi
1106   if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $pgac_cv_alignof_long_long_int ; then
1107     MAX_ALIGNOF="$pgac_cv_alignof_long_long_int"
1108   fi
1109 else
1110   dnl cross-compiling: assume that double's alignment is worst case
1111   MAX_ALIGNOF="$pgac_cv_alignof_double"
1112 fi
1113 AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any type])
1114
1115 PGAC_FUNC_POSIX_SIGNALS
1116
1117
1118 # Check for Tcl configuration script tclConfig.sh
1119 if test "$with_tcl" = yes; then
1120     PGAC_PATH_TCLCONFIGSH([$with_tclconfig])
1121 fi
1122
1123 # Check for Tk configuration script tkConfig.sh
1124 if test "$with_tk" = yes; then
1125     PGAC_PATH_TKCONFIGSH([$with_tkconfig $with_tclconfig])
1126 fi
1127
1128
1129 #
1130 # Check for DocBook and tools
1131 #
1132 PGAC_PROG_NSGMLS
1133 # If you don't have nsgmls you won't get very far, so save the cycles.
1134 if test -n "$NSGMLS"; then
1135   PGAC_PROG_JADE
1136   PGAC_CHECK_DOCBOOK([3.1])
1137   PGAC_PATH_DOCBOOK_STYLESHEETS
1138   AC_CHECK_PROGS(SGMLSPL, sgmlspl)
1139 fi
1140
1141 # check whether 'test -ef' works
1142 if (test "$srcdir" -ef "$srcdir") >/dev/null 2>&1 ; then
1143   test_ef_works=yes
1144 else
1145   test_ef_works=no
1146 fi
1147
1148 abs_top_srcdir=
1149 AC_SUBST(abs_top_srcdir)
1150
1151 if test "$test_ef_works" = yes ; then
1152 # prepare build tree if outside source tree
1153   if test "$srcdir" -ef . ; then : ; else
1154     abs_top_srcdir=`cd $srcdir && pwd`
1155     echo $ac_n "preparing build tree... $ac_c" 1>&6
1156     /bin/sh "$srcdir/config/prep_buildtree" "$abs_top_srcdir" "." \
1157       || AC_MSG_ERROR(failed)
1158     AC_MSG_RESULT(done)
1159   fi
1160 fi
1161
1162 AC_OUTPUT(
1163 [
1164   GNUmakefile
1165   src/GNUmakefile
1166   src/Makefile.global
1167   src/backend/port/Makefile
1168 ],
1169 [
1170 # Update timestamp for config.h (see Makefile.global)
1171 test x"$CONFIG_HEADERS" != x"" && echo >src/include/stamp-h
1172 ])