]> git.lyx.org Git - features.git/blobdiff - config/lyxinclude.m4
more NEW_INSETS changes, define NEW_MANUBAR as default some other changes, read ChangeLog
[features.git] / config / lyxinclude.m4
index 92a81bb29d1f6bf98853f049697b4eae8399402b..904faff7710fe099c33572e93aa9cda7b386e1f1 100644 (file)
@@ -333,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 <string>
            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 <string>
+           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
 ])
 
 
@@ -379,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 T, class K>
-class k {       
-public:
-};
-template<class T> class k<void,T> { };
-],[
-  k<float, float> b;
-  k<void,void> 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 T, class K>
+           class k {       
+           public:
+           };
+           template<class T> class k<void,T> { };
+           ],[
+           k<float, float> b;
+           k<void,void> 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
 ])
 
 
@@ -430,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