]> git.lyx.org Git - features.git/blobdiff - config/lyxinclude.m4
Do not use -Wfloat-conversion with recent gcc versions
[features.git] / config / lyxinclude.m4
index 03746027d7d9ae4f8ea5a33c7eb0a99388c79f73..b488cefdc6c212eb8cbc9be590ab4271803b3044 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],
@@ -258,8 +269,8 @@ AC_ARG_ENABLE(pch,
 lyx_pch_comp=no
 
 AC_ARG_ENABLE(cxx11,
-  AC_HELP_STRING([--enable-cxx11],[enable C++11 mode]),,
-  enable_cxx11=no;)
+  AC_HELP_STRING([--enable-cxx11],[enable 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,14 +312,7 @@ 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]);;
@@ -334,33 +338,44 @@ if test x$GXX = xyes; then
        ;;
     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 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
     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
+      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
   fi
@@ -388,7 +403,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 +411,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;])],
@@ -459,9 +474,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