diff options
author | Ossama Othman <ossama-othman@users.noreply.github.com> | 1999-03-20 08:06:21 +0000 |
---|---|---|
committer | Ossama Othman <ossama-othman@users.noreply.github.com> | 1999-03-20 08:06:21 +0000 |
commit | 4644e6d0fb62412565f1b54d95a8eebf0d46b727 (patch) | |
tree | 493ea7eb22662cdb19f117405288119513932fd9 /m4/acinclude.m4 | |
parent | 8d9a178a223bf4d9810dc35da271f0cab75725ec (diff) | |
download | ATCD-4644e6d0fb62412565f1b54d95a8eebf0d46b727.tar.gz |
Starting to do the "real" ACE+autoconf integration.
Diffstat (limited to 'm4/acinclude.m4')
-rw-r--r-- | m4/acinclude.m4 | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/m4/acinclude.m4 b/m4/acinclude.m4 new file mode 100644 index 00000000000..d76deacb66e --- /dev/null +++ b/m4/acinclude.m4 @@ -0,0 +1,336 @@ +dnl ------------------------------------------------------------------------- +dnl $Id$ +dnl +dnl ACE M4 include file which contains ACE specific M4 macros +dnl to be used by the ACE configure script. +dnl +dnl ------------------------------------------------------------------------- + +dnl Copyright (C) 1998, 1999 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 miscellaneous macros + + +dnl add compiler flags to the CXXFLAGS and CFLAGS variables when doing an +dnl AC_TRY_COMPILE (not ACE_TRY_COMPILE). +dnl Use this macro when adding include directories to the compiler flags, +dnl for example. +dnl Usage: ACE_TRY_COMPILE(COMPILER-FLAGS, INCLUDES, FUNCTION-BODY, +dnl [ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]) +AC_DEFUN(ACE_TRY_COMPILE, dnl +[ + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $1" + + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $1" + + AC_TRY_COMPILE($2, $3, $4, $5) + + dnl Restore the C++ and C flags + CXXFLAGS="$save_CXXFLAGS" + CFLAGS="$save_CFLAGS" + +]) + +dnl Create a temporary empty file and remove it after commands are done using +dnl it. The directory in which the temporary file will be created in must +dnl exist. Files will be created under the source directory, not the build +dnl directory. +dnl Use this macro when you need a particular file available but want it to be +dnl empty. This is useful to prevent conflicts with autoconf's confdefs.h +dnl header when doing an AC_TRY_COMPILE. +dnl Usage: ACE_USE_TEMP_FILE(TEMP-FILE-TO-CREATE, COMMANDS-THAT-WILL-USE-IT) +AC_DEFUN(ACE_USE_TEMP_FILE, dnl +[ + if test -f ${srcdir}/$1; then + mv ${srcdir}/$1 ${srcdir}/$1.conf + fi + + touch ${srcdir}/$1 + + $2 + + if test -f ${srcdir}/$1.conf; then + mv ${srcdir}/$1.conf ${srcdir}/$1 + else + rm ${srcdir}/$1 + fi +]) + +dnl Run given test(s) with warnings converted to errors +dnl Usage: ACE_CONVERT_WARNINGS_TO_ERRORS(TEST-BLOCK) +AC_DEFUN(ACE_CONVERT_WARNINGS_TO_ERRORS, dnl +[ +dnl If we are using GNU C++, add the "-Werror" compiler flag to the +dnl current set of flags so that compiler warnings become errors. We +dnl do this to cause certain tests to fail when they are supposed to +dnl fail. Some of the tests pass because the GNU C++ compiler issues +dnl warnings instead of errors when errors should occur. + TEMPCXXFLAGS="" + if test -n "$GXX"; then + TEMPCXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -Werror" + fi + + $1 + + if test -n "$TEMPCXXFLAGS"; then + CXXFLAGS="$TEMPCXXFLAGS" + fi + +]) + +dnl Wrapper around AC_CACHE_VAL used to ensure "ACTION-IF" commands are run +dnl even if results have been previously cached. +dnl Usage: ACE_CACHE_CHECK(MESSAGE, CACHE-ID, COMMANDS-TO-SET-CACHE-VAL, +dnl ACTION-IF-CACHE-ID-IS-YES, +dnl ACTION-IF-CACHE-ID-IS-NO) +dnl The COMMANDS-TO-SET-CACHE-VAL should set the CACHE-ID to yes or "no," +dnl otherwise the "ACTION-IF*" commands may not run. The +dnl COMMANDS-TO-SET-CACHE-VAL should only set the CACHE value. For example, +dnl no AC_DEFINES should be placed in the COMMANDS-TO-SET-CACHE-VAL. +AC_DEFUN(ACE_CACHE_CHECK, +[ + AC_MSG_CHECKING([$1]) + AC_CACHE_VAL([$2], [$3]) + AC_MSG_RESULT([$]$2) + if test "[$]$2" = yes; then + ace_just_a_place_holder=fixme +ifelse([$4], , :, [$4]) + else + ace_just_a_place_holder=fixme +ifelse([$5], , , [$5 +])dnl + fi +]) + +dnl checks for programs + +dnl checks for libraries + +dnl checks for header files + +dnl checks for typedefs + +dnl Check for specific typedef in given header file +dnl Usage: ACE_CHECK_TYPE(TYPEDEF, INCLUDE, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl This macro can only check for one typedef in one header file at a time!! +AC_DEFUN(ACE_CHECK_TYPE, dnl +[ +dnl AC_REQUIRE([AC_PROG_CXX]) +dnl AC_REQUIRE([AC_PROG_CXXCPP]) +dnl AC_REQUIRE([AC_LANG_CPLUSPLUS]) + + ACE_CACHE_CHECK(for $1 in $2, ace_cv_type_$1, + [ + AC_TRY_COMPILE( + [ +#include <$2> + ], + [ + $1 ace_$1; + ], + [ + ace_cv_type_$1=yes + ], + [ + ace_cv_type_$1=no + ]) + ], $3, $4) +]) + + +dnl checks for structures + +dnl Check for specific struct in given header file +dnl Usage: ACE_CHECK_STRUCT(STRUCTURE, INCLUDE, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl This macro can only check for one struct in one header file at a time!! +AC_DEFUN(ACE_CHECK_STRUCT, dnl +[ +dnl AC_REQUIRE([AC_PROG_CXX]) +dnl AC_REQUIRE([AC_PROG_CXXCPP]) +dnl AC_REQUIRE([AC_LANG_CPLUSPLUS]) + +dnl Do the transliteration at runtime so arg 1 can be a shell variable. +dnl ac_safe=`echo "$1" | sed 'y%./+-%__p_%'` + + ACE_CACHE_CHECK(for struct $1 in $2, ace_cv_struct_$1, + [ + ACE_TRY_COMPILE_STRUCT($1, $2, + [ + ace_cv_struct_$1=yes + ], + [ + ace_cv_struct_$1=no + ]) + ], $3, $4) +]) + +dnl Check for specific struct in given header file by compiling a test +dnl program. This macro is used by ACE_CHECK_STRUCT. +dnl Usage: ACE_TRY_COMPILE_STRUCT(STRUCTURE, INCLUDE, +dnl [ACTION-IF-SUCCESSFUL[, ACTION-IF-NOT-SUCCESSFUL]]) +dnl This macro can only check for one struct in one header file at a time!! +AC_DEFUN(ACE_TRY_COMPILE_STRUCT, dnl +[ +dnl AC_REQUIRE([AC_PROG_CXX]) +dnl AC_REQUIRE([AC_PROG_CXXCPP]) +dnl AC_REQUIRE([AC_LANG_CPLUSPLUS]) + + AC_TRY_COMPILE( + [ +#include <$2> + ], + [ + struct $1 ace_$1; + ], + [ + $3 + ], + [ +dnl Some compilers don't like the "struct" but we need the struct for some +dnl platforms to resolve ambiguities between functions and structures with +dnl with the same name. So, we try the same test but without "struct" if +dnl the above test with "struct" fails. If both tests fail, then we can +dnl be reasonably sure that we don't have the structure we are testing for. + AC_TRY_COMPILE( + [ +#include <$2> + ], + [ + $1 ace_$1; + ], + [ + $3 + ], + [ + $4 + ]) + ]) +]) + +dnl checks for variables + +dnl checks for compiler characteristics + +dnl checks for library functions + +dnl Check for function using prototype in header +dnl This macro is used if a function is called a different name in a given +dnl library than what is in the header file but the difference is made +dnl transparent to the user since the header may provide a macro to make +dnl things "transparent." If the given header does not exist then this +dnl macro acts just like the standard AC_CHECK_FUNC macro. +dnl Usage: ACE_CHECK_FUNC(FUNCTION, HEADER, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +AC_DEFUN(ACE_CHECK_FUNC, dnl +[ +dnl AC_REQUIRE([AC_PROG_CXX]) +dnl AC_REQUIRE([AC_PROG_CXXCPP]) +dnl AC_REQUIRE([AC_LANG_CPLUSPLUS]) + AC_REQUIRE([AC_PROG_AWK]) + + AC_TRY_CPP( + [ +#include <$2> + ], ace_header_exists=yes, ace_header_exists=no) + + cat > conftest.$ac_ext <<EOF + +#include <$2> + ACE_REAL_FUNCTION $1 + +EOF + + if test "$ace_header_exists" = yes; then + if test -z "$AWK"; then + AC_MSG_WARN(No awk program found. "Real" function may not be found.) + fi + + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "ACE_REAL_FUNCTION" | + (eval "$AWK '{print \[$]2}' > conftest.awk 2>&1"); then + rm -f conftest.$ac_ext + ace_real_function=`cat conftest.awk` + rm -f conftest.awk + fi + + if test $1 != "$ace_real_function"; then + AC_MSG_CHECKING(for real $1 from $2) + AC_MSG_RESULT($ace_real_function) + fi + else + ace_real_function=$1 + fi dnl test "$ace_header_not_exist" != yes + + AC_CHECK_FUNC($ace_real_function, $3, $4) +]) + +dnl Check for function in library using prototype in header +dnl This macro is used if a function is called a different name in a given +dnl library than what is in the header file but the difference is made +dnl transparent to the user since the header may provide a macro to make +dnl things "transparent." If the given header does not exist then this +dnl macro acts just like the standard AC_CHECK_LIB macro. +dnl Usage: ACE_CHECK_LIB(LIBRARY, FUNCTION, HEADER, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +AC_DEFUN(ACE_CHECK_LIB, dnl +[ +dnl AC_REQUIRE([AC_PROG_CXX]) +dnl AC_REQUIRE([AC_PROG_CXXCPP]) +dnl AC_REQUIRE([AC_LANG_CPLUSPLUS]) + AC_REQUIRE([AC_PROG_AWK]) + + AC_TRY_CPP( + [ +#include <$3> + ], ace_header_exists=yes, ace_header_exists=no) + + cat > conftest.$ac_ext <<EOF + +#include <$3> + ACE_REAL_FUNCTION $2 + +EOF + + if test "$ace_header_exists" = yes; then + if test -z "$AWK"; then + AC_MSG_WARN(No awk program found. "Real" function in library may not be found.) + fi + + if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "ACE_REAL_FUNCTION" | + eval "$AWK '{print \[$]2}'" > conftest.awk 2>&1; then + rm -f conftest.$ac_ext + ace_real_function=`cat conftest.awk` + rm -f conftest.awk + fi + + if test $2 != "$ace_real_function"; then + AC_MSG_CHECKING(for real $2 from $3) + AC_MSG_RESULT($ace_real_function) + fi + else + ace_real_function=$2 + fi dnl test "$ace_header_not_exist" != yes + + AC_CHECK_LIB($1, $ace_real_function, $4, $5) +]) + + +dnl checks for structures + +dnl checks for system services |