]> git.lyx.org Git - lyx.git/blobdiff - config/lyxinclude.m4
ctest export test documentation update
[lyx.git] / config / lyxinclude.m4
index ba5344a342c18c3488af53a57d5f2131894430f2..30697d7352d9a141de819747ab545b698b3201d4 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,26 @@ 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_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])
+lyx_use_cxx11=$lyx_cv_cxx_cxx11
+])
+
+
 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 +179,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 +239,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 +254,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]),,
@@ -301,18 +298,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 -Wno-deprecated-declarations"
   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,49 +314,53 @@ if test x$GXX = xyes; then
         ;;
     esac
   fi
-  if test x$enable_concept_checks = 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.*)
-        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
-    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 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_CXXFLAGS="$AM_CXXFLAGS -std=c++0x";;
       clang)
         dnl presumably all clang version 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_CXXFLAGS="$AM_CXXFLAGS -std=c++11 -Wno-deprecated-register";;
       *)
-        LYX_CXX_USE_CXX11(gnu++11);;
+        AS_CASE([$host], [*cygwin*],
+                [AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++11"],
+                [AM_CXXFLAGS="$AM_CXXFLAGS -std=c++11"]);;
     esac
+  fi
+
+  LYX_CXX_CXX11
+  if test $lyx_use_cxx11 = yes ; then
+    AC_CHECK_HEADER([regex], [lyx_std_regex=yes], [lyx_std_regex=no])
     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
-           ;;
+        *) lyx_std_regex=yes ;;
       esac
     else
-      lyx_flags="$lyx_flags stdregex"
       lyx_std_regex=yes
     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
   fi
+else
+  dnl This is not gcc, not sure what setup we can do
+  AC_CHECK_HEADER([regex], [lyx_std_regex=yes], [lyx_std_regex=no])
+fi
+
+if test $lyx_std_regex = yes ; then
+  lyx_flags="$lyx_flags stdregex"
+  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)
-test "$lyx_pch_comp" = yes && lyx_flags="$lyx_flags pch"
-AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
 ])dnl
 
 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
@@ -388,7 +381,7 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
            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 +389,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 +407,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 +461,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 +564,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 +603,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)