1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
|
dnl ===========================================================================
dnl Additional macros used to configure GiNaC. We don't start our own
dnl additions' names with AC_ but with GINAC_ in order to steer clear of
dnl future trouble.
dnl ===========================================================================
dnl Usage: GINAC_STD_CXX_HEADERS
dnl Check for standard C++ headers, bail out if something is missing.
AC_DEFUN([GINAC_STD_CXX_HEADERS], [
AC_CACHE_CHECK([for standard C++ header files], [ginac_cv_std_cxx_headers], [
ginac_cv_std_cxx_headers="no"
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <iosfwd>
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <string>
#include <sstream>
#include <typeinfo>
#include <stdexcept>
#include <algorithm>
#include <limits>
#include <ctime>
]])], [ginac_cv_std_cxx_headers="yes"])
AC_LANG_POP([C++])])
if test "${ginac_cv_std_cxx_headers}" != "yes"; then
AC_MSG_ERROR([Standard ISO C++ 98 headers are missing])
fi
])
dnl Usage: GINAC_LIBREADLINE
dnl
dnl Check if GNU readline library and headers are avialable.
dnl Defines GINSH_LIBS variable, and HAVE_LIBREADLINE,
dnl HAVE_READLINE_READLINE_H, HAVE_READLINE_HISTORY_H preprocessor macros.
dnl
dnl Note: this macro rejects readline versions <= 4.2 and non-GNU
dnl implementations.
dnl
AC_DEFUN([GINAC_READLINE],[
AC_REQUIRE([GINAC_TERMCAP])
GINSH_LIBS=""
AC_CHECK_HEADERS(readline/readline.h readline/history.h)
if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
GINAC_WARNING([readline headers could not be found.])
else
AC_CACHE_CHECK([for version of libreadline], [ginac_cv_rl_supported], [
ginac_cv_rl_supported="no"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <stdio.h>
#include <readline/readline.h>
#if !defined(RL_VERSION_MAJOR) || !defined(RL_VERSION_MINOR)
#error "Ancient/unsupported version of readline"
#endif]])],
[ginac_cv_rl_supported="yes"])])
if test "x${ginac_cv_rl_supported}" != "xyes"; then
GINAC_WARNING([Unsupported version of readline (<= 4.2 or non-GNU).])
else
save_LIBS="$LIBS"
LIBS="$LIBTERMCAP $LIBS"
AC_CHECK_LIB(readline, readline)
if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
GINAC_WARNING([libreadline could not be found.])
fi
GINSH_LIBS="$LIBS"
LIBS="$save_LIBS"
fi
fi
AC_SUBST(GINSH_LIBS)])
dnl Usage: GINAC_TERMCAP
dnl libreadline is based on the termcap functions.
dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
dnl When both libtermcap and libncurses exist, we prefer the latter, because
dnl libtermcap is being phased out.
AC_DEFUN([GINAC_TERMCAP],
[LIBTERMCAP=
case $host_os in
*mingw32*)
;; dnl no termcap libraries are necessary (need hacked libreadline)
*)
AC_CHECK_FUNCS(tgetent)
if test "x$ac_cv_func_tgetent" = "xyes"; then
:
else
AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
if test -z "$LIBTERMCAP"; then
AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
fi
fi
;;
esac
AC_SUBST(LIBTERMCAP)
])
dnl Usage: GINAC_ERROR(message)
dnl This macro displays the warning "message" and sets the flag ginac_error
dnl to yes.
AC_DEFUN([GINAC_ERROR],[
ginac_error_txt="$ginac_error_txt
** $1
"
ginac_error=yes])
dnl Usage: GINAC_WARNING(message)
dnl This macro displays the warning "message" and sets the flag ginac_warning
dnl to yes.
AC_DEFUN([GINAC_WARNING],[
ginac_warning_txt="$ginac_warning_txt
== $1
"
ginac_warning=yes])
dnl Usage: GINAC_CHECK_ERRORS
dnl (must be put at end of configure.in, because it exits on error)
dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING
dnl has occured previously.
AC_DEFUN([GINAC_CHECK_ERRORS],[
if test "x${ginac_error}" = "xyes"; then
echo "**** The following problems have been detected by configure."
echo "**** Please check the messages below before running \"make\"."
echo "**** (see the section 'Common Problems' in the INSTALL file)"
echo "$ginac_error_txt"
if test "x${ginac_warning_txt}" != "x"; then
echo "${ginac_warning_txt}"
fi
if test "x$cache_file" != "x/dev/null"; then
echo "deleting cache ${cache_file}"
rm -f $cache_file
fi
exit 1
else
if test "x${ginac_warning}" = "xyes"; then
echo "=== The following minor problems have been detected by configure."
echo "=== Please check the messages below before running \"make\"."
echo "=== (see the section 'Common Problems' in the INSTALL file)"
echo "$ginac_warning_txt"
fi
echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
fi])
AC_DEFUN([GINAC_HAVE_RUSAGE],
[AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
ac_cv_have_rusage,
[AC_TRY_COMPILE([#include <sys/times.h>
#include <sys/resource.h>],
[struct rusage resUsage;
getrusage(RUSAGE_SELF, &resUsage);
return 0;],
[ac_cv_have_rusage=yes],
[ac_cv_have_rusage=no])
])
CONFIG_RUSAGE="no"
if test "$ac_cv_have_rusage" = yes; then
CONFIG_RUSAGE="yes"
AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
fi
AC_SUBST(CONFIG_RUSAGE)
])
dnl Usage: GINAC_EXCOMPILER
dnl - Checks if dlopen is available
dnl - Allows user to disable GiNaC::compile_ex (e.g. for security reasons)
dnl Defines HAVE_LIBDL preprocessor macro, sets DL_LIBS and CONFIG_EXCOMPILER
dnl variables.
AC_DEFUN([GINAC_EXCOMPILER], [
CONFIG_EXCOMPILER=yes
DL_LIBS=""
AC_ARG_ENABLE([excompiler],
[AS_HELP_STRING([--enable-excompiler], [Enable GiNaC::compile_ex (default: yes)])],
[if test "$enableval" = "no"; then
CONFIG_EXCOMPILER="no"
fi],
[CONFIG_EXCOMPILER="yes"])
case $host_os in
*mingw32*)
CONFIG_EXCOMPILER="notsupported"
;;
*)
;;
esac
if test "$CONFIG_EXCOMPILER" = "yes"; then
AC_CHECK_HEADER([dlfcn.h], [CONFIG_EXCOMPILER="yes"], [CONFIG_EXCOMPILER="no"])
elif test "$CONFIG_EXCOMPILER" = "no"; then
AC_MSG_NOTICE([GiNaC::compile_ex disabled at user request.])
else
AC_MSG_NOTICE([GiNaC::compile_ex is not supported on $host_os.])
fi
if test "$CONFIG_EXCOMPILER" = "yes"; then
dnl Some systems (GNU/Linux, Solaris) have dlopen in -ldl, some
dnl others (OpenBSD) -- in libc
found_dlopen_lib="no"
DL_LIBS="-ldl"
AC_CHECK_LIB(dl, dlopen, [found_dlopen_lib="yes"])
if test "$found_dlopen_lib" = "no"; then
DL_LIBS=""
AC_CHECK_FUNC(dlopen, [found_dlopen_lib="yes"])
fi
if test "$found_dlopen_lib" = "no"; then
CONFIG_EXCOMPILER="no"
AC_MSG_WARN([Could not found working dlopen(). GiNaC::compile_ex will be disabled.])
else
AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if dlopen() works.])
fi
fi
AC_SUBST(DL_LIBS)
AC_SUBST(CONFIG_EXCOMPILER)])
|