a343fd97763ab5376f2fd0e2c55de08abdfb2756
[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 Generally, it is a bad idea to put specialized header files for a library
8 dnl into a generic directory like /usr/local/include/.  Instead, one should put
9 dnl them into a subdirectory.  GiNaC does it, NTL does it.  Unfortunately, CLN
10 dnl doesn't do so but some people choose to do it by hand.  In these cases we
11 dnl need to #include <cln/cln.h>, otherwise #include <cln.h>.  This macro
12 dnl tries to be clever and find out the correct way by defining the variable
13 dnl HAVE_CLN_CLN_H in config.h:
14 AC_DEFUN(GINAC_CHECK_CLN_H,
15     [AC_PROVIDE([$0])
16     AC_CHECK_HEADERS(cln/cln.h, ,
17         AC_CHECK_HEADERS(cln.h, ,
18             AC_MSG_ERROR([cannot find header for Bruno Haible's CLN]);
19         )
20     )
21 ])
22
23 dnl This macro is needed because the generic AC_CHECK_LIB doesn't work because
24 dnl C++ is more strongly typed than C.  Therefore we need to work with the 
25 dnl more fundamental AC_TRY_LINK instead.
26 AC_DEFUN(GINAC_CHECK_LIBCLN,
27     [AC_PROVIDE([$0])
28     AC_MSG_CHECKING([for doublefactorial in -lcln])
29     saved_LIBS="${LIBS}"
30     AC_CACHE_VAL(ginac_cv_lib_cln_link,
31         [LIBS="-lcln"
32         case "${ac_cv_header_cln_cln_h}" in
33         "yes")
34             AC_TRY_LINK([#include <cln/cln.h>],
35                 [doublefactorial(2);],
36                 ginac_cv_lib_cln_link="-lcln",
37                 ginac_cv_lib_cln_link="fail")
38             ;;
39         *)
40             AC_TRY_LINK([#include <cln.h>],
41                 [doublefactorial(2);],
42                 ginac_cv_lib_cln_link="-lcln",
43                 ginac_cv_lib_cln_link="fail")
44             ;;
45         esac
46     ])
47     case "${ginac_cv_lib_cln_link}" in
48 dnl linking worked:
49     "-lcln")
50         LIBS="${ginac_cv_lib_cln_link} ${saved_LIBS}"
51         AC_MSG_RESULT("yes")
52     ;;
53 dnl linking failed:
54     "fail")
55         LIBS="${saved_LIBS}"
56         AC_MSG_RESULT([no])
57         GINAC_ERROR([I could not successfully link a test-program against libcln and run it.
58    You either need to set \$LDFLAGS or install/update the CLN library.])
59     ;;
60     esac
61 ])
62
63 dnl Usage: GINAC_ERROR(message)
64 dnl This macro displays the warning "message" and sets the flag ginac_error
65 dnl to yes.
66 AC_DEFUN(GINAC_ERROR,[
67 ginac_error_txt="$ginac_error_txt
68 ** $1
69 "
70 ginac_error=yes])
71
72 dnl Usage: GINAC_WARNING(message)
73 dnl This macro displays the warning "message" and sets the flag ginac_warning
74 dnl to yes.
75 AC_DEFUN(GINAC_WARNING,[
76 ginac_warning_txt="$ginac_warning_txt
77 == $1
78 "
79 ginac_warning=yes])
80
81 dnl Usage: GINAC_CHECK_ERRORS
82 dnl (preferably to be put at end of configure.in)
83 dnl This macro displays a warning message if GINAC_ERROR or GINAC_WARNING 
84 dnl has occured previously.
85 AC_DEFUN(GINAC_CHECK_ERRORS,[
86 if test "x${ginac_error}" = "xyes"; then
87   echo "**** The following problems have been detected by configure."
88   echo "**** Please check the messages below before running \"make\"."
89   echo "**** (see the section 'Common Problems' in the INSTALL file)"
90   echo "$ginac_error_txt"
91   if test "x${ginac_warning_txt}" != "x"; then
92     echo "${ginac_warning_txt}"
93   fi
94   echo "deleting cache ${cache_file}"
95   rm -f $cache_file
96   else 
97     if test x$ginac_warning = xyes; then
98       echo "=== The following minor problems have been detected by configure."
99       echo "=== Please check the messages below before running \"make\"."
100       echo "=== (see the section 'Common Problems' in the INSTALL file)"
101       echo "$ginac_warning_txt"
102     fi
103   echo "Configuration of GiNaC $VERSION done. Now type \"make\"."
104 fi])