X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=config%2Flyxinclude.m4;h=33c59794162ebb9c0eff9e290876755ab6eb541a;hb=cd3b040a70d4a3bcff72ebc688d485b48b92b7ee;hp=d1b78f95d210d81adfa7ff8782874cedb6ba1f32;hpb=aaacbe579b8b4467f8904890e403bd26cbe6b428;p=lyx.git diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index d1b78f95d2..33c5979416 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -8,9 +8,10 @@ dnl Usage LYX_CHECK_VERSION Displays version of LyX being built and dnl sets variable "build_type" AC_DEFUN([LYX_CHECK_VERSION],[ echo "configuring LyX version" AC_PACKAGE_VERSION + +AC_MSG_CHECKING([for build type]) lyx_devel_version=no lyx_prerelease=no -AC_MSG_CHECKING([for build type]) AC_ARG_ENABLE(build-type, AC_HELP_STRING([--enable-build-type=TYPE],[set build setting according to TYPE=rel(ease), pre(release), dev(elopment), prof(iling), gprof]), [case $enableval in @@ -140,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]) @@ -149,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, @@ -219,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" @@ -264,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" @@ -276,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.*) @@ -285,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" @@ -311,28 +357,62 @@ AC_DEFUN([LYX_USE_INCLUDED_BOOST],[ [lyx_cv_with_included_boost=yes]) 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 - AC_LANG_PUSH(C++) - save_LIBS=$LIBS + if test x$lyx_cv_with_included_boost = xyes ; then + BOOST_INCLUDES='-I$(top_srcdir)/boost' + BOOST_LIBS='$(top_builddir)/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" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include ], + [boost::signal s;])], + [AC_MSG_RESULT([yes]) + BOOST_MT="-mt"], + [AC_MSG_RESULT([no]) + AC_MSG_CHECKING([for plain boost libraries]) + LIBS="$save_LIBS -lboost_signals -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([#include ], + [boost::signal s;])], + [AC_MSG_RESULT([yes]) + BOOST_MT=""], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)]) + ]) + ]) + LIBS=$save_LIBS + AC_LANG_POP(C++) + BOOST_INCLUDES= + BOOST_LIBS="-lboost_regex${BOOST_MT} -lboost_signals${BOOST_MT}" + fi + AC_SUBST(BOOST_INCLUDES) + AC_SUBST(BOOST_LIBS) +]) - LIBS="$save_LIBS -lboost_signals -lm" - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [boost::signal s;])], [lyx_boost_plain=yes], []) - LIBS="$save_LIBS -lboost_signals-mt -lm $LIBTHREAD" - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [boost::signal s;])], [lyx_boost_mt=yes], []) - LIBS=$save_LIBS - AC_LANG_POP(C++) - - if test x$lyx_boost_mt = xyes ; then - BOOST_MT="-mt" - else - BOOST_MT="" - if test x$lyx_boost_plain != xyes ; then - AC_MSG_ERROR([cannot find suitable boost library (do not use --without-included-boost)]) - fi - fi - AC_SUBST(BOOST_MT) - fi +dnl Usage: LYX_CHECK_CALLSTACK_PRINTING: define LYX_CALLSTACK_PRINTING if the +dnl necessary APIs are available to print callstacks. +AC_DEFUN([LYX_CHECK_CALLSTACK_PRINTING], +[AC_CACHE_CHECK([whether printing callstack is possible], + [lyx_cv_callstack_printing], +[AC_TRY_COMPILE([ +#include +#include +], [ + void* array[200]; + size_t size = backtrace(array, 200); + backtrace_symbols(array, size); + int status = 0; + abi::__cxa_demangle("abcd", 0, 0, &status); +], +[lyx_cv_callstack_printing=yes], [lyx_cv_callstack_printing=no])]) +if test x"$lyx_cv_callstack_printing" = xyes; then + AC_DEFINE([LYX_CALLSTACK_PRINTING], 1, + [Define if callstack can be printed]) +fi ]) @@ -463,6 +543,7 @@ AC_ARG_WITH(packaging, *) lyx_use_packaging=posix;; esac]) AC_MSG_RESULT($lyx_use_packaging) +lyx_install_posix=false lyx_install_macosx=false lyx_install_cygwin=false lyx_install_windows=false