]> www.ginac.de Git - ginac.git/blobdiff - configure.in
- removed inert Diff() function; only Derivative() remains
[ginac.git] / configure.in
index 22ba092b06f511ad0ad57d20dca52a980f11bb4d..432ca153c119551358fff71a5c24b49b776f0f29 100644 (file)
@@ -1,9 +1,9 @@
 dnl Process this file with autoconf to produce a configure script.
 
 AC_INIT(ginac/basic.cpp)
 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 GiNaC version information
+dnl GiNaC library version information.
 dnl
 dnl Making releases:
 dnl   GINACLIB_MICRO_VERSION += 1;
 dnl
 dnl Making releases:
 dnl   GINACLIB_MICRO_VERSION += 1;
@@ -15,10 +15,10 @@ dnl set GINACLIB_BINARY_AGE and GINACLIB_INTERFACE_AGE to 0.
 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
 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_MAJOR_VERSION=0
-GINACLIB_MINOR_VERSION=4
+GINACLIB_MINOR_VERSION=6
 GINACLIB_MICRO_VERSION=0
 GINACLIB_INTERFACE_AGE=0
 GINACLIB_BINARY_AGE=0
 GINACLIB_MICRO_VERSION=0
 GINACLIB_INTERFACE_AGE=0
 GINACLIB_BINARY_AGE=0
@@ -31,6 +31,23 @@ AC_SUBST(GINACLIB_INTERFACE_AGE)
 AC_SUBST(GINACLIB_BINARY_AGE)
 AC_SUBST(GINACLIB_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`
 dnl libtool versioning
 LT_RELEASE=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION
 LT_CURRENT=`expr $GINACLIB_MICRO_VERSION - $GINACLIB_INTERFACE_AGE`
@@ -42,24 +59,49 @@ AC_SUBST(LT_CURRENT)
 AC_SUBST(LT_REVISION)
 AC_SUBST(LT_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
 
 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_CXX
 AC_PROG_CXXCPP
-AM_PROG_INSTALL
+AC_PROG_INSTALL
 AM_PROG_LIBTOOL
 AM_PROG_LEX
 AC_PROG_YACC
 
 AM_PROG_LIBTOOL
 AM_PROG_LEX
 AC_PROG_YACC
 
-dnl Switch to C++ language mode for the following libraries and headers:
+dnl Configure options.
+AC_ARG_ENABLE(html-doc, [  --enable-html-doc       build HTML documentation [default=yes]], , enable_html_doc=yes)
+AC_ARG_ENABLE(ps-doc,   [  --enable-ps-doc         build PostScript documentation [default=yes]], , enable_ps_doc=yes)
+AC_ARG_WITH(cint, [  --with-cint=CINTSYSDIR  build GiNaC-cint C++ interpreter [default=no]], , with_cint=no)
+
+dnl Check for data types which are needed by the hash function (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.
 AC_LANG_CPLUSPLUS
 
 AC_LANG_CPLUSPLUS
 
+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:
 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:
@@ -68,17 +110,19 @@ 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.
 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))
+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 (macros are in aclocal.m4):
+dnl We need to have Bruno Haible's CLN installed (macros are in acinclude.m4):
 GINAC_CHECK_CLN_H
 GINAC_CHECK_LIBCLN
 
 GINAC_CHECK_CLN_H
 GINAC_CHECK_LIBCLN
 
-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)
-AC_CHECK_LIB(readline, readline)
+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 Check for utilities needed by the different kinds of documentation.
 dnl Documantation needs only be built when extending it, so never mind if it
@@ -88,11 +132,75 @@ AC_PATH_PROG(LATEX, latex, "")
 AC_PATH_PROG(MAKEINDEX, makeindex, "")
 AC_PATH_PROG(DVIPS, dvips, "")
 AC_PATH_PROG(FIG2DEV, fig2dev, "")
 AC_PATH_PROG(MAKEINDEX, makeindex, "")
 AC_PATH_PROG(DVIPS, dvips, "")
 AC_PATH_PROG(FIG2DEV, fig2dev, "")
-AC_PATH_PROG(JADE, jade, "")
-AC_PATH_PROG(JADETEX, jadetex, "")
-
-dnl ===========================================================================
-dnl Produce a Makefile from Makefile.in:
-dnl ===========================================================================
-AC_OUTPUT([Makefile ginac/Makefile check/Makefile ginsh/Makefile doc/Makefile])
-echo "Configuration done. Now type \"make\"."
+
+dnl Determine which documentation shall be built
+TUTORIAL_TARGETS=
+REFERENCE_TARGETS=
+if test "x${enable_html_doc}" = "xyes"; then
+  TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.html"
+  if [[ "$DOXYGEN" ]]; then
+    REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
+  fi
+fi
+if test "x${enable_ps_doc}" = "xyes"; then
+  TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
+  if [[ "$DOXYGEN" ]]; then
+    REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
+  fi
+fi
+AC_SUBST(TUTORIAL_TARGETS)
+AC_SUBST(REFERENCE_TARGETS)
+
+dnl Configure GiNaC-cint
+LIBGINACCINT=
+GINACCINTDIR=
+if test "x$with_cint" != "xno"; then
+  if test "x$enable_static" != "xyes"; then
+    AC_MSG_ERROR([currently GiNaC-cint needs to build a static libginac])
+  fi
+  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 -D CINT_CONVERSION_WORKAROUND -D NO_NAMESPACE_GINAC \
+      -I .. -I $CINTSYSDIR -m -H ../ginac/ginac.h dummies.h \
+      -C++ dummies.cpp -C++ ginaccint.bin.cpp \
+      -l ./libginac.a -lcln -cint -M0x10; \
+    cd ..)
+    LIBGINACCINT="libginac.a"
+    GINACCINTDIR="cint"
+  else
+    AC_MSG_ERROR([Cannot configure GiNaC-cint])
+  fi
+fi
+AC_SUBST(CINTSYSDIR)
+AC_SUBST(LIBGINACCINT)
+AC_SUBST(GINACCINTDIR)
+
+dnl Output makefiles etc.
+AC_OUTPUT([
+Makefile
+GiNaC.spec
+ginac-config
+ginac/Makefile
+check/Makefile
+ginsh/Makefile
+tools/Makefile
+doc/Makefile
+doc/tutorial/Makefile
+doc/reference/Makefile
+cint/Makefile
+cint/ginaccint
+], [chmod +x ginac-config cint/ginaccint])
+dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
+GINAC_CHECK_ERRORS