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++.
|
dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
|
||||||
AC_DEFUN([LYX_LIB_STDCXX],
|
AC_DEFUN([LYX_LIB_STDCXX],
|
||||||
[AC_CACHE_CHECK([whether STL is libstdc++],
|
[AC_CACHE_CHECK([whether STL is libstdc++],
|
||||||
@ -284,6 +311,7 @@ LYX_CXX_CXX11_FLAGS
|
|||||||
LYX_LIB_STDCXX
|
LYX_LIB_STDCXX
|
||||||
LYX_LIB_STDCXX_CXX11_ABI
|
LYX_LIB_STDCXX_CXX11_ABI
|
||||||
LYX_CXX_USE_REGEX
|
LYX_CXX_USE_REGEX
|
||||||
|
LYX_CXX_USE_CALL_ONCE
|
||||||
AC_LANG_POP(C++)
|
AC_LANG_POP(C++)
|
||||||
|
|
||||||
if test $lyx_cv_lib_stdcxx = "yes" ; then
|
if test $lyx_cv_lib_stdcxx = "yes" ; then
|
||||||
|
@ -93,12 +93,24 @@ lyx::Converter const * setConverter(string const & from)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Show the error only once
|
// Show the error only once
|
||||||
|
#ifdef LYX_USE_STD_CALL_ONCE
|
||||||
|
// This is thread-safe.
|
||||||
static once_flag flag;
|
static once_flag flag;
|
||||||
call_once(flag, [&](){
|
call_once(flag, [&](){
|
||||||
LYXERR0("PreviewLoader::startLoading()\n"
|
LYXERR0("PreviewLoader::startLoading()\n"
|
||||||
<< "No converter from \"" << from
|
<< "No converter from \"" << from
|
||||||
<< "\" format has been defined.");
|
<< "\" 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user