]> www.ginac.de Git - ginac.git/blobdiff - configure.in
added wildcard and spinormetric classes to check
[ginac.git] / configure.in
index a846c91e0fe1974d6ecbbf08fefb2968a8574219..c4f45821d1a9892350da892a6d0e24f794e9e359 100644 (file)
 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)
-AM_CONFIG_HEADER(config.h)
-AC_PREREQ(2.12)
+AC_PREREQ(2.13)
+
+dnl GiNaC library version information.
+dnl
+dnl Making releases:
+dnl   GINACLIB_MICRO_VERSION += 1;
+dnl   GINACLIB_INTERFACE_AGE += 1;
+dnl   GINACLIB_BINARY_AGE += 1;
+dnl if any functions have been added, set GINACLIB_INTERFACE_AGE to 0.
+dnl if backwards compatibility has been broken,
+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 (don't we all *love* M4?)...
+
+GINACLIB_MAJOR_VERSION=0
+GINACLIB_MINOR_VERSION=8
+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_MAJOR_VERSION)
+AC_SUBST(GINACLIB_MINOR_VERSION)
+AC_SUBST(GINACLIB_MICRO_VERSION)
+AC_SUBST(GINACLIB_INTERFACE_AGE)
+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, set 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
 
 
-dnl This defines PACKAGE and VERSION
-AM_INIT_AUTOMAKE([GiNaC], [0.4])
-AM_MAINTAINER_MODE
+AC_SUBST(ARCHIVE_VERSION)
+AC_SUBST(ARCHIVE_AGE)
+AC_DEFINE_UNQUOTED(ARCHIVE_VERSION, $ARCHIVE_VERSION)
+AC_DEFINE_UNQUOTED(ARCHIVE_AGE, $ARCHIVE_AGE)
 
 
-dnl ===========================================================================
-dnl Check for the compiler and all the utilities needed for the build:
-dnl ===========================================================================
+dnl libtool versioning
+LT_RELEASE=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION
+LT_CURRENT=`expr $GINACLIB_MICRO_VERSION - $GINACLIB_INTERFACE_AGE`
+LT_REVISION=$GINACLIB_INTERFACE_AGE
+LT_AGE=`expr $GINACLIB_BINARY_AGE - $GINACLIB_INTERFACE_AGE`
+
+AC_SUBST(LT_RELEASE)
+AC_SUBST(LT_CURRENT)
+AC_SUBST(LT_REVISION)
+AC_SUBST(LT_AGE)
+
+dnl This defines PACKAGE and VERSION.
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE([GiNaC], $GINACLIB_VERSION)
+
+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=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.
 AC_LANG_CPLUSPLUS
 
 AC_LANG_CPLUSPLUS
 
-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 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_LIB_READLINE_VERSION
+else
+  GINAC_WARNING([I could not find libreadline (needed by ginsh).])
+fi
+GINSH_LIBS=$LIBS
+LIBS=$save_LIBS
+AC_SUBST(GINSH_LIBS)
 
 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):
-GINAC_CHECK_CLN_H
-GINAC_CHECK_LIBCLN
+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 Check for stuff needed for building the GiNaC interactive shell (ginsh):
-AC_CHECK_HEADERS(unistd.h)
-AC_REPLACE_FUNCS(strdup)
-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
@@ -50,11 +132,97 @@ 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
+AC_ARG_WITH(cint, [  --with-cint=CINTSYSDIR  build GiNaC-cint C++ interpreter [default=no]], , with_cint=no)
+dnl The variable GINACCINTDIR controls whether the subdirectory cint is entered
+dnl from the top-level Makefile or not.
+GINACCINTDIR=
+if test "x$with_cint" != "xno"; then
+  dnl Maybe CINTSYSDIR was passed as an argument.  In this case it should 
+  dnl override any CINTSYSDIR variable already set.
+  if test "x$with_cint" != "xyes"; then
+    CINTSYSDIR=$with_cint
+    export CINTSYSDIR
+  fi
+  dnl Now have to handle two possbile cases, one with CINTSYSDIR set and one 
+  dnl without.  In the first one we search for cint and makecint in CINTSYSDIR
+  dnl and PATH, in the second there is only the PATH to search in.
+  if test "x$CINTSYSDIR" != "x"; then
+    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"
+      AC_SUBST(CINTSYSDIR)
+    else
+      GINAC_WARNING([I could not find cint and makecint (needed for building GiNaC-cint).])
+    fi
+  else
+    AC_PATH_PROG(CINT, cint)
+    AC_PATH_PROG(MAKECINT, makecint)
+    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 .. -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
+fi
+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
+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