| dnl ## |
| dnl ## Autoconf specification for MM library |
| dnl ## |
| |
| dnl # |
| dnl # standard Autoconf prolog |
| dnl # |
| |
| AC_PREREQ(2.14)dnl |
| AC_REVISION($Revision: 1.1 $) |
| |
| dnl # shtool bootstrap |
| SHTOOL="\$(TOP)/shtool" |
| AC_SUBST(SHTOOL) |
| ac_shtool="./shtool" |
| T_MD=`$ac_shtool echo -n -e %B` |
| T_ME=`$ac_shtool echo -n -e %b` |
| PLATFORM=`./config.guess` |
| PLATFORM=`./config.sub $PLATFORM` |
| MM_VERSION_STR="`$ac_shtool version -l c -d long mm_vers.c`" |
| AC_SUBST(MM_VERSION_STR) |
| |
| dnl # friendly header ;-) |
| echo "${T_MD}Configuring MM library, Version ${MM_VERSION_STR}${T_ME}" |
| echo "Copyright (c) 1999 Ralf S. Engelschall, All Rights Reserved." |
| echo "Platform: ${T_MD}${PLATFORM}${T_ME}" |
| |
| dnl # autoconf initialization |
| AC_INIT(README) |
| AC_CONFIG_HEADER(mm_conf.h)dnl |
| AC_PREFIX_DEFAULT(/usr/local) |
| |
| dnl # |
| dnl # determine build tools and parameters |
| dnl # |
| |
| AC_CONFIGURE_PART(Build Tools) |
| AC_PROG_CC |
| AC_PROG_CPP |
| AC_CHECK_DEBUGGING |
| AC_SET_MAKE |
| AC_PROG_LIBTOOL |
| |
| dnl # support for some special platform/compiler options |
| case "$PLATFORM:$CC" in |
| *-hp-hpux*:cc ) CFLAGS="$CFLAGS -Ae +DAportable" ;; |
| esac |
| |
| dnl # |
| dnl # determine system parameters |
| dnl # |
| |
| AC_CONFIGURE_PART(Platform Environment) |
| |
| AC_HAVE_HEADERS(stdio.h stdlib.h string.h dnl |
| errno.h limits.h unistd.h fcntl.h dnl |
| sys/stat.h sys/types.h) |
| AC_BEGIN_DECISION([mandatory system headers]) |
| AC_IFALLYES(header:stdio.h header:stdlib.h header:string.h dnl |
| header:errno.h header:limits.h header:unistd.h header:fcntl.h dnl |
| header:sys/stat.h header:sys/types.h, |
| AC_DECIDE(fine, [all fine])) |
| AC_END_DECISION |
| |
| AC_HAVE_HEADERS(memory.h) |
| AC_CHECK_FUNCS(memcpy memset bcopy) |
| AC_CHECK_DEFINE(_POSIX_PATH_MAX, limits.h) |
| AC_CHECK_DEFINE(PATH_MAX, limits.h) |
| AC_CHECK_DEFINE(MAXPATHLEN, sys/param.h) |
| AC_CHECK_DEFINE(_POSIX_CHILD_MAX, limits.h) |
| AC_CHECK_DEFINE(CHILD_MAX, limits.h) |
| |
| dnl # some special defines for brain dead platforms |
| case $PLATFORM in |
| *-*-sunos* ) AC_DEFINE(MM_OS_SUNOS) ;; |
| esac |
| |
| dnl # |
| dnl # method to determine virtual memory page size |
| dnl # |
| |
| AC_CONFIGURE_PART(Virtual Memory Page Size) |
| |
| AC_HAVE_HEADERS(unistd.h) |
| AC_HAVE_FUNCS(getpagesize sysconf) |
| AC_CHECK_DEFINE(_SC_PAGESIZE, unistd.h) |
| |
| AC_BEGIN_DECISION([memory page size determination]) |
| AC_IFALLYES(header:unistd.h func:getpagesize, |
| AC_DECIDE(MM_VMPS_GETPAGESIZE, [4.2BSD getpagesize()])) |
| AC_IFALLYES(header:unistd.h func:sysconf define:_SC_PAGESIZE, |
| AC_DECIDE(MM_VMPS_SYSCONF, [POSIX.1 sysconf(_SC_PAGESIZE)])) |
| AC_END_DECISION |
| AC_DEFINE_UNQUOTED($ac_decision) |
| |
| dnl # |
| dnl # Shared Memory |
| dnl # |
| |
| AC_CONFIGURE_PART(Shared Memory Implementation) |
| |
| AC_HAVE_HEADERS(sys/mman.h) |
| AC_CHECK_DEFINE(MAP_ANON, sys/mman.h) |
| AC_HAVE_FUNCS(mmap munmap shm_open shm_unlink) |
| AC_TEST_FILE(/dev/zero) |
| AC_HAVE_HEADERS(sys/ipc.h sys/shm.h sys/file.h) |
| AC_HAVE_FUNCS(shmget shmat shmdt shmctl) |
| |
| AC_BEGIN_DECISION([shared memory allocation method]) |
| AC_IFALLYES(header:sys/mman.h func:mmap func:munmap, |
| AC_DECIDE(MM_SHMT_MMFILE, [Classical mmap() on temporary file])) |
| AC_IFALLYES(header:sys/mman.h func:mmap func:munmap func:shm_open func:shm_unlink, |
| AC_DECIDE(MM_SHMT_MMPOSX, [mmap() via POSIX.1 shm_open() on temporary file])) |
| AC_IFALLYES(header:sys/mman.h func:mmap func:munmap file:/dev/zero, |
| AC_DECIDE(MM_SHMT_MMZERO, [SVR4-style mmap() on /dev/zero])) |
| AC_IFALLYES(header:sys/ipc.h header:sys/shm.h header:sys/file.h dnl |
| func:shmget func:shmat func:shmdt func:shmctl, |
| AC_DECIDE(MM_SHMT_IPCSHM, [SysV IPC shmget()])) |
| AC_IFALLYES(header:sys/mman.h func:mmap func:munmap define:MAP_ANON, |
| AC_DECIDE(MM_SHMT_MMANON, [4.4BSD-style mmap() via MAP_ANON])) |
| case $PLATFORM in |
| *-*-linux* ) |
| # Linux has problems with MM_SHMT_MMANON |
| AC_DECISION_OVERRIDE(MM_SHMT_MMANON MM_SHMT_MMFILE MM_SHMT_MMZERO dnl |
| MM_SHMT_MMPOSX MM_SHMT_IPCSHM) |
| ;; |
| esac |
| AC_ARG_WITH(shm,dnl |
| [ --with-shm=TYPE force shared memory type: MMFILE MMZERO MMPOSX MMANON IPCSHM], |
| AC_DECISION_FORCE(MM_SHMT_$withval) |
| )dnl |
| AC_END_DECISION |
| AC_DEFINE_UNQUOTED($ac_decision) |
| |
| AC_CHECK_MAXSEGSIZE($ac_decision) |
| |
| dnl # |
| dnl # Mutex |
| dnl # |
| |
| AC_CONFIGURE_PART(Mutual Exclusion Implementation) |
| |
| AC_HAVE_HEADERS(sys/ipc.h sys/sem.h sys/file.h) |
| AC_HAVE_FUNCS(semget semctl) |
| AC_CHECK_DEFINE(LOCK_EX, sys/file.h) |
| AC_CHECK_DEFINE(F_SETLK, fcntl.h) |
| AC_CHECK_DEFINE(IPC_PRIVATE, sys/ipc.h) |
| AC_CHECK_DEFINE(SEM_UNDO, sys/sem.h) |
| |
| AC_MSG_CHECKING(whether union semun is defined in sys/sem.h) |
| AC_TRY_COMPILE([ |
| #include <sys/types.h> |
| #include <sys/ipc.h> |
| #include <sys/sem.h> |
| ],[ |
| union semun arg; |
| semctl(0, 0, 0, arg); |
| ], |
| AC_DEFINE(HAVE_UNION_SEMUN) |
| msg=yes,dnl |
| msg=no) |
| AC_MSG_RESULT([$msg]) |
| |
| AC_BEGIN_DECISION([mutual exclusion implementation method]) |
| AC_IFALLYES(header:sys/file.h define:LOCK_EX, |
| AC_DECIDE(MM_SEMT_FLOCK, [4.2BSD-style flock() on temporary file])) |
| AC_IFALLYES(header:sys/ipc.h header:sys/sem.h header:sys/file.h dnl |
| func:semget func:semctl, |
| AC_DECIDE(MM_SEMT_IPCSEM, [SysV IPC semget()])) |
| AC_IFALLYES(header:fcntl.h define:F_SETLK, |
| AC_DECIDE(MM_SEMT_FCNTL, [SVR4-style fcntl() on temporary file])) |
| AC_ARG_WITH(sem,dnl |
| [ --with-sem=TYPE force semaphore type: FLOCK FCNTL IPCSEM], |
| AC_DECISION_FORCE(MM_SEMT_$withval) |
| )dnl |
| AC_END_DECISION |
| AC_DEFINE_UNQUOTED($ac_decision) |
| |
| dnl # |
| dnl # finally: source file substitution... |
| dnl # |
| |
| AC_CONFIGURE_PART(Output Substitution) |
| |
| AC_OUTPUT(dnl |
| Makefile dnl |
| mm-config dnl |
| ,dnl |
| chmod a+x mm-config |
| )dnl |
| |
| dnl ##EOF## |