diff options
Diffstat (limited to 'ACE/m4/platform.m4')
-rw-r--r-- | ACE/m4/platform.m4 | 545 |
1 files changed, 545 insertions, 0 deletions
diff --git a/ACE/m4/platform.m4 b/ACE/m4/platform.m4 new file mode 100644 index 00000000000..f03fefd3dba --- /dev/null +++ b/ACE/m4/platform.m4 @@ -0,0 +1,545 @@ +dnl ------------------------------------------------------------------------- +dnl $Id$ +dnl +dnl platform.m4 +dnl +dnl ACE M4 include file which contains ACE specific M4 macros +dnl that set/determine which known platform specific C++ macros +dnl to define. +dnl +dnl ------------------------------------------------------------------------- + +dnl Copyright (C) 1998, 1999, 2000, 2002, 2003 Ossama Othman +dnl +dnl All Rights Reserved +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the current ACE distribution terms. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +dnl Check for thread related libraries and compiler flags +dnl Usage: ACE_SET_PLATFORM_MACROS +AC_DEFUN([ACE_SET_PLATFORM_MACROS], +[ +dnl Begin ACE_SET_PLATFORM_MACROS + +dnl At some point the below platform specific settings should be +dnl automated as much as possible! We set things manually just to get +dnl things going with the auto{conf,make}/libtool integration into the +dnl ACE source tree. + +dnl Platform specific flags +case "$host" in + *aix3*) + AC_DEFINE([AIX]) + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + ;; + *aix4.1*) + AC_DEFINE([AIX]) + dnl Use BSD 4.4 socket definitions for pre-AIX 4.2. The _BSD + dnl setting also controls the data type used for waitpid(), + dnl wait(), and wait3(). + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_BSD=44" + dnl pre-AIX 4.3 requires _BSD_INCLUDES + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_BSD_INCLUDES" + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + ;; + *aix4.2*) + AC_DEFINE([AIX]) + dnl pre-AIX 4.3 requires _BSD_INCLUDES + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_BSD_INCLUDES" + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + AC_DEFINE([ACE_TLI_TCP_DEVICE], ["/dev/xti/tcp"]) + ;; + *aix*) + AC_DEFINE([AIX]) + ;; +dnl /* Cray specific configuration parameters */ +dnl /* +dnl * The following predefined macros are used within ACE ifdefs. +dnl * These are defined when using the Cray compilers. _CRAYMPP +dnl * is defined, for example, if you are running on a Cray T3E +dnl * massively parallel machine. Moreover, in the case of the T3E, +dnl * _CRAYT3E will be defined. This is used to determine the +dnl * ACE_SIZEOF defines for primitive types. +dnl * +dnl * _UNICOS is defined as either the major version of UNICOS being run, +dnl * e.g. 9 or 10 on the vector machines (e.g. C90, T90, J90, YMP, ...) +dnl * or the major+minor+level UNICOS/mk version, e.g. 2.0.3 => 203, +dnl * being run on an MPP machine. +dnl * +dnl * Summary: +dnl * +dnl * _CRAYMPP (defined only if running on MPP machine, e.g. T3E, UNICOS/mk) +dnl * _CRAYT3E (defined specifically if compiling on a Cray T3E) +dnl * _UNICOS (defined if running UNICOS or UNICOS/mk) +dnl * +dnl * Tested on UNICOS 10.0.0.2, UNICOS/mk 2.0.3.10 +dnl * +dnl * Contributed by Doug Anderson <doug "at" clark.net> +dnl */ + t3e-cray-unicosmk*) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_CRAYMPP -D_CRAYT3E -D_UNICOS" + ;; + t3e-cray*) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_CRAYT3E -D_UNICOS" + ;; + *cray-unicos*) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_UNICOS" + ;; + *hpux9*) + AC_DEFINE([HPUX]) + ;; + *hpux10*) + AC_DEFINE([HPUX]) + AC_DEFINE([HPUX_10]) + dnl _HPUX_SOURCE : Enable HP-UX specific features in platform headers + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_HPUX_SOURCE" + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + AC_DEFINE([ACE_TLI_TCP_DEVICE], ["/dev/inet_cots"]) + ;; + *hpux11*) + AC_DEFINE([HPUX]) + AC_DEFINE([HPUX_11]) + AC_EGREP_CPP([ACE_ON_64BIT_HP], + [ +#ifdef __LP64__ + ACE_ON_64BIT_HP +#endif + ], + [ + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x0000001100000000)]) + AC_DEFINE([ACE_DEFAULT_BASE_ADDRL], [((char *) 0x0000001100000000)]) + ], + [ + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + ]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + ;; + *irix5.2*) + AC_DEFINE([IRIX5]) + ;; + *irix5.3*) + AC_DEFINE([IRIX5]) + if test "$GXX" = no; then + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_BSD_TYPES" + fi + ;; + *irix6*) + AC_DEFINE([IRIX6]) + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) (1024U * 1024 * 1024))]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + dnl _MODERN_C_ : Enable modern features in SGI C++ compiler + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_SGI_MP_SOURCE -D_MODERN_C_" + + case "$host" in + *irix6.2*) + dnl Recent versions of IRIX do not appear to require this macro. + if test "$ace_user_enable_threads" = yes; then + AC_DEFINE([ACE_HAS_IRIX62_THREADS]) + fi + ;; + esac + ;; + *linux*) + AC_DEFINE([ACE_DEFAULT_MAX_SOCKET_BUFSIZ], [65535]) + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + AC_DEFINE([ACE_HAS_BIG_FD_SET]) dnl FIXME: We need a test for this! + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + dnl Does this box have NPTL? + NPTL=`getconf GNU_LIBPTHREAD_VERSION | $AWK '{print [$][1]}' -` + if test "$NPTL" != NPTL; then + ACE_CPPFLAGS="$ACE_CPPFLAGS -DACE_LACKS_LINUX_NPTL" + fi + ;; + *lynxos*) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_POSIX_THREADS_CALLS" + AC_DEFINE([__NO_INCLUDE_WARN__]) + AC_DEFINE([ACE_MALLOC_ALIGN], [8]) + AC_DEFINE([ACE_MAP_PRIVATE], [ACE_MAP_SHARED]) + AC_DEFINE([ACE_HAS_LYNXOS4_SIGNALS]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + ;; + *mvs*) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_ALL_SOURCE" + ;; + *osf3.2*) + AC_EGREP_CPP([ACE_DEC_CXX], + [ +#if defined(__DECCXX) + ACE_DEC_CXX +#endif + ], + [ + AC_DEFINE([DEC_CXX]) + ],) + ;; + *osf4.0*) +dnl We need to add checks for g++, DEC C++ and Rational C++ + AC_EGREP_CPP([ACE_DEC_CXX], + [ +#if defined(__DECCXX) + ACE_DEC_CXX +#endif + ], + [ + AC_DEFINE([DEC_CXX]) + ],) +dnl Check for _POSIX_C_SOURCE macro + AC_EGREP_CPP([ACE_ON_DEC_WITH_POS_SRC], + [ + /* Include unistd.h to define _POSIX_C_SOURCE. */ +#ifndef ACE_LACKS_UNISTD_H +# include <unistd.h> +#endif + +#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 199506L) + ACE_ON_DEC_WITH_POS_SRC +#endif + ], + [ + AC_DEFINE([DIGITAL_UNIX]) + ],) + AC_DEFINE([ACE_DEFAULT_BASE_ADDR], [((char *) 0x80000000)]) + AC_DEFINE([ACE_NEEDS_HUGE_THREAD_STACKSIZE], [(1024 * 1024)]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + ;; + *sco4.2*) + AC_DEFINE([SCO]) + AC_DEFINE([ACE_DEFAULT_CLOSE_ALL_HANDLES], [0]) + ;; + *sco5*) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_SVID3" + AC_DEFINE([SCO]) + AC_DEFINE([ACE_DEFAULT_CLOSE_ALL_HANDLES], [0]) + AC_DEFINE([ACE_HAS_BIG_FD_SET]) dnl FIXME: We need a test for this! + ;; + *sunos4*) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + ;; + *solaris2.4*) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + AC_DEFINE([ACE_NEEDS_LWP_PRIO_SET]) + ;; + *solaris2.5*) + AC_DEFINE([ACE_MALLOC_ALIGN], [8]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + AC_DEFINE([ACE_NEEDS_LWP_PRIO_SET]) + ;; + *solaris2.6*) + AC_DEFINE([ACE_MALLOC_ALIGN], [8]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + AC_DEFINE([ACE_NEEDS_LWP_PRIO_SET]) + ;; + *solaris2.7*) + AC_DEFINE([ACE_MALLOC_ALIGN], [8]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + AC_DEFINE([ACE_NEEDS_LWP_PRIO_SET]) + ;; + *86*solaris*) + AC_DEFINE([ACE_HAS_X86_STAT_MACROS]) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + AC_DEFINE([ACE_NEEDS_LWP_PRIO_SET]) + ;; + *tandem*) + AC_DEFINE([ACE_TIMER_SKEW], [(1000 * 10)]) + ;; + *unixware2.0*) + AC_DEFINE([UNIXWARE]) + AC_DEFINE([UNIXWARE_2_0]) + ;; + *unixware2.1*) + AC_DEFINE([UNIXWARE]) + AC_DEFINE([UNIXWARE_2_1]) + ;; + *UnixWare7.1*) + AC_DEFINE([UNIXWARE]) + AC_DEFINE([UNIXWARE_7_1]) + AC_DEFINE([__IOCTL_VERSIONED__]) + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_REENTRANT" + ;; + *vxworks*) + AC_DEFINE([VXWORKS]) + AC_DEFINE([ACE_MAIN], [ace_main]) + AC_DEFINE([ACE_DEFAULT_MAX_SOCKET_BUFSIZ], [32768]) + dnl need ACE_HAS_TSS_EMULATION for ACE_DEFAULT_THREAD_KEYS! + AC_EGREP_CPP([ACE_TSS_EMULATION], + [ +#if defined (ACE_HAS_TSS_EMULATION) + ACE_TSS_EMULATION +#endif + ], [AC_DEFINE([ACE_DEFAULT_THREAD_KEYS], [16])],[]) + AC_DEFINE([ACE_THR_PRI_FIFO_DEF], [101]) + ;; + *cygwin32*) + AC_DEFINE([CYGWIN32]) + ;; + *mingw32*) + AC_DEFINE([ACE_WIN32]) + ;; + *win32*) + AC_DEFINE([ACE_WIN32]) +dnl AC_DEFINE(ACE_USE_SELECT_REACTOR_FOR_REACTOR_IMPL) + if test "$ace_u_long_long_typedef_set" != yes; then + ACE_UINT64="unsigned __int64" + ace_u_long_long_typedef_set=yes + fi dnl "$ace_u_long_long_typedef_set" != yes + ;; + *qnx* | *nto* | *neutrino*) + dnl These should be defined on the command line, not in config.h. + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_QNX_SOURCE -D_POSIX_C_SOURCE=199506" + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_POSIX_NAME_MAX=14" # Max bytes in a + # filename + ACE_CPPFLAGS="$ACE_CPPFLAGS -D_POSIX_PATH_MAX=256" # Num. bytes in + # pathname (excl. NULL) + case "$host" in + i[[3456]]86*) + if test "$GXX" = yes; then + # Neutrino defines memcpy as a macro on x86, which then + # hoses the ACE_OS::memcpy() method. Undefining + # __OPTIMIZE__ prevents this from happening. + ACE_CPPFLAGS="$ACE_CPPFLAGS -U__OPTIMIZE__" + fi + ;; + esac + ;; + *) + ;; +esac + +ACE_FUNC_IOCTL_ARGTYPES +ACE_CHECK_GETNAME_RETURNS_RANDOM_SIN_ZERO +ACE_CHECK_HAS_NONCONST_FD_ISSET +ACE_CHECK_FORMAT_SPECIFIERS +ACE_CHECK_LACKS_PERFECT_MULTICAST_FILTERING +ACE_CHECK_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE + +dnl End ACE_SET_PLATFORM_MACROS +]) + + + +# ACE_CHECK_FORMAT_SPECIFIERS +# +# Override default *printf format specifiers for size_t, ssize_t, ACE_INT64, +# and ACE_UINT64 +# +# FIXME: Is it possible to write a portable feature test, or is checking +# the the target OS / target CPU the best we can do? +# +#--------------------------------------------------------------------------- +AC_DEFUN([ACE_CHECK_FORMAT_SPECIFIERS], +[dnl +AH_TEMPLATE([ACE_SIZE_T_FORMAT_SPECIFIER], +[Define to the *printf format specifier (e.g. "%u") for size_t])dnl +AH_TEMPLATE([ACE_SSIZE_T_FORMAT_SPECIFIER], +[Define to the *printf format specifier (e.g. "%d") for ssize_t])dnl +AH_TEMPLATE([ACE_INT64_FORMAT_SPECIFIER], +[Define to the *printf format specifier (e.g. "%lld") for ACE_INT64])dnl +AH_TEMPLATE([ACE_UINT64_FORMAT_SPECIFIER], +[Define to the *printf format specifier (e.g. "%llu") for ACE_UINT64])dnl + +case "$host_os" in +darwin*) + AC_DEFINE([ACE_SIZE_T_FORMAT_SPECIFIER], ["%lu"]) + ;; + +linux*) + case "$host_cpu" in + alpha|ia64|x86_64) + AC_DEFINE([ACE_SIZE_T_FORMAT_SPECIFIER], ["%lu"]) + AC_DEFINE([ACE_SSIZE_T_FORMAT_SPECIFIER], ["%ld"]) + AC_DEFINE([ACE_INT64_FORMAT_SPECIFIER], ["%ld"]) + AC_DEFINE([ACE_UINT64_FORMAT_SPECIFIER], ["%lu"]) + ;; + *) + ;; + esac + ;; + +mingw32*) + AC_DEFINE([ACE_INT64_FORMAT_SPECIFIER], ["%I64d"]) + AC_DEFINE([ACE_UINT64_FORMAT_SPECIFIER], ["%I64u"]) + ;; + +netbsd*) + case "$host_cpu" in + x86_64) + AC_DEFINE([ACE_SIZE_T_FORMAT_SPECIFIER], ["%lu"]) + AC_DEFINE([ACE_SSIZE_T_FORMAT_SPECIFIER], ["%ld"]) + ;; + *) + ;; + esac + ;; + +win32*) + AC_DEFINE([ACE_INT64_FORMAT_SPECIFIER], ["%I64d"]) + AC_DEFINE([ACE_UINT64_FORMAT_SPECIFIER], ["%I64u"]) + ;; + +*) + ;; +esac]) + + +# ACE_CHECK_PERFECT_MULTICAST_FILTERING +# +# Checks whether platform lacks "perfect" multicast filtering. +# +# FIXME: Is it possible to write a portable feature test, or is checking +# the the target OS the best we can do? +# +#--------------------------------------------------------------------------- +AC_DEFUN([ACE_CHECK_LACKS_PERFECT_MULTICAST_FILTERING], +[AC_CACHE_CHECK([whether platform lacks perfect multicast filtering], + [ace_cv_lacks_perfect_multicast_filtering], + [case "$host_os" in + darwin* | freebsd* | netbsd* | openbsd* | qnx*) + ace_cv_lacks_perfect_multicast_filtering=yes ;; + *) + ace_cv_lacks_perfect_multicast_filtering=no ;; + esac]) + +if test $ace_cv_lacks_perfect_multicast_filtering = yes; then + AC_DEFINE([ACE_LACKS_PERFECT_MULTICAST_FILTERING], 1, +[Define to 1 if platform lacks IGMPv3 "perfect" filtering of multicast +datagrams at the socket level. If defined, ACE_SOCK_Dgram_Mcast will bind +the first joined multicast group to the socket, and all future joins on that +socket will fail with an error.]) +fi +]) + + +# ACE_FUNC_IOCTL_ARGTYPES +# +# Determine the correct type to be passed to ioctl's second argument and +# define the types in ACE_IOCTL_TYPE_ARG2. +# +# FIXME: Should we support ioctl's third argument as well...? +# +# FIXME: Is it possible to write a portable feature test, or is checking +# the the target OS the best we can do? +# +#--------------------------------------------------------------------------- +AC_DEFUN([ACE_FUNC_IOCTL_ARGTYPES], +[AC_CACHE_CHECK([types of arguments for ioctl()], + [ace_cv_func_ioctl_arg2], + [case "$host_os" in + darwin* | freebsd* | netbsd* | openbsd*) + ace_cv_func_ioctl_arg2="unsigned long" ;; + *) + ace_cv_func_ioctl_arg2="int" ;; + esac]) + +AC_DEFINE_UNQUOTED(ACE_IOCTL_TYPE_ARG2, $ace_cv_func_ioctl_arg2, + [Define to the type of arg 2 for `ioctl'.]) +]) + + +# ACE_VAR_TIMEZONE +# +# Checks whether platform has global "timezone" variable. +# +#--------------------------------------------------------------------------- +AC_DEFUN([ACE_VAR_TIMEZONE], +[AC_CACHE_CHECK([for timezone variable], + [ace_cv_var_timezone], + [AC_TRY_LINK([#include <time.h>], + [return (int) timezone(0, 0);], + [ace_cv_var_timezone=no], + [AC_TRY_LINK([#include <time.h>], + [return (int) timezone;], + [ace_cv_var_timezone=yes], + [ace_cv_var_timezone=no])]) + ]) +if test "$ace_cv_var_timezone" = yes; then + AC_DEFINE([ACE_HAS_TIMEZONE], 1, + [Define to 1 if platform has global timezone variable]) +fi +]) + + +# ACE_CHECK_GETNAME_RETURNS_RANDOM_SIN_ZERO +# +# Checks whether getsockname() and getpeername() return random values +# in the sockaddr_in.sin_zero field. +# +# FIXME: Is it possible to write a portable feature test, or is checking +# the the target OS the best we can do? +# +AC_DEFUN([ACE_CHECK_GETNAME_RETURNS_RANDOM_SIN_ZERO], +[AC_CACHE_CHECK([whether getsockname() and getpeername() return random values in sockaddr_in.sin_zero], + [ace_cv_getname_returns_random_sin_zero], + [case "$host_os" in + linux*) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([#include <linux/version.h>], + [ + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,47)) + int ok; + #else + choke me + #endif + ]) + ], + [ace_cv_getname_returns_random_sin_zero=no], + [ace_cv_getname_returns_random_sin_zero=yes]) + ;; + *) + ace_cv_getname_returns_random_sin_zero=no + ;; + esac]) + +if test $ace_cv_getname_returns_random_sin_zero = yes; then + AC_DEFINE([ACE_GETNAME_RETURNS_RANDOM_SIN_ZERO], 1, +[Define to 1 if the getsockname() and getpeername() return random values in the sockaddr_in.sin_zero field.]) +fi +]) + + +# ACE_CHECK_HAS_NONCONST_FD_ISSET +# +# Checks if system has a nonconst FD_ISSET macro. +# +#--------------------------------------------------------------------------- +AC_DEFUN([ACE_CHECK_HAS_NONCONST_FD_ISSET], +[dnl + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([#include <sys/time.h>], + [ + //const fd_set* temp = new fd_set(); + //FD_ISSET(0, const_cast< fd_set* >( temp ) ); + const fd_set* temp = new fd_set(); + FD_ISSET(0, temp ); + ]) + ],[],[AC_DEFINE([ACE_HAS_NONCONST_FD_ISSET], 1, + [Define to 1 if system has nonconst FD_ISSET() macro.])] + ) +]) + +# ACE_CHECK_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE +# +# Checks whether the dlsym() call segfaults when passed an invalid handle. +# +# FIXME: Is it possible to write a portable feature test, or is checking +# the the target OS the best we can do? +# +AC_DEFUN([ACE_CHECK_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE], +[AC_CACHE_CHECK([whether dlsym() segfaults when passed an invalid handle], + [ace_cv_has_dlsym_segfault_on_invalid_handle], + [case "$host_os" in + linux* | openbsd*) + ace_cv_has_dlsym_segfault_on_invalid_handle=yes ;; + *) + ace_cv_has_dlsym_segfault_on_invalid_handle=no;; + esac]) + +if test $ace_cv_has_dlsym_segfault_on_invalid_handle = yes; then + AC_DEFINE([ACE_HAS_DLSYM_SEGFAULT_ON_INVALID_HANDLE], 1, +[Define to 1 if the dlsym() call segfaults when passed an invalid handle.]) +fi +]) |