File Revert-Replaced-Boost-regex-dependency-with-C-11-reg.patch of Package twinkle
From: Michal Kubecek <mkubecek@suse.cz>
Date: Tue, 14 Jul 2015 08:45:28 +0200
Subject: Revert "Replaced Boost regex dependency with C++11 regex"
Patch-mainline: Never, workaround for gcc 4.8 bug
This reverts commit 4ec69237e6b777df818bc95bd46a58448340b30d.
As std::regex is broken in gcc < 4.9, we need to stick with boost regex
for gcc 4.8 builds.
---
CMakeLists.txt | 3 ++-
README.md | 1 +
src/CMakeLists.txt | 2 +-
src/call_history.cpp | 6 +++---
src/gui/CMakeLists.txt | 2 +-
src/gui/numberconversionform.cpp | 4 ++--
src/gui/userprofileform.cpp | 4 ++--
src/mwi/simple_msg_sum_body.cpp | 20 ++++++++++----------
src/user.cpp | 8 ++++----
src/user.h | 8 ++++----
10 files changed, 30 insertions(+), 28 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d41f74945364..4bf8cbf9fce2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,6 +29,7 @@ find_package(LibSndfile REQUIRED)
find_package(Readline REQUIRED)
find_package(BISON REQUIRED)
find_package(FLEX REQUIRED)
+find_package(Boost REQUIRED COMPONENTS regex)
find_package(Commoncpp REQUIRED)
find_package(Ccrtp REQUIRED)
find_package(Ucommon REQUIRED)
@@ -42,8 +43,8 @@ if (WITH_QT4)
elseif (WITH_QT5)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5LinguistTools REQUIRED)
- find_package(Qt5Declarative REQUIRED)
find_package(Qt5Quick REQUIRED)
+ find_package(Qt5Declarative REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} ${Qt5Declarative_EXECUTABLE_COMPILE_FLAGS}")
include_directories(${Qt5Widgets_INCLUDES} ${Qt5Declarative_INCLUDES})
add_definitions(${Qt5Widgets_DEFINITIONS} ${Qt5Declarative_DEFINITIONS})
diff --git a/README.md b/README.md
index 15891ff05dcd..2caba485d321 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@ To compile Twinkle you need the following libraries:
* commoncpp2 and ucommon (version >= 1.4.2) - [GNU Common C++](http://www.gnu.org/software/commoncpp/)
* ccRTP (version >= 1.5.0) [GNU RTP Stack](http://www.gnu.org/software/ccrtp/)
* libxml2
+* Boost regex
* libsndfile
* Qt 4 or Qt 5
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b1b06071b4ab..ec3aa62206d8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -79,7 +79,7 @@ endif (WITH_QT4 OR WITH_QT5)
target_link_libraries(twinkle-console -lpthread -lresolv ${LibMagic_LIBRARY} ${LIBXML2_LIBRARIES}
${Readline_LIBRARY} ${ILBC_LIBRARIES} ${SPEEX_LIBRARIES} ${ZRTPCPP_LIBRARIES}
${CCRTP_LIBRARIES} ${COMMONCPP_LIBRARIES} ${UCOMMON_LIBRARIES} ${LIBSNDFILE_LIBRARY}
- ${ALSA_LIBRARY} ${G729_LIBRARY})
+ ${Boost_LIBRARIES} ${ALSA_LIBRARY} ${G729_LIBRARY})
install(TARGETS twinkle-console DESTINATION bin)
diff --git a/src/call_history.cpp b/src/call_history.cpp
index cf9ff5cbebd4..4fa4af789f11 100644
--- a/src/call_history.cpp
+++ b/src/call_history.cpp
@@ -296,9 +296,9 @@ bool t_call_record::populate_from_file_record(const vector<string> &v) {
// Check number of fields
if (v.size() != 20) return false;
- time_start = std::stoul(v[0], NULL, 10);
- time_answer = std::stoul(v[1], NULL, 10);
- time_end = std::stoul(v[2], NULL, 10);
+ time_start = strtoul(v[0].c_str(), NULL, 10);
+ time_answer = strtoul(v[1].c_str(), NULL, 10);
+ time_end = strtoul(v[2].c_str(), NULL, 10);
if (!set_direction(v[3])) return false;
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index c178b9c9aced..57b8a195813f 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -134,7 +134,7 @@ add_executable(twinkle ${TWINKLE_GUI-SRCS})
target_link_libraries(twinkle -lpthread -lresolv ${LibMagic_LIBRARY} ${LIBXML2_LIBRARIES}
${Readline_LIBRARY} ${ILBC_LIBRARIES} ${SPEEX_LIBRARIES} ${ZRTPCPP_LIBRARIES}
${CCRTP_LIBRARIES} ${COMMONCPP_LIBRARIES} ${UCOMMON_LIBRARIES} ${LIBSNDFILE_LIBRARY}
- ${ALSA_LIBRARY} ${qt_LIBS} ${G729_LIBRARY})
+ ${Boost_LIBRARIES} ${ALSA_LIBRARY} ${qt_LIBS} ${G729_LIBRARY})
install(TARGETS twinkle DESTINATION bin)
install(FILES ${twinkle_LANG} DESTINATION share/twinkle/lang)
diff --git a/src/gui/numberconversionform.cpp b/src/gui/numberconversionform.cpp
index f8ae64c59a30..af95dd2ff1a8 100644
--- a/src/gui/numberconversionform.cpp
+++ b/src/gui/numberconversionform.cpp
@@ -67,8 +67,8 @@ void NumberConversionForm::validate()
}
try {
- std::regex re(expr.toStdString());
- } catch (std::regex_error) {
+ boost::regex re(expr.toStdString());
+ } catch (boost::bad_expression) {
((t_gui *)ui)->cb_show_msg(this,
tr("Invalid regular expression.").toStdString(), MSG_CRITICAL);
exprLineEdit->setFocus();
diff --git a/src/gui/userprofileform.cpp b/src/gui/userprofileform.cpp
index 788d87b1b983..d7f39a0091ac 100644
--- a/src/gui/userprofileform.cpp
+++ b/src/gui/userprofileform.cpp
@@ -598,7 +598,7 @@ void UserProfileForm::populate()
int j = 0;
for (list<t_number_conversion>::reverse_iterator i = conversions.rbegin(); i != conversions.rend(); i++, j++)
{
- QTableWidgetItem* item = new QTableWidgetItem(QString::fromStdString(i->re));
+ QTableWidgetItem* item = new QTableWidgetItem(QString::fromStdString(i->re.str()));
conversionListView->setItem(j, 0, item);
item = new QTableWidgetItem(QString::fromStdString(i->fmt));
conversionListView->setItem(j, 1, item);
@@ -712,7 +712,7 @@ list<t_number_conversion> UserProfileForm::get_number_conversions()
item = conversionListView->item(0, 1);
c.fmt = item->text().toStdString();
conversions.push_back(c);
- } catch (std::regex_error) {
+ } catch (boost::bad_expression) {
// Should never happen as validity has been
// checked already. Just being defensive here.
}
diff --git a/src/mwi/simple_msg_sum_body.cpp b/src/mwi/simple_msg_sum_body.cpp
index 1d206092009e..33683f7a07ee 100644
--- a/src/mwi/simple_msg_sum_body.cpp
+++ b/src/mwi/simple_msg_sum_body.cpp
@@ -20,7 +20,7 @@
#include <iostream>
#include <cstdlib>
-#include <regex>
+#include <boost/regex.hpp>
#include "protocol.h"
#include "util.h"
@@ -43,20 +43,20 @@ bool t_msg_summary::parse(const string &s) {
// msg-summary-line = message-context-class HCOLON newmsgs SLASH oldmsgs
// [ LPAREN new-urgentmsgs SLASH old-urgentmsgs RPAREN ]
// This regex matches the part after HCOLON
- std::regex re("(\\d+)\\s*/\\s*(\\d+)(?:\\s*\\((\\d+)\\s*/\\s*(\\d+)\\s*\\))?");
+ boost::regex re("(\\d+)\\s*/\\s*(\\d+)(?:\\s*\\((\\d+)\\s*/\\s*(\\d+)\\s*\\))?");
- std::smatch m;
- if (!std::regex_match(s, m, re)) return false;
+ boost::smatch m;
+ if (!boost::regex_match(s, m, re)) return false;
if (m.size() == 3) {
- newmsgs = std::stoul(m.str(1), NULL, 10);
- oldmsgs = std::stoul(m.str(2), NULL, 10);
+ newmsgs = strtoul(m.str(1).c_str(), NULL, 10);
+ oldmsgs = strtoul(m.str(2).c_str(), NULL, 10);
return true;
} else if (m.size() == 5) {
- newmsgs = std::stoul(m.str(1), NULL, 10);
- oldmsgs = std::stoul(m.str(2), NULL, 10);
- newmsgs_urgent = std::stoul(m.str(3), NULL, 10);
- oldmsgs_urgent = std::stoul(m.str(4), NULL, 10);
+ newmsgs = strtoul(m.str(1).c_str(), NULL, 10);
+ oldmsgs = strtoul(m.str(2).c_str(), NULL, 10);
+ newmsgs_urgent = strtoul(m.str(3).c_str(), NULL, 10);
+ oldmsgs_urgent = strtoul(m.str(4).c_str(), NULL, 10);
return true;
}
diff --git a/src/user.cpp b/src/user.cpp
index 206cf7ef1719..a6a2a95a7c5e 100644
--- a/src/user.cpp
+++ b/src/user.cpp
@@ -309,7 +309,7 @@ bool t_user::parse_num_conversion(const string &value, t_number_conversion &c) {
try {
c.re.assign(l[0]);
c.fmt = l[1];
- } catch (std::regex_error) {
+ } catch (boost::bad_expression) {
// Invalid regular expression
log_file->write_header("t_user::parse_num_conversion",
LOG_NORMAL, LOG_WARNING);
@@ -2832,7 +2832,7 @@ bool t_user::write_config(const string &filename, string &error_msg) {
i != number_conversions.end(); i++)
{
config << FLD_NUMBER_CONVERSION << '=';
- config << escape(i->re, ',');
+ config << escape(i->re.str(), ',');
config << ',';
config << escape(i->fmt, ',');
config << endl;
@@ -3101,10 +3101,10 @@ string t_user::convert_number(const string &number, const list<t_number_conversi
for (list<t_number_conversion>::const_iterator i = l.begin();
i != l.end(); i++)
{
- std::smatch m;
+ boost::smatch m;
try {
- if (std::regex_match(number, m, std::regex(i->re))) {
+ if (boost::regex_match(number, m, i->re)) {
string result = m.format(i->fmt);
log_file->write_header("t_user::convert_number",
diff --git a/src/user.h b/src/user.h
index 2e9c2ca9b2a6..f78652d4a35b 100644
--- a/src/user.h
+++ b/src/user.h
@@ -30,7 +30,7 @@
#include "audio/audio_codecs.h"
#include "sockets/url.h"
#include "threads/mutex.h"
-#include <regex>
+#include "boost/regex.hpp"
// Forward declaration
class t_request;
@@ -91,10 +91,10 @@ enum t_g726_packing {
};
struct t_number_conversion {
- string re;
- string fmt;
+ boost::regex re;
+ string fmt;
- string str(void) const { return re + " --> " + fmt; }
+ string str(void) const { return re.str() + " --> " + fmt; }
};
--
2.4.5