Since now minimum supported GCC is 4.9.
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
project(boost)
-
-if(LYX_USE_STD_REGEX)
- message(STATUS "Using std regex")
-else()
- add_subdirectory(regex)
-endif()
-
+message(STATUS "Using std regex")
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}")
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()
# 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)
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=<config.h>)
- 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=<config.h>)
- 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=<config.h>)
+include_directories(${TOP_SRC_DIR}/3rdparty/boost)
if(WIN32)
if(LYX_CONSOLE)
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)
])
-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 <regex>
- #include <iostream>
-
- #include <string.h>
-
- typedef std::regex_iterator<const char *> 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.
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++)
#cmakedefine LYX_MERGE_FILES 1
-#cmakedefine LYX_USE_STD_REGEX 1
-
// Define if callstack can be printed
#cmakedefine LYX_CALLSTACK_PRINTING 1
// $& 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
}
// $& 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
}
#ifndef LYX_REGEXP_H
#define LYX_REGEXP_H
-#ifdef LYX_USE_STD_REGEX
-# include <regex>
-// <regex> 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 <boost/regex.hpp>
-# define LR_NS boost
-#endif
+#include <regex>
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