* Version 1.5.
[ginac.git] / acinclude.m4
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
4 dnl future trouble.
5 dnl ===========================================================================
6
7 dnl Usage: GINAC_RLVERSION
8 dnl The maintainers of libreadline are complete morons: they don't care a shit
9 dnl about compatiblilty (which is not so bad by itself) and at the same time 
10 dnl they don't export the version to the preprocessor so we could kluge around 
11 dnl incomatiblities.  The only reliable way to figure out the version is by 
12 dnl checking the extern variable rl_library_version at runtime.  &#@$%*!
13 AC_DEFUN([GINAC_LIB_READLINE_VERSION],
14 [AC_CACHE_CHECK([for version of libreadline], ginac_cv_rlversion, [
15 AC_TRY_RUN([
16 #include <stdio.h>
17 #include <sys/types.h>
18 #include <readline/readline.h>
19
20 int main()
21 {
22     FILE *fd;
23     fd = fopen("conftest.out", "w");
24     fprintf(fd, "%s\n", rl_library_version);
25     fclose(fd);
26     return 0;
27 }], [
28 dnl Some non-GNU readline implementations have non-numeric rl_library_version
29 ginac_cv_rlversion=`sed -e 's/[[^0-9.]]//g' 'conftest.out'`], [ ginac_cv_rlversion='unknown'], [ ginac_cv_rlversion='4.2'])])
30 if test -z "$ginac_cv_rlversion"; then
31         GINAC_WARNING([Unsupported version of libreadline.])
32         ginac_cv_rlversion='unknown'
33 fi
34 if test "x${ginac_cv_rlversion}" != "xunknown"; then
35         AC_DEFINE(REALLY_HAVE_LIBREADLINE, ,[Define if GNU libreadline is installed])
36   RL_VERSION_MAJOR=`echo ${ginac_cv_rlversion} | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
37   AC_DEFINE_UNQUOTED(GINAC_RL_VERSION_MAJOR, $RL_VERSION_MAJOR, [Major version of installed readline library.])
38   RL_VERSION_MINOR=`echo ${ginac_cv_rlversion} | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
39   AC_DEFINE_UNQUOTED(GINAC_RL_VERSION_MINOR, $RL_VERSION_MINOR, [Minor version of installed readline library.])
40 else
41   GINAC_WARNING([I could not run a test of libreadline (needed for building ginsh).])
42 fi
43 ])
44
45 dnl Usage: GINAC_TERMCAP
46 dnl libreadline is based on the termcap functions.
47 dnl Some systems have tgetent(), tgetnum(), tgetstr(), tgetflag(), tputs(),
48 dnl tgoto() in libc, some have it in libtermcap, some have it in libncurses.
49 dnl When both libtermcap and libncurses exist, we prefer the latter, because
50 dnl libtermcap is being phased out.
51 AC_DEFUN([GINAC_TERMCAP],
52 [LIBTERMCAP=
53 case $host_os in
54 *mingw32*)
55  ;; dnl no termcap libraries are necessary (need hacked libreadline)
56 *)
57 AC_CHECK_FUNCS(tgetent)
58 if test "x$ac_cv_func_tgetent" = "xyes"; then
59     :
60 else
61     AC_CHECK_LIB(ncurses, tgetent, LIBTERMCAP="-lncurses")
62     if test -z "$LIBTERMCAP"; then
63         AC_CHECK_LIB(termcap, tgetent, LIBTERMCAP="-ltermcap")
64     fi
65 fi
66 ;;
67 esac
68 AC_SUBST(LIBTERMCAP)
69 ])
70
71 dnl Usage: GINAC_ERROR(message)
72 dnl This macro displays the warning "message" and sets the flag ginac_error
73 dnl to yes.
74 AC_DEFUN([GINAC_ERROR],[
75 ginac_error_txt="$ginac_error_txt
76 ** $1
77 "
78 ginac_error=yes])
79
80 dnl Usage: GINAC_WARNING(message)
81 dnl This macro displays the warning "message" and sets the flag ginac_warning
82 dnl to yes.
83 AC_DEFUN([GINAC_WARNING],[
84 ginac_warning_txt="$ginac_warning_txt
85 == $1
86 "
87 ginac_warning=yes])
88
89 dnl Usage: GINAC_CHECK_ERRORS
90 dnl (must be put at end of configure.in, because it exits on error)
91 dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING 
92 dnl has occured previously.
93 AC_DEFUN([GINAC_CHECK_ERRORS],[
94 if test "x${ginac_error}" = "xyes"; then
95     echo "**** The following problems have been detected by configure."
96     echo "**** Please check the messages below before running \"make\"."
97     echo "**** (see the section 'Common Problems' in the INSTALL file)"
98     echo "$ginac_error_txt"
99     if test "x${ginac_warning_txt}" != "x"; then
100         echo "${ginac_warning_txt}"
101     fi
102     if test "x$cache_file" != "x/dev/null"; then
103         echo "deleting cache ${cache_file}"
104         rm -f $cache_file
105     fi
106     exit 1
107 else 
108     if test "x${ginac_warning}" = "xyes"; then
109         echo "=== The following minor problems have been detected by configure."
110         echo "=== Please check the messages below before running \"make\"."
111         echo "=== (see the section 'Common Problems' in the INSTALL file)"
112         echo "$ginac_warning_txt"
113     fi
114     echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
115 fi])
116
117 AC_DEFUN([GINAC_HAVE_RUSAGE],
118 [AC_CACHE_CHECK([whether struct rusage is declared in <sys/resource.h>],
119 ac_cv_have_rusage,
120  [AC_TRY_COMPILE([#include <sys/times.h>
121                   #include <sys/resource.h>],
122                   [struct rusage resUsage;
123                    getrusage(RUSAGE_SELF, &resUsage);
124                    return 0;],
125                  [ac_cv_have_rusage=yes],
126                  [ac_cv_have_rusage=no])
127 ])
128 CONFIG_RUSAGE="no"
129 if test "$ac_cv_have_rusage" = yes; then
130   CONFIG_RUSAGE="yes"
131   AC_DEFINE(HAVE_RUSAGE,,[define if struct rusage declared in <sys/resource.h>])
132 fi
133 AC_SUBST(CONFIG_RUSAGE)
134 ])