mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
Use std::call_once only if it is actually available
This commit is contained in:
parent
e57e008e88
commit
41e409f8f7
@ -247,6 +247,33 @@ AC_DEFUN([LYX_CXX_USE_REGEX],
|
||||
])
|
||||
|
||||
|
||||
dnl Usage: LYX_CXX_USE_CALL_ONCE
|
||||
dnl check whether we can use std::call_once and set the
|
||||
dnl LYX_USE_STD_CALL_ONCE macro and conditional accordingly.
|
||||
AC_DEFUN([LYX_CXX_USE_CALL_ONCE],
|
||||
[AC_MSG_CHECKING([for std::call_once availability])
|
||||
save_CPPFLAGS=$CPPFLAGS
|
||||
CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
|
||||
save_CXXFLAGS=$CXXFLAGS
|
||||
CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS"
|
||||
AC_TRY_LINK(
|
||||
[
|
||||
#include <mutex>
|
||||
static std::once_flag flag;
|
||||
], [
|
||||
std::call_once(flag, [](){ return; });
|
||||
], [lyx_std_call_once=yes], [lyx_std_call_once=no])
|
||||
CXXFLAGS=$save_CXXFLAGS
|
||||
CPPFLAGS=$save_CPPFLAGS
|
||||
AC_MSG_RESULT([$lyx_std_call_once])
|
||||
|
||||
if test $lyx_std_call_once = yes ; then
|
||||
AC_DEFINE([LYX_USE_STD_CALL_ONCE], 1, [define to 1 if std::call_once is supported by the compiler])
|
||||
fi
|
||||
AM_CONDITIONAL([LYX_USE_STD_CALL_ONCE], test $lyx_std_call_once = yes)
|
||||
])
|
||||
|
||||
|
||||
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++],
|
||||
@ -284,6 +311,7 @@ LYX_CXX_CXX11_FLAGS
|
||||
LYX_LIB_STDCXX
|
||||
LYX_LIB_STDCXX_CXX11_ABI
|
||||
LYX_CXX_USE_REGEX
|
||||
LYX_CXX_USE_CALL_ONCE
|
||||
AC_LANG_POP(C++)
|
||||
|
||||
if test $lyx_cv_lib_stdcxx = "yes" ; then
|
||||
|
@ -93,12 +93,24 @@ lyx::Converter const * setConverter(string const & from)
|
||||
}
|
||||
|
||||
// Show the error only once
|
||||
#ifdef LYX_USE_STD_CALL_ONCE
|
||||
// This is thread-safe.
|
||||
static once_flag flag;
|
||||
call_once(flag, [&](){
|
||||
LYXERR0("PreviewLoader::startLoading()\n"
|
||||
<< "No converter from \"" << from
|
||||
<< "\" format has been defined.");
|
||||
});
|
||||
#else
|
||||
// This is not thread-safe.
|
||||
static bool first = true;
|
||||
if (first) {
|
||||
first = false;
|
||||
LYXERR0("PreviewLoader::startLoading()\n"
|
||||
<< "No converter from \"" << from
|
||||
<< "\" format has been defined.");
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user