X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=acinclude.m4;h=78c3bdb7a86a62919ccde358bafc336f0b7af3e5;hp=5c39bc05b9b1d498954885580b62ca4f887af168;hb=a6854a8a0f1e5db722320f5d7ccb9097053500cf;hpb=e83ae17200782b59d4a19d4e476f9bbfaefd7468 diff --git a/acinclude.m4 b/acinclude.m4 index 5c39bc05..78c3bdb7 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -4,70 +4,85 @@ dnl additions' names with AC_ but with GINAC_ in order to steer clear of dnl future trouble. dnl =========================================================================== -dnl Generally, it is a bad idea to put specialized header files for a library -dnl into a generic directory like /usr/local/include/. Instead, one should put -dnl them into a subdirectory. GiNaC does it, NTL does it. Unfortunately, CLN -dnl doesn't do so but some people choose to do it by hand. In these cases we -dnl need to #include , otherwise #include . This macro -dnl tries to be clever and find out the correct way by defining the variable -dnl HAVE_CLN_CLN_H in config.h: -AC_DEFUN(GINAC_CHECK_CLN_H, - [AC_PROVIDE([$0]) - AC_CHECK_HEADERS(cln/cln.h, , - AC_CHECK_HEADERS(cln.h, , - AC_MSG_ERROR([cannot find header for Bruno Haible's CLN]); - ) - ) -]) - -dnl This macro is needed because the generic AC_CHECK_LIB doesn't work because -dnl C++ is more strongly typed than C. Therefore we need to work with the -dnl more fundamental AC_TRY_LINK instead. -AC_DEFUN(GINAC_CHECK_LIBCLN, - [AC_PROVIDE([$0]) - AC_MSG_CHECKING([for doublefactorial in -lcln]) - saved_LIBS="${LIBS}" - AC_CACHE_VAL(ginac_cv_lib_cln_link, - [LIBS="-lcln" - case "${ac_cv_header_cln_cln_h}" in - "yes") - AC_TRY_LINK([#include ], - [doublefactorial(2);], - ginac_cv_lib_cln_link="-lcln", - ginac_cv_lib_cln_link="fail") - ;; - *) - AC_TRY_LINK([#include ], - [doublefactorial(2);], - ginac_cv_lib_cln_link="-lcln", - ginac_cv_lib_cln_link="fail") - ;; - esac - ]) - case "${ginac_cv_lib_cln_link}" in -dnl linking worked: - "-lcln") - LIBS="${ginac_cv_lib_cln_link} ${saved_LIBS}" - AC_MSG_RESULT("yes") - ;; -dnl linking failed: - "fail") - LIBS="${saved_LIBS}" - AC_MSG_RESULT([no]) - GINAC_ERROR([I could not successfully link a test-program against libcln and run it. - You either need to set \$LDFLAGS or install/update the CLN library.]) - ;; - esac +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 + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + ]])], [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 + #include + #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, +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 : @@ -77,13 +92,15 @@ else 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,[ +AC_DEFUN([GINAC_ERROR],[ ginac_error_txt="$ginac_error_txt ** $1 " @@ -92,17 +109,17 @@ 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,[ +AC_DEFUN([GINAC_WARNING],[ ginac_warning_txt="$ginac_warning_txt == $1 " ginac_warning=yes]) dnl Usage: GINAC_CHECK_ERRORS -dnl (preferably to be put at end of configure.in) +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,[ +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\"." @@ -111,14 +128,76 @@ if test "x${ginac_error}" = "xyes"; then if test "x${ginac_warning_txt}" != "x"; then echo "${ginac_warning_txt}" fi - echo "deleting cache ${cache_file}" - rm -f $cache_file - 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 + 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 ], +ac_cv_have_rusage, + [AC_TRY_COMPILE([#include + #include ], + [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 ]) +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_LIB(dl, dlopen, [ + DL_LIBS="-ldl" + AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if you have a working libdl installed.])], + + [AC_MSG_WARN([libdl not found. GiNaC::compile_ex will be disabled.]) + CONFIG_EXCOMPILER="no"]) +elif test "$CONFIG_EXCOMPILER" = "no"; then + AC_MSG_RESULT([INFO: GiNaC::compile_ex disabled at user request.]) +else + AC_MSG_RESULT([INFO: GiNaC::compile_ex is not supported on $host_os.]) +fi +AC_SUBST(DL_LIBS) +AC_SUBST(CONFIG_EXCOMPILER)]) +