From 6f34a8a6407823d6ef746f484a3100392f45d988 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Tue, 23 Dec 2014 22:18:08 +0100 Subject: [PATCH] Get rid of tr1 support As discussed on the list. We don't need it anymore, either we have a modern compiler that supports C++11, or we fall back to boost. I kept and adjusted the regex #define, since we cannot use std regex completely yet. --- CMakeLists.txt | 23 +++++++-------- boost/libs/CMakeLists.txt | 4 +-- configure.ac | 16 +++++----- development/cmake/config.h.cmake | 3 +- src/support/bind.h | 12 +------- src/support/functional.h | 12 +------- src/support/regex.h | 50 +++++++++++++------------------- src/support/shared_ptr.h | 12 +------- 8 files changed, 45 insertions(+), 87 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 86f6a01806..978e63c536 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -246,14 +246,12 @@ set(LYX_GCC11_MODE) if(UNIX OR MINGW) execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) message(STATUS "Using GCC version ${GCC_VERSION}") - if(NOT GCC_VERSION VERSION_LESS 4.4) - set(LYX_USE_TR1 1) - # GCC <= 4.5 does not support regex: there are linker errors - # http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1 - # and in gcc are unusable in versions less than 4.9.0 +# disabled because of missing match_partial +# if(GCC_VERSION VERSION_LESS 4.9) + # in gcc is unusable in versions less than 4.9.0 # see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631 - set(LYX_USE_TR1_REGEX 0) - endif() + set(LYX_USE_STD_REGEX 0) +# endif() if (LYX_ENABLE_CXX11) find_package(CXX11Compiler) if(NOT CXX11COMPILER_FOUND) @@ -262,10 +260,11 @@ if(UNIX OR MINGW) set(LYX_GCC11_MODE "${CXX11_FLAG}") endif() else() - if(MSVC10) - set(LYX_USE_TR1 1) - #set(LYX_USE_TR1_REGEX 1) #TODO should we use it in ECMAScript mode? - endif() +# disabled because of missing match_partial + set(LYX_USE_STD_REGEX 0) +# if(MSVC10) +# set(LYX_USE_STD_REGEX 1) #TODO should we use it in ECMAScript mode? +# endif() endif() @@ -641,7 +640,7 @@ if(LYX_EXTERNAL_BOOST) message(FATAL_ERROR "Boost not found" ${Boost_ERROR_REASON}) endif() else() - if(LYX_USE_TR1_REGEX) + if(LYX_USE_STD_REGEX) set(Lyx_Boost_Libraries boost_signals) else() set(Lyx_Boost_Libraries boost_signals boost_regex) diff --git a/boost/libs/CMakeLists.txt b/boost/libs/CMakeLists.txt index 67a68498af..2417d764af 100644 --- a/boost/libs/CMakeLists.txt +++ b/boost/libs/CMakeLists.txt @@ -7,8 +7,8 @@ project(boost) -if(LYX_USE_TR1_REGEX) - message(STATUS "Using TR1 regex") +if(LYX_USE_STD_REGEX) + message(STATUS "Using std regex") else() add_subdirectory(regex) endif() diff --git a/configure.ac b/configure.ac index 562eba4d9b..6a735b1a5c 100644 --- a/configure.ac +++ b/configure.ac @@ -284,15 +284,15 @@ char * strerror(int n); #define BOOST_NO_WSTRING 1 #define BOOST_SIGNALS_NO_DEPRECATION_WARNING 1 -// TR1 regex not supported in GCC <= 4.5 -// and in gcc are unusable in versions less than 4.9.0 +// in gcc is unusable in versions less than 4.9.0 // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631 -// clang defines __GNUC__ but libc++ does not have tr1 -#ifndef LYX_USE_TR1 -# if __GNUC__ == 4 && !defined(USE_LLVM_LIBCPP) -# define LYX_USE_TR1 -# endif -#endif +// clang defines __GNUC__ but how do the versions match? +// disabled because of missing match_partial +//#ifndef LYX_USE_STD_REGEX +//# if (__GNUC__ == 4 && __GNUC_MINOR__ >= 9) || __GNUC__ > 4 || defined(USE_LLVM_LIBCPP) +//# define LYX_USE_STD_REGEX +//# endif +//#endif #ifdef __CYGWIN__ # define NOMINMAX diff --git a/development/cmake/config.h.cmake b/development/cmake/config.h.cmake index ab95cfa4fb..1c9456460e 100644 --- a/development/cmake/config.h.cmake +++ b/development/cmake/config.h.cmake @@ -54,8 +54,7 @@ #cmakedefine LYX_MERGE_FILES 1 -#cmakedefine LYX_USE_TR1 1 -#cmakedefine LYX_USE_TR1_REGEX 1 +#cmakedefine LYX_USE_STD_REGEX 1 // Define if callstack can be printed #cmakedefine LYX_CALLSTACK_PRINTING 1 diff --git a/src/support/bind.h b/src/support/bind.h index 1931b163ec..08dd71a885 100644 --- a/src/support/bind.h +++ b/src/support/bind.h @@ -14,17 +14,7 @@ #include "support/functional.h" -#ifdef LYX_USE_TR1 - -#define LYX_BIND_NS std::tr1 - -namespace lyx -{ - using std::tr1::placeholders::_1; - using std::tr1::placeholders::_2; -} - -#elif __cplusplus >= 201103L +#if __cplusplus >= 201103L #define LYX_BIND_NS std diff --git a/src/support/functional.h b/src/support/functional.h index bb60029611..b86551d6f6 100644 --- a/src/support/functional.h +++ b/src/support/functional.h @@ -12,17 +12,7 @@ #ifndef LYX_FUNCTIONAL_H #define LYX_FUNCTIONAL_H -#ifdef LYX_USE_TR1 - -#include - -#ifdef __GNUC__ -#include -#endif - -#define LYX_FUNCTIONAL_NS std::tr1 - -#elif __cplusplus >= 201103L +#if __cplusplus >= 201103L #include #define LYX_FUNCTIONAL_NS std diff --git a/src/support/regex.h b/src/support/regex.h index eb3b679a80..db365ca4e6 100644 --- a/src/support/regex.h +++ b/src/support/regex.h @@ -12,62 +12,51 @@ #ifndef LYX_REGEXP_H #define LYX_REGEXP_H -#if defined(LYX_USE_TR1) && defined(LYX_USE_TR1_REGEX) +#if __cplusplus >= 201103L && defined(LYX_USE_STD_REGEX) +# include # ifdef _MSC_VER -# include # define match_partial _Match_partial namespace lyx { // inheriting 'private' to see which functions are used and if there are // other ECMAScrip defaults - class regex : private std::tr1::regex + class regex : private std::regex { public: regex() {} - regex(const regex& rhs) : std::tr1::regex(rhs) {} + regex(const regex& rhs) : std::regex(rhs) {} template - regex(T t) : std::tr1::regex(t, std::tr1::regex_constants::grep) {} + regex(T t) : std::regex(t, std::regex_constants::grep) {} template - void assign(T t) { std::tr1::regex::assign(t, std::tr1::regex_constants::grep); } + void assign(T t) { std::regex::assign(t, std::regex_constants::grep); } template - void assign(T t, V v) { std::tr1::regex::assign(t, v); } - const std::tr1::regex& toTr1() const { return *this; } + void assign(T t, V v) { std::regex::assign(t, v); } + const std::regex& toStd() const { return *this; } }; template - bool regex_match(T t, const regex& r) { return std::tr1::regex_match(t, r.toTr1()); } + bool regex_match(T t, const regex& r) { return std::regex_match(t, r.toStd()); } template - bool regex_match(T t, V v, const regex& r) { return std::tr1::regex_match(t, v, r.toTr1()); } + bool regex_match(T t, V v, const regex& r) { return std::regex_match(t, v, r.toStd()); } template - bool regex_match(T t, V v, H h, const regex& r, U u) { return std::tr1::regex_match(t, v, h, r.toTr1(), u); } + bool regex_match(T t, V v, H h, const regex& r, U u) { return std::regex_match(t, v, h, r.toStd(), u); } template - std::string regex_replace(T t, const regex& r, V v) { return std::tr1::regex_replace(t, r.toTr1(), v); } + std::string regex_replace(T t, const regex& r, V v) { return std::regex_replace(t, r.toStd(), v); } //template - //std::string regex_replace(T t, V v, U u, const regex& r, H h) { return std::tr1::regex_replace(t, v, u, r.toTr1(), h); } + //std::string regex_replace(T t, V v, U u, const regex& r, H h) { return std::regex_replace(t, v, u, r.toStd(), h); } template - bool regex_search(T t, const regex& r) { return std::tr1::regex_search(t, r.toTr1()); } + bool regex_search(T t, const regex& r) { return std::regex_search(t, r.toStd()); } template - bool regex_search(T t, V v, const regex& r) { return std::tr1::regex_search(t, v, r.toTr1()); } + bool regex_search(T t, V v, const regex& r) { return std::regex_search(t, v, r.toStd()); } template - bool regex_search(T t, V v, U u, const regex& r) { return std::tr1::regex_search(t, v, u, r.toTr1()); } + bool regex_search(T t, V v, U u, const regex& r) { return std::regex_search(t, v, u, r.toStd()); } - struct sregex_iterator : std::tr1::sregex_iterator + struct sregex_iterator : std::sregex_iterator { sregex_iterator() {} template - sregex_iterator(T t, V v, const regex& r) : std::tr1::sregex_iterator(t, v, r.toTr1()) {} + sregex_iterator(T t, V v, const regex& r) : std::sregex_iterator(t, v, r.toStd()) {} }; } # else -# include -// TODO no match_partial in TR1, how to replace? -# endif -# define LR_NS std::tr1 -namespace lyx { -using LR_NS::regex; -using LR_NS::regex_match; -using LR_NS::sregex_iterator; -} -#elif LYX_USE_TR1_REGEX -# include // in gcc is unusable in versions less than 4.9.0 // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631 // TODO no match_partial in std, how to replace? @@ -77,7 +66,8 @@ using LR_NS::regex; using LR_NS::regex_match; using LR_NS::sregex_iterator; } -#else +# endif +#else # include # define LR_NS boost namespace lyx { diff --git a/src/support/shared_ptr.h b/src/support/shared_ptr.h index 874a6cde91..04dfc501a6 100644 --- a/src/support/shared_ptr.h +++ b/src/support/shared_ptr.h @@ -12,17 +12,7 @@ #ifndef LYX_SHARED_PTR_H #define LYX_SHARED_PTR_H -#ifdef LYX_USE_TR1 - -#include - -#ifdef __GNUC__ -#include -#endif - -#define LYX_SHAREDPTR_NS std::tr1 - -#elif __cplusplus >= 201103L +#if __cplusplus >= 201103L #include #define LYX_SHAREDPTR_NS std