]> www.ginac.de Git - ginac.git/blobdiff - configure.ac
Remove unfinished code for hash table-based expairseq.
[ginac.git] / configure.ac
index 44356f2770797c76134c64d4b5ce5235e704cf1e..a932568ea99ff45f8b08ec14a5e819dbf476462b 100644 (file)
-dnl Process this file with autoconf to produce a configure script.
-
-dnl GiNaC library version information.
-dnl
-dnl Making releases:
-dnl   ginac_micro_version += 1;
-dnl   ginac_interface_age += 1;
-dnl   ginac_binary_age += 1;
-dnl if any functions have been added, set ginac_interface_age to 0.
-dnl if backwards compatibility has been broken,
-dnl set ginac_binary_age and ginac_interface_age to 0.
-
-m4_define([ginac_major_version], [1])
-m4_define([ginac_minor_version], [4])
-m4_define([ginac_micro_version], [0])
+dnl Pull version info from the ginac/version.h file.
+dnl GiNaC release number:
+m4_define([ginac_major_version], GINAC_GET_VERSION([MAJOR]))
+m4_define([ginac_minor_version], GINAC_GET_VERSION([MINOR]))
+m4_define([ginac_micro_version], GINAC_GET_VERSION([MICRO]))
 m4_define([ginac_version], [ginac_major_version.ginac_minor_version.ginac_micro_version])
 m4_define([ginac_release], [ginac_major_version.ginac_minor_version])
 m4_define([ginac_version], [ginac_major_version.ginac_minor_version.ginac_micro_version])
 m4_define([ginac_release], [ginac_major_version.ginac_minor_version])
-m4_define([ginac_interface_age], [0])
-m4_define([ginac_binary_age], [0])
-
-AC_INIT([GiNaC], ginac_version, [<ginac-list@ginac.de>])
-AC_PREREQ(2.52)
+dnl GiNaC library version information. It has very little to do with GiNaC
+dnl version number. In particular, library version is OS dependent. 
+m4_define([ginac_lt_current], GINAC_GET_LTVERSION([CURRENT]))
+m4_define([ginac_lt_age], GINAC_GET_LTVERSION([AGE]))
+m4_define([ginac_lt_revision], GINAC_GET_LTVERSION([REVISION]))
+
+AC_INIT([GiNaC], ginac_version, [ginac-list@ginac.de], [ginac], [http://www.ginac.de/])
+AC_PREREQ(2.59)
 AC_CONFIG_SRCDIR(ginac/basic.cpp)
 AC_CONFIG_SRCDIR(ginac/basic.cpp)
-AC_CONFIG_HEADERS(config.h)
+AC_CONFIG_AUX_DIR([config])
+AC_CONFIG_HEADERS([config/config.h])
+AC_CONFIG_MACRO_DIR([m4])
 dnl This defines PACKAGE and VERSION.
 dnl This defines PACKAGE and VERSION.
-AM_INIT_AUTOMAKE([gnu 1.7 dist-bzip2])
-
-dnl Process GiNaC version information
-GINACLIB_MAJOR_VERSION=ginac_major_version
-GINACLIB_MINOR_VERSION=ginac_minor_version
-GINACLIB_MICRO_VERSION=ginac_micro_version
-GINACLIB_VERSION=ginac_version
-AC_SUBST(GINACLIB_MAJOR_VERSION)
-AC_SUBST(GINACLIB_MINOR_VERSION)
-AC_SUBST(GINACLIB_MICRO_VERSION)
-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=2
-ARCHIVE_AGE=2
-
-AC_SUBST(ARCHIVE_VERSION)
-AC_SUBST(ARCHIVE_AGE)
-AC_DEFINE_UNQUOTED(ARCHIVE_VERSION, $ARCHIVE_VERSION, [Current GiNaC archive file version number])
-AC_DEFINE_UNQUOTED(ARCHIVE_AGE, $ARCHIVE_AGE, [GiNaC archive file version age])
+AM_INIT_AUTOMAKE([gnu 1.8 dist-bzip2 subdir-objects])
 
 dnl libtool versioning
 
 dnl libtool versioning
-m4_define([lt_revision], [ginac_interface_age])
-m4_define([lt_current], [m4_eval(ginac_micro_version - ginac_interface_age)])
-m4_define([lt_age], [m4_eval(ginac_binary_age - ginac_interface_age)])
-LT_VERSION_INFO="lt_current:lt_revision:lt_age"
-LT_RELEASE="ginac_release"
-
+LT_VERSION_INFO="ginac_lt_current:ginac_lt_revision:ginac_lt_age"
 AC_SUBST(LT_VERSION_INFO)
 AC_SUBST(LT_VERSION_INFO)
-AC_SUBST(LT_RELEASE)
-
 
 dnl Check for the compiler and all the utilities needed for the build.
 AC_PROG_CXX
 AC_PROG_CXXCPP
 AC_PROG_INSTALL
 AM_PROG_LIBTOOL
 
 dnl Check for the compiler and all the utilities needed for the build.
 AC_PROG_CXX
 AC_PROG_CXXCPP
 AC_PROG_INSTALL
 AM_PROG_LIBTOOL
-AM_PROG_LEX
+AC_PROG_LEX
 AC_PROG_YACC
 AC_PROG_YACC
-
-dnl Check for data types which are needed by the hash function 
-dnl (golden_ratio_hash).
-AC_CHECK_SIZEOF(int)
-AC_CHECK_SIZEOF(long)
-AC_CHECK_SIZEOF(long long)
-AC_CHECK_SIZEOF(long double)
-AC_CHECK_SIZEOF(void *)
+AC_PATH_PROG(YACCEXE, $YACC, "")
+AS_IF([test "x$LEX" = "x:" -a ! -f $srcdir/ginsh/ginsh_lexer.cpp],
+      [GINAC_WARNING([ginsh will not compile, because lex/flex is missing])])
+AS_IF([test -z "$YACCEXE" -a ! -f $srcdir/ginsh/ginsh_parser.hpp],
+      [GINAC_WARNING([ginsh will not compile, because yacc/bison is missing])])
 
 dnl Switch to C++ language mode for the following libraries and headers.
 AC_LANG([C++])
 
 
 dnl Switch to C++ language mode for the following libraries and headers.
 AC_LANG([C++])
 
+dnl Make sure all the necessary standard headers are installed on the system.
+GINAC_STD_CXX_HEADERS
+
+dnl We need to have CLN installed.
+PKG_CHECK_MODULES(CLN, cln >= 1.2.2)
+AC_LIB_LINKFLAGS_FROM_LIBS([CLN_RPATH], [$CLN_LIBS])
+LIBS="$LIBS $CLN_LIBS $CLN_RPATH"
+CPPFLAGS="$CPPFLAGS $CLN_CFLAGS"
+dnl Include proper rpath into pkg-config meta data, so
+dnl g++ `pkg-config --cflags --libs ginac`
+dnl actually works
+GINACLIB_LIBS='-L${libdir} -lginac'
+AC_LIB_LINKFLAGS_FROM_LIBS([GINACLIB_RPATH], [$GINACLIB_LIBS])
+
+dnl Check for data types which are needed by the hash function 
+dnl (golden_ratio_hash).
+AC_CHECK_TYPE(long long)
+
 dnl Check for stuff needed for building the GiNaC interactive shell (ginsh).
 AC_CHECK_HEADERS(unistd.h)
 GINAC_HAVE_RUSAGE
 dnl Check for stuff needed for building the GiNaC interactive shell (ginsh).
 AC_CHECK_HEADERS(unistd.h)
 GINAC_HAVE_RUSAGE
-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 standard headers are installed on the system.
-AC_CHECK_HEADER(iosfwd, , GINAC_ERROR([The standard <iosfwd> header file could not be found.]))
-AC_CHECK_HEADER(iostream, , GINAC_ERROR([The standard <iostream> header file could not be found.]))
-AC_CHECK_HEADER(vector, , GINAC_ERROR([The standard <vector> header file could not be found.]))
-AC_CHECK_HEADER(list, , GINAC_ERROR([The standard <list> header file could not be found.]))
-AC_CHECK_HEADER(map, , GINAC_ERROR([The standard <map> header file could not be found.]))
-AC_CHECK_HEADER(string, , GINAC_ERROR([The standard <string> header file could not be found.]))
-AC_CHECK_HEADER(sstream, , GINAC_ERROR([The standard <sstream> header file could not be found.]))
-AC_CHECK_HEADER(typeinfo, , GINAC_ERROR([The standard <typeinfo> header file could not be found.]))
-AC_CHECK_HEADER(stdexcept, , GINAC_ERROR([The standard <stdexcept> header file could not be found.]))
-AC_CHECK_HEADER(algorithm, , GINAC_ERROR([The standard <algorithm> header file could not be found.]))
-AC_CHECK_HEADER(limits, , GINAC_ERROR([The standard <limits> header file could not be found.]))
-if test "x$CONFIG_RUSAGE" = "xno"; then
-    AC_CHECK_HEADER(ctime, , GINAC_ERROR([The standard <ctime> header file could not be found.]))
-fi
+GINAC_READLINE
+dnl Python is necessary for building function.{cpp,h}
+AC_PATH_PROG(PYTHON, python, "")
+AS_IF([test -z "$PYTHON" -a ! -f "$srcdir/ginac/function.cpp"],
+      [AC_MSG_ERROR([GiNaC will not compile because Python is missing])])
 
 dnl Check for dl library (needed for GiNaC::compile).
 
 dnl Check for dl library (needed for GiNaC::compile).
-AC_CHECK_LIB(dl, dlopen,
-       [
-               DL_LIBS="-ldl"
-               AC_SUBST(DL_LIBS)
-               AC_DEFINE(HAVE_LIBDL, 1, [set to 1 if you have a working libdl installed.])
-       ], 
-       GINAC_WARNING([libdl not found. GiNaC::compile will be disabled.]))
-LIBS="$LIBS $DL_LIBS"
-
-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)
+GINAC_EXCOMPILER
+AM_CONDITIONAL(CONFIG_EXCOMPILER, [test "x${CONFIG_EXCOMPILER}" = "xyes"])
 
 dnl Check for utilities needed by the different kinds of documentation.
 dnl Documentation needs only be built when extending it, so never mind if it
 
 dnl Check for utilities needed by the different kinds of documentation.
 dnl Documentation needs only be built when extending it, so never mind if it
@@ -150,20 +79,24 @@ AM_CONDITIONAL(CONFIG_DOXYGEN, [test ! -z "$DOXYGEN"])
 AC_PATH_PROG(LATEX, latex, "")
 AC_PATH_PROG(PDFLATEX, pdflatex, "")
 AC_PATH_PROG(MAKEINDEX, makeindex, "")
 AC_PATH_PROG(LATEX, latex, "")
 AC_PATH_PROG(PDFLATEX, pdflatex, "")
 AC_PATH_PROG(MAKEINDEX, makeindex, "")
+AC_PATH_PROG(MAKEINFO, makeinfo, "")
 AC_PATH_PROG(DVIPS, dvips, "")
 AM_CONDITIONAL(CONFIG_TEX, [test ! \( -z "$LATEX" -o -z $"PDFLATEX" -o -z "$MAKEINDEX" -o -z "$DVIPS" \)])
 AC_PATH_PROG(FIG2DEV, fig2dev, "")
 AM_CONDITIONAL(CONFIG_FIG2DEV, [test ! -z "$FIG2DEV"])
 AC_PATH_PROG(DVIPS, dvips, "")
 AM_CONDITIONAL(CONFIG_TEX, [test ! \( -z "$LATEX" -o -z $"PDFLATEX" -o -z "$MAKEINDEX" -o -z "$DVIPS" \)])
 AC_PATH_PROG(FIG2DEV, fig2dev, "")
 AM_CONDITIONAL(CONFIG_FIG2DEV, [test ! -z "$FIG2DEV"])
-
+AS_IF([test -z "$FIG2DEV" -o -z "$MAKEINFO"],
+         [GINAC_WARNING([Documentation may not build, because fig2dev/texinfo is missing.])])
+AS_IF([test -z "$DOXYGEN"],
+         [GINAC_WARNING([Reference manual will not build, because doxygen is missing.])])
+AS_IF([test -z "$LATEX" -o -z "$PDFLATEX" -o -z "$DVIPS"],
+         [GINAC_WARNING([Some documentation formats may not build, because latex/pdflatex/dvips is missing.])])
+          
 dnl Output makefiles etc.
 AC_CONFIG_FILES([
 Makefile
 GiNaC.spec
 dnl Output makefiles etc.
 AC_CONFIG_FILES([
 Makefile
 GiNaC.spec
-ginac-config
-ginac-config.1
 ginac.pc
 ginac/Makefile
 ginac.pc
 ginac/Makefile
-ginac/version.h
 check/Makefile
 ginsh/Makefile
 ginsh/ginsh.1
 check/Makefile
 ginsh/Makefile
 ginsh/ginsh.1
@@ -179,7 +112,7 @@ doc/reference/DoxyfileTEX
 doc/reference/DoxyfilePDF
 doc/reference/Doxyfooter
 ])
 doc/reference/DoxyfilePDF
 doc/reference/Doxyfooter
 ])
-AC_CONFIG_COMMANDS([default],[[chmod +x ginac-config]],[[]])
 AC_OUTPUT
 AC_OUTPUT
+
 dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
 GINAC_CHECK_ERRORS
 dnl Display a final warning if there has been a GINAC_ERROR or a GINAC_WARNING
 GINAC_CHECK_ERRORS