]> git.lyx.org Git - lyx.git/blobdiff - config/lyxinclude.m4
New LFUN tabular-feature (#9794)
[lyx.git] / config / lyxinclude.m4
index ba5344a342c18c3488af53a57d5f2131894430f2..81e91ca35e5142afe0bc38bfffbe3362cf2c17a1 100644 (file)
@@ -133,7 +133,7 @@ done
 ])dnl
 
 
-dnl Usage: LYX_PROG_CLANG: set lyx_cv_prog_clang to yes if the compiler is clang.
+dnl Usage: LYX_PROG_CLANG: set CLANG to yes if the compiler is clang.
 AC_DEFUN([LYX_PROG_CLANG],
 [AC_CACHE_CHECK([whether the compiler is clang],
                [lyx_cv_prog_clang],
@@ -146,6 +146,64 @@ AC_DEFUN([LYX_PROG_CLANG],
 ])
 
 
+dnl Usage: LYX_CXX_CXX11: set lyx_use_cxx11 to yes if the compiler implements
+dnl the C++11 standard.
+AC_DEFUN([LYX_CXX_CXX11],
+[AC_CACHE_CHECK([whether the compiler implements C++11],
+               [lyx_cv_cxx_cxx11],
+ [save_CPPFLAGS=$CPPFLAGS
+  CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+  save_CXXFLAGS=$CXXFLAGS
+  CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
+  AC_LANG_PUSH(C++)
+  AC_TRY_COMPILE([], [
+#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
+           this is a c++11 compiler
+#endif
+  ],
+  [lyx_cv_cxx_cxx11=no], [lyx_cv_cxx_cxx11=yes ; lyx_flags="$lyx_flags c++11"])
+ AC_LANG_POP(C++)
+ CXXFLAGS=$save_CXXFLAGS
+ CPPFLAGS=$save_CPPFLAGS])
+ lyx_use_cxx11=$lyx_cv_cxx_cxx11
+])
+
+dnl decide whether we want to use std::regex and set the
+dnl LYX_USE_STD_REGEX accordingly.
+AC_DEFUN([LYX_CXX_USE_REGEX],
+[lyx_std_regex=no
+ if test $lyx_use_cxx11 = yes; then
+   save_CPPFLAGS=$CPPFLAGS
+   CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+   save_CXXFLAGS=$CXXFLAGS
+   CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
+   AC_LANG_PUSH(C++)
+   AC_CHECK_HEADER([regex], [lyx_std_regex=yes], [lyx_std_regex=no])
+   AC_LANG_POP(C++)
+   CXXFLAGS=$save_CXXFLAGS
+   CPPFLAGS=$save_CPPFLAGS
+   if test x$GXX = xyes && test $lyx_std_regex = yes ; then
+     AC_MSG_CHECKING([for correct regex implementation])
+     if test x$CLANG = xno || test $lyx_cv_lib_stdcxx = yes; then
+       dnl <regex> in gcc is unusable in versions less than 4.9.0
+       dnl see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
+       case $gxx_version in
+         4.0*|4.1*|4.2*|4.3*|4.4*|4.5*|4.6*|4.7*|4.8*) lyx_std_regex=no ;;
+         *) ;;
+       esac
+     fi
+   fi
+   AC_MSG_RESULT([$lyx_std_regex])
+ fi
+
+ if test $lyx_std_regex = yes ; then
+  lyx_flags="$lyx_flags std-regex"
+  AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex])
+ fi
+ AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
+])
+
+
 dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
 AC_DEFUN([LYX_LIB_STDCXX],
 [AC_CACHE_CHECK([whether STL is libstdc++],
@@ -159,15 +217,6 @@ AC_DEFUN([LYX_LIB_STDCXX],
 ])
 
 
-dnl Usage: LYX_CXX_USE_CXX11(STD): pass option -std=STD to the C++ compiler
-dnl        and define LYX_USE_CXX11.
-AC_DEFUN([LYX_CXX_USE_CXX11],
-[lyx_flags="$lyx_flags c++11-mode"
- AM_CXXFLAGS="$AM_CXXFLAGS -std=$1"
- AC_DEFINE([LYX_USE_CXX11], 1, [Define if LyX should use C++11 features])
-])
-
-
 dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
 dnl        if the STL library is GNU libstdc++ and the C++11 ABI is used.
 AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
@@ -228,15 +277,6 @@ AC_ARG_ENABLE(stdlib-debug,
          [enable_stdlib_debug=no])]
 )
 
-AC_ARG_ENABLE(concept-checks,
-  AC_HELP_STRING([--enable-concept-checks],[enable concept checks]),,
-  [AS_CASE([$build_type], [dev*|pre*], [enable_concept_checks=yes], 
-         [enable_concept_checks=no])]
-  if test x$USE_QT5 = xyes ; then
-      enable_concept_checks=no
-  fi
-)
-
 ### set up optimization
 AC_ARG_ENABLE(optimization,
     AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
@@ -252,14 +292,9 @@ case $enable_optimization in
     *) lyx_optim=${enable_optimization};;
 esac
 
-AC_ARG_ENABLE(pch,
-  AC_HELP_STRING([--enable-pch],[enable precompiled headers]),,
-       enable_pch=no;)
-lyx_pch_comp=no
-
 AC_ARG_ENABLE(cxx11,
-  AC_HELP_STRING([--enable-cxx11],[enable C++11 mode]),,
-  enable_cxx11=no;)
+  AC_HELP_STRING([--disable-cxx11],[disable C++11 mode (default: enabled for known good compilers)]),,
+  enable_cxx11=auto;)
 
 AC_ARG_ENABLE(assertions,
   AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
@@ -273,7 +308,6 @@ if test "x$enable_assertions" = xyes ; then
 fi
 
 # set the compiler options correctly.
-lyx_std_regex=no
 if test x$GXX = xyes; then
   dnl clang++ pretends to be g++ 4.2.1; this is not useful
   if test x$CLANG = xno; then
@@ -301,18 +335,10 @@ if test x$GXX = xyes; then
   fi
   dnl Warnings are for preprocessor too
   if test x$enable_warnings = xyes ; then
-      case $gxx_version in
-          4.0*|4.1*|4.2*|4.3*|4.4*|4.5*|4.6*|4.7*|4.8*|clang)
-              AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
-              ;;
-          *)
-              AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra -Wfloat-conversion"
-              ;;
-      esac
+      AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra"
   fi
   case $gxx_version in
       2.*|3.*) AC_ERROR([gcc 4.x is required]);;
-      *)  test $enable_pch = yes && lyx_pch_comp=yes ;;
   esac
   if test x$enable_stdlib_debug = xyes ; then
     dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0
@@ -325,50 +351,40 @@ if test x$GXX = xyes; then
         ;;
     esac
   fi
-  if test x$enable_concept_checks = xyes ; then
-    case $gxx_version in
-      4.*)
-        lyx_flags="$lyx_flags concept-checks"
-       dnl FIXME check whether this makes sense with clang/libc++
-       AC_DEFINE(_GLIBCXX_CONCEPT_CHECKS, 1, [libstdc++ concept checking])
-       ;;
-    esac
-  fi
-  if test x$enable_cxx11 = xyes ; then
+  dnl enable_cxx11 can be yes/no/auto.
+  dnl By default, it is auto and we enable C++11 when possible
+  if test x$enable_cxx11 != xno ; then
     case $gxx_version in
-      4.0*|4.1*|4.2*) AC_ERROR([There is no C++11 support in gcc 4.2 or older]);;
+      4.0*|4.1*|4.2*)
+         if test x$enable_cxx11 = xyes; then
+            AC_ERROR([There is no C++11 support in gcc 4.2 or older])
+         fi;;
       4.3*|4.4*|4.5*|4.6*)
-        LYX_CXX_USE_CXX11(gnu++0x);;
+        dnl Note that this will define __GXX_EXPERIMENTAL_CXX0X__.
+        dnl The source code relies on that.
+        AM_CPPFLAGS="$AM_CPPFLAGS -std=c++0x";;
       clang)
-        dnl presumably all clang version support c++11.
+        dnl presumably all clang versions support c++11.
        dnl the deprecated-register warning is very annoying with Qt4.x right now.
-        LYX_CXX_USE_CXX11(c++11 -Wno-deprecated-register);;
+        AM_CPPFLAGS="$AM_CPPFLAGS -std=c++11"
+        AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-register";;
       *)
-        LYX_CXX_USE_CXX11(gnu++11);;
+        AS_CASE([$host], [*cygwin*],
+                [AM_CPPFLAGS="$AM_CPPFLAGS -std=gnu++11"],
+                [AM_CPPFLAGS="$AM_CPPFLAGS -std=c++11"]);;
     esac
-    if test x$CLANG = xno || test $lyx_cv_lib_stdcxx = yes; then
-      dnl <regex> in gcc is unusable in versions less than 4.9.0
-      dnl see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
-      case $gxx_version in
-        4.0*|4.1*|4.2*|4.3*|4.4*|4.5*|4.6*|4.7*|4.8*) ;;
-       *) lyx_flags="$lyx_flags stdregex"
-          lyx_std_regex=yes
-           ;;
-      esac
-    else
-      lyx_flags="$lyx_flags stdregex"
-      lyx_std_regex=yes
-    fi
+  fi
+fi
 
-    if test $lyx_std_regex = yes ; then
-      AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex])
-    fi
+LYX_CXX_CXX11
+if test $lyx_use_cxx11 = yes; then
+  if test x$GXX = xyes; then
+    dnl We still use auto_ptr, which is obsoleted. Shut off the warnings.
+    AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-declarations"
   fi
 fi
-AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes)
-test "$lyx_pch_comp" = yes && lyx_flags="$lyx_flags pch"
-AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
-])dnl
+LYX_CXX_USE_REGEX
+])
 
 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
 dnl        be used.
@@ -381,14 +397,14 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
        AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
        AC_MSG_RESULT([$lyx_cv_with_included_boost])
        if test x$lyx_cv_with_included_boost = xyes ; then
-           BOOST_INCLUDES='-I$(top_srcdir)/boost'
-           BOOST_LIBS='$(top_builddir)/boost/liblyxboost.a'
+           BOOST_INCLUDES='-I$(top_srcdir)/3rdparty/boost'
+           BOOST_LIBS='$(top_builddir)/3rdparty/boost/liblyxboost.a'
        else
            AC_LANG_PUSH(C++)
            save_LIBS=$LIBS
 
            AC_MSG_CHECKING([for multithreaded boost libraries])
-           LIBS="$save_LIBS -lboost_signals-mt -lm $LIBTHREAD"
+           LIBS="$save_LIBS -lboost_signals-mt $LIBTHREAD"
            AC_LINK_IFELSE(
                [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
                        [boost::signal<void ()> s;])],
@@ -396,7 +412,7 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
                 BOOST_MT="-mt"],
                [AC_MSG_RESULT([no])
                 AC_MSG_CHECKING([for plain boost libraries])
-                LIBS="$save_LIBS -lboost_signals -lm"
+                LIBS="$save_LIBS -lboost_signals"
                 AC_LINK_IFELSE(
                     [AC_LANG_PROGRAM([#include <boost/signal.hpp>],
                             [boost::signal<void ()> s;])],
@@ -414,6 +430,15 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
            else
              BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}"
            fi
+
+           dnl In general, system boost libraries are incompatible with
+           dnl the use of stdlib-debug in libstdc++. See ticket #9736 for
+           dnl details.
+           if test $enable_stdlib_debug = "yes" ; then
+               LYX_WARNING([Compiling LyX with stdlib-debug and system boost libraries may lead to
+   crashes. Consider using --disable-stdlib-debug or removing
+   --without-included-boost.])
+           fi
        fi
        AC_SUBST(BOOST_INCLUDES)
        AC_SUBST(BOOST_LIBS)
@@ -459,9 +484,9 @@ AC_DEFUN([LYX_USE_INCLUDED_MYTHES],[
                if test x$ac_cv_header_mythes_h != xyes; then
                        AC_CHECK_HEADER(mythes/mythes.hxx,[ac_cv_header_mythes_h=yes lyx_cv_mythes_h_location="<mythes/mythes.hxx>"])
                fi
-               AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no], [-lm])
+               AC_CHECK_LIB(mythes, main, [MYTHES_LIBS="-lmythes" lyx_mythes=yes], [lyx_mythes=no])
                if test x$lyx_mythes != xyes; then
-                       AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no], [-lm])
+                       AC_CHECK_LIB(mythes-1.2, main, [MYTHES_LIBS="-lmythes-1.2" lyx_mythes=yes], [lyx_mythes=no])
                fi
                AC_LANG_POP(C++)
                if test x$lyx_mythes != xyes -o x$ac_cv_header_mythes_h != xyes; then
@@ -562,12 +587,13 @@ AC_DEFUN([LYX_USE_PACKAGING],
 [AC_MSG_CHECKING([what packaging should be used])
 AC_ARG_WITH(packaging,
   [AC_HELP_STRING([--with-packaging=THIS], [use THIS packaging for installation:
-                           Possible values: posix, windows, macosx])],
+                           Possible values: posix, windows, macosx, haiku])],
   [lyx_use_packaging="$withval"], [
   case $host in
     *-apple-darwin*) lyx_use_packaging=macosx ;;
-     *-pc-mingw32*) lyx_use_packaging=windows;;
-                  *) lyx_use_packaging=posix;;
+    *-pc-mingw32*) lyx_use_packaging=windows ;;
+    *haiku*) lyx_use_packaging=haiku ;;
+    *) lyx_use_packaging=posix ;;
   esac])
 AC_MSG_RESULT($lyx_use_packaging)
 lyx_install_posix=false
@@ -600,10 +626,16 @@ case $lyx_use_packaging in
           pkgdatadir='${datadir}/${PACKAGE}'
           default_prefix=$ac_default_prefix
           case ${host} in
-          *cygwin*) lyx_install_cygwin=true ;;
-               *apple-darwin*) lyx_install_macosx=true ;;
+            *cygwin*) lyx_install_cygwin=true ;;
+            *apple-darwin*) lyx_install_macosx=true ;;
           esac
           lyx_install_posix=true ;;
+       haiku) AC_DEFINE(USE_HAIKU_PACKAGING, 1, [Define to 1 if LyX should use a Haiku-style file layout])
+          PACKAGE=lyx${version_suffix}
+          program_suffix=$version_suffix
+          pkgdatadir='${datadir}/${PACKAGE}'
+          default_prefix=$ac_default_prefix
+          lyx_install_posix=true ;;
     *) AC_MSG_ERROR([unknown packaging type $lyx_use_packaging.]) ;;
 esac
 AM_CONDITIONAL(INSTALL_MACOSX, $lyx_install_macosx)