From: Yuriy Skalko Date: Sat, 21 Nov 2020 18:11:23 +0000 (+0200) Subject: Always use std::regex X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=f3ec89cfa15feae8aa3185413eda55f28cc6551e;p=features.git Always use std::regex Since now minimum supported GCC is 4.9. --- diff --git a/3rdparty/Makefile.am b/3rdparty/Makefile.am index e21e1cbc01..ec12adb883 100644 --- a/3rdparty/Makefile.am +++ b/3rdparty/Makefile.am @@ -3,11 +3,8 @@ include $(top_srcdir)/config/common.am DIST_SUBDIRS = boost dtl hunspell mythes libiconv zlib if USE_INCLUDED_BOOST -if LYX_USE_STD_REGEX -else BOOST = boost endif -endif if USE_INCLUDED_HUNSPELL HUNSPELL = hunspell diff --git a/3rdparty/boost/libs/CMakeLists.txt b/3rdparty/boost/libs/CMakeLists.txt index d2fdd7f644..84da81e65e 100644 --- a/3rdparty/boost/libs/CMakeLists.txt +++ b/3rdparty/boost/libs/CMakeLists.txt @@ -6,10 +6,4 @@ project(boost) - -if(LYX_USE_STD_REGEX) - message(STATUS "Using std regex") -else() - add_subdirectory(regex) -endif() - +message(STATUS "Using std regex") diff --git a/CMakeLists.txt b/CMakeLists.txt index b35f2f5f8b..02a1b3000d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -380,13 +380,7 @@ unset(LYX_GCC11_MODE) if(UNIX OR MINGW) if (CMAKE_CXX_COMPILER_ID MATCHES "^([cC]lang|AppleClang)$") # ignore the GCC_VERSION for clang - # and use the resulting CXX11_STD_REGEX found in FindCXX11Compiler.cmake message(STATUS "Using clang") - if(CXX11_STD_REGEX) - set(LYX_USE_STD_REGEX 1) - else() - set(LYX_USE_STD_REGEX 0) - endif() else() execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpfullversion OUTPUT_VARIABLE GCC_VERSION ERROR_VARIABLE _error RESULT_VARIABLE _err OUTPUT_STRIP_TRAILING_WHITESPACE) #message(STATUS "dumpfullversion: error = ${_error}, result = ${_err}") @@ -399,7 +393,6 @@ if(UNIX OR MINGW) if(GCC_VERSION VERSION_LESS 4.9) message(FATAL_ERROR "gcc >= 4.9 is required.") endif() - set(LYX_USE_STD_REGEX 1) endif() set(LYX_GCC11_MODE "${CXX11_FLAG}") else() @@ -407,7 +400,6 @@ else() # Drop support for msvc versions prior to 1900 (Visual Studio 2015) message(FATAL_ERROR "Visual Studio >= 2015 is required.") endif() - set(LYX_USE_STD_REGEX 1) endif() if(LYX_3RDPARTY_BUILD) @@ -941,40 +933,12 @@ if(NOT LYX_EXTERNAL_DTL) add_subdirectory(3rdparty/dtl) endif() -if(LYX_USE_STD_REGEX) - # Set only include path. - # Use internal boost, which is known to exist - # we don't need any libraries - set(Lyx_Boost_Libraries) - add_definitions(-DBOOST_USER_CONFIG=) - include_directories(${TOP_SRC_DIR}/3rdparty/boost) -else() - # Using boost-regex - if(LYX_EXTERNAL_BOOST) - message(STATUS "Searching for external boost") - find_package(Boost COMPONENTS regex) - if(Boost_FOUND) - message(STATUS "Boost found") - message(STATUS "Boost-libs = ${Boost_LIBRARIES}") - set(Lyx_Boost_Libraries ${Boost_LIBRARIES}) - if (LYX_STDLIB_DEBUG OR LYX_DEBUG_GLIBC OR LYX_DEBUG_GLIBC_PEDANTIC) - # Comment from Jean-Marc Lasgouttes: - # In general, system boost libraries are incompatible with - # the use of stdlib-debug in libstdc++. See ticket #9736 for - # details. - message(FATAL_ERROR "Compiling LyX with stdlib-debug and system boost libraries may lead to crashes. Consider using '-DLYX_STDLIB_DEBUG=OFF -DLYX_DEBUG_GLIBC=OFF -DLYX_DEBUG_GLIBC_PEDANTIC=OFF' or using '-DLYX_EXTERNAL_BOOST=OFF'") - endif() - else() - message(FATAL_ERROR "Boost not found" ${Boost_ERROR_REASON}) - endif() - else() - # Using included boost - set(Lyx_Boost_Libraries boost_regex) - add_definitions(-DBOOST_USER_CONFIG=) - include_directories(${TOP_SRC_DIR}/3rdparty/boost) - add_subdirectory(3rdparty/boost "${TOP_BINARY_DIR}/3rdparty/boost") - endif() -endif() +# Set only include path. +# Use internal boost, which is known to exist +# we don't need any libraries +set(Lyx_Boost_Libraries) +add_definitions(-DBOOST_USER_CONFIG=) +include_directories(${TOP_SRC_DIR}/3rdparty/boost) if(WIN32) if(LYX_CONSOLE) @@ -1175,10 +1139,6 @@ if(QTVERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*") MATH(EXPR QT4_VERSION "(${CMAKE_MATCH_1}<<16)|(${CMAKE_MATCH_2}<<8)|${CMAKE_MATCH_3}") endif() -if (NOT HAVE_REGEX) - set(LYX_USE_STD_REGEX 0) -endif() - set (cmd ${CMAKE_CTEST_COMMAND}) if (MSVC) diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index 268c501dea..46b56171e4 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -213,46 +213,6 @@ AC_DEFUN([LYX_CXX_CXX11_FLAGS], ]) -dnl Usage: LYX_CXX_USE_REGEX -dnl decide whether we want to use std::regex and set the -dnl LYX_USE_STD_REGEX macro and conditional accordingly. -AC_DEFUN([LYX_CXX_USE_REGEX], -[AC_ARG_ENABLE(std-regex, - AS_HELP_STRING([--enable-std-regex],[use std::regex instead of boost::regex (default is autodetected)]), - [lyx_std_regex=$enableval], - [AC_MSG_CHECKING([for correct regex implementation]) - save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS" - save_CXXFLAGS=$CXXFLAGS - CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" - # The following code snippet has been taken taken from example in - # http://stackoverflow.com/questions/8561850/compile-stdregex-iterator-with-gcc - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - - #include - - typedef std::regex_iterator Myiter; - ]], [[ - const char *pat = "axayaz"; - Myiter::regex_type rx("a"); - Myiter next(pat, pat + strlen(pat), rx); - Myiter end; - ]])],[lyx_std_regex=yes],[lyx_std_regex=no]) - CXXFLAGS=$save_CXXFLAGS - CPPFLAGS=$save_CPPFLAGS - AC_MSG_RESULT([$lyx_std_regex]) - ]) - - if test $lyx_std_regex = yes ; then - lyx_flags="$lyx_flags std-regex" - AC_DEFINE([LYX_USE_STD_REGEX], 1, [define to 1 if std::regex should be preferred to boost::regex]) - fi - AM_CONDITIONAL([LYX_USE_STD_REGEX], test $lyx_std_regex = yes) -]) - - 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. @@ -319,7 +279,6 @@ LYX_PROG_CLANG LYX_CXX_CXX11_FLAGS($enable_cxx_mode) LYX_LIB_STDCXX LYX_LIB_STDCXX_CXX11_ABI -LYX_CXX_USE_REGEX LYX_CXX_USE_CALL_ONCE AC_LANG_POP(C++) diff --git a/development/cmake/config.h.cmake b/development/cmake/config.h.cmake index 35124161fd..15bceaac46 100644 --- a/development/cmake/config.h.cmake +++ b/development/cmake/config.h.cmake @@ -50,8 +50,6 @@ #cmakedefine LYX_MERGE_FILES 1 -#cmakedefine LYX_USE_STD_REGEX 1 - // Define if callstack can be printed #cmakedefine LYX_CALLSTACK_PRINTING 1 diff --git a/src/frontends/qt/GuiCitation.cpp b/src/frontends/qt/GuiCitation.cpp index c66a6d372c..7a402ed975 100644 --- a/src/frontends/qt/GuiCitation.cpp +++ b/src/frontends/qt/GuiCitation.cpp @@ -991,19 +991,10 @@ static docstring escape_special_chars(docstring const & expr) // $& is an ECMAScript format expression that expands to all // of the current match -#ifdef LYX_USE_STD_REGEX // To prefix a matched expression with a single literal backslash, we // need to escape it for the C++ compiler and use: // FIXME: UNICODE return from_utf8(lyx::regex_replace(to_utf8(expr), reg, string("\\$&"))); -#else - // A backslash in the format string starts an escape sequence in boost. - // Thus, to prefix a matched expression with a single literal backslash, - // we need to give two backslashes to the regex engine, and escape both - // for the C++ compiler and use: - // FIXME: UNICODE - return from_utf8(lyx::regex_replace(to_utf8(expr), reg, string("\\\\$&"))); -#endif } diff --git a/src/frontends/tests/biblio.cpp b/src/frontends/tests/biblio.cpp index 97ae4a9eb7..3696598a3f 100644 --- a/src/frontends/tests/biblio.cpp +++ b/src/frontends/tests/biblio.cpp @@ -20,17 +20,9 @@ string const escape_special_chars(string const & expr) // $& is a ECMAScript format expression that expands to all // of the current match -#ifdef LYX_USE_STD_REGEX // To prefix a matched expression with a single literal backslash, we // need to escape it for the C++ compiler and use: return lyx::regex_replace(expr, reg, "\\$&"); -#else - // A backslash in the format string starts an escape sequence in boost. - // Thus, to prefix a matched expression with a single literal backslash, - // we need to give two backslashes to the regex engine, and escape both - // for the C++ compiler and use: - return lyx::regex_replace(expr, reg, "\\\\$&"); -#endif } diff --git a/src/support/regex.h b/src/support/regex.h index 96498708fc..491044ca1f 100644 --- a/src/support/regex.h +++ b/src/support/regex.h @@ -12,45 +12,32 @@ #ifndef LYX_REGEXP_H #define LYX_REGEXP_H -#ifdef LYX_USE_STD_REGEX -# include -// in gcc is unusable in versions less than 4.9.0 -// see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631 -# define LR_NS std -#else -# include -# define LR_NS boost -#endif +#include namespace lyx { -using LR_NS::regex; -using LR_NS::regex_match; -using LR_NS::regex_replace; -using LR_NS::regex_search; -using LR_NS::sregex_iterator; -using LR_NS::smatch; -using LR_NS::basic_regex; -using LR_NS::regex_error; -using LR_NS::match_results; + +using std::regex; +using std::regex_match; +using std::regex_replace; +using std::regex_search; +using std::sregex_iterator; +using std::smatch; +using std::basic_regex; +using std::regex_error; +using std::match_results; namespace regex_constants { -using namespace LR_NS::regex_constants; -using LR_NS::regex_constants::match_flag_type; + +using namespace std::regex_constants; +using std::regex_constants::match_flag_type; + } // namespace regex_constants } // namespace lyx -#undef LR_NS - -#ifdef LYX_USE_STD_REGEX // Match Begin and End of String when using ECMAScript (default std::regex) #define REGEX_BOS "^" #define REGEX_EOS "$" -#else -// Match Begin and End of String when using Perl RE (default boost::regex) -#define REGEX_BOS "\\`" -#define REGEX_EOS "\\'" -#endif -#endif +#endif // LYX_REGEXP_H