X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=config%2Flyxinclude.m4;h=33c59794162ebb9c0eff9e290876755ab6eb541a;hb=c1c439b94dd6d5802e9a48b8c4e45c13fad6f869;hp=6b8d7a5e184d22bbc635f61818fa7ee3c54fd345;hpb=dc7ef3c81ff6e906c41da5ad40117ab87ac214da;p=lyx.git diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index 6b8d7a5e18..33c5979416 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 @@ -151,6 +141,32 @@ 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])]) +]) + + +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])]) +]) + + 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]) @@ -160,8 +176,20 @@ if test -z "$CXX" ; then fi AC_MSG_RESULT($CXX) -AC_PROG_CXX -AC_PROG_CXXCPP +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, @@ -230,9 +258,12 @@ fi # set the compiler options correctly. if test x$GXX = xyes; then - dnl Useful for global version info - gxx_version=`${CXX} -dumpversion` - CXX_VERSION="($gxx_version)" + 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)" + fi if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS="$ac_save_CXXFLAGS" @@ -275,6 +306,8 @@ if test x$GXX = xyes; then *) AM_CXXFLAGS="";; 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.*) lyx_flags="$lyx_flags stdlib-debug" @@ -287,6 +320,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,6 +330,7 @@ if test x$GXX = xyes; then esac fi if test x$enable_cxx11 = xyes ; then + dnl FIXME: check what to do with clang (is anything needed at all?) case $gxx_version in 4.3*|4.4*|4.5*|4.6*) lyx_flags="$lyx_flags c++11-mode"