Newer
Older
dnl Process this file with autoconf to produce a configure script.
AC_INIT(backend/access/common/heaptuple.c)
AC_PREFIX_DEFAULT(/usr/local/pgsql)
AC_CONFIG_HEADER(include/config.h)
dnl Autoconf 2.12, at least, generates a useless relative path to install-sh
dnl unless we do this.
AC_CONFIG_AUX_DIR(`pwd`)
Marc G. Fournier
committed
tas_file=dummy.s
case "$host_os" in
solaris*)
sparc) os=solaris_sparc need_tas=yes tas_file=solaris_sparc.s ;;
i386) os=solaris_i386 need_tas=yes tas_file=solaris_i386.s ;;
aux*) os=aux need_tas=no ;;
linux*) os=linux need_tas=no ;;
bsdi*) os=bsdi need_tas=no ;;
netbsd*)
os=bsd need_tas=no
case "$host_cpu" in
powerpc) elf=yes ;;
esac ;;
openbsd*) os=bsd need_tas=no ;;
dgux*) os=dgux need_tas=no ;;
aix*) os=aix need_tas=no ;;
nextstep*) os=nextstep need_tas=no ;;
ultrix*) os=ultrix4 need_tas=no ;;
irix*) os=irix5 need_tas=no ;;
Marc G. Fournier
committed
hpux*) os=hpux need_tas=yes tas_file=hpux.s ;;
osf*) os=alpha need_tas=no ;;
sco*) os=sco need_tas=no ;;
machten*) os=machten need_tas=no ;;
cygwin*) os=win need_tas=no ;;
Marc G. Fournier
committed
case "$host_vendor" in
univel) os=univel need_tas=no ;;
*) os=unknown need_tas=no ;;
Marc G. Fournier
committed
esac ;;
unixware*) os=unixware need_tas=no ;;
qnx4*) os=qnx4 need_tas=no ;;
*) echo ""
echo "*************************************************************"
echo "configure does not currently recognize your operating system,"
echo "therefore you must do a manual configuration of:"
Marc G. Fournier
committed
echo "$host_os"
echo "Please contact scrappy@hub.org to see about rectifying this, "
echo "including the above 'checking host system type...' line "
echo "*************************************************************"
echo ""
exit;;
esac
PORTNAME=${os}
CPU=${host_cpu}
AC_LINK_FILES(backend/port/dynloader/${os}.c, backend/port/dynloader.c)
AC_LINK_FILES(backend/port/dynloader/${os}.h, include/dynloader.h)
AC_LINK_FILES(include/port/${os}.h, include/os.h)
AC_LINK_FILES(makefiles/Makefile.${os}, Makefile.port)
if test "X$need_tas" = "Xyes"
Marc G. Fournier
committed
AC_LINK_FILES(backend/port/tas/${tas_file}, backend/port/tas.s)
echo "checking echo setting..."
if echo '\c' | grep -s c >/dev/null 2>&1
then
ECHO_N="echo -n"
ECHO_C=""
else
ECHO_N="echo"
ECHO_C='\c'
fi
dnl this part selects the template from the ones in the template directory.
AC_MSG_CHECKING(setting template to)
AC_ARG_WITH(template,
[ --with-template=TEMPLATE
use operating system template file
see template directory],
[ TEMPLATE=$withval ],
host="`echo $host | tr '[[A-Z]]' '[[a-z]]'`"
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# First, try for a template exactly matching $host
if test -f "template/$host"
then TEMPLATE="$host"
else
# Next try for an exact match to a .similar entry.
# There shouldn't be multiple matches, but take the last if there are.
GUESS=`grep "^$host=" template/.similar | sed 's/^.*=//' | tail -1`
if test "$GUESS"
then TEMPLATE="$GUESS"
else
# Next look for a .similar entry that is a prefix of $host.
# If there are multiple matches, take the last one.
exec 4<template/.similar
while read LINE <&4
do
SIMHOST=`expr "$LINE" : '\(.*\)='`
MATCH=`expr "$host" : "$SIMHOST"`
if test "$MATCH" != 0
then GUESS=`echo "$LINE" | sed 's/^.*=//'`
fi
done
exec 4<&-
if test "$GUESS"
then TEMPLATE="$GUESS"
else
# Last chance ... maybe uname -s will match an entry.
TEMPLATE=`uname -s | tr '[[A-Z]]' '[[a-z]]'`
])
AC_MSG_RESULT($TEMPLATE)
export TEMPLATE
if test ! -f "template/$TEMPLATE"; then
echo ""
echo "$TEMPLATE does not exist"
echo ""
echo "Available Templates (set using --with-template):"
echo ""
ls template
echo ""
exit
fi
dnl Read the selected template file.
dnl For reasons of backwards compatibility, lines of the form
dnl IDENTIFIER: something
dnl should be treated as variable assignments. However, we also want to
dnl allow other shell commands in the template file (in case the file
dnl needs to make conditional tests, etc). So, generate a temp file with
dnl the IDENTIFIER: lines translated, then source it.
[
rm -f conftest.sh
sed 's/^\([A-Za-z_]*\):\(.*\)$/\1="\2"/' "template/$TEMPLATE" >conftest.sh
rm -f conftest.sh
]
AC_ARG_WITH(includes,
[ --with-includes=DIR site header files for tk/tcl, etc in DIR],
[
case "$withval" in
"" | y | ye | yes | n | no)
AC_MSG_ERROR([*** You must supply an argument to the --with-includes option.])
;;
esac
INCLUDE_DIRS="$withval"
])
for dir in $INCLUDE_DIRS $SRCH_INC; do
if test -d "$dir"; then
PGSQL_CPPFLAGS="$PGSQL_CPPFLAGS -I$dir"
else
AC_MSG_WARN([*** Include directory $dir does not exist.])
fi
done
fi
[ --with-libs=DIR also search for libraries in DIR],
[
case "$withval" in
"" | y | ye | yes | n | no)
AC_MSG_ERROR([*** You must supply an argument to the --with-libs option.])
;;
esac
LIBRARY_DIRS="$withval"
])
AC_ARG_WITH(libraries,
[ --with-libraries=DIR also search for libraries in DIR],
[
case "$withval" in
"" | y | ye | yes | n | no)
AC_MSG_ERROR([*** You must supply an argument to the --with-libraries option.])
;;
esac
LIBRARY_DIRS="$withval"
])
for dir in $LIBRARY_DIRS $SRCH_LIB; do
if test -d "$dir"; then
PGSQL_LDFLAGS="$PGSQL_LDFLAGS -L$dir"
else
AC_MSG_WARN([*** Library directory $dir does not exist.])
fi
done
dnl We have read the default value of USE_LOCALE from the template
dnl file. We have a further option of using
dnl --enable-locale to explicitly enable it
AC_ARG_ENABLE(
locale,
[ --enable-locale enable locale support ],
AC_DEFINE(USE_LOCALE) AC_MSG_RESULT(enabled),
AC_MSG_RESULT(disabled)
)
dnl We exclude cyrillic recode support unless we override it with
dnl --enable-recode to explicitly enable it
dnl It defaults to disabled
AC_MSG_CHECKING(whether to support cyrillic recode)
AC_ARG_ENABLE(
recode,
[ --enable-recode enable cyrillic recode support ],
AC_DEFINE(CYR_RECODE) AC_MSG_RESULT(enabled),
AC_MSG_RESULT(disabled)
)
dnl Multibyte support
AC_MSG_CHECKING(whether to support multibyte)
AC_ARG_ENABLE(multibyte,
[ --enable-multibyte enable multibyte character support ],
MULTIBYTE=SQL_ASCII
if test "$enableval" != "yes"; then
case "$enableval" in
SQL_ASCII|EUC_JP|EUC_CN|EUC_KR|EUC_TW|UNICODE|MULE_INTERNAL|LATIN1|LATIN2|LATIN3|LATIN4|LATIN5|KOI8|WIN|ALT|SJIS|BIG5|WIN1250)
# ok
;;
*)
AC_MSG_ERROR(
[Argument to --enable-multibyte must be one of:
SQL_ASCII, EUC_JP, EUC_CN, EUC_KR, EUC_TW,
UNICODE, MULE_INTERNAL,
LATIN1, LATIN2, LATIN3, LATIN4, LATIN5,
KOI8, WIN, ALT, SJIS, BIG5, WIN1250
Or do not specify an argument to the option to use the default.])
esac
MULTIBYTE=$enableval
fi
AC_DEFINE(MULTIBYTE)
AC_MSG_RESULT(enabled)
AC_ARG_WITH(mb,
[ --with-mb=<encoding> this option is obsoleted ],
[
AC_MSG_ERROR([*** --with-mb is not supported anymore. Use --enable-multibyte instead.])
]
)
dnl We use the default value of 5432 for the DEF_PGPORT value. If
dnl we over-ride it with --with-pgport=port then we bypass this piece
AC_MSG_CHECKING(setting DEF_PGPORT)
AC_ARG_WITH(
pgport,
[ --with-pgport=<portnum> change default startup port ],
AC_DEFINE_UNQUOTED(DEF_PGPORT, "${withval}") AC_MSG_RESULT($with_pgport),
AC_DEFINE_UNQUOTED(DEF_PGPORT, "5432") AC_MSG_RESULT(5432)
)
dnl DEF_MAXBACKENDS can be set by --with-maxbackends. Default value is 32.
AC_MSG_CHECKING(setting DEF_MAXBACKENDS)
AC_ARG_WITH(
maxbackends,
[ --with-maxbackends=<n> set default maximum number of server processes ],
AC_DEFINE_UNQUOTED(DEF_MAXBACKENDS, ${withval}) AC_MSG_RESULT($with_maxbackends),
AC_DEFINE_UNQUOTED(DEF_MAXBACKENDS, 32) AC_MSG_RESULT(32)
)
dnl We exclude tcl support unless user says --with-tcl
AC_MSG_CHECKING(setting USE_TCL)
AC_ARG_WITH(
tcl,
[ --with-tcl build Tcl interfaces and pgtclsh ],
y | ye | yes) USE_TCL=true; USE_TK=true; AC_MSG_RESULT(enabled) ;;
*) USE_TCL=; USE_TK=; AC_MSG_RESULT(disabled) ;;
[ USE_TCL=; USE_TK=; AC_MSG_RESULT(disabled) ]
)
dnl We see if the path to the TCL/TK configuration scripts is specified.
dnl This will overide the use of tclsh to find the paths to search.
AC_ARG_WITH(tclconfig,
[ --with-tclconfig=DIR tclConfig.sh and tkConfig.sh are in DIR],
[
case "$withval" in
"" | y | ye | yes | n | no)
AC_MSG_ERROR([*** You must supply an argument to the --with-tclconfig option.])
;;
esac
TCL_DIRS="$withval"
]
)
dnl We see if the path to the TK configuration scripts is specified.
dnl This will overide the use of tclsh to find the paths to search.
AC_ARG_WITH(tkconfig,
[ --with-tkconfig=DIR tkConfig.sh is in DIR],
[
case "$withval" in
"" | y | ye | yes | n | no)
AC_MSG_ERROR([*** You must supply an argument to the --with-tkconfig option.])
;;
esac
TK_DIRS="$withval"
]
)
dnl We exclude perl support unless we override it with --with-perl
AC_MSG_CHECKING(setting USE_PERL)
AC_ARG_WITH(
perl,
[ --with-perl build Perl interface ],
y | ye | yes) USE_PERL=true; AC_MSG_RESULT(enabled) ;;
*) USE_PERL=false; AC_MSG_RESULT(disabled) ;;
esac
],
[ USE_PERL=false; AC_MSG_RESULT(disabled) ]
)
dnl We include odbc support unless we disable it with --with-odbc=false
AC_MSG_CHECKING(setting USE_ODBC)
AC_ARG_WITH(
odbc,
[ --with-odbc build ODBC driver package ],
[
case "$withval" in
y | ye | yes) USE_ODBC=true; AC_MSG_RESULT(enabled) ;;
*) USE_ODBC=false; AC_MSG_RESULT(disabled) ;;
esac
],
[ USE_ODBC=false; AC_MSG_RESULT(disabled) ]
)
export USE_ODBC
Thomas G. Lockhart
committed
dnl Allow for overriding the default location of the odbcinst.ini
dnl file which is normally ${prefix}/share or ${prefix} if this is
dnl being compiled inside the postgres distribution.
dnl Link in the port and template directories
dnl to help build a "standalone ODBC" tar file
Thomas G. Lockhart
committed
if test "X$USE_ODBC" = "Xtrue"
then
AC_LINK_FILES(include/port, interfaces/odbc/port)
AC_LINK_FILES(makefiles, interfaces/odbc/makefiles)
AC_LINK_FILES(template, interfaces/odbc/template)
Thomas G. Lockhart
committed
AC_LINK_FILES(include/config.h, interfaces/odbc/config.h)
AC_MSG_CHECKING(setting ODBCINST)
AC_ARG_WITH(
odbcinst,
[ --with-odbcinst=dir change default directory for odbcinst.ini],
Thomas G. Lockhart
committed
AC_DEFINE_UNQUOTED(ODBCINST, ${with_odbcinst}) AC_MSG_RESULT($with_odbcinst),
AC_DEFINE_UNQUOTED(ODBCINST, ${ODBCINSTDIR}) AC_MSG_RESULT(${ODBCINSTDIR})
)
fi
if test "X$with_odbcinst" != "X"
then
ODBCINSTDIR=$with_odbcinst
fi
AC_SUBST(ODBCINSTDIR)
dnl Unless we specify the command line options
dnl If you do not explicitly do it, it defaults to disabled
AC_MSG_CHECKING(setting ASSERT CHECKING)
AC_ARG_ENABLE(
cassert,
[ --enable-cassert enable assertion checks (debugging) ],
AC_MSG_RESULT(disabled)
)
dnl Check for C support (allow override if needed)
dnl Note: actually, setting CC environment variable works just as well.
AC_ARG_WITH(CC,
[ --with-CC=compiler use specific C compiler],
[
case "$withval" in
"" | y | ye | yes | n | no)
AC_MSG_ERROR([*** You must supply an argument to the --with-CC option.])
;;
esac
CC="$withval"
])
dnl Find a compiler if CC is not already set.
AC_PROG_CC
dnl Find CPP, then check traditional.
dnl Caution: these macros must be called in this order...
AC_PROG_CPP
AC_PROG_GCC_TRADITIONAL
if test "$CC" = "gcc"
then
CC_VERSION=`${CC} --version`
else
CC_VERSION=""
fi
AC_SUBST(CC_VERSION)
CPPFLAGS="$CPPFLAGS $PGSQL_CPPFLAGS"
echo "- setting CPPFLAGS=$CPPFLAGS"
LDFLAGS="$LDFLAGS $PGSQL_LDFLAGS"
echo "- setting LDFLAGS=$LDFLAGS"
dnl --enable-debug adds -g to compiler flags
dnl --disable-debug will forcefully remove it
AC_MSG_CHECKING(setting debug compiler flag)
AC_ARG_ENABLE(
debug,
[ --enable-debug build with debugging symbols (-g) ],
[
case "$enableval" in
y | ye | yes)
CFLAGS="$CFLAGS -g"
AC_MSG_RESULT(enabled)
;;
*)
CFLAGS=`echo "$CFLAGS" | sed -e 's/ -g/ /g' | sed -e 's/^-g//'`
AC_MSG_RESULT(disabled)
;;
esac
],
AC_MSG_RESULT(using default)
)
# Assume system is ELF if it predefines __ELF__ as 1,
# otherwise believe "elf" setting from check of host_os above.
AC_EGREP_CPP(yes,
[#if __ELF__
yes
#endif
],
ELF_SYS=true,
[if test "X$elf" = "Xyes"
then
ELF_SYS=true
else
ELF_SYS=
fi
])
AC_SUBST(PORTNAME)
AC_SUBST(CPU)
Thomas G. Lockhart
committed
AC_SUBST(SRCDIR)
Marc G. Fournier
committed
AC_SUBST(LDFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(SHARED_LIB)
AC_SUBST(CFLAGS)
AC_SUBST(DLSUFFIX)
AC_SUBST(DL_LIB)
AC_SUBST(USE_ODBC)
dnl Check for C++ support (allow override if needed)
HAVECXX='HAVE_Cplusplus=true'
AC_ARG_WITH(CXX,
[ --with-CXX=compiler use specific C++ compiler
--without-CXX prevent building C++ code ],
[
case "$withval" in
"" | y | ye | yes)
AC_MSG_ERROR([*** You must supply an argument to the --with-CC option.])
;;
n | no)
HAVECXX='HAVE_Cplusplus=false'
;;
esac
CXX="$withval"
],
[ AC_PROG_CXX])
AC_SUBST(HAVECXX)
dnl make sure we revert to C compiler, not C++, for subsequent tests
AC_LANG_C
dnl Figure out how to invoke "install" and what install options to use.
AC_PROG_INSTALL
INSTLOPTS="-m 444"
INSTL_EXE_OPTS="-m 555"
INSTL_SHLIB_OPTS="-m 644"
dnl HPUX wants shared libs to be mode 555.
case "$host_os" in
hpux*)
INSTL_SHLIB_OPTS="-m 555" ;;
esac
AC_SUBST(INSTALL)
AC_SUBST(INSTLOPTS)
AC_SUBST(INSTL_LIB_OPTS)
AC_SUBST(INSTL_EXE_OPTS)
dnl Check the option to echo to inhibit newlines.
ECHO_N_OUT=`echo -n "" | wc -c`
ECHO_C_OUT=`echo "\c" | wc -c`
if test "$ECHO_N_OUT" -eq 0; then
if test "ECHO_C_OUT" -eq 0; then
DASH_N=
BACKSLASH_C='\\\\c'
else
AC_MSG_ERROR("echo behaviour undetermined")
fi
fi
AC_SUBST(DASH_N)
AC_SUBST(BACKSLASH_C)
AC_PROG_LEX
if test "$LEX" = "flex"; then
$LEX --version 2> /dev/null | grep -s '2\.5\.3' > /dev/null 2>&1
if test $? -eq 0 ; then
AC_MSG_WARN([
***
You have flex version 2.5.3, which is broken. Get version 2.5.4 or
a different lex.
(If you are using the official distribution of PostgreSQL then you
do not need to worry about this because the lexer files are
pre-generated. However, other software using flex is likely to be
broken as well.)
***])
fi
fi
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB
AC_PATH_PROG(find, find)
AC_PATH_PROG(tar, tar)
AC_PATH_PROG(split, split)
AC_PATH_PROG(etags, etags)
AC_PATH_PROG(xargs, xargs)
AC_PATH_PROG(ipcs, ipcs)
AC_PATH_PROG(ipcrm, ipcrm)
AC_PATH_PROGS(TR, trbsd tr, NOT_FOUND)
AC_PATH_PROGS(GZCAT, gzcat zcat, gzcat)
dnl Check tr flags to convert from lower to upper case
TRSTRINGS="`echo ABCdef | $TR '[[a-z]]' '[[A-Z]]' 2>/dev/null | grep ABCDEF`"
TRCLASS="`echo ABCdef | $TR '[[:lower:]]' '[[:upper:]]' 2>/dev/null | grep ABCDEF`"
if test "$TRSTRINGS" = "ABCDEF"; then
elif test "$TRCLASS" = "ABCDEF"; then
AC_MSG_ERROR("Can\'t find method to convert from upper to lower case with tr")
dnl Changes to look for YACC. We have three choices (in order of pref.)
dnl (1) We specify in YACC and YFLAGS what we want
dnl (2) We have bison and we use bison -y
dnl (3) We have yacc and use it
then
echo "- Using $YACC $YFLAGS"
else
AC_PATH_PROG(bison, bison)
if test -f "$bison"
then
echo "- Using $bison -y $YFLAGS"
YACC="$bison"
YFLAGS="-y $YFLAGS"
else
AC_PATH_PROG(yacc, yacc)
echo "- Using $yacc $YFLAGS"
YACC="$yacc"
fi
AC_SUBST(YACC)
AC_SUBST(YFLAGS)
for curses in ncurses curses ; do
AC_CHECK_LIB(${curses}, main,
[LIBS="-l${curses} $LIBS"; break])
done
AC_CHECK_LIB(termcap, main)
AC_CHECK_LIB(readline, using_history, AC_DEFINE(HAVE_HISTORY_IN_READLINE),
AC_CHECK_LIB(history, main) )
if test "$PORTNAME" != "aix" -a "$PORTNAME" != "alpha"
then
AC_CHECK_LIB(bsd, main)
fi
AC_CHECK_LIB(m, main)
AC_CHECK_LIB(dl, main)
AC_CHECK_LIB(socket, main)
AC_CHECK_LIB(nsl, main)
AC_CHECK_LIB(ipc, main)
AC_CHECK_LIB(IPC, main)
AC_CHECK_LIB(lc, main)
AC_CHECK_LIB(dld, main)
AC_CHECK_LIB(ln, main)
AC_CHECK_LIB(ld, main)
AC_CHECK_LIB(compat, main)
AC_CHECK_LIB(BSD, main)
Marc G. Fournier
committed
AC_CHECK_LIB(gen, main)
dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(arpa/inet.h)
AC_CHECK_HEADERS(crypt.h)
AC_CHECK_HEADERS(dld.h)
AC_CHECK_HEADERS(endian.h)
AC_CHECK_HEADERS(float.h)
AC_CHECK_HEADERS(getopt.h)
AC_CHECK_HEADERS(history.h)
AC_CHECK_HEADERS(ieeefp.h)
AC_CHECK_HEADERS(limits.h)
AC_CHECK_HEADERS(netdb.h)
AC_CHECK_HEADERS(netinet/in.h)
AC_CHECK_HEADERS(readline.h)
AC_CHECK_HEADERS(readline/history.h)
AC_CHECK_HEADERS(readline/readline.h)
AC_CHECK_HEADERS(sys/select.h)
AC_CHECK_HEADERS(termios.h)
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(values.h)
Thomas G. Lockhart
committed
dnl ODBC headers...
AC_CHECK_HEADERS(sys/param.h pwd.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_C_STRINGIZE
AC_TYPE_UID_T
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_STRUCT_TIMEZONE
AC_MSG_CHECKING(for signed types)
AC_TRY_COMPILE([],
[signed char c; signed short s; signed int i;],
[AC_MSG_RESULT(yes)],
[AC_DEFINE(signed, ) AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for volatile)
AC_TRY_COMPILE([],
[extern volatile int i;],
[AC_MSG_RESULT(yes)],
[AC_DEFINE(volatile, ) AC_MSG_RESULT(no)])
AC_MSG_CHECKING(for type of last arg to accept)
AC_TRY_COMPILE([#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
],
[int a = accept(1, (struct sockaddr *) 0, (size_t *) 0);],
[AC_DEFINE(SOCKET_SIZE_TYPE, size_t) AC_MSG_RESULT(size_t)],
[AC_DEFINE(SOCKET_SIZE_TYPE, int) AC_MSG_RESULT(int)])
dnl Check for any "odd" conditions
AC_MSG_CHECKING(for int timezone)
AC_TRY_LINK([#include <time.h>],
[int res = timezone / 60; ],
[AC_DEFINE(HAVE_INT_TIMEZONE) AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
AC_MSG_CHECKING(for gettimeofday args)
AC_TRY_LINK([#include <sys/time.h>],
[struct timeval *tp; struct timezone *tzp; gettimeofday(tp,tzp); ],
[AC_DEFINE(HAVE_GETTIMEOFDAY_2_ARGS) AC_MSG_RESULT(2 args)],
AC_MSG_RESULT(no))
AC_MSG_CHECKING(for union semun)
AC_TRY_LINK([#include <sys/types.h>
[union semun semun;],
[AC_DEFINE(HAVE_UNION_SEMUN) AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
AC_MSG_CHECKING(for fcntl(F_SETLK))
AC_TRY_LINK([#include <fcntl.h>],
[struct flock lck;
lck.l_whence = SEEK_SET; lck.l_start = lck.l_len = 0;
lck.l_type = F_WRLCK;
fcntl(0, F_SETLK, &lck);],
[AC_DEFINE(HAVE_FCNTL_SETLK) AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
dnl Checks for library functions.
AC_FUNC_MEMCMP
AC_TYPE_SIGNAL
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(sigprocmask waitpid setsid fcvt)
AC_CHECK_FUNCS(fpclass fp_class fp_class_d class)
dnl We use our snprintf.c emulation if either snprintf() or vsnprintf()
dnl is missing. Yes, there are machines that have only one.
dnl We may also decide to use snprintf.c if snprintf() is present but does
dnl not have working "long long int" support -- see below.
SNPRINTF=''
AC_CHECK_FUNC(vsnprintf,
AC_DEFINE(HAVE_VSNPRINTF),
SNPRINTF='snprintf.o')
dnl Check whether <stdio.h> declares snprintf() and vsnprintf(); if not,
dnl include/c.h will provide declarations. Note this is a separate test
dnl from whether the functions exist in the C library --- there are systems
dnl that have the functions but don't bother to declare them :-(
dnl Note: simple-minded pattern here will do wrong thing if stdio.h
dnl declares vsnprintf() but not snprintf(). Hopefully there are no
dnl systems that are *that* brain-damaged...
AC_EGREP_HEADER(snprintf, stdio.h, AC_DEFINE(HAVE_SNPRINTF_DECL))
AC_EGREP_HEADER(vsnprintf, stdio.h, AC_DEFINE(HAVE_VSNPRINTF_DECL))
dnl
dnl do this one the hard way in case isinf() is a macro
AC_MSG_CHECKING(for isinf)
AC_CACHE_VAL(ac_cv_func_or_macro_isinf,
[AC_TRY_LINK(
[#include <math.h>],
[double x = 0.0; int res = isinf(x);],
[ac_cv_func_or_macro_isinf=yes],
[ac_cv_func_or_macro_isinf=no])])
if [[ $ac_cv_func_or_macro_isinf = yes ]]; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_ISINF)
ISINF=''
else
AC_MSG_RESULT(no)
ISINF='isinf.o'
fi
AC_SUBST(ISINF)
AC_CHECK_FUNC(getrusage,
AC_DEFINE(HAVE_GETRUSAGE),
GETRUSAGE='getrusage.o')
AC_SUBST(GETRUSAGE)
AC_CHECK_FUNC(srandom,
AC_DEFINE(HAVE_SRANDOM),
SRANDOM='srandom.o')
AC_SUBST(SRANDOM)
AC_CHECK_FUNC(gethostname,
AC_DEFINE(HAVE_GETHOSTNAME),
GETHOSTNAME='gethostname.o')
AC_SUBST(GETHOSTNAME)
AC_CHECK_FUNC(random,
AC_DEFINE(HAVE_RANDOM),
MISSING_RANDOM='random.o')
AC_SUBST(MISSING_RANDOM)
AC_CHECK_FUNC(inet_aton,
AC_DEFINE(HAVE_INET_ATON),
INET_ATON='inet_aton.o')
AC_SUBST(INET_ATON)
AC_CHECK_FUNC(strerror,
AC_DEFINE(HAVE_STRERROR),
[STRERROR='strerror.o' STRERROR2='../../backend/port/strerror.o'])
AC_SUBST(STRERROR)
AC_SUBST(STRERROR2)
AC_CHECK_FUNC(strdup,
AC_DEFINE(HAVE_STRDUP),
STRDUP='../../utils/strdup.o')
AC_SUBST(STRDUP)
AC_CHECK_FUNC(strtol,
AC_DEFINE(HAVE_STRTOL),
STRTOL='strtol.o')
AC_CHECK_FUNC(strtoul,
AC_DEFINE(HAVE_STRTOUL),
STRTOL='strtoul.o')
AC_CHECK_FUNC(strcasecmp,
AC_DEFINE(HAVE_STRCASECMP),
STRCASECMP='strcasecmp.o')
AC_SUBST(STRCASECMP)
AC_CHECK_FUNC(cbrt,
AC_DEFINE(HAVE_CBRT),
AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT)))
# On HPUX 9, rint() is not in regular libm.a but in /lib/pa1.1/libm.a;
# this hackery with HPUXMATHLIB allows us to cope.
HPUXMATHLIB=""
case "$host_cpu" in
hppa1.1)
if [[ -r /lib/pa1.1/libm.a ]] ; then
HPUXMATHLIB="-L /lib/pa1.1 -lm"
fi ;;
esac
AC_SUBST(HPUXMATHLIB)
AC_CHECK_LIB(m, rint, AC_DEFINE(HAVE_RINT), , $HPUXMATHLIB))
dnl Some old versions of libreadline don't have rl_completion_append_character
AC_EGREP_HEADER(rl_completion_append_character, readline.h,
AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER),
[AC_EGREP_HEADER(rl_completion_append_character, readline/readline.h,
AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER))])
AC_SUBST(HAVE_RL_COMPLETION_APPEND_CHARACTER)
dnl Check for GNU style long options support (getopt_long)
AC_CHECK_FUNCS(getopt_long)
AC_MSG_CHECKING(for finite() macro or function)
AC_TRY_LINK([#include <math.h>],
[int dummy=finite(1.0);],
[AC_DEFINE(HAVE_FINITE) AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no))
dnl Check to see if we have a working 64-bit integer type.
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.
HAVE_LONG_INT_64=0
AC_MSG_CHECKING(whether 'long int' is 64 bits)
/* These are globals to discourage the compiler from folding all the
* arithmetic tests down to compile-time constants.
*/
int64 a = 20000001;
int64 b = 40000005;
int does_int64_work()
{
int64 c,d;
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
/* Do perfunctory checks to see if 64-bit arithmetic seems to work */
c = a * b;
d = (c + b) / b;
if (d != a+1)
return 0;
return 1;
}
main() {
exit(! does_int64_work());
}],
[HAVE_LONG_INT_64=1
AC_DEFINE(HAVE_LONG_INT_64)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no),
AC_MSG_RESULT(assuming not on target machine))
HAVE_LONG_LONG_INT_64=0
if [[ $HAVE_LONG_INT_64 -eq 0 ]] ; then
AC_MSG_CHECKING(whether 'long long int' is 64 bits)
AC_TRY_RUN([typedef long long int int64;
/* These are globals to discourage the compiler from folding all the
* arithmetic tests down to compile-time constants.
*/
int64 a = 20000001;
int64 b = 40000005;
int does_int64_work()
{
int64 c,d;
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
/* Do perfunctory checks to see if 64-bit arithmetic seems to work */
c = a * b;
d = (c + b) / b;
if (d != a+1)
return 0;
return 1;
}
main() {
exit(! does_int64_work());
}],
[HAVE_LONG_LONG_INT_64=1
AC_DEFINE(HAVE_LONG_LONG_INT_64)
AC_MSG_RESULT(yes)],
AC_MSG_RESULT(no),
AC_MSG_RESULT(assuming not on target machine))
fi
dnl If we found "long int" is 64 bits, assume snprintf handles it.
dnl If we found we need to use "long long int", better check.
dnl We cope with snprintfs that use either %lld or %qd as the format.
dnl If neither works, fall back to our own snprintf emulation (which we
dnl know uses %lld).
if [[ $HAVE_LONG_LONG_INT_64 -eq 1 ]] ; then
if [[ x$SNPRINTF = x ]] ; then
AC_TRY_RUN([#include <stdio.h>
typedef long long int int64;
#define INT64_FORMAT "%lld"
int64 a = 20000001;
int64 b = 40000005;
int does_int64_snprintf_work()
{
int64 c;
char buf[100];
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
c = a * b;
snprintf(buf, 100, INT64_FORMAT, c);
if (strcmp(buf, "800000140000005") != 0)
return 0; /* either multiply or snprintf is busted */
return 1;
}
main() {
exit(! does_int64_snprintf_work());
}],
INT64_FORMAT='"%lld"'
],
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[ AC_MSG_RESULT(no)
AC_MSG_CHECKING(whether snprintf handles 'long long int' as %qd)
AC_TRY_RUN([#include <stdio.h>
typedef long long int int64;
#define INT64_FORMAT "%qd"
int64 a = 20000001;
int64 b = 40000005;
int does_int64_snprintf_work()
{
int64 c;
char buf[100];
if (sizeof(int64) != 8)
return 0; /* doesn't look like the right size */
c = a * b;
snprintf(buf, 100, INT64_FORMAT, c);
if (strcmp(buf, "800000140000005") != 0)
return 0; /* either multiply or snprintf is busted */
return 1;
}
main() {
exit(! does_int64_snprintf_work());