dnl --------------------------------------------------------------------------- dnl dnl Purpose: Cursom macros for autoconf configure script. dnl Author: Vadim Zeitlin dnl Created: 26.05.99 dnl Version: $Id$ dnl --------------------------------------------------------------------------- dnl =========================================================================== dnl GKT+ version test dnl =========================================================================== dnl --------------------------------------------------------------------------- dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS. Uses variables dnl gtk_config_prefix and/or gtk_config_exec_prefix if defined. dnl --------------------------------------------------------------------------- dnl AC_DEFUN(AM_PATH_GTK, [ if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi AC_PATH_PROG(GTK_CONFIG, gtk-config, no) min_gtk_version=ifelse([$1], ,0.99.7,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if test "$GTK_CONFIG" != "no" ; then GTK_CFLAGS=`$GTK_CONFIG --cflags` GTK_LIBS=`$GTK_CONFIG --libs` ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent) dnl AC_TRY_RUN([ #include #include int main () { int major, minor, micro; if (sscanf("$min_gtk_version", "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if (gtk_minor_version == 1) return FALSE; return !((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))); } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" else no_gtk=yes fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) ]) dnl =========================================================================== dnl macros to find the a file in the list of include/lib paths dnl =========================================================================== dnl --------------------------------------------------------------------------- dnl call WX_PATH_FIND_INCLUDES(search path, header name), sets ac_find_includes dnl to the full name of the file that was found or leaves it empty if not found dnl --------------------------------------------------------------------------- AC_DEFUN(WX_PATH_FIND_INCLUDES, [ ac_find_includes= for ac_dir in $1; do if test -f "$ac_dir/$2"; then ac_find_includes=$ac_dir break fi done ]) dnl --------------------------------------------------------------------------- dnl call WX_PATH_FIND_LIBRARIES(search path, header name), sets ac_find_includes dnl to the full name of the file that was found or leaves it empty if not found dnl --------------------------------------------------------------------------- AC_DEFUN(WX_PATH_FIND_LIBRARIES, [ ac_find_libraries= for ac_dir in $1; do for ac_extension in a so sl; do if test -f "$ac_dir/lib$2.$ac_extension"; then ac_find_libraries=$ac_dir break 2 fi done done ]) dnl --------------------------------------------------------------------------- dnl Path to include, already defined dnl --------------------------------------------------------------------------- AC_DEFUN(WX_INCLUDE_PATH_EXIST, [ ac_path_to_include=$1 echo "$2" | grep "\-I$1" > /dev/null result=$? if test $result = 0; then ac_path_to_include="" else ac_path_to_include="-I$1" fi ]) dnl --------------------------------------------------------------------------- dnl Path to link, already defined dnl --------------------------------------------------------------------------- AC_DEFUN(WX_LINK_PATH_EXIST, [ echo "$2" | grep "\-L$1" > /dev/null result=$? if test $result = 0; then ac_path_to_link="" else ac_path_to_link="-L$1" fi ]) dnl =========================================================================== dnl C++ features test dnl =========================================================================== dnl --------------------------------------------------------------------------- dnl WX_CPP_NEW_HEADERS checks whether the compiler has "new" header dnl or only the old one - it may be generally assumed that if dnl exists, the other "new" headers (without .h) exist too. dnl dnl call WX_CPP_NEW_HEADERS(actiof-if-true, action-if-false-or-cross-compiling) dnl --------------------------------------------------------------------------- AC_DEFUN(WX_CPP_NEW_HEADERS, [ if test "$cross_compiling" = "yes"; then ifelse([$2], , :, [$2]) else AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_CHECK_HEADERS(iostream) if test "x$HAVE_IOSTREAM" = x ; then ifelse([$2], , :, [$2]) else ifelse([$1], , :, [$1]) fi AC_LANG_RESTORE fi ]) dnl --------------------------------------------------------------------------- dnl WX_CPP_BOOL checks whether the C++ compiler has a built in bool type dnl dnl call WX_CPP_BOOL - will define HAVE_BOOL if the compiler supports bool dnl --------------------------------------------------------------------------- AC_DEFUN(WX_CPP_BOOL, [ AC_CACHE_CHECK([if C++ compiler supports bool], wx_cv_cpp_bool, [ AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_TRY_RUN([ int main() { bool b = true; return 0; } ], [ AC_DEFINE(HAVE_BOOL) wx_cv_cpp_bool=yes ], wx_cv_cpp_bool=no, wx_cv_cpp_bool=no ) AC_LANG_RESTORE ]) if test "$wx_cv_cpp_bool" = "yes"; then AC_DEFINE(HAVE_BOOL) fi ]) dnl --------------------------------------------------------------------------- dnl WX_CPP_SIZE_T_IS_NOT_INT checks whether size_t and int are different types, dnl i.e. whether we may overload operator[] on its argument type dnl --------------------------------------------------------------------------- AC_DEFUN(WX_CPP_SIZE_T_IS_NOT_INT, [ AC_CACHE_CHECK([if size_t and int are different types], wx_cv_cpp_sizet_not_int, [ AC_LANG_SAVE AC_LANG_CPLUSPLUS AC_TRY_RUN([ #include class S { public: S(char *s) { m_s = s; } char operator[](size_t n) const { return m_s[n]; } char operator[](int n) const { return m_s[n]; } private: char *m_s; }; int main() { S s("dummy"); size_t n1 = 2; int n2 = 3; return s[n1] == s[n2]; } ], AC_DEFINE(wxUSE_SIZE_T_STRING_OPERATOR) wx_cv_cpp_sizet_not_int=yes, wx_cv_cpp_sizet_not_int=no, wx_cv_cpp_sizet_not_int=no ) AC_LANG_RESTORE ]) ]) dnl --------------------------------------------------------------------------- dnl a slightly better AC_C_BIGENDIAN macro which allows cross-compiling dnl --------------------------------------------------------------------------- AC_DEFUN(WX_C_BIGENDIAN, [AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian, [ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. AC_TRY_COMPILE([#include #include ], [ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif], [# It does; now see whether it defined to BIG_ENDIAN or not. AC_TRY_COMPILE([#include #include ], [ #if BYTE_ORDER != BIG_ENDIAN not big endian #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)]) if test $ac_cv_c_bigendian = unknown; then AC_TRY_RUN([main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); }], ac_cv_c_bigendian=no, ac_cv_c_bigendian=yes, ac_cv_c_bigendian=unknown) fi]) if test $ac_cv_c_bigendian = unknown; then AC_MSG_WARN([Assuming little-endian target machine - this may be overriden by adding the line "ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}" to config.cache file]) fi if test $ac_cv_c_bigendian = yes; then AC_DEFINE(WORDS_BIGENDIAN) fi ]) dnl --------------------------------------------------------------------------- dnl override AC_ARG_ENABLE/WITH to cache the results in .cache file dnl --------------------------------------------------------------------------- AC_DEFUN(WX_ARG_CACHE_INIT, [ wx_arg_cache_file="configarg.cache" echo "loading argument cache $wx_arg_cache_file" rm -f ${wx_arg_cache_file}.tmp touch ${wx_arg_cache_file}.tmp touch ${wx_arg_cache_file} ]) AC_DEFUN(WX_ARG_CACHE_FLUSH, [ echo "saving argument cache $wx_arg_cache_file" mv ${wx_arg_cache_file}.tmp ${wx_arg_cache_file} ]) dnl this macro checks for a command line argument and caches the result dnl usage: WX_ARG_WITH(option, helpmessage, variable-name) AC_DEFUN(WX_ARG_WITH, [ AC_MSG_CHECKING("for --with-$1") no_cache=0 AC_ARG_WITH($1, $2, [ if test "$withval" = yes; then ac_cv_use_$1='$3=yes' else ac_cv_use_$1='$3=no' fi ], [ LINE=`grep "$3" ${wx_arg_cache_file}` if test "x$LINE" != x ; then eval "DEFAULT_$LINE" else no_cache=1 fi ac_cv_use_$1='$3='$DEFAULT_$3 ]) eval "$ac_cv_use_$1" if test "$no_cache" != 1; then echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp fi if test "$$3" = yes; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi ]) dnl like WX_ARG_WITH but uses AC_ARG_ENABLE instead of AC_ARG_WITH dnl usage: WX_ARG_ENABLE(option, helpmessage, variable-name) AC_DEFUN(WX_ARG_ENABLE, [ AC_MSG_CHECKING("for --enable-$1") no_cache=0 AC_ARG_ENABLE($1, $2, [ if test "$enableval" = yes; then ac_cv_use_$1='$3=yes' else ac_cv_use_$1='$3=no' fi ], [ LINE=`grep "$3" ${wx_arg_cache_file}` if test "x$LINE" != x ; then eval "DEFAULT_$LINE" else no_cache=1 fi ac_cv_use_$1='$3='$DEFAULT_$3 ]) eval "$ac_cv_use_$1" if test "$no_cache" != 1; then echo $ac_cv_use_$1 >> ${wx_arg_cache_file}.tmp fi if test "$$3" = yes; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi ]) dnl - dnl - GNU libc extension (added by GL) dnl - AC_DEFUN(WX_GNU_EXTENSIONS, [ AC_MSG_CHECKING([if you need GNU extensions]) AC_CACHE_VAL(wx_cv_gnu_extensions,[ AC_TRY_COMPILE([#include ],[ #ifndef __GNU_LIBRARY__ Compile error wanted #endif ], [wx_cv_gnu_extensions=yes], [wx_cv_gnu_extensions=no]) ]) AC_MSG_RESULT($wx_cv_gnu_extensions) if test "$wx_cv_gnu_extensions" = "yes"; then AC_DEFINE_UNQUOTED(_GNU_SOURCE) fi ])