dnl Process this file with autoconf to produce a configure script.
AC_INIT(ginac/basic.cpp)
-AC_PREREQ(2.12)
+AC_PREREQ(2.13)
-dnl Configure options
-AC_ARG_ENABLE(html-doc, [ --enable-help-doc build HTML documentation [default=yes]], , enable_html_doc=yes)
-AC_ARG_ENABLE(ps-doc, [ --enable-ps-doc build PostScript documentation [default=no]], , enable_ps_doc=no)
-
-dnl GiNaC version information
+dnl GiNaC library version information.
dnl
dnl Making releases:
dnl GINACLIB_MICRO_VERSION += 1;
dnl
dnl NOTE: these can't be renamed to GINAC_MAJOR_VERSION etc. because
dnl autoconf sees "AC_MAJOR_VERSION" and complains about an undefined macro
-dnl (don't we all *love* autoconf?)...
+dnl (don't we all *love* M4?)...
GINACLIB_MAJOR_VERSION=0
-GINACLIB_MINOR_VERSION=4
-GINACLIB_MICRO_VERSION=0
+GINACLIB_MINOR_VERSION=7
+GINACLIB_MICRO_VERSION=3
GINACLIB_INTERFACE_AGE=0
GINACLIB_BINARY_AGE=0
GINACLIB_VERSION=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION.$GINACLIB_MICRO_VERSION
AC_SUBST(GINACLIB_BINARY_AGE)
AC_SUBST(GINACLIB_VERSION)
+dnl GiNaC archive file version information.
+dnl
+dnl If properties have been added, ARCHIVE_VERSION += 1, ARCHIVE_AGE += 1.
+dnl If backwards compatibility has been broken, ARCHIVE_AGE to 0.
+dnl
+dnl The version number in newly created archives will be ARCHIVE_VERSION.
+dnl Archives version (ARCHIVE_VERSION-ARCHIVE_AGE) thru ARCHIVE_VERSION can
+dnl be read by this version of the GiNaC library.
+
+ARCHIVE_VERSION=0
+ARCHIVE_AGE=0
+
+AC_SUBST(ARCHIVE_VERSION)
+AC_SUBST(ARCHIVE_AGE)
+AC_DEFINE_UNQUOTED(ARCHIVE_VERSION, $ARCHIVE_VERSION)
+AC_DEFINE_UNQUOTED(ARCHIVE_AGE, $ARCHIVE_AGE)
+
dnl libtool versioning
LT_RELEASE=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION
LT_CURRENT=`expr $GINACLIB_MICRO_VERSION - $GINACLIB_INTERFACE_AGE`
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
-dnl This defines PACKAGE and VERSION
+dnl This defines PACKAGE and VERSION.
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE([GiNaC], $GINACLIB_VERSION)
-AM_MAINTAINER_MODE
-dnl ===========================================================================
-dnl Check for the compiler and all the utilities needed for the build:
-dnl ===========================================================================
+dnl Check for the compiler and all the utilities needed for the build.
AC_PROG_CXX
AC_PROG_CXXCPP
AC_PROG_INSTALL
AM_PROG_LEX
AC_PROG_YACC
-dnl Check for data types which are needed by the hash function (golden_ratio_hash)
+dnl Configure options.
+AC_ARG_ENABLE(html-doc, [ --enable-html-doc build HTML documentation [default=no]], , enable_html_doc=no)
+AC_ARG_ENABLE(ps-doc, [ --enable-ps-doc build PostScript documentation [default=no]], , enable_ps_doc=no)
+
+dnl Check for data types which are needed by the hash function
+dnl (golden_ratio_hash).
AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(long long, 8)
AC_CHECK_SIZEOF(long double, 12)
-dnl Switch to C++ language mode for the following libraries and headers:
+dnl Switch to C++ language mode for the following libraries and headers.
AC_LANG_CPLUSPLUS
-dnl Check for stuff needed for building the GiNaC interactive shell (ginsh):
+dnl Check for stuff needed for building the GiNaC interactive shell (ginsh).
AC_CHECK_HEADERS(unistd.h)
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([I could not find the headers for libreadline (needed for building ginsh).])
+fi
+GINAC_TERMCAP
save_LIBS=$LIBS
+LIBS="$LIBTERMCAP $LIBS"
AC_CHECK_LIB(readline, readline)
+if test "x${ac_cv_lib_readline_readline}" != "xyes"; then
+ GINAC_WARNING([I could not find libreadline (needed by ginsh).])
+fi
GINSH_LIBS=$LIBS
LIBS=$save_LIBS
AC_SUBST(GINSH_LIBS)
-dnl Make sure the following libraries work by testing for symbols therein.
-dnl They are automatically added the the variable $LIBS and thus passed into
-dnl the Makefile:
-AC_CHECK_LIB(stdc++, cout)
-
dnl Make sure all the necessary new-style headers are installed on the system.
dnl If one of them cannot be found the system is probably not ANSI-conform
dnl enough so trying the .h-style headers is a waste of time.
-AC_CHECK_HEADERS(iostream vector map string list typeinfo iterator strstream stdexcept algorithm, ,
- AC_MSG_ERROR(need to have ANSI compliant headers))
-
-dnl We need to have Bruno Haible's CLN installed (macros are in acinclude.m4):
-GINAC_CHECK_CLN_H
-GINAC_CHECK_LIBCLN
+AC_CHECK_HEADERS(iostream vector map string list typeinfo iterator stdexcept algorithm, ,
+ AC_MSG_ERROR(need to have ANSI compliant headers))
+AC_CHECK_HEADERS(sstream strstream)
+
+dnl We need to have Bruno Haible's CLN installed.
+dnl (CLN versions >= 1.1.0 must have installed cln.m4 at a visible place,
+dnl which provides this macro):
+AC_PATH_CLN(1.1.0, [
+ LIBS="$LIBS $CLN_LIBS"
+ CPPFLAGS="$CPPFLAGS $CLN_CPPFLAGS"
+], GINAC_ERROR([No suitable installed version of CLN could be found.]))
+
+dnl Expand the cppflags and libraries needed by apps using GiNaC
+GINACLIB_CPPFLAGS=$CPPFLAGS
+GINACLIB_LIBS=$LIBS
+AC_SUBST(GINACLIB_CPPFLAGS)
+AC_SUBST(GINACLIB_LIBS)
dnl Check for utilities needed by the different kinds of documentation.
dnl Documantation needs only be built when extending it, so never mind if it
dnl Determine which documentation shall be built
TUTORIAL_TARGETS=
REFERENCE_TARGETS=
-if [[ "x$enable_html_doc" = "xyes" ]]; then
+if test "x${enable_html_doc}" = "xyes"; then
TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.html"
- REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
+ if [[ "$DOXYGEN" ]]; then
+ REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
+ fi
fi
-if [[ "x$enable_ps_doc" = "xyes" ]]; then
+if test "x${enable_ps_doc}" = "xyes"; then
TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
- REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
+ if [[ "$DOXYGEN" ]]; then
+ REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
+ fi
fi
AC_SUBST(TUTORIAL_TARGETS)
AC_SUBST(REFERENCE_TARGETS)
-dnl ===========================================================================
-dnl Produce a Makefile from Makefile.in:
-dnl ===========================================================================
+dnl Configure GiNaC-cint
+AC_ARG_WITH(cint, [ --with-cint=CINTSYSDIR build GiNaC-cint C++ interpreter [default=no]], , with_cint=no)
+GINACCINTDIR=
+if test "x$with_cint" != "xno"; then
+ if test "x$with_cint" = "xyes"; then
+ if test "x$CINTSYSDIR" = "x"; then
+ AC_MSG_ERROR([please export \$CINTSYSDIR or specify --with-cint=CINTSYSDIR])
+ fi
+ else
+ CINTSYSDIR=$with_cint
+ export CINTSYSDIR
+ fi
+ AC_PATH_PROG(CINT, cint, "", $CINTSYSDIR:$PATH)
+ AC_PATH_PROG(MAKECINT, makecint, "", $CINTSYSDIR:$PATH)
+ if [[ "$CINT" -a "$MAKECINT" ]]; then
+ AC_MSG_RESULT([creating cint/Makefile])
+ (cd cint && \
+ $MAKECINT -mk Makefile.makecint -o ginaccint.bin -m \
+ -D OBSCURE_CINT_HACK "$CPPFLAGS" -cc "$CXXFLAGS" \
+ -I .. -I $CINTSYSDIR -m -H ../ginac/ginac.h \
+ -C++ ginaccint.bin.cpp \
+ -l -L../ginac/.libs -lginac -lcln \
+ -cint -M0x110; \
+ cd ..)
+ GINACCINTDIR="cint"
+ else
+ GINAC_WARNING([I could not find cint and makecint (needed for building GiNaC-cint).])
+ fi
+fi
+AC_SUBST(CINTSYSDIR)
+AC_SUBST(GINACCINTDIR)
+
+dnl Output makefiles etc.
AC_OUTPUT([
Makefile
GiNaC.spec
+ginac-config
+ginac-config.1
ginac/Makefile
+ginac/version.h
check/Makefile
ginsh/Makefile
+ginsh/ginsh.1
+tools/Makefile
+tools/viewgar.1
doc/Makefile
doc/tutorial/Makefile
doc/reference/Makefile
-])
-echo "Configuration done. Now type \"make\"."
+cint/Makefile
+cint/launch.h
+], [chmod +x ginac-config])
+dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
+GINAC_CHECK_ERRORS