]> www.ginac.de Git - ginac.git/blobdiff - configure.in
* All operators are now strictly following the semantics we all know from
[ginac.git] / configure.in
index 4b36af92f0696470cdb39c40e370622eac6b8540..eb1284a97a1256cc61575120ab9119b02be4f0c4 100644 (file)
@@ -1,13 +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 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=yes]], , enable_ps_doc=yes)
-
-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;
@@ -19,11 +15,11 @@ 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_MICRO_VERSION=0
+GINACLIB_MINOR_VERSION=8
+GINACLIB_MICRO_VERSION=2
 GINACLIB_INTERFACE_AGE=0
 GINACLIB_BINARY_AGE=0
 GINACLIB_VERSION=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION.$GINACLIB_MICRO_VERSION
 GINACLIB_INTERFACE_AGE=0
 GINACLIB_BINARY_AGE=0
 GINACLIB_VERSION=$GINACLIB_MAJOR_VERSION.$GINACLIB_MINOR_VERSION.$GINACLIB_MICRO_VERSION
@@ -35,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, 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
+
+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`
@@ -46,14 +59,11 @@ 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_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
 AC_PROG_CXX
 AC_PROG_CXXCPP
 AC_PROG_INSTALL
@@ -61,37 +71,58 @@ AM_PROG_LIBTOOL
 AM_PROG_LEX
 AC_PROG_YACC
 
 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)
 
 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
 
 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)
 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
 save_LIBS=$LIBS
+LIBS="$LIBTERMCAP $LIBS"
 AC_CHECK_LIB(readline, readline)
 AC_CHECK_LIB(readline, readline)
+if test "x${ac_cv_lib_readline_readline}" = "xyes"; then
+  GINAC_RLVERSION
+else
+  GINAC_WARNING([I could not find libreadline (needed by ginsh).])
+fi
 GINSH_LIBS=$LIBS
 LIBS=$save_LIBS
 AC_SUBST(GINSH_LIBS)
 
 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.
 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 Check for utilities needed by the different kinds of documentation.
 dnl Documantation needs only be built when extending it, so never mind if it
@@ -105,13 +136,13 @@ AC_PATH_PROG(FIG2DEV, fig2dev, "")
 dnl Determine which documentation shall be built
 TUTORIAL_TARGETS=
 REFERENCE_TARGETS=
 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"
   if [[ "$DOXYGEN" ]]; then
     REFERENCE_TARGETS="$REFERENCE_TARGETS index.html"
   fi
 fi
   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.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"
   if [[ "$DOXYGEN" ]]; then
     REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
   TUTORIAL_TARGETS="$TUTORIAL_TARGETS ginac.ps"
   if [[ "$DOXYGEN" ]]; then
     REFERENCE_TARGETS="$REFERENCE_TARGETS reference.ps"
@@ -120,17 +151,78 @@ fi
 AC_SUBST(TUTORIAL_TARGETS)
 AC_SUBST(REFERENCE_TARGETS)
 
 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)
+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
 AC_OUTPUT([
 Makefile
 GiNaC.spec
+ginac-config
+ginac-config.1
 ginac/Makefile
 ginac/Makefile
+ginac/version.h
 check/Makefile
 ginsh/Makefile
 check/Makefile
 ginsh/Makefile
+ginsh/ginsh.1
+tools/Makefile
+tools/viewgar.1
 doc/Makefile
 doc/tutorial/Makefile
 doc/reference/Makefile
 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