X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=acinclude.m4;h=74ffa1adcebbfb6fd58117c29ab1c89b7bcdaff2;hb=077ea832b5f42e53e48fd2e350bd0e232ff67727;hp=fd73e8cfb325e7f2c9f3385e4e066d7098ff50f1;hpb=6bba977f42b0cde753ac2ffd26f3f9c6b32ba0b6;p=lyx.git diff --git a/acinclude.m4 b/acinclude.m4 index fd73e8cfb3..74ffa1adce 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,6 +1,7 @@ dnl Some useful functions for LyXs configure.in -*- sh -*- dnl Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr) dnl Lars Gullik Bjønnes (larsbj@lyx.org) +dnl Allan Rae (rae@lyx.org) dnl Usage LYX_GET_VERSION Sets "lyx_version" to the version of LyX being @@ -185,7 +186,7 @@ dnl Check the version of g++ case $gxx_version in 2.95.1) CXXFLAGS="-g $lyx_opt -fpermissive -fno-rtti -fno-exceptions";; 2.95.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";; - 2.96*) CXXFLAGS="-g $lyx_opt -fhonor-std";; + 2.96*) CXXFLAGS="-g $lyx_opt -fhonor-std -fvtable-thunks -ffunction-sections -fdata-sections";; *2.91.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";; *) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";; esac @@ -332,38 +333,83 @@ fi]) dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler -dnl has a working stl string container, the check is really stupid -dnl and could need some improvement. +dnl has a std::string that is usable for LyX. LyX does not require this +dnl std::string to be standard. AC_DEFUN(LYX_CXX_STL_STRING,[ AC_REQUIRE([LYX_PROG_CXX]) AC_MSG_CHECKING(whether the included std::string should be used) AC_ARG_WITH(included-string, [ --with-included-string use LyX string class instead of STL string], - [with_included_string=$withval], - [AC_TRY_COMPILE([ + [lyx_cv_with_included_string=$withval], + [AC_CACHE_CHECK([],lyx_cv_with_included_string, + [AC_TRY_COMPILE([ #include using std::string; ],[ + // LyX has reduced its requirements on the basic_string + // implementation so that the basic_string supplied + // with gcc is usable. In particular this means that + // lyx does not use std::string::clear and not the + // strncmp version of std::string::compare. This is mainly + // done so that LyX can use precompiled C++ libraries that + // already uses the systems basic_string, e.g. gtk-- string a("hello there"); a.erase(); a = "hey"; - char s[] = "y"; - int t = a.compare(a.length() - 1, 1, s); + //char s[] = "y"; + //int t = a.compare(a.length() - 1, 1, s); a.erase(); ],[ - with_included_string=no + lyx_cv_with_included_string=no ],[ - with_included_string=yes - + lyx_cv_with_included_string=yes + ]) ]) ]) - if test x$with_included_string = xyes ; then + if test x$lyx_cv_with_included_string = xyes ; then AC_DEFINE(USE_INCLUDED_STRING, 1, [Define to use the lyxstring class bundled with LyX.]) lyx_flags="$lyx_flags included-string" fi - AM_CONDITIONAL(USE_LYXSTRING, test x$with_included_string = xyes) - AC_MSG_RESULT([$with_included_string]) + AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes) +dnl AC_MSG_RESULT([$with_included_string]) +]) + + +dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler +dnl has a std::string that is close to the standard. So close that +dnl methods not found in "unstandard" std::strings are present here. +AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[ + AC_REQUIRE([LYX_PROG_CXX]) + AC_CACHE_CHECK([whether the systems std::string is really good], + [lyx_cv_std_string_good], + [AC_TRY_COMPILE([ + #include + using std::string; + ],[ + // From a std::string that is supposed to be close to the + // standard we require at least three things: + // - clear() and erase() + // - the strncmp of compare() + // - push_back() + string a("hello there"); + a.erase(); + a = "hey"; + char s[] = "y"; + int t = a.compare(a.length() - 1, 1, s); + a.push_back('g'); + a.clear(); + ],[ + lyx_cv_std_string_good=yes + ],[ + lyx_cv_std_string_good=no + + ]) + ]) + if test x$lyx_cv_std_string_good = xyes ; then + AC_DEFINE(STD_STRING_IS_GOOD, 1, + [Define is the systems std::string is really good.]) + fi ]) @@ -378,49 +424,55 @@ AC_DEFUN(LYX_REGEX,[ dnl LYX_CXX_MUTABLE AC_DEFUN(LYX_CXX_MUTABLE, [ -AC_REQUIRE([LYX_PROG_CXX]) -AC_MSG_CHECKING(if C++ compiler supports mutable) -AC_TRY_COMPILE( -[ -class k { - mutable char *c; -public: - void foo() const { c=0; } -}; -],[ -],[ - ac_mutable=yes - AC_DEFINE(HAVE_MUTABLE, 1, - [Defined if you compiler supports 'mutable'.]) -],[ - ac_mutable=no -]) -AC_MSG_RESULT([$ac_mutable]) + AC_REQUIRE([LYX_PROG_CXX]) + AC_CACHE_CHECK([if C++ compiler supports mutable], + lyx_cv_cxx_mutable,[ + AC_TRY_COMPILE( + [ + class k { + mutable char *c; + public: + void foo() const { c=0; } + }; + ],[ + ],[ + lyx_cv_cxx_mutable=yes + ],[ + lyx_cv_cxx_mutable=no + ]) + ]) + if test $lyx_cv_cxx_mutable = yes ; then + AC_DEFINE(HAVE_MUTABLE, 1, + [Defined if your compiler suports 'mutable'.]) + fi ]) dnl LYX_CXX_PARTIAL AC_DEFUN(LYX_CXX_PARTIAL, [ -AC_REQUIRE([LYX_PROG_CXX]) -AC_MSG_CHECKING(if C++ compiler supports partial specialization) -AC_TRY_COMPILE( -[ -template -class k { -public: -}; -template class k { }; -],[ - k b; - k a; -],[ - ac_partial_specialization=yes - AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1, - [Defined if your compiler supports partial specialization.]) -],[ - ac_partial_specialization=no -]) -AC_MSG_RESULT([$ac_partial_specialization]) + AC_REQUIRE([LYX_PROG_CXX]) + AC_CACHE_CHECK([if C++ compiler supports partial specialization], + [lyx_cv_cxx_partial_specialization], + [AC_TRY_COMPILE( + [ + template + class k { + public: + }; + template class k { }; + ],[ + k b; + k a; + ],[ + lyx_cv_cxx_partial_specialization=yes + ],[ + lyx_cv_cxx_partial_specialization=no + ]) + ]) + if test x$lyx_cv_cxx_partial_specialization = xyes ; then + AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1, + [Defined if your compiler supports partial specialization.]) + fi ]) @@ -429,20 +481,21 @@ dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES dnl if true. This macro does not do a thourough test, but it should be dnl good enough to suit our needs. AC_DEFUN(LYX_CXX_NAMESPACES,[ -AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace, - [AC_TRY_COMPILE([ - namespace foo { - int bar; - } -],[ + AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace, + [AC_TRY_COMPILE([ + namespace foo { + int bar; + } + ],[ foo::bar = 0; return 0; -],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no) + ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no) + ]) + if test x$lyx_cv_cxx_namespace = xyes ; then + AC_DEFINE(CXX_WORKING_NAMESPACES, 1, + [Define if your C++ compiler has correct support for namespaces]) + fi ]) -if test $lyx_cv_cxx_namespace = yes ; then - AC_DEFINE(CXX_WORKING_NAMESPACES, 1, - [Define if your C++ compiler has correct support for namespaces]) -fi]) dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler @@ -735,21 +788,29 @@ AC_SUBST(INCLUDED_SIGC) ## actual header _is_ found though and the cache variable is set however ## the reported setting (on screen) is equal to $ac_safe for some unknown ## reason. +## Additionally, autoheader can't figure out what to use as the name in +## the config.h.in file so we need to write our own entries there -- one for +## each header in the form PATH_HEADER_NAME_H +## AC_DEFUN(LYX_PATH_HEADER, [ AC_CHECK_HEADER($1,[ ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - AC_CACHE_CHECK([path to $1],lyx_cv_path_$ac_safe, +### the only remaining problem is getting the second parameter to this +### AC_CACHE_CACHE to print correctly. Currently it just results in value +### of $ac_safe being printed. + AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe], [ cat > conftest.$ac_ext < EOF -lyx_cv_path_$ac_safe=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \ +lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \ grep $1 2>/dev/null | \ sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"` +eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path" rm -f conftest*]) - AC_DEFINE_UNQUOTED(${ac_tr_safe},${lyx_cv_path_$ac_safe})]) + AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)]) ]) ### end of LYX_PATH_HEADER @@ -845,7 +906,7 @@ AC_DEFUN(LYX_USE_FRONTEND, [AC_MSG_CHECKING(what frontend should be used as main GUI) AC_ARG_WITH(frontend, [ --with-frontend[=value] Use THIS frontend as main GUI: - Possible values: xforms,kde], + Possible values: xforms,kde,gtk], [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"]) AC_MSG_RESULT($lyx_use_frontend) lyx_flags="$lyx_flags frontend-$lyx_use_frontend" @@ -4298,3 +4359,247 @@ if test -n "$LIBXDMCP"; then fi ]) +# Configure paths for GTK-- +# Erik Andersen 30 May 1998 +# Modified by Tero Pulkkinen (added the compiler checks... I hope they work..) +# Modified by Thomas Langen 16 Jan 2000 (corrected CXXFLAGS) + +dnl Test for GTKMM, and define GTKMM_CFLAGS and GTKMM_LIBS +dnl to be used as follows: +dnl AM_PATH_GTKMM([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl +AC_DEFUN(AM_PATH_GTKMM, +[dnl +dnl Get the cflags and libraries from the gtkmm-config script +dnl +AC_ARG_WITH(gtkmm-prefix,[ --with-gtkmm-prefix=PREFIX + Prefix where GTK-- is installed (optional)], + gtkmm_config_prefix="$withval", gtkmm_config_prefix="") +AC_ARG_WITH(gtkmm-exec-prefix,[ --with-gtkmm-exec-prefix=PREFIX + Exec prefix where GTK-- is installed (optional)], + gtkmm_config_exec_prefix="$withval", gtkmm_config_exec_prefix="") +AC_ARG_ENABLE(gtkmmtest, [ --disable-gtkmmtest Do not try to compile and run a test GTK-- program], + , enable_gtkmmtest=yes) + + if test x$gtkmm_config_exec_prefix != x ; then + gtkmm_config_args="$gtkmm_config_args --exec-prefix=$gtkmm_config_exec_prefix" + if test x${GTKMM_CONFIG+set} != xset ; then + GTKMM_CONFIG=$gtkmm_config_exec_prefix/bin/gtkmm-config + fi + fi + if test x$gtkmm_config_prefix != x ; then + gtkmm_config_args="$gtkmm_config_args --prefix=$gtkmm_config_prefix" + if test x${GTKMM_CONFIG+set} != xset ; then + GTKMM_CONFIG=$gtkmm_config_prefix/bin/gtkmm-config + fi + fi + + AC_PATH_PROG(GTKMM_CONFIG, gtkmm-config, no) + min_gtkmm_version=ifelse([$1], ,0.10.0,$1) + + AC_MSG_CHECKING(for GTK-- - version >= $min_gtkmm_version) + no_gtkmm="" + if test "$GTKMM_CONFIG" = "no" ; then + no_gtkmm=yes + else + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + GTKMM_CFLAGS=`$GTKMM_CONFIG $gtkmm_config_args --cflags` + GTKMM_LIBS=`$GTKMM_CONFIG $gtkmm_config_args --libs` + gtkmm_config_major_version=`$GTKMM_CONFIG $gtkmm_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gtkmm_config_minor_version=`$GTKMM_CONFIG $gtkmm_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gtkmm_config_micro_version=`$GTKMM_CONFIG $gtkmm_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gtkmmtest" = "xyes" ; then + ac_save_CXXFLAGS="$CXXFLAGS" + ac_save_LIBS="$LIBS" + CXXFLAGS="$CXXFLAGS $GTKMM_CFLAGS" + LIBS="$LIBS $GTKMM_LIBS" +dnl +dnl Now check if the installed GTK-- is sufficiently new. (Also sanity +dnl checks the results of gtkmm-config to some extent +dnl + rm -f conf.gtkmmtest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gtkmmtest"); + + /* HP/UX 0 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gtkmm_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtkmm_version"); + exit(1); + } + + if ((gtkmm_major_version != $gtkmm_config_major_version) || + (gtkmm_minor_version != $gtkmm_config_minor_version) || + (gtkmm_micro_version != $gtkmm_config_micro_version)) + { + printf("\n*** 'gtkmm-config --version' returned %d.%d.%d, but GTK-- (%d.%d.%d)\n", + $gtkmm_config_major_version, $gtkmm_config_minor_version, $gtkmm_config_micro_version, + gtkmm_major_version, gtkmm_minor_version, gtkmm_micro_version); + printf ("*** was found! If gtkmm-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK--. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If gtkmm-config was wrong, set the environment variable GTKMM_CONFIG\n"); + printf("*** to point to the correct copy of gtkmm-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } +/* GTK-- does not have the GTKMM_*_VERSION constants */ +/* + else if ((gtkmm_major_version != GTKMM_MAJOR_VERSION) || + (gtkmm_minor_version != GTKMM_MINOR_VERSION) || + (gtkmm_micro_version != GTKMM_MICRO_VERSION)) + { + printf("*** GTK-- header files (version %d.%d.%d) do not match\n", + GTKMM_MAJOR_VERSION, GTKMM_MINOR_VERSION, GTKMM_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + gtkmm_major_version, gtkmm_minor_version, gtkmm_micro_version); + } +*/ + else + { + if ((gtkmm_major_version > major) || + ((gtkmm_major_version == major) && (gtkmm_minor_version > minor)) || + ((gtkmm_major_version == major) && (gtkmm_minor_version == minor) && (gtkmm_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK-- (%d.%d.%d) was found.\n", + gtkmm_major_version, gtkmm_minor_version, gtkmm_micro_version); + printf("*** You need a version of GTK-- newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GTK-- is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the gtkmm-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK--, but you can also set the GTKMM_CONFIG environment to point to the\n"); + printf("*** correct copy of gtkmm-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_gtkmm=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtkmm" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GTKMM_CONFIG" = "no" ; then + echo "*** The gtkmm-config script installed by GTK-- could not be found" + echo "*** If GTK-- was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GTKMM_CONFIG environment variable to the" + echo "*** full path to gtkmm-config." + echo "*** The gtkmm-config script was not available in GTK-- versions" + echo "*** prior to 0.9.12. Perhaps you need to update your installed" + echo "*** version to 0.9.12 or later" + else + if test -f conf.gtkmmtest ; then + : + else + echo "*** Could not run GTK-- test program, checking why..." + CXXFLAGS="$CXXFLAGS $GTKMM_CFLAGS" + LIBS="$LIBS $GTKMM_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((gtkmm_major_version) || (gtkmm_minor_version) || (gtkmm_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK-- or finding the wrong" + echo "*** version of GTK--. If it is not finding GTK--, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK-- was incorrectly installed" + echo "*** or that you have moved GTK-- since it was installed. In the latter case, you" + echo "*** may want to edit the gtkmm-config script: $GTKMM_CONFIG" ]) + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTKMM_CFLAGS="" + GTKMM_LIBS="" + ifelse([$3], , :, [$3]) + AC_LANG_RESTORE + fi + AC_SUBST(GTKMM_CFLAGS) + AC_SUBST(GTKMM_LIBS) + rm -f conf.gtkmmtest +]) + +# Configure paths for GNOME-- +# Modified from GTK--.m4 + +dnl Test for GNOMEMM, and define GNOMEMM_INCLUDEDIR, GNOMEMM_LIBDIR, GNOMEMM_LIBS +dnl to be used as follows: +dnl AM_PATH_GNOMEMM([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl +AC_DEFUN(AM_PATH_GNOMEMM, +[ +dnl +dnl Get the cflags and libraries from the gtkmm-config script +dnl +AC_ARG_WITH(gnomemm-config-path,[ --with-gnomemm-config-path=PREFIX + Path to GNOME-- configuration file gnomemmConf.sh (optional)], + gnomemm_config_prefix="$withval", gnome_config_prefix="") + + AC_MSG_CHECKING(for GNOME-- gnomemmConf.sh) + + if test x$gnomemm_config_prefix != x; then + if test -r $gnomemm_config_prefix; then + source $gnomemm_config_prefix + else + no_gnomemm=yes + fi + else + if test -r /usr/lib/gnomemmConf.sh ; then + source /usr/lib/gnomemmConf.sh + elif test -r /opt/gnome/lib/gnomemmConf.sh ; then + source /opt/gnome/lib/gnomemmConf.sh + elif test -r /usr/local/lib/gnomemmConf.sh ; then + source /usr/local/lib/gnomemmConf.sh + else + no_gnomemm=yes + fi + fi + + if test "x$no_gnomemm" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + AC_MSG_ERROR(Cannot find GNOME-- configuration file gnomemmConf.sh) + fi + + AC_SUBST(GNOMEMM_INCLUDEDIR) + AC_SUBST(GNOMEMM_LIBDIR) + AC_SUBST(GNOMEMM_LIBS) +]) +