blob: e9db9c5a47cc33f56a0d6b349d5c747eec1be116 [file] [log] [blame]
dnl ##
dnl ##
dnl ##
define(AC_PROG_LIBTOOL,[dnl
AC_ARG_ENABLE(static,dnl
[ --enable-static build static libraries (default=yes)],
enable_static="$enableval",
enable_static=yes
)dnl
AC_ARG_ENABLE(shared,dnl
[ --enable-shared build shared libraries (default=yes)],
enable_shared="$enableval",
enable_shared=yes
)dnl
libtool_flags=''
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" LD="$LD" \
${CONFIG_SHELL-/bin/sh} ltconfig --no-reexec \
$libtool_flags --no-verify ltmain.sh $PLATFORM ||\
AC_MSG_ERROR([libtool configuration failed])
LIBTOOL="\$(TOP)/libtool"
AC_SUBST(LIBTOOL)
])dnl
dnl ##
dnl ##
dnl ##
define(AC_CHECK_DEBUGGING,[dnl
AC_MSG_CHECKING(for compilation debug mode)
AC_ARG_ENABLE(debug,dnl
[ --enable-debug build for debugging],
[dnl
if test ".$ac_cv_prog_gcc" = ".yes"; then
case "$CFLAGS" in
*-O2* ) ;;
* ) CFLAGS="$CFLAGS -O2" ;;
esac
case "$CFLAGS" in
*-g* ) ;;
* ) CFLAGS="$CFLAGS -g" ;;
esac
CFLAGS="$CFLAGS -ggdb3"
CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-align"
CFLAGS="$CFLAGS -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline"
else
case "$CFLAGS" in
*-g* ) ;;
* ) CFLAGS="$CFLAGS -g" ;;
esac
fi
msg="enabled"
AC_DEFINE(MM_DEBUG)
],[
case "$CFLAGS" in
*-g* ) CFLAGS=`echo "$CFLAGS" |\
sed -e 's/ -g //g' -e 's/ -g$//' -e 's/^-g //g' -e 's/^-g$//'` ;;
esac
msg=disabled
])dnl
AC_MSG_RESULT([$msg])
])
dnl ##
dnl ##
dnl ##
define(AC_CONFIGURE_PART,[dnl
AC_MSG_RESULT()
AC_MSG_RESULT(${T_MD}$1:${T_ME})
])dnl
dnl ##
dnl ##
dnl ##
define(AC_CHECK_DEFINE,[dnl
AC_CACHE_CHECK(for $1 in $2, ac_cv_define_$1,
AC_EGREP_CPP([YES_IS_DEFINED], [
#include <$2>
#ifdef $1
YES_IS_DEFINED
#endif
], ac_cv_define_$1=yes; AC_DEFINE(HAVE_$1), ac_cv_define_$1=no)
)])dnl
dnl ##
dnl ##
dnl ##
define(AC_IFALLYES,[dnl
ac_rc=yes
for ac_spec in $1; do
ac_type=`echo "$ac_spec" | sed -e 's/:.*$//'`
ac_item=`echo "$ac_spec" | sed -e 's/^.*://'`
case $ac_type in
header )
ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
ac_var="ac_cv_header_$ac_item"
;;
file )
ac_item=`echo "$ac_item" | sed 'y%./+-%__p_%'`
ac_var="ac_cv_file_$ac_item"
;;
func ) ac_var="ac_cv_func_$ac_item" ;;
define ) ac_var="ac_cv_define_$ac_item" ;;
custom ) ac_var="$ac_item" ;;
esac
eval "ac_val=\$$ac_var"
if test ".$ac_val" != .yes; then
ac_rc=no
break
fi
done
if test ".$ac_rc" = .yes; then
:
$2
else
:
$3
fi
])dnl
dnl ##
dnl ##
dnl ##
define(AC_BEGIN_DECISION,[dnl
ac_decision_item='$1'
ac_decision_msg='FAILED'
ac_decision=''
])dnl
define(AC_DECIDE,[dnl
ac_decision='$1'
ac_decision_msg='$2'
ac_decision_$1=yes
ac_decision_$1_msg='$2'
])dnl
define(AC_DECISION_OVERRIDE,[dnl
ac_decision=''
for ac_item in $1; do
eval "ac_decision_this=\$ac_decision_${ac_item}"
if test ".$ac_decision_this" = .yes; then
ac_decision=$ac_item
eval "ac_decision_msg=\$ac_decision_${ac_item}_msg"
fi
done
])dnl
define(AC_DECISION_FORCE,[dnl
ac_decision="$1"
eval "ac_decision_msg=\"\$ac_decision_${ac_decision}_msg\""
])dnl
define(AC_END_DECISION,[dnl
if test ".$ac_decision" = .; then
echo "[$]0:Error: decision on $ac_decision_item failed" 1>&2
exit 1
else
if test ".$ac_decision_msg" = .; then
ac_decision_msg="$ac_decision"
fi
AC_MSG_RESULT([decision on $ac_decision_item... $ac_decision_msg])
fi
])dnl
dnl ##
dnl ##
dnl ##
AC_DEFUN(AC_TEST_FILE,
[AC_REQUIRE([AC_PROG_CC])
ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(ac_cv_file_$ac_safe, [
if test -r $1; then
eval "ac_cv_file_$ac_safe=yes"
else
eval "ac_cv_file_$ac_safe=no"
fi
])dnl
if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_MSG_RESULT(no)
ifelse([$3], , , [$3])
fi
])
dnl ##
dnl ## AC_PROG_NM - find the path to a BSD-compatible name lister
dnl ##
AC_DEFUN(AC_PROG_NM,
[AC_MSG_CHECKING([for BSD-compatible nm])
AC_CACHE_VAL(ac_cv_path_NM,
[if test -n "$NM"; then
# Let the user override the test.
ac_cv_path_NM="$NM"
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/nm; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
ac_cv_path_NM="$ac_dir/nm -B"
elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
ac_cv_path_NM="$ac_dir/nm -p"
else
ac_cv_path_NM="$ac_dir/nm"
fi
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
fi])
NM="$ac_cv_path_NM"
AC_MSG_RESULT([$NM])
AC_SUBST(NM)
])
dnl #
dnl #
dnl #
define(AC_CHECK_MAXSEGSIZE,[dnl
AC_MSG_CHECKING(for shared memory maximum segment size)
OCFLAGS="$CFLAGS"
case "$1" in
MM_SHMT_MM* ) CFLAGS="-DTEST_MMAP $CFLAGS" ;;
MM_SHMT_IPCSHM ) CFLAGS="-DTEST_SHMGET $CFLAGS" ;;
esac
cross_compile=no
AC_TRY_RUN(
changequote(<<, >>)dnl
<<
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef TEST_MMAP
#include <sys/mman.h>
#endif
#ifdef TEST_SHMGET
#include <sys/ipc.h>
#include <sys/shm.h>
#endif
#if !defined(MAP_FAILED)
#define MAP_FAILED ((void *)-1)
#endif
int testit(int size)
{
int fd;
void *segment;
#ifdef TEST_MMAP
char file[] = "./ac_test.tmp";
unlink(file);
if ((fd = open(file, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR)) == -1)
return 0;
if (ftruncate(fd, size) == -1)
return 0;
if ((segment = (void *)mmap(NULL, size, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0)) == MAP_FAILED) {
close(fd);
return 0;
}
munmap((caddr_t)segment, size);
close(fd);
unlink(file);
#endif
#ifdef TEST_SHMGET
if ((fd = shmget(IPC_PRIVATE, size, SHM_R|SHM_W|IPC_CREAT)) == -1)
return 0;
if ((segment = (void *)shmat(fd, NULL, 0)) == ((void *)-1)) {
shmctl(fd, IPC_RMID, NULL);
return 0;
}
shmdt(segment);
shmctl(fd, IPC_RMID, NULL);
#endif
return 1;
}
#define ABS(n) ((n) >= 0 ? (n) : (-(n)))
int main(int argc, char *argv[])
{
int t, m, b;
int d;
int rc;
FILE *f;
/*
* Find maximum possible allocation size by performing a
* binary search starting with a search space between 0 and
* 64MB of memory.
*/
t = 1024*1024*64 /* = 67108864 */;
if (testit(t))
m = t;
else {
m = 1024*1024*32;
b = 0;
for (;;) {
/* fprintf(stderr, "t=%d, m=%d, b=%d\n", t, m, b); */
rc = testit(m);
if (rc) {
d = ((t-m)/2);
b = m;
}
else {
d = -((m-b)/2);
t = m;
}
if (ABS(d) < 1024*1) {
if (!rc)
m = b;
break;
}
if (m < 1024*8)
break;
m += d;
}
if (m < 1024*8)
m = 0;
}
if ((f = fopen("conftestval", "w")) == NULL)
exit(1);
fprintf(f, "%d\n", m);
fclose(f);
exit(0);
}
>>
changequote([, ])dnl
,[
MM_SHM_MAXSEGSIZE="`cat conftestval`"
msg="$MM_SHM_MAXSEGSIZE"
if test $msg -eq 67108864; then
msg="64MB (soft limit)"
elif test $msg -gt 1048576; then
msg="`expr $msg / 1024`"
msg="`expr $msg / 1024`"
msg="${msg}MB"
elif test $msg -gt 1024; then
msg="`expr $msg / 1024`"
msg="${msg}KB"
else
MM_SHM_MAXSEGSIZE=0
msg=unknown
fi
],
MM_SHM_MAXSEGSIZE=0
msg=unknown
,
MM_SHM_MAXSEGSIZE=0
msg=unknown
)dnl
CFLAGS="$OCFLAGS"
test ".$msg" = .unknown && AC_MSG_ERROR([Unable to determine maximum shared memory segment size])
AC_MSG_RESULT([$msg])
AC_DEFINE_UNQUOTED(MM_SHM_MAXSEGSIZE, $MM_SHM_MAXSEGSIZE)
])