1 dnl ===========================================================================
2 dnl Additional macros used to configure GiNaC. We don't start our own
3 dnl additions' names with AC_ but with GINAC_ in order to steer clear of
5 dnl ===========================================================================
7 dnl GINAC_HEADER_GETVAL(NAME,FILE)
8 dnl ----------------------------
9 dnl Expand at autoconf time to the value of a "#define NAME" from the given
10 dnl FILE. The regexps here aren't very rugged, but are enough for us.
11 dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted.
12 dnl (shamelessly ripped from GMP, and changed prefix to GINAC_).
14 define(GINAC_HEADER_GETVAL,
16 esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]),
20 define(GINAC_GET_VERSION,
21 [GINAC_HEADER_GETVAL(GINACLIB_$1_VERSION,[ginac/version.h])])
22 define(GINAC_GET_LTVERSION,
23 [GINAC_HEADER_GETVAL(GINAC_LT_$1,[ginac/version.h])])
25 dnl Usage: GINAC_STD_CXX_HEADERS
26 dnl Check for standard C++ headers, bail out if something is missing.
27 AC_DEFUN([GINAC_STD_CXX_HEADERS], [
28 AC_CACHE_CHECK([for standard C++ header files], [ginac_cv_std_cxx_headers], [
29 ginac_cv_std_cxx_headers="no"
31 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
60 ]])], [ginac_cv_std_cxx_headers="yes"])
62 if test "${ginac_cv_std_cxx_headers}" != "yes"; then
63 AC_MSG_ERROR([Standard ISO C++ headers are missing])
67 dnl Usage: GINAC_LIBREADLINE
69 dnl Check if GNU readline library and headers are avialable.
70 dnl Defines GINSH_LIBS variable, and HAVE_LIBREADLINE,
71 dnl HAVE_READLINE_READLINE_H, HAVE_READLINE_HISTORY_H preprocessor macros.
73 dnl Note: this macro rejects readline versions <= 4.2 and non-GNU
76 AC_DEFUN([GINAC_READLINE],[
77 AC_REQUIRE([GINAC_TERMCAP])
79 AC_CHECK_HEADERS(readline/readline.h readline/history.h)
80 if test "x${ac_cv_header_readline_readline_h}" != "xyes" -o "x${ac_cv_header_readline_history_h}" != "xyes"; then
81 GINAC_WARNING([ginsh will not compile, because readline headers could not be found.])
83 AC_CACHE_CHECK([for version of libreadline], [ginac_cv_rl_supported], [
84 ginac_cv_rl_supported="no"
85 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
87 #include <readline/readline.h>
88 #if !defined(RL_VERSION_MAJOR) || !defined(RL_VERSION_MINOR)
89 #error "Ancient/unsupported version of readline"
91 [ginac_cv_rl_supported="yes"])])
92 if test "x${ginac_cv_rl_supported}" != "xyes"; then
93 GINAC_WARNING([ginsh will not compile, because of an unsupported version of readline (<= 4.2 or non-GNU).])
96 LIBS="$LIBTERMCAP $LIBS"
97 AC_CHECK_LIB(readline, readline)
98 if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
99 GINAC_WARNING([ginsh will not compile, because libreadline could not be found.])
105 AC_SUBST(GINSH_LIBS)])
107 dnl Usage: GINAC_TERMCAP
108 dnl libreadline is based on the termcap functions.
109 dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
110 dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
111 dnl When both libtermcap and libncurses exist, we prefer the latter, because
112 dnl libtermcap is being phased out.
113 AC_DEFUN([GINAC_TERMCAP],
117 ;; dnl no termcap libraries are necessary (need hacked libreadline)
119 AC_CHECK_FUNCS(tgetent)
120 if test "x$ac_cv_func_tgetent" = "xyes"; then
123 AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
124 if test -z "$LIBTERMCAP"; then
125 AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
133 dnl Usage: GINAC_ERROR(message)
134 dnl This macro displays the warning "message" and sets the flag ginac_error
136 AC_DEFUN([GINAC_ERROR],[
137 ginac_error_txt="$ginac_error_txt
142 dnl Usage: GINAC_WARNING(message)
143 dnl This macro displays the warning "message" and sets the flag ginac_warning
145 AC_DEFUN([GINAC_WARNING],[
146 ginac_warning_txt="$ginac_warning_txt
151 dnl Usage: GINAC_CHECK_ERRORS
152 dnl (must be put at end of configure.in, because it exits on error)
153 dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING
154 dnl has occured previously.
155 AC_DEFUN([GINAC_CHECK_ERRORS],[
156 if test "x${ginac_error}" = "xyes"; then
158 echo "**** The following problems have been detected by configure."
159 echo "**** Please check the messages below before running \"make\"."
160 echo "**** (see the section 'Common Problems' in the INSTALL file)"
161 echo "$ginac_error_txt"
162 if test "x${ginac_warning_txt}" != "x"; then
163 echo "${ginac_warning_txt}"
165 if test "x$cache_file" != "x/dev/null"; then
166 echo "deleting cache ${cache_file}"
171 if test "x${ginac_warning}" = "xyes"; then
173 echo "=== The following minor problems have been detected by configure."
174 echo "=== Please check the messages below before running \"make\"."
175 echo "=== (see the section 'Common Problems' in the INSTALL file)"
176 echo "$ginac_warning_txt"
178 echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
181 AC_DEFUN([GINAC_HAVE_RUSAGE],
182 [AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
184 [AC_TRY_COMPILE([#include <sys/times.h>
185 #include <sys/resource.h>],
186 [struct rusage resUsage;
187 getrusage(RUSAGE_SELF, &resUsage);
189 [ac_cv_have_rusage=yes],
190 [ac_cv_have_rusage=no])
193 if test "$ac_cv_have_rusage" = yes; then
195 AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
197 AC_SUBST(CONFIG_RUSAGE)
200 dnl Usage: GINAC_EXCOMPILER
201 dnl - Checks if dlopen is available
202 dnl - Allows user to disable GiNaC::compile_ex (e.g. for security reasons)
203 dnl Defines HAVE_LIBDL preprocessor macro, sets DL_LIBS and CONFIG_EXCOMPILER
205 AC_DEFUN([GINAC_EXCOMPILER], [
206 CONFIG_EXCOMPILER=yes
209 AC_ARG_ENABLE([excompiler],
210 [AS_HELP_STRING([--enable-excompiler], [Enable GiNaC::compile_ex (default: yes)])],
211 [if test "$enableval" = "no"; then
212 CONFIG_EXCOMPILER="no"
214 [CONFIG_EXCOMPILER="yes"])
218 CONFIG_EXCOMPILER="notsupported"
224 if test "$CONFIG_EXCOMPILER" = "yes"; then
225 AC_CHECK_HEADER([dlfcn.h], [CONFIG_EXCOMPILER="yes"], [CONFIG_EXCOMPILER="no"])
226 elif test "$CONFIG_EXCOMPILER" = "no"; then
227 AC_MSG_NOTICE([GiNaC::compile_ex disabled at user request.])
229 AC_MSG_NOTICE([GiNaC::compile_ex is not supported on $host_os.])
232 if test "$CONFIG_EXCOMPILER" = "yes"; then
233 dnl Some systems (GNU/Linux, Solaris) have dlopen in -ldl, some
234 dnl others (OpenBSD) -- in libc
235 found_dlopen_lib="no"
237 AC_CHECK_LIB(dl, dlopen, [found_dlopen_lib="yes"])
238 if test "$found_dlopen_lib" = "no"; then
240 AC_CHECK_FUNC(dlopen, [found_dlopen_lib="yes"])
242 if test "$found_dlopen_lib" = "no"; then
243 CONFIG_EXCOMPILER="no"
244 AC_MSG_WARN([Could not found working dlopen(). GiNaC::compile_ex will be disabled.])
246 AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if dlopen() works.])
250 AC_SUBST(CONFIG_EXCOMPILER)])