configure.in 41.4 KB
Newer Older
1
dnl Process this file with autoconf to produce a configure script.
P
 
PostgreSQL Daemon 已提交
2
dnl $PostgreSQL: pgsql/configure.in,v 1.426 2005/09/16 17:15:53 pgsql Exp $
3
dnl
4 5 6 7 8
dnl Developers, please strive to achieve this order:
dnl
dnl 0. Initialization and options processing
dnl 1. Programs
dnl 2. Libraries
9
dnl 3. Header files
10 11 12 13 14 15 16
dnl 4. Types
dnl 5. Structures
dnl 6. Compiler characteristics
dnl 7. Functions, global variables
dnl 8. System services
dnl
dnl Read the Autoconf manual for details.
17 18
dnl
m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
19

P
 
PostgreSQL Daemon 已提交
20
AC_INIT([PostgreSQL], [8.1beta2], [pgsql-bugs@postgresql.org])
21

22
AC_PREREQ(2.59)
23
AC_COPYRIGHT([Copyright (c) 1996-2005, PostgreSQL Global Development Group])
24
AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
25
AC_CONFIG_AUX_DIR(config)
26 27
AC_PREFIX_DEFAULT(/usr/local/pgsql)
AC_SUBST(configure_args, [$ac_configure_args])
28

29
AC_DEFINE_UNQUOTED(PG_VERSION, "$PACKAGE_VERSION", [PostgreSQL version])
30

31
AC_CANONICAL_HOST
32

33 34 35
template=
AC_MSG_CHECKING([which template to use])

36 37 38
PGAC_ARG_REQ(with, template, [],
[
  case $withval in
39 40
    list)   echo; ls "$srcdir/src/template"; exit;;
    *)      if test -f "$srcdir/src/template/$with_template" ; then
41
              template=$withval
42
            else
43
              AC_MSG_ERROR(['$withval' is not a valid template name. Use 'list' for a list.])
44 45
            fi;;
  esac
46 47
],
[
48
# --with-template not given
49 50 51

case $host_os in
     aix*) template=aix ;;
B
Bruce Momjian 已提交
52
    beos*) template=beos ;;
53
    bsdi*) template=bsdi ;;
54
  cygwin*) template=cygwin ;;
55
  darwin*) template=darwin ;;
56 57 58
    dgux*) template=dgux ;;
 freebsd*) template=freebsd ;;
    hpux*) template=hpux ;;
B
Bruce Momjian 已提交
59
    irix*) template=irix ;;
60 61
 linux*|gnu*|k*bsd*-gnu)
           template=linux ;;
62
   mingw*) template=win32 ;;
63 64 65 66 67 68
  netbsd*) template=netbsd ;;
nextstep*) template=nextstep ;;
 openbsd*) template=openbsd ;;
     osf*) template=osf ;;
     qnx*) template=qnx4 ;;
     sco*) template=sco ;;
69
 solaris*) template=solaris ;;
70
   sunos*) template=sunos4 ;;
B
Bruce Momjian 已提交
71
 sysv4.2*)
72 73 74 75
        case $host_vendor in
          univel) template=univel ;;
        esac ;;
   sysv4*) template=svr4 ;;
76
   sysv5*) template=unixware ;;
77
  ultrix*) template=ultrix4 ;;
78
esac
79

80
  if test x"$template" = x"" ; then
81
    AC_MSG_ERROR([[
82 83
*******************************************************************
PostgreSQL has apparently not been ported to your platform yet.
84
To try a manual configuration, look into the src/template directory
85
for a similar platform and use the '--with-template=' option.
86 87

Please also contact <pgsql-ports@postgresql.org> to see about
88
rectifying this.  Include the above 'checking host system type...'
89 90
line.
*******************************************************************
91
]])
92
  fi
M
 
Marc G. Fournier 已提交
93

94
])
95

96
AC_MSG_RESULT([$template])
97

98 99
PORTNAME=$template
AC_SUBST(PORTNAME)
B
Bruce Momjian 已提交
100

101 102 103 104 105
# Initialize default assumption that we do not need separate assembly code
# for TAS (test-and-set).  This can be overridden by the template file
# when it's executed.
need_tas=no
tas_file=dummy.s
106

107

108

109 110 111
##
## Command line options
##
112

113 114 115 116 117 118 119 120 121 122 123
#
# Installation directory for documentation
#
PGAC_ARG(with, docdir, [  --with-docdir=DIR       install the documentation in DIR [[PREFIX/doc]]
  --without-docdir        do not install the documentation],
         [AC_MSG_ERROR([option --with-docdir requires an argument])],
         [docdir=],
         [docdir=$withval],
         [docdir='${prefix}/doc'])
AC_SUBST(docdir)

124

125 126 127
#
# Add non-standard directories to the include path
#
128
PGAC_ARG_REQ(with, includes, [  --with-includes=DIRS    look for additional header files in DIRS])
129

130

131 132 133
#
# Add non-standard directories to the library search path
#
134 135
PGAC_ARG_REQ(with, libraries, [  --with-libraries=DIRS   look for additional libraries in DIRS],
             [LIBRARY_DIRS=$withval])
136

137 138
PGAC_ARG_REQ(with, libs,      [  --with-libs=DIRS        alternative spelling of --with-libraries],
             [LIBRARY_DIRS=$withval])
139

140

141
#
142 143 144 145 146
# 64-bit integer date/time storage (--enable-integer-datetimes)
#
AC_MSG_CHECKING([whether to build with 64-bit integer date/time support])
PGAC_ARG_BOOL(enable, integer-datetimes, no, [  --enable-integer-datetimes  enable 64-bit integer date/time support],
              [AC_DEFINE([USE_INTEGER_DATETIMES], 1,
147
                         [Define to 1 if you want 64-bit integer timestamp and interval support. (--enable-integer-datetimes)])])
148 149 150
AC_MSG_RESULT([$enable_integer_datetimes])


P
Peter Eisentraut 已提交
151 152 153 154 155
#
# NLS
#
AC_MSG_CHECKING([whether NLS is wanted])
PGAC_ARG_OPTARG(enable, nls,
156
                [[  --enable-nls[=LANGUAGES]  enable Native Language Support]],
P
Peter Eisentraut 已提交
157 158
                [],
                [WANTED_LANGUAGES=$enableval],
159
                [AC_DEFINE(ENABLE_NLS, 1,
160
                           [Define to 1 if you want National Language Support. (--enable-nls)])])
P
Peter Eisentraut 已提交
161 162 163 164
AC_MSG_RESULT([$enable_nls])
AC_SUBST(enable_nls)
AC_SUBST(WANTED_LANGUAGES)

165 166 167 168
#
# Default port number (--with-pgport), default 5432
#
AC_MSG_CHECKING([for default port number])
169 170 171
PGAC_ARG_REQ(with, pgport, [  --with-pgport=PORTNUM   change default port number [5432]],
             [default_port=$withval],
             [default_port=5432])
172 173
AC_MSG_RESULT([$default_port])
# Need both of these because some places want an integer and some a string
174
AC_DEFINE_UNQUOTED(DEF_PGPORT, ${default_port},
175
[Define to the default TCP port number on which the server listens and
176 177 178
to which clients will try to connect.  This can be overridden at run-time,
but it's convenient if your clients have the right default compiled in.
(--with-pgport=PORTNUM)])
179
AC_DEFINE_UNQUOTED(DEF_PGPORT_STR, "${default_port}",
180
                   [Define to the default TCP port number as a string constant.])
181
AC_SUBST(default_port)
182

183 184 185 186
#
# Option to disable shared libraries
#
PGAC_ARG_BOOL(enable, shared, yes,
187
              [  --disable-shared        do not build shared libraries])
188 189
AC_SUBST(enable_shared)

190 191 192 193 194 195 196
#
# '-rpath'-like feature can be disabled
#
PGAC_ARG_BOOL(enable, rpath, yes,
              [  --disable-rpath         do not embed shared library search path in executables])
AC_SUBST(enable_rpath)

197 198 199 200
#
# Spinlocks
#
PGAC_ARG_BOOL(enable, spinlocks, yes,
201
              [  --disable-spinlocks     do not use spinlocks])
202

203 204 205 206 207
#
# --enable-debug adds -g to compiler flags
#
PGAC_ARG_BOOL(enable, debug, no,
              [  --enable-debug          build with debugging symbols (-g)])
208
AC_SUBST(enable_debug)
209

210
#
211 212 213
# C compiler
#

214 215 216
# For historical reasons you can also use --with-CC to specify the C compiler
# to use, although the standard way to do this is to set the CC environment
# variable.
217
PGAC_ARG_REQ(with, CC, [], [CC=$with_CC])
218

219 220 221 222 223
case $template in
  aix) pgac_cc_list="gcc xlc";;
 irix) pgac_cc_list="cc";; # no gcc
    *) pgac_cc_list="gcc cc";;
esac
224

225
AC_PROG_CC([$pgac_cc_list])
226

227
unset CFLAGS
228

229
#
230
# Read the template
231
#
232
. "$srcdir/src/template/$template" || exit
233

234 235 236 237 238 239
# CFLAGS are selected so:
# If the user specifies something in the environment, that is used.
# else:  If the template file set something, that is used.
# else:  If the compiler is GCC, then we use -O2.
# else:  If the compiler is something else, then we use -0.

240 241
if test "$ac_env_CFLAGS_set" = set; then
  CFLAGS=$ac_env_CFLAGS_value
242
elif test "${CFLAGS+set}" = set; then
243 244 245
  : # (keep what template set)
elif test "$GCC" = yes; then
  CFLAGS="-O2"
246
else
247 248 249 250
  # if the user selected debug mode, don't use -O
  if test "$enable_debug" != yes; then
    CFLAGS="-O"
  fi
251
fi
252

253 254 255 256 257 258 259 260 261 262 263 264
if test "$GCC" = yes; then
  CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wpointer-arith"

  # Some versions of GCC support some additional useful warning flags.
  # Check whether they are supported, and add them to CFLAGS if so.
  PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement])
  PGAC_PROG_CC_CFLAGS_OPT([-Wold-style-definition])
  PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels])

  # Disable strict-aliasing rules; needed for gcc 3.3+
  PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing])
fi
265

266
# supply -g if --enable-debug
267
if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then
268 269
  CFLAGS="$CFLAGS -g"
fi
270

271
AC_MSG_NOTICE([using CFLAGS=$CFLAGS])
272

B
Bruce Momjian 已提交
273
# We already have this in Makefile.win32, but configure needs it too
274
if test "$PORTNAME" = "win32"; then
275
  CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND"
B
Bruce Momjian 已提交
276 277
fi

278
# Check if the compiler still works with the template settings
279 280 281 282 283
AC_MSG_CHECKING([whether the C compiler still works])
AC_TRY_LINK([], [return 0;],
  [AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)
   AC_MSG_ERROR([cannot proceed])])
284

285
# Defend against gcc -ffast-math
286 287 288 289 290 291
if test "$GCC" = yes; then
AC_TRY_COMPILE([], [@%:@ifdef __FAST_MATH__
choke me
@%:@endif], [], [AC_MSG_ERROR([do not put -ffast-math in CFLAGS])])
fi

292
AC_PROG_CPP
293
AC_SUBST(GCC)
294

295
# Create compiler version string
296
if test x"$GCC" = x"yes" ; then
297
  cc_string="GCC `${CC} --version | sed q`"
298
else
299
  cc_string=$CC
300
fi
301 302 303
AC_DEFINE_UNQUOTED(PG_VERSION_STR,
                   ["PostgreSQL $PACKAGE_VERSION on $host, compiled by $cc_string"],
                   [A string containing the version number, platform, and C compiler])
304

305

306 307 308 309 310 311 312 313 314 315 316 317 318 319
#
# Set up TAS assembly code if needed; the template file has now had its
# chance to request this.
#
AC_CONFIG_LINKS([src/backend/port/tas.s:src/backend/port/tas/${tas_file}])

if test "$need_tas" = yes ; then
  TAS=tas.o
else
  TAS=""
fi
AC_SUBST(TAS)


P
Peter Eisentraut 已提交
320 321 322
#
# Automatic dependency tracking
#
323 324
PGAC_ARG_BOOL(enable, depend, no, [  --enable-depend         turn on automatic dependency tracking],
              [autodepend=yes])
P
Peter Eisentraut 已提交
325 326 327
AC_SUBST(autodepend)


328 329 330 331 332
#
# Enable assert checks
#
PGAC_ARG_BOOL(enable, cassert, no, [  --enable-cassert        enable assertion checks (for debugging)],
              [AC_DEFINE([USE_ASSERT_CHECKING], 1,
333
                         [Define to 1 to build with assertion checks. (--enable-cassert)])])
334 335 336 337 338 339


#
# Include directories
#
ac_save_IFS=$IFS
340
IFS="${IFS}${PATH_SEPARATOR}"
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
# SRCH_INC comes from the template file
for dir in $with_includes $SRCH_INC; do
  if test -d "$dir"; then
    INCLUDES="$INCLUDES -I$dir"
  else
    AC_MSG_WARN([*** Include directory $dir does not exist.])
  fi
done
IFS=$ac_save_IFS
AC_SUBST(INCLUDES)


#
# Library directories
#
ac_save_IFS=$IFS
357
IFS="${IFS}${PATH_SEPARATOR}"
358 359 360
# LIBRARY_DIRS comes from command line, SRCH_LIB from template file.
for dir in $LIBRARY_DIRS $SRCH_LIB; do
  if test -d "$dir"; then
361
    LIBDIRS="$LIBDIRS -L$dir"
362 363 364 365 366 367
  else
    AC_MSG_WARN([*** Library directory $dir does not exist.])
  fi
done
IFS=$ac_save_IFS

368
#
369
# Enable thread-safe client libraries
370
#
371
AC_MSG_CHECKING([allow thread-safe client libraries])
372 373
PGAC_ARG_BOOL(enable, thread-safety, no, [  --enable-thread-safety  make client libraries thread-safe])
PGAC_ARG_BOOL(enable, thread-safety-force, no, [  --enable-thread-safety-force  force thread-safety in spite of thread test failure])
374 375
if test "$enable_thread_safety" = yes -o \
        "$enable_thread_safety_force" = yes; then
376 377 378 379
  enable_thread_safety="yes"	# for 'force'
  AC_DEFINE([ENABLE_THREAD_SAFETY], 1,
          [Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety)])
fi
380 381
AC_MSG_RESULT([$enable_thread_safety])
AC_SUBST(enable_thread_safety)
382

383
#
384
# Optionally build Tcl modules (PL/Tcl)
385 386
#
AC_MSG_CHECKING([whether to build with Tcl])
387
PGAC_ARG_BOOL(with, tcl, no, [  --with-tcl              build Tcl modules (PL/Tcl)])
388 389 390
AC_MSG_RESULT([$with_tcl])
AC_SUBST([with_tcl])

391
# We see if the path to the Tcl/Tk configuration scripts is specified.
392
# This will override the use of tclsh to find the paths to search.
393

P
 
PostgreSQL Daemon 已提交
394
PGAC_ARG_REQ(with, tclconfig, [  --with-tclconfig=DIR    tclConfig.sh is in DIR])
395

396
#
397
# Optionally build Perl modules (PL/Perl)
398 399
#
AC_MSG_CHECKING([whether to build Perl modules])
400
PGAC_ARG_BOOL(with, perl, no, [  --with-perl             build Perl modules (PL/Perl)])
401 402 403
AC_MSG_RESULT([$with_perl])
AC_SUBST(with_perl)

404
#
405
# Optionally build Python modules (PL/Python)
406 407
#
AC_MSG_CHECKING([whether to build Python modules])
408
PGAC_ARG_BOOL(with, python, no, [  --with-python           build Python modules (PL/Python)])
409
AC_MSG_RESULT([$with_python])
410
AC_SUBST(with_python)
411

412 413 414
#
# Kerberos 5
#
415
AC_MSG_CHECKING([whether to build with Kerberos 5 support])
416
PGAC_ARG_BOOL(with, krb5, no, [  --with-krb5             build with Kerberos 5 support],
417
[
418
  AC_DEFINE(KRB5, 1, [Define to build with Kerberos 5 support. (--with-krb5)])
419
  krb_srvtab="FILE:\$(sysconfdir)/krb5.keytab"
420 421
])
AC_MSG_RESULT([$with_krb5])
422
AC_SUBST(with_krb5)
423 424


425
AC_SUBST(krb_srvtab)
426 427


428 429 430
#
# Kerberos configuration parameters
#
431
PGAC_ARG_REQ(with, krb-srvnam,
B
 
Bruce Momjian 已提交
432
             [  --with-krb-srvnam=NAME  name of the default service principal in Kerberos [[postgres]]],
433 434 435
             [],
             [with_krb_srvnam="postgres"])
AC_DEFINE_UNQUOTED([PG_KRB_SRVNAM], ["$with_krb_srvnam"],
B
 
Bruce Momjian 已提交
436
                   [Define to the name of the default PostgreSQL service principal in Kerberos. (--with-krb-srvnam=NAME)])
437 438


B
Bruce Momjian 已提交
439 440 441 442
#
# PAM
#
AC_MSG_CHECKING([whether to build with PAM support])
443 444
PGAC_ARG_BOOL(with, pam, no,
              [  --with-pam              build with PAM support],
445
              [AC_DEFINE([USE_PAM], 1, [Define to 1 to build with PAM support. (--with-pam)])])
446
AC_MSG_RESULT([$with_pam])
B
Bruce Momjian 已提交
447 448
AC_SUBST(with_pam)

449

450
#
451
# Bonjour
452
#
453 454 455 456 457 458
AC_MSG_CHECKING([whether to build with Bonjour support])
PGAC_ARG_BOOL(with, bonjour, no,
              [  --with-bonjour          build with Bonjour support],
              [AC_DEFINE([USE_BONJOUR], 1, [Define to 1 to build with Bonjour support. (--with-bonjour)])])
AC_MSG_RESULT([$with_bonjour])
AC_SUBST(with_bonjour)
459 460


461 462 463
#
# OpenSSL
#
464 465 466 467
AC_MSG_CHECKING([whether to build with OpenSSL support])
PGAC_ARG_BOOL(with, openssl, no, [  --with-openssl          build with OpenSSL support],
              [AC_DEFINE([USE_SSL], 1, [Define to build with (Open)SSL support. (--with-openssl)])])
AC_MSG_RESULT([$with_openssl])
468
AC_SUBST(with_openssl)
469 470


471 472 473 474 475
#
# Readline
#
PGAC_ARG_BOOL(with, readline, yes,
              [  --without-readline      do not use Readline])
476 477 478
# readline on MinGW has problems with backslashes in psql and other bugs.
# This is particularly a problem with non-US code pages.
# Therefore disable its use until we understand the cause. 2004-07-20
479
if test "$PORTNAME" = "win32"; then
480 481 482
  if test "$with_readline" = yes; then
    AC_MSG_WARN([*** Readline does not work on MinGW --- disabling])
    with_readline=no
483 484
  fi
fi
485

486 487 488 489 490 491

#
# Zlib
#
PGAC_ARG_BOOL(with, zlib, yes,
              [  --without-zlib          do not use Zlib])
492
AC_SUBST(with_zlib)
493

B
Bruce Momjian 已提交
494 495 496
#
# Elf
#
497

498
# Assume system is ELF if it predefines __ELF__ as 1,
499 500
# otherwise believe host_os based default.
case $host_os in
501 502
    freebsd1*|freebsd2*) elf=no;;
    freebsd3*|freebsd4*) elf=yes;;
503 504
esac

505 506 507 508 509
AC_EGREP_CPP(yes,
[#if __ELF__
  yes
#endif
],
510 511 512
[ELF_SYS=true],
[if test "X$elf" = "Xyes" ; then
  ELF_SYS=true
513
else
514 515
  ELF_SYS=
fi])
M
 
Marc G. Fournier 已提交
516
AC_SUBST(ELF_SYS)
517

B
Bruce Momjian 已提交
518 519 520
#
# Assignments
#
521

522
CPPFLAGS="$CPPFLAGS $INCLUDES"
523
LDFLAGS="$LDFLAGS $LIBDIRS"
524

525 526 527
AC_MSG_NOTICE([using CPPFLAGS=$CPPFLAGS])
AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS])

B
Bruce Momjian 已提交
528
AC_ARG_VAR(LDFLAGS_SL)
529

530
AC_PROG_AWK
531
PGAC_PATH_FLEX
532
AC_PROG_LN_S
533
PGAC_PROG_LD
534 535
AC_SUBST(LD)
AC_SUBST(with_gnu_ld)
536
case $host_os in sysv5*)
537 538 539 540 541 542 543 544 545
  AC_CACHE_CHECK([whether ld -R works], [pgac_cv_prog_ld_R],
  [
    pgac_save_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -Wl,-R/usr/lib"
    AC_TRY_LINK([], [], [pgac_cv_prog_ld_R=yes], [pgac_cv_prog_ld_R=no])
    LDFLAGS=$pgac_save_LDFLAGS
  ])
  ld_R_works=$pgac_cv_prog_ld_R
  AC_SUBST(ld_R_works)
esac
546
AC_PROG_RANLIB
547
AC_CHECK_PROGS(LORDER, lorder)
548
AC_PATH_PROG(TAR, tar)
549
PGAC_CHECK_STRIP
550 551

AC_CHECK_PROGS(YACC, ['bison -y'])
552 553

if test "$YACC"; then
554
  if $YACC --version | sed q | $AWK '{ if ($4 < 1.875) exit 0; else exit 1;}'; then
555
    AC_MSG_WARN([
556
*** If you are going to modify the grammar files or build from CVS, the installed
557
*** version of Bison is too old.  Bison version 1.875 or later is required.])
558 559 560
  fi
fi

561 562 563 564 565 566 567 568 569 570
if test -z "$YACC"; then
  AC_MSG_WARN([
*** Without Bison you will not be able to build PostgreSQL from CVS or
*** change any of the parser definition files.  You can obtain Bison from
*** a GNU mirror site.  (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this because the Bison
*** output is pre-generated.)  To use a different yacc program (possible,
*** but not recommended), set the environment variable YACC before running
*** 'configure'.])
fi
571
AC_SUBST(YFLAGS)
572

573 574
PGAC_PATH_PERL
if test "$with_perl" = yes; then
575
  PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib])
576 577 578
  PGAC_CHECK_PERL_EMBED_LDFLAGS
fi

579 580 581 582 583
if test "$with_python" = yes; then
  PGAC_PATH_PYTHON
  PGAC_CHECK_PYTHON_EMBED_SETUP
fi

584

T
Tom Lane 已提交
585
##
586 587 588
## Libraries
##

B
Bruce Momjian 已提交
589
if test "$PORTNAME" != "aix" -a "$PORTNAME" != "alpha"
590 591 592
then
	AC_CHECK_LIB(bsd,      main)
fi
593
AC_CHECK_LIB(util,     setproctitle)
594 595
AC_CHECK_LIB(m,        main)
AC_CHECK_LIB(dl,       main)
596 597
AC_CHECK_LIB(nsl,      main)
AC_CHECK_LIB(socket,   main)
598 599 600 601 602 603 604
AC_CHECK_LIB(ipc,      main)
AC_CHECK_LIB(IPC,      main)
AC_CHECK_LIB(lc,       main)
AC_CHECK_LIB(dld,      main)
AC_CHECK_LIB(ld,       main)
AC_CHECK_LIB(compat,   main)
AC_CHECK_LIB(BSD,      main)
605
AC_CHECK_LIB(gen,      main)
B
Bruce Momjian 已提交
606
AC_CHECK_LIB(PW,       main)
P
Peter Eisentraut 已提交
607
AC_CHECK_LIB(resolv,   main)
608
AC_SEARCH_LIBS(getopt_long, [getopt gnugetopt])
609
# QNX:
610
AC_CHECK_LIB(unix, main)
611
AC_SEARCH_LIBS(crypt,  crypt)
612
# BeOS:
613 614 615 616
if test "$PORTNAME" = "beos"
then
	AC_CHECK_LIB(bind, __inet_ntoa)
fi
617
# Solaris:
618
AC_SEARCH_LIBS(fdatasync, [rt posix4])
P
Peter Eisentraut 已提交
619 620
# Cygwin:
AC_CHECK_LIB(cygipc, shmget)
621 622 623 624 625
# WIN32:
if test "$PORTNAME" = "win32"
then
	AC_CHECK_LIB(wsock32, main)
fi
626

627 628 629 630
if test "$with_readline" = yes; then
  PGAC_CHECK_READLINE
  if test x"$pgac_cv_check_readline" = x"no"; then
    AC_MSG_ERROR([readline library not found
631 632
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
633 634 635 636 637 638 639
Use --without-readline to disable readline support.])
  fi
fi

if test "$with_zlib" = yes; then
  AC_CHECK_LIB(z, inflate, [],
               [AC_MSG_ERROR([zlib library not found
640 641
If you have zlib already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
642 643 644
Use --without-zlib to disable zlib support.])])
fi

645
if test "$enable_spinlocks" = yes; then
646 647 648 649 650 651
  AC_DEFINE(HAVE_SPINLOCKS, 1, [Define to 1 if you have spinlocks.])
else
  AC_MSG_WARN([
*** Not using spinlocks will cause poor performance.])
fi

652
if test "$with_krb5" = yes ; then
653 654 655 656 657 658 659 660 661 662 663
  if test "$PORTNAME" != "win32"; then
     AC_SEARCH_LIBS(com_err, [krb5 'krb5 -ldes -lasn1 -lroken' com_err], [],
                    [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
     AC_SEARCH_LIBS(krb5_encrypt, [krb5 'krb5 -ldes -lasn1 -lroken' crypto k5crypto], [],
                    [AC_MSG_ERROR([could not find function 'krb5_encrypt' required for Kerberos 5])])
     AC_SEARCH_LIBS(krb5_sendauth, [krb5 'krb5 -ldes -lasn1 -lroken'], [],
                    [AC_MSG_ERROR([could not find function 'krb5_sendauth' required for Kerberos 5])])
  else
     AC_SEARCH_LIBS(com_err, 'comerr32 -lkrb5_32', [],
                    [AC_MSG_ERROR([could not find function 'com_err' required for Kerberos 5])])
  fi
664 665 666 667
fi

if test "$with_openssl" = yes ; then
  dnl Order matters!
668 669 670 671 672 673 674
  if test "$PORTNAME" != "win32"; then
     AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
     AC_CHECK_LIB(ssl,    SSL_library_init, [], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
  else
     AC_CHECK_LIB(eay32, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'eay32' is required for OpenSSL])])
     AC_CHECK_LIB(ssleay32,    SSL_library_init, [], [AC_MSG_ERROR([library 'ssleay32' is required for OpenSSL])])
  fi
675
fi
676

B
Bruce Momjian 已提交
677
if test "$with_pam" = yes ; then
678
  AC_CHECK_LIB(pam,    pam_start, [], [AC_MSG_ERROR([library 'pam' is required for PAM])])
B
Bruce Momjian 已提交
679 680
fi

681

682 683 684
##
## Header files
##
685

686
dnl sys/socket.h is required by AC_FUNC_ACCEPT_ARGTYPES
687
AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h langinfo.h poll.h pwd.h sys/ipc.h sys/poll.h sys/pstat.h sys/select.h sys/sem.h sys/socket.h sys/shm.h sys/time.h sys/un.h termios.h utime.h wchar.h wctype.h kernel/OS.h kernel/image.h SupportDefs.h])
688

689 690
# At least on IRIX, cpp test for netinet/tcp.h will fail unless
# netinet/in.h is included first.
691 692
AC_CHECK_HEADERS(netinet/in.h)
AC_CHECK_HEADERS(netinet/tcp.h, [], [],
693 694
[AC_INCLUDES_DEFAULT
#ifdef HAVE_NETINET_IN_H
695 696
#include <netinet/in.h>
#endif
697
])
698

699
if expr x"$pgac_cv_check_readline" : 'x-lreadline' >/dev/null ; then
700
  AC_CHECK_HEADERS(readline/readline.h, [],
701 702
        [AC_CHECK_HEADERS(readline.h, [],
                [AC_MSG_ERROR([readline header not found
703 704
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
705
Use --without-readline to disable readline support.])])])
706
  AC_CHECK_HEADERS(readline/history.h, [],
707 708
        [AC_CHECK_HEADERS(history.h, [],
                [AC_MSG_ERROR([history header not found
709 710
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
711 712 713 714
Use --without-readline to disable readline support.])])])
fi

if expr x"$pgac_cv_check_readline" : 'x-ledit' >/dev/null ; then
715 716 717 718
# Some installations of libedit usurp /usr/include/readline/, which seems
# bad practice, since in combined installations readline will have its headers
# there.  We might have to resort to AC_EGREP checks to make sure we found
# the proper header...
719
  AC_CHECK_HEADERS(editline/readline.h, [],
720 721 722
        [AC_CHECK_HEADERS(readline.h, [],
                [AC_CHECK_HEADERS(readline/readline.h, [],
                        [AC_MSG_ERROR([readline header not found
723 724
If you have libedit already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
725
Use --without-readline to disable libedit support.])])])])
726
  AC_CHECK_HEADERS(editline/history.h, [],
727 728 729
        [AC_CHECK_HEADERS(history.h, [],
                [AC_CHECK_HEADERS(readline/history.h, [],
                        [AC_MSG_ERROR([history header not found
730 731
If you have libedit already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
732
Use --without-readline to disable libedit support.])])])])
733 734 735 736
fi

if test "$with_zlib" = yes; then
  AC_CHECK_HEADER(zlib.h, [], [AC_MSG_ERROR([zlib header not found
737
If you have zlib already installed, see config.log for details on the
738
failure.  It is possible the compiler isn't looking in the proper directory.
739 740
Use --without-zlib to disable zlib support.])])
fi
741

742 743 744 745 746
if test "$with_krb5" = yes ; then
  AC_CHECK_HEADER(krb5.h, [], [AC_MSG_ERROR([header file <krb5.h> is required for Kerberos 5])])
fi

if test "$with_openssl" = yes ; then
747 748
  AC_CHECK_HEADER(openssl/ssl.h, [], [AC_MSG_ERROR([header file <openssl/ssl.h> is required for OpenSSL])])
  AC_CHECK_HEADER(openssl/err.h, [], [AC_MSG_ERROR([header file <openssl/err.h> is required for OpenSSL])])
749 750
fi

B
Bruce Momjian 已提交
751
if test "$with_pam" = yes ; then
B
Bruce Momjian 已提交
752 753 754
  AC_CHECK_HEADERS(security/pam_appl.h, [],
                   [AC_CHECK_HEADERS(pam/pam_appl.h, [],
                                     [AC_MSG_ERROR([header file <security/pam_appl.h> or <pam/pam_appl.h> is required for PAM.])])])
B
Bruce Momjian 已提交
755 756
fi

757 758
if test "$with_bonjour" = yes ; then
  AC_CHECK_HEADER(DNSServiceDiscovery/DNSServiceDiscovery.h, [], [AC_MSG_ERROR([header file <DNSServiceDiscovery/DNSServiceDiscovery.h> is required for Bonjour])])
759 760
fi

761

762 763 764
##
## Types, structures, compiler characteristics
##
765

766
m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that.
767 768
AC_C_CONST
AC_C_INLINE
769
AC_C_STRINGIZE
770
PGAC_C_SIGNED
771
AC_C_VOLATILE
772
PGAC_C_FUNCNAME_SUPPORT
773
PGAC_STRUCT_TIMEZONE
774
PGAC_UNION_SEMUN
775
PGAC_STRUCT_SOCKADDR_UN
B
Bruce Momjian 已提交
776
PGAC_STRUCT_SOCKADDR_STORAGE
777
PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS
778
PGAC_STRUCT_ADDRINFO
779

780 781
AC_CHECK_TYPES([struct cmsgcred, struct fcred, struct sockcred], [], [],
[#include <sys/param.h>
782
#include <sys/types.h>
783 784 785
#include <sys/socket.h>
#include <sys/ucred.h>])

786 787
AC_CHECK_TYPES([struct option], [], [],
[#ifdef HAVE_GETOPT_H
T
Tom Lane 已提交
788
#include <getopt.h>
789 790
#endif])

791 792 793 794 795 796 797 798 799
if test "$with_zlib" = yes; then
  # Check that <zlib.h> defines z_streamp (versions before about 1.0.4
  # did not).  While we could work around the lack of z_streamp, it
  # seems unwise to encourage people to use such old zlib versions...
  AC_CHECK_TYPE(z_streamp, [], [AC_MSG_ERROR([zlib version is too old
Use --without-zlib to disable zlib support.])],
                [#include <zlib.h>])
fi

800 801
if test "$with_krb5" = yes; then
# Check for differences between MIT and Heimdal (KTH) releases
802
  AC_CHECK_MEMBERS(krb5_ticket.enc_part2, [],
803
                   [AC_CHECK_MEMBERS(krb5_ticket.client, [],
804 805 806
                                     [AC_MSG_ERROR([could not determine how to get client name from Kerberos 5 ticket])],
                                     [#include <krb5.h>])],
                   [#include <krb5.h>])
807 808
  AC_CHECK_MEMBERS(krb5_error.text.data, [],
                   [AC_CHECK_MEMBERS(krb5_error.e_data, [],
809 810
                                     [AC_MSG_ERROR([could not determine how to extract Kerberos 5 error messages])],
                                     [#include <krb5.h>])],
811
                   [#include <krb5.h>])
812 813
fi

814 815 816
##
## Functions, global variables
##
817

818
PGAC_VAR_INT_TIMEZONE
819
AC_FUNC_ACCEPT_ARGTYPES
820
PGAC_FUNC_GETTIMEOFDAY_1ARG
821

822
AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getpeereid memmove poll pstat readlink setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs])
823

824
AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>])
M
 
Marc G. Fournier 已提交
825

826
HAVE_IPV6=no
827
AC_CHECK_TYPE([struct sockaddr_in6],
828 829 830
        [AC_DEFINE(HAVE_IPV6, 1, [Define to 1 if you have support for IPv6.])
         HAVE_IPV6=yes],
        [],
831
[$ac_includes_default
832
#include <netinet/in.h>])
833
AC_SUBST(HAVE_IPV6)
834

835 836 837 838 839
AC_CACHE_CHECK([for PS_STRINGS], [pgac_cv_var_PS_STRINGS],
[AC_TRY_LINK(
[#include <machine/vmparam.h>
#include <sys/exec.h>
],
840 841
[PS_STRINGS->ps_nargvstr = 1;
PS_STRINGS->ps_argvstr = "foo";],
842 843 844
[pgac_cv_var_PS_STRINGS=yes],
[pgac_cv_var_PS_STRINGS=no])])
if test "$pgac_cv_var_PS_STRINGS" = yes ; then
845
  AC_DEFINE([HAVE_PS_STRINGS], [], [Define to 1 if the PS_STRINGS thing exists.])
846
fi
M
 
Marc G. Fournier 已提交
847

848 849 850 851

# We use our snprintf.c emulation if either snprintf() or vsnprintf()
# is missing.  Yes, there are machines that have only one.  We may
# also decide to use snprintf.c if snprintf() is present but does not
852
# have all the features we need --- see below.
853

854 855 856
pgac_need_repl_snprintf=no
AC_CHECK_FUNCS(snprintf, [], pgac_need_repl_snprintf=yes)
AC_CHECK_FUNCS(vsnprintf, [], pgac_need_repl_snprintf=yes)
857 858 859 860 861 862 863 864 865


# Check whether <stdio.h> declares snprintf() and vsnprintf(); if not,
# include/c.h will provide declarations.  Note this is a separate test
# from whether the functions exist in the C library --- there are
# systems that have the functions but don't bother to declare them :-(

AC_CHECK_DECLS([snprintf, vsnprintf])

866 867 868

# do this one the hard way in case isinf() is a macro
AC_CACHE_CHECK([for isinf], ac_cv_func_isinf,
869
[AC_TRY_LINK(
870 871
[#include <math.h>
],
872
[double x = 0.0; int res = isinf(x);],
873 874 875 876
[ac_cv_func_isinf=yes],
[ac_cv_func_isinf=no])])

if test $ac_cv_func_isinf = yes ; then
877
  AC_DEFINE(HAVE_ISINF, 1, [Define to 1 if you have isinf().])
878
else
879
  AC_LIBOBJ(isinf)
880 881
  # Look for a way to implement a substitute for isinf()
  AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
882
fi
883

884
AC_REPLACE_FUNCS([crypt fseeko getopt getrusage inet_aton random rint srandom strdup strerror strtol strtoul unsetenv])
885

886 887 888 889 890
# System's version of getaddrinfo(), if any, may be used only if we found
# a definition for struct addrinfo; see notes in src/include/getaddrinfo.h.
# (Note: the AC_REPLACE_FUNCS probe fails on Windows, where the available
# versions of getaddrinfo don't follow normal C call protocol.  This is OK
# because we want to use our own getaddrinfo.c on Windows anyway.)
891 892 893 894 895
if test x"$ac_cv_type_struct_addrinfo" = xyes ; then
  AC_REPLACE_FUNCS([getaddrinfo])
else
  AC_LIBOBJ(getaddrinfo)
fi
896

897 898 899 900 901 902 903
# similarly, use system's getopt_long() only if system provides struct option.
if test x"$ac_cv_type_struct_option" = xyes ; then
  AC_REPLACE_FUNCS([getopt_long])
else
  AC_LIBOBJ(getopt_long)
fi

B
Bruce Momjian 已提交
904
# BSD/OS & NetBSD use a custom fseeko/ftello built on fsetpos/fgetpos
905
# We override the previous test that said fseeko/ftello didn't exist
B
Bruce Momjian 已提交
906 907
# OS tests are also done in include/c.h and port/fseeko.c
case $host_os in bsdi*|netbsd*)
908 909 910
ac_cv_func_fseeko=yes
esac

B
Bruce Momjian 已提交
911
# Solaris has a very slow qsort in certain cases, so we replace it.
912 913 914
if test "$PORTNAME" = "solaris"; then
AC_LIBOBJ(qsort)
fi
915

B
Bruce Momjian 已提交
916
# Win32 support
917
if test "$PORTNAME" = "win32"; then
918
AC_LIBOBJ(gettimeofday)
919
AC_LIBOBJ(kill)
920
AC_LIBOBJ(open)
B
Bruce Momjian 已提交
921 922 923
AC_LIBOBJ(rand)
AC_DEFINE([HAVE_SYMLINK], 1,
          [Define to 1 if you have the `symlink' function.])
924
fi
B
Bruce Momjian 已提交
925

926 927 928
if test "$with_readline" = yes; then
  PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
  AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function])
929
  AC_CHECK_FUNCS([replace_history_entry])
930
fi
931

932

933 934
dnl Cannot use AC_CHECK_FUNC because finite may be a macro
AC_MSG_CHECKING(for finite)
935
AC_TRY_LINK([#include <math.h>],
936
            [int dummy=finite(1.0);],
937
            [AC_DEFINE(HAVE_FINITE, 1, [Define to 1 if you have finite().])
938 939
AC_MSG_RESULT(yes)],
            [AC_MSG_RESULT(no)])
940

941 942
dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro
dnl (especially on GNU libc)
943
dnl See also comments in c.h.
944 945
AC_MSG_CHECKING(for sigsetjmp)
AC_TRY_LINK([#include <setjmp.h>],
946
            [sigjmp_buf x; sigsetjmp(x, 1);],
947
            [AC_DEFINE(HAVE_SIGSETJMP, 1, [Define to 1 if you have sigsetjmp().])
948 949
AC_MSG_RESULT(yes)],
            [AC_MSG_RESULT(no)])
950

B
Bruce Momjian 已提交
951
AC_CHECK_FUNC(syslog,
952 953
              [AC_CHECK_HEADER(syslog.h,
                               [AC_DEFINE(HAVE_SYSLOG, 1, [Define to 1 if you have the syslog interface.])])])
954

955 956 957 958 959 960
AC_CACHE_CHECK([for optreset], pgac_cv_var_int_optreset,
[AC_TRY_LINK([#include <unistd.h>],
  [extern int optreset; optreset = 1;],
  [pgac_cv_var_int_optreset=yes],
  [pgac_cv_var_int_optreset=no])])
if test x"$pgac_cv_var_int_optreset" = x"yes"; then
961
  AC_DEFINE(HAVE_INT_OPTRESET, 1, [Define to 1 if you have the global variable 'int optreset'.])
962 963
fi

964 965 966 967 968 969
AC_CHECK_FUNCS([strtoll strtoq], [break])
AC_CHECK_FUNCS([strtoull strtouq], [break])

# Check for one of atexit() or on_exit()
AC_CHECK_FUNCS(atexit, [],
               [AC_CHECK_FUNCS(on_exit, [],
970
               [AC_MSG_ERROR([neither atexit() nor on_exit() found])])])
971

P
Peter Eisentraut 已提交
972 973
AC_FUNC_FSEEKO

974 975 976 977 978
#
# Pthreads
#
# For each platform, we need to know about any special compile and link
# libraries, and whether the normal C function names are thread-safe.
979
# See the comment at the top of src/port/thread.c for more information.
980
#
981
if test "$enable_thread_safety" = yes; then
982 983
ACX_PTHREAD	# set thread flags

B
Bruce Momjian 已提交
984 985 986 987 988
# Some platforms use these, so just defineed them.  They can't hurt if they
# are not supported.
PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS"


989 990 991
# At this point, we don't want to muck with the compiler name for threading.
# Let's see who fails, perhaps AIX.  2004-04-23
if test "$PTHREAD_CC" != "$CC"; then
992
AC_MSG_ERROR([
993 994
PostgreSQL does not support platforms that require a special
compiler binary for thread-safety.
995 996 997
])
fi

998 999 1000 1001 1002 1003
if test "$THREAD_SUPPORT" = no; then
AC_MSG_ERROR([
Cannot enable threads on your platform.
Your platform is known to not support thread-safe programs.
For details, compile and run src/bin/pg_thread_test.
])
1004 1005 1006
fi

# Check for *_r functions
1007
_CFLAGS="$CFLAGS"
1008
_LIBS="$LIBS"
1009 1010
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$LIBS $PTHREAD_LIBS"
1011 1012 1013

AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --enable-thread-safety])])

B
Bruce Momjian 已提交
1014
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
1015

B
Bruce Momjian 已提交
1016
# Do test here with the proper thread flags
1017
PGAC_FUNC_GETPWUID_R_5ARG
1018
PGAC_FUNC_STRERROR_R_INT
1019

1020 1021 1022
CFLAGS="$_CFLAGS"
LIBS="$_LIBS"

1023 1024
else
# do not use values from template file
1025 1026
PTHREAD_CFLAGS=
PTHREAD_LIBS=
1027
fi
1028

1029 1030
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_LIBS)
1031

1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047

# This test makes sure that run tests work at all.  Sometimes a shared
# library is found by the linker, but the runtime linker can't find it.
# This check should come after all modifications of compiler or linker
# variables, and before any other run tests.
AC_MSG_CHECKING([test program])
AC_TRY_RUN([int main() { return 0; }],
[AC_MSG_RESULT(ok)],
[AC_MSG_RESULT(failed)
AC_MSG_ERROR([[
*** Could not execute a simple test program.  This may be a problem
*** related to locating shared libraries.  Check the file 'config.log'
*** for the exact reason.]])],
[AC_MSG_RESULT([cross-compiling])])


1048
# Force use of our snprintf if system's doesn't do arg control
1049
# This feature is used by NLS
1050 1051 1052 1053 1054 1055 1056
if test "$enable_nls" = yes &&
   test $pgac_need_repl_snprintf = no &&
# On Win32, libintl replaces snprintf() with its own version that 
# understands arg control, so we don't need our own.  In fact, it 
# also uses macros that conflict with ours, so we _can't_ use
# our own.
   test "$PORTNAME" != "win32"; then
1057 1058 1059 1060 1061 1062 1063
  PGAC_FUNC_PRINTF_ARG_CONTROL
  if test $pgac_cv_printf_arg_control != yes ; then
    pgac_need_repl_snprintf=yes
  fi
fi


1064
dnl Check to see if we have a working 64-bit integer type.
1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076
dnl This breaks down into two steps:
dnl (1) figure out if the compiler has a 64-bit int type with working
dnl arithmetic, and if so
dnl (2) see whether snprintf() can format the type correctly.  (Currently,
dnl snprintf is the only library routine we really need for int8 support.)
dnl It's entirely possible to have a compiler that handles a 64-bit type
dnl when the C library doesn't; this is fairly likely when using gcc on
dnl an older platform, for example.
dnl If there is no native snprintf() or it does not handle the 64-bit type,
dnl we force our own version of snprintf() to be used instead.
dnl Note this test must be run after our initial check for snprintf/vsnprintf.

1077
PGAC_TYPE_64BIT_INT([long int])
1078

1079 1080
if test x"$HAVE_LONG_INT_64" = x"no" ; then
  PGAC_TYPE_64BIT_INT([long long int])
1081 1082
fi

1083

1084 1085
dnl If we need to use "long long int", figure out whether nnnLL notation works.

1086
if test x"$HAVE_LONG_LONG_INT_64" = xyes ; then
1087 1088 1089 1090 1091
  AC_TRY_COMPILE([
#define INT64CONST(x)  x##LL
long long int foo = INT64CONST(0x1234567890123456);
],
	[],
1092
	[AC_DEFINE(HAVE_LL_CONSTANTS, 1, [Define to 1 if constants of type 'long long int' should have the suffix LL.])],
1093 1094 1095 1096
	[])
fi


1097 1098
# If we found "long int" is 64 bits, assume snprintf handles it.  If
# we found we need to use "long long int", better check.  We cope with
1099 1100
# snprintfs that use %lld, %qd, or %I64d as the format.  If none of these
# work, fall back to our own snprintf emulation (which we know uses %lld).
1101

1102
if test "$HAVE_LONG_LONG_INT_64" = yes ; then
1103
  if test $pgac_need_repl_snprintf = no; then
1104 1105 1106 1107 1108 1109
    PGAC_FUNC_SNPRINTF_LONG_LONG_INT_FORMAT
    if test "$LONG_LONG_INT_FORMAT" = ""; then
      # Force usage of our own snprintf, since system snprintf is broken
      pgac_need_repl_snprintf=yes
      LONG_LONG_INT_FORMAT='%lld'
    fi
1110
  else
1111 1112
    # Here if we previously decided we needed to use our own snprintf
    LONG_LONG_INT_FORMAT='%lld'
1113
  fi
1114
  LONG_LONG_UINT_FORMAT=`echo "$LONG_LONG_INT_FORMAT" | sed 's/d$/u/'`
1115
  INT64_FORMAT="\"$LONG_LONG_INT_FORMAT\""
1116
  UINT64_FORMAT="\"$LONG_LONG_UINT_FORMAT\""
1117 1118 1119
else
  # Here if we are not using 'long long int' at all
  INT64_FORMAT='"%ld"'
1120
  UINT64_FORMAT='"%lu"'
1121 1122
fi

1123
AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT,
1124
                   [Define to the appropriate snprintf format for 64-bit ints, if any.])
1125

1126 1127 1128
AC_DEFINE_UNQUOTED(UINT64_FORMAT, $UINT64_FORMAT,
                   [Define to the appropriate snprintf format for unsigned 64-bit ints, if any.])

1129 1130
# Now we have checked all the reasons to replace snprintf
if test $pgac_need_repl_snprintf = yes; then
1131
  AC_DEFINE(USE_SNPRINTF, 1, [Use replacement snprintf() functions.])
1132 1133 1134
  AC_LIBOBJ(snprintf)
fi

1135
# Need a #define for the size of Datum (unsigned long)
1136
AC_CHECK_SIZEOF([unsigned long])
1137

1138 1139 1140
# And one for the size of size_t (enables tweaks for > 32bit address space)
AC_CHECK_SIZEOF([size_t])

1141
# Determine memory alignment requirements for the basic C data types.
1142

1143 1144 1145
PGAC_CHECK_ALIGNOF(short)
PGAC_CHECK_ALIGNOF(int)
PGAC_CHECK_ALIGNOF(long)
1146
if test x"$HAVE_LONG_LONG_INT_64" = x"yes" ; then
1147
  PGAC_CHECK_ALIGNOF(long long int)
1148
fi
1149
PGAC_CHECK_ALIGNOF(double)
1150

1151 1152 1153
# Compute maximum alignment of any basic type.
# We assume long's alignment is at least as strong as char, short, or int;
# but we must check long long (if it exists) and double.
1154

1155 1156 1157 1158 1159 1160
MAX_ALIGNOF=$pgac_cv_alignof_long
if test $MAX_ALIGNOF -lt $pgac_cv_alignof_double ; then
  MAX_ALIGNOF=$pgac_cv_alignof_double
fi
if test x"$HAVE_LONG_LONG_INT_64" = xyes && test $MAX_ALIGNOF -lt $pgac_cv_alignof_long_long_int ; then
  MAX_ALIGNOF="$pgac_cv_alignof_long_long_int"
1161
fi
1162
AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any C data type.])
1163

1164

1165
# Some platforms predefine the types int8, int16, etc.  Only check
1166 1167 1168
# a (hopefully) representative subset.
AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [],
[#include <stdio.h>
1169 1170
#ifdef HAVE_SUPPORTDEFS_H
#include <SupportDefs.h>
1171
#endif])
1172

1173 1174
# We also check for sig_atomic_t, which *should* be defined per ANSI
# C, but is missing on some old platforms.
1175
AC_CHECK_TYPES(sig_atomic_t, [], [], [#include <signal.h>])
1176

1177

1178 1179
if test x"$template" != x"win32"
then
1180
PGAC_FUNC_POSIX_SIGNALS
1181 1182 1183 1184 1185 1186
if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; then
  AC_MSG_ERROR([
*** Thread-safety requires POSIX signals, which are not supported by your
*** operating system.
])
fi
1187
fi
1188

P
Peter Eisentraut 已提交
1189 1190 1191
if test $ac_cv_func_fseeko = yes; then
AC_SYS_LARGEFILE
fi
1192

1193 1194 1195
# SunOS doesn't handle negative byte comparisons properly with +/- return
AC_FUNC_MEMCMP

1196

1197 1198
# Select semaphore implementation type.
if test x"$USE_NAMED_POSIX_SEMAPHORES" = x"1" ; then
1199
  AC_DEFINE(USE_NAMED_POSIX_SEMAPHORES, 1, [Define to select named POSIX semaphores.])
1200 1201 1202
  SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c"
else
  if test x"$USE_UNNAMED_POSIX_SEMAPHORES" = x"1" ; then
1203
    AC_DEFINE(USE_UNNAMED_POSIX_SEMAPHORES, 1, [Define to select unnamed POSIX semaphores.])
1204 1205
    SEMA_IMPLEMENTATION="src/backend/port/posix_sema.c"
  else
1206
    AC_DEFINE(USE_SYSV_SEMAPHORES, 1, [Define to select SysV-style semaphores.])
1207 1208 1209 1210 1211 1212
    SEMA_IMPLEMENTATION="src/backend/port/sysv_sema.c"
  fi
fi


# Select shared-memory implementation type.
1213
AC_DEFINE(USE_SYSV_SHARED_MEMORY, 1, [Define to select SysV-style shared memory.])
1214 1215 1216
SHMEM_IMPLEMENTATION="src/backend/port/sysv_shmem.c"


1217 1218 1219 1220
if test "$enable_nls" = yes ; then
  PGAC_CHECK_GETTEXT
fi

1221 1222 1223
# Check for Tcl configuration script tclConfig.sh
if test "$with_tcl" = yes; then
    PGAC_PATH_TCLCONFIGSH([$with_tclconfig])
1224
    PGAC_EVAL_TCLCONFIGSH([$TCL_CONFIG_SH],
1225
                          [TCL_INCLUDE_SPEC,TCL_LIB_FILE,TCL_LIBS,TCL_LIB_SPEC,TCL_SHARED_BUILD])
1226
    AC_SUBST(TCL_SHLIB_LD_LIBS)dnl don't want to double-evaluate that one
1227 1228 1229 1230 1231
    # now that we have TCL_INCLUDE_SPEC, we can check for <tcl.h>
    ac_save_CPPFLAGS=$CPPFLAGS
    CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS"
    AC_CHECK_HEADER(tcl.h, [], [AC_MSG_ERROR([header file <tcl.h> is required for Tcl])])
    CPPFLAGS=$ac_save_CPPFLAGS
B
Bruce Momjian 已提交
1232 1233
fi

1234 1235 1236 1237
#
# Check for DocBook and tools
#
PGAC_PROG_NSGMLS
1238
PGAC_PROG_JADE
P
Peter Eisentraut 已提交
1239
PGAC_CHECK_DOCBOOK(4.2)
1240 1241 1242
PGAC_PATH_DOCBOOK_STYLESHEETS
PGAC_PATH_COLLATEINDEX
AC_CHECK_PROGS(SGMLSPL, sgmlspl)
1243

1244 1245 1246 1247 1248
# Thread testing

# We have to run the thread test near the end so we have all our symbols
# defined.  Cross compiling throws a warning.
#
1249
if test "$enable_thread_safety_force" = yes; then
1250 1251
if test x"$template" != x"win32"
then
1252 1253 1254 1255 1256 1257
  AC_MSG_WARN([
*** Skipping thread test program.  --enable-thread-safety-force was used.
*** Run the program in src/tools/thread on the your machine and add
proper locking function calls to your applications to guarantee thread
safety.
])
1258 1259 1260
else
AC_MSG_WARN([*** Skipping thread test on Win32])
fi
1261
elif test "$enable_thread_safety" = yes; then
1262 1263
if test x"$template" != x"win32"
then
1264 1265 1266 1267 1268 1269
AC_MSG_CHECKING([thread safety of required library functions])

_CFLAGS="$CFLAGS"
_LIBS="$LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS -DIN_CONFIGURE"
LIBS="$LIBS $PTHREAD_LIBS"
1270
AC_TRY_RUN([#include "$srcdir/src/tools/thread/thread_test.c"],
1271 1272
  [AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)
B
Bruce Momjian 已提交
1273 1274
  AC_MSG_ERROR([
*** Thread test program failed.  Your platform is not thread-safe.  
1275 1276 1277 1278 1279 1280 1281
*** Check the file 'config.log'for the exact reason.
***
*** You can use the configure option --enable-thread-safety-force
*** to force threads to be enabled.  However, you must then run
*** the program in src/tools/thread and add locking function calls
*** to your applications to guarantee thread safety.
])],
1282 1283 1284
  [AC_MSG_RESULT(maybe)
  AC_MSG_WARN([
*** Skipping thread test program because of cross-compile build.
1285
*** Run the program in src/tools/thread on the target machine.
1286 1287 1288
])])
CFLAGS="$_CFLAGS"
LIBS="$_LIBS"
1289 1290 1291
else
AC_MSG_WARN([*** Skipping thread test on Win32])
fi
1292
fi
1293

1294
# prepare build tree if outside source tree
1295 1296 1297
# Note 1: test -ef might not exist, but it's more reliable than `pwd`.
# Note 2: /bin/pwd might be better than shell's built-in at getting
#         a symlink-free name.
1298 1299 1300 1301 1302
if ( test "$srcdir" -ef . ) >/dev/null 2>&1 || test "`cd $srcdir && /bin/pwd`" = "`/bin/pwd`"; then
  vpath_build=no
else
  vpath_build=yes
  if test "$no_create" != yes; then
1303 1304 1305
    _AS_ECHO_N([preparing build tree... ])
    pgac_abs_top_srcdir=`cd "$srcdir" && pwd`
    $SHELL "$ac_aux_dir/prep_buildtree" "$pgac_abs_top_srcdir" "." \
1306 1307
      || AC_MSG_ERROR(failed)
    AC_MSG_RESULT(done)
1308
  fi
1309
fi
1310
AC_SUBST(vpath_build)
1311

1312 1313 1314 1315 1316

AC_CONFIG_FILES([GNUmakefile src/Makefile.global])

AC_CONFIG_LINKS([
  src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c
1317 1318
  src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION}
  src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION}
1319 1320 1321 1322 1323
  src/include/dynloader.h:src/backend/port/dynloader/${template}.h
  src/include/pg_config_os.h:src/include/port/${template}.h
  src/Makefile.port:src/makefiles/Makefile.${template}
])

1324
if test "$PORTNAME" = "win32"; then
1325
AC_CONFIG_COMMANDS([check_win32_symlinks],[
1326 1327
# Links sometimes fail undetected on Mingw - 
# so here we detect it and warn the user
1328
for FILE in $CONFIG_LINKS
1329 1330
 do
	# test -e works for symlinks in the MinGW console
1331
	test -e `expr "$FILE" : '\([[^:]]*\)'` || AC_MSG_WARN([*** link for $FILE - please fix by hand])
1332
 done
1333
])
1334
fi
1335

1336 1337 1338 1339 1340 1341 1342 1343
AC_CONFIG_HEADERS([src/include/pg_config.h],
[
# Update timestamp for pg_config.h (see Makefile.global)
echo >src/include/stamp-h
])

AC_OUTPUT