diff --git a/package/synergy/0003-Fix-build-with-gcc-6.patch b/package/synergy/0003-Fix-build-with-gcc-6.patch new file mode 100644 index 0000000000..843078fe63 --- /dev/null +++ b/package/synergy/0003-Fix-build-with-gcc-6.patch @@ -0,0 +1,86 @@ +From b79d478c21ed6af20554ead97da72de845dc3206 Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Sat, 25 Feb 2017 21:57:19 +0100 +Subject: [PATCH] Fix build with gcc 6 + +Gcc 6.x defaults to C++14, and the iostream operator bool behaviour changed +in C++11. In previous versions, a somewhat odd operator void* was used to +return the status of the stream as a pointer. Since C++11 a more sensible +operator bool is used to return the stream staus. + +For details, see: + +http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool + +The code in CConfigReadContext assumes the pre-C++11 behaviour and provides +its own operator void overload to return the status of the embedded +iostream. With C++11, iostream no longer provides this overload, breaking +the build: + +CConfig.cpp: In member function 'CConfigReadContext::operator void*() const': +CConfig.cpp:1851:9: error: cannot convert 'std::istream {aka std::basic_istream}' to 'void*' in return + return m_stream; + +To fix it, backport part of upstream commit 3d963bfbe7897d0a33ad (possible +fix for mavericks) which changes the code to simply provide a getStream() +method which returns a reference to the embedded stream and the calling code +is changed to use operator bool on the returned stream, making the code +compatible with both old and new compilers. + +This upstream commit is part of the 1.6.0 release, so can be dropped when +the version is bumped. + +Signed-off-by: Peter Korsgaard +--- + lib/server/CConfig.cpp | 7 +------ + lib/server/CConfig.h | 2 +- + 2 files changed, 2 insertions(+), 7 deletions(-) + +diff --git a/lib/server/CConfig.cpp b/lib/server/CConfig.cpp +index a502fe78..d67dde20 100644 +--- a/lib/server/CConfig.cpp ++++ b/lib/server/CConfig.cpp +@@ -607,7 +607,7 @@ void + CConfig::read(CConfigReadContext& context) + { + CConfig tmp; +- while (context) { ++ while (context.getStream()) { + tmp.readSection(context); + } + *this = tmp; +@@ -1846,11 +1846,6 @@ CConfigReadContext::getLineNumber() const + return m_line; + } + +-CConfigReadContext::operator void*() const +-{ +- return m_stream; +-} +- + bool + CConfigReadContext::operator!() const + { +diff --git a/lib/server/CConfig.h b/lib/server/CConfig.h +index c0d2faa8..0ee453cb 100644 +--- a/lib/server/CConfig.h ++++ b/lib/server/CConfig.h +@@ -480,7 +480,6 @@ public: + bool readLine(CString&); + UInt32 getLineNumber() const; + +- operator void*() const; + bool operator!() const; + + OptionValue parseBoolean(const CString&) const; +@@ -502,6 +501,7 @@ public: + IPlatformScreen::CButtonInfo* + parseMouse(const CString& mouse) const; + KeyModifierMask parseModifier(const CString& modifiers) const; ++ std::istream& getStream() const { return m_stream; }; + + private: + // not implemented +-- +2.11.0 +