X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=config%2Flyxinclude.m4;h=aa53e9a6d14f7211466a5ee0b5f2405bf0f41a03;hb=fc42fe4ff487971f9d9aaa607a2eb32b570613ad;hp=6b8d7a5e184d22bbc635f61818fa7ee3c54fd345;hpb=dc7ef3c81ff6e906c41da5ad40117ab87ac214da;p=lyx.git diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index 6b8d7a5e18..aa53e9a6d1 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -39,16 +39,6 @@ esac AC_SUBST(lyx_devel_version) ]) -dnl If LyX is compiled from a git clone, find the HEAD commit hash -dnl -dnl -AC_DEFUN([LYX_CHECK_GIT_COMMIT], [ -AC_MSG_CHECKING([for git commit hash]) -lyxgitcommit=`cd "$srcdir" && git log -1 --pretty=format:%H 2>/dev/null || true` -test x$lyxgitcommit = x && lyxgitcommit="none" -AC_MSG_RESULT($lyxgitcommit) -]) - dnl Define the option to set a LyX version on installed executables and directories dnl @@ -72,6 +62,18 @@ AC_MSG_RESULT([$withval]) ]) +dnl Check whether to configure for Qt5. Default is Qt4. +dnl +AC_DEFUN([LYX_CHECK_QT5],[ +AC_MSG_CHECKING([whether Qt5 is requested]) +AC_ARG_ENABLE([qt5], + [ --enable-qt5 use Qt5 for building], + USE_QT5=$enableval, USE_QT5=no) +AC_MSG_RESULT([$USE_QT5]) +AC_SUBST([USE_QT5]) +]) + + dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the dnl flag lyx_warning to yes. AC_DEFUN([LYX_WARNING],[ @@ -89,7 +91,7 @@ AC_MSG_ERROR([cannot find $1. Please check that the $2 library dnl Usage: LYX_CHECK_WARNINGS Displays a warning message if a LYX_WARNING -dnl has occured previously. +dnl has occurred previously. AC_DEFUN([LYX_CHECK_WARNINGS],[ if test x$lyx_warning = xyes; then cat <conftest.C <&5 || CXX= -rm -f conftest.C conftest.o conftest.obj || true +dnl Usage: LYX_PROG_CLANG: set lyx_cv_prog_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], +[AC_TRY_COMPILE([], [ +#ifndef __clang__ + this is not clang +#endif +], +[lyx_cv_prog_clang=yes ; CLANG=yes], [lyx_cv_prog_clang=no ; CLANG=no])]) ]) -AC_DEFUN([LYX_PROG_CXX], -[AC_MSG_CHECKING([for a good enough C++ compiler]) -LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS]) +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++], + [lyx_cv_lib_stdcxx], +[AC_TRY_COMPILE([#include], [ +#if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__) + this is not libstdc++ +#endif +], +[lyx_cv_lib_stdcxx=yes], [lyx_cv_lib_stdcxx=no])]) +]) -if test -z "$CXX" ; then - AC_MSG_ERROR([Unable to find a good enough C++ compiler]) -fi -AC_MSG_RESULT($CXX) -AC_PROG_CXX -AC_PROG_CXXCPP +AC_DEFUN([LYX_PROG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +AC_LANG_PUSH(C++) +LYX_PROG_CLANG +LYX_LIB_STDCXX +AC_LANG_POP(C++) + +if test $lyx_cv_lib_stdcxx = "yes" ; then + AC_DEFINE(STD_STRING_USES_COW, 1, [std::string uses copy-on-write]) +else + if test $lyx_cv_prog_clang = "yes" ; then + AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++]) + fi +fi ### We might want to get or shut warnings. AC_ARG_ENABLE(warnings, @@ -191,6 +204,9 @@ 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 @@ -200,12 +216,12 @@ AC_ARG_ENABLE(optimization, case $enable_optimization in yes) if test $lyx_devel_version = yes ; then - lyx_opt=-O + lyx_optim=-O else - lyx_opt=-O2 + lyx_optim=-O2 fi;; - no) lyx_opt=;; - *) lyx_opt=${enable_optimization};; + no) lyx_optim=;; + *) lyx_optim=${enable_optimization};; esac AC_ARG_ENABLE(pch, @@ -229,54 +245,57 @@ if test "x$enable_assertions" = xyes ; then fi # set the compiler options correctly. +lyx_std_regex=no if test x$GXX = xyes; then - dnl Useful for global version info - gxx_version=`${CXX} -dumpversion` - CXX_VERSION="($gxx_version)" - - if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS="$ac_save_CXXFLAGS" + dnl clang++ pretends to be g++ 4.2.1; this is not useful + if test x$CLANG = xno; then + dnl Useful for global version info + gxx_version=`${CXX} -dumpversion` + CXX_VERSION="($gxx_version)" else - CFLAGS="$lyx_opt" - CXXFLAGS="$lyx_opt" - if test x$enable_debug = xyes ; then - CFLAGS="-g $CFLAGS" - CXXFLAGS="-g $CXXFLAGS" - fi - if test $build_type = gprof ; then - CFLAGS="-pg $CFLAGS" - CXXFLAGS="-pg $CXXFLAGS" - LDFLAGS="-pg $LDFLAGS" - fi - if test $build_type = profiling ; then - CFLAGS="$CFLAGS -fno-omit-frame-pointer" - CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer" - fi + gxx_version=clang fi - if test "$ac_env_CPPFLAGS_set" != set; then - if test x$enable_warnings = xyes ; then - case $gxx_version in - 3.1*|3.2*|3.3*) - CPPFLAGS="-W -Wall $CPPFLAGS" - ;; - *) - CPPFLAGS="-Wextra -Wall $CPPFLAGS " - ;; - esac - fi + + AM_CXXFLAGS="$lyx_optim" + if test x$enable_debug = xyes ; then + AM_CXXFLAGS="-g $AM_CXXFLAGS" + fi + if test $build_type = gprof ; then + AM_CXXFLAGS="$AM_CXXFLAGS -pg" + AM_LDFLAGS="$AM_LDFLAGS -pg" + fi + if test $build_type = profiling ; then + AM_CXXFLAGS="$AM_CXXFLAGS -fno-omit-frame-pointer" + fi + + if test x$USE_QT5 = xyes ; then + AS_CASE([$host], [*mingw*|*cygwin*], [], [AM_CXXFLAGS="-fPIC $AM_CXXFLAGS"]) + fi + dnl Warnings are for preprocessor too + if test x$enable_warnings = xyes ; then + case $gxx_version in + 3.1*|3.2*|3.3*) + AM_CPPFLAGS="$AM_CPPFLAGS -Wall -W" + ;; + 3.4*|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 fi case $gxx_version in - 3.1*) AM_CXXFLAGS="-finline-limit=500 ";; - 3.2*|3.3*) AM_CXXFLAGS="";; - 3.4*|4.*) - AM_CXXFLAGS="" - test $enable_pch = yes && lyx_pch_comp=yes - ;; - *) AM_CXXFLAGS="";; + 3.1*) AM_CXXFLAGS="$AM_CXXFLAGS -finline-limit=500";; + 3.2*|3.3*) ;; + *) 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 + dnl See http://clang-developers.42468.n3.nabble.com/libc-debug-mode-td3336742.html case $gxx_version in - 3.4*|4.*) + 3.1*|3.2*|3.3*) ;; + *) lyx_flags="$lyx_flags stdlib-debug" AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode]) AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode]) @@ -287,6 +306,7 @@ if test x$GXX = xyes; then case $gxx_version in 3.3*) lyx_flags="$lyx_flags concept-checks" + dnl FIXME check whether this makes sense with clang/libc++ AC_DEFINE(_GLIBCPP_CONCEPT_CHECKS, 1, [libstdc++ concept checking]) ;; 3.4*|4.*) @@ -296,18 +316,41 @@ if test x$GXX = xyes; then esac fi if test x$enable_cxx11 = xyes ; then + case $gxx_version in + 3.*|4.0*|4.1*|4.2*) AC_ERROR([There is no C++11 support in gcc 3.x]);; + 4.3*|4.4*|4.5*|4.6*) + lyx_flags="$lyx_flags c++11-mode" + AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++0x";; + clang) + dnl presumably all clang version support c++11. + lyx_flags="$lyx_flags c++11-mode" + dnl the deprecated-register warning is very annoying with Qt4.x right now. + AM_CXXFLAGS="$AM_CXXFLAGS -std=c++11 -Wno-deprecated-register";; + *) + lyx_flags="$lyx_flags c++11-mode" + AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++11" + ;; + esac + if test x$CLANG = xno || test $lyx_cv_lib_stdcxx = yes; then + dnl 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.3*|4.4*|4.5*|4.6*) - lyx_flags="$lyx_flags c++11-mode" - CXXFLAGS="-std=gnu++0x $CXXFLAGS" - ;; - 4.7*|4.8*) - lyx_flags="$lyx_flags c++11-mode" - CXXFLAGS="-std=gnu++11 $CXXFLAGS" - ;; + 3.*|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 + + 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 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 @@ -351,7 +394,11 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[ LIBS=$save_LIBS AC_LANG_POP(C++) BOOST_INCLUDES= - BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}" + if test $lyx_std_regex = yes ; then + BOOST_LIBS="-lboost_signals${BOOST_MT}" + else + BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}" + fi fi AC_SUBST(BOOST_INCLUDES) AC_SUBST(BOOST_LIBS)