From 03c244cc3dcb8078a30a8d9d4b70476fabe0dd19 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 3 Mar 2018 22:40:56 +0000 Subject: [PATCH] games/spring: unbreak with boost 1.66 PR: 224124 Obtained from: upstream Approved by: portmgr blanket --- games/spring/Makefile | 2 - games/spring/files/patch-boost-1.66 | 184 ++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+), 2 deletions(-) create mode 100644 games/spring/files/patch-boost-1.66 diff --git a/games/spring/Makefile b/games/spring/Makefile index 07d3da190722..95564a86a994 100644 --- a/games/spring/Makefile +++ b/games/spring/Makefile @@ -14,8 +14,6 @@ COMMENT= Project aiming to create a new and versatile RTS Engine LICENSE= GPLv2 -BROKEN= fails to build with boost 1.66, see bug 224124 - LIB_DEPENDS= libfreetype.so:print/freetype2 \ libboost_thread.so:devel/boost-libs \ libIL.so:graphics/devil \ diff --git a/games/spring/files/patch-boost-1.66 b/games/spring/files/patch-boost-1.66 new file mode 100644 index 000000000000..69ac45e63ceb --- /dev/null +++ b/games/spring/files/patch-boost-1.66 @@ -0,0 +1,184 @@ +https://github.com/spring/spring/commit/a61970779994 +https://github.com/spring/spring/commit/f2f84f38e04a +https://github.com/spring/spring/commit/318c003c7273 +https://github.com/spring/spring/commit/5048e2a3446c + +--- rts/Net/AutohostInterface.cpp.orig 2014-10-07 20:09:51 UTC ++++ rts/Net/AutohostInterface.cpp +@@ -116,68 +116,60 @@ std::string AutohostInterface::TryBindSocket( + const std::string& remoteIP, int remotePort, + const std::string& localIP, int localPort) + { +- std::string errorMsg = ""; ++ std::string errorMsg; + + ip::address localAddr; + ip::address remoteAddr; + boost::system::error_code err; ++ + try { + socket.open(ip::udp::v6(), err); // test IP v6 support ++ + const bool supportsIPv6 = !err; + + remoteAddr = netcode::WrapIP(remoteIP, &err); +- if (err) { ++ ++ if (err) + throw std::runtime_error("Failed to parse address " + remoteIP + ": " + err.message()); +- } + +- if (!supportsIPv6 && remoteAddr.is_v6()) { ++ if (!supportsIPv6 && remoteAddr.is_v6()) + throw std::runtime_error("IP v6 not supported, can not use address " + remoteAddr.to_string()); +- } + + if (localIP.empty()) { + // use the "any" address as local "from" + if (remoteAddr.is_v6()) { + localAddr = ip::address_v6::any(); + } else { +- if (supportsIPv6) { +- socket.close(); +- } ++ socket.close(); + socket.open(ip::udp::v4()); ++ + localAddr = ip::address_v4::any(); + } + } else { + localAddr = netcode::WrapIP(localIP, &err); +- if (err) { ++ ++ if (err) + throw std::runtime_error("Failed to parse local IP " + localIP + ": " + err.message()); +- } +- if (localAddr.is_v6() != remoteAddr.is_v6()) { ++ ++ if (localAddr.is_v6() != remoteAddr.is_v6()) + throw std::runtime_error("Local IP " + localAddr.to_string() + " and remote IP " + remoteAddr.to_string() + " are IP v4/v6 mixed"); +- } + } + + socket.bind(ip::udp::endpoint(localAddr, localPort)); +- +- boost::asio::socket_base::non_blocking_io command(true); +- socket.io_control(command); +- +- // A similar, slighly less verbose message is already in GameServer +- //LOG("Connecting (UDP) to IP (v%i) %s Port %i", +- // (remoteAddr.is_v6() ? 6 : 4), remoteAddr.c_str(), remotePort); ++ socket.non_blocking(true); + socket.connect(ip::udp::endpoint(remoteAddr, remotePort)); +- } catch (const std::runtime_error& ex) { // includes also boost::system::system_error, as it inherits from runtime_error ++ } catch (const std::runtime_error& ex) { ++ // also includes asio::system_error, inherits from runtime_error + socket.close(); + errorMsg = ex.what(); +- if (errorMsg.empty()) { ++ ++ if (errorMsg.empty()) + errorMsg = "Unknown problem"; +- } + } + + return errorMsg; + } + +-AutohostInterface::~AutohostInterface() +-{ +-} + + void AutohostInterface::SendStart() + { +--- rts/Net/AutohostInterface.h.orig 2014-10-07 20:09:51 UTC ++++ rts/Net/AutohostInterface.h +@@ -28,7 +28,7 @@ class AutohostInterface (public) + */ + AutohostInterface(const std::string& remoteIP, int remotePort, + const std::string& localIP = "", int localPort = 0); +- virtual ~AutohostInterface(); ++ virtual ~AutohostInterface() {} + + bool IsInitialized() const { return initialized; } + +--- rts/System/FileSystem/Archives/SevenZipArchive.cpp.orig 2014-10-07 20:09:51 UTC ++++ rts/System/FileSystem/Archives/SevenZipArchive.cpp +@@ -3,7 +3,6 @@ + #include "SevenZipArchive.h" + + #include +-#include + #include + #include //memcpy + +@@ -86,7 +85,7 @@ IArchive* CSevenZipArchiveFactory::DoCreateArchive(con + return new CSevenZipArchive(filePath); + } + +-const char* CSevenZipArchive::GetErrorStr(int err) ++static inline const char* GetErrorStr(int err) + { + switch(err) { + case SZ_OK: +@@ -108,6 +107,27 @@ const char* CSevenZipArchive::GetErrorStr(int err) + } + + ++static inline std::string GetSystemErrorStr(WRes wres) ++{ ++#ifdef USE_WINDOWS_FILE ++ LPSTR messageBuffer = nullptr; ++ size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, ++ NULL, wres, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL); ++ ++ std::string errorstr(messageBuffer, size); ++ ++ //Free the buffer. ++ LocalFree(messageBuffer); ++#else ++ std::string errorstr(strerror(wres)); ++#endif ++ ++ return errorstr; ++} ++ ++ ++ ++ + CSevenZipArchive::CSevenZipArchive(const std::string& name): + CBufferedArchive(name, false), + blockIndex(0xFFFFFFFF), +@@ -126,9 +146,8 @@ CSevenZipArchive::CSevenZipArchive(const std::string& + + WRes wres = InFile_Open(&archiveStream.file, name.c_str()); + if (wres) { +- boost::system::error_code e(wres, boost::system::get_system_category()); + LOG_L(L_ERROR, "Error opening \"%s\": %s (%i)", +- name.c_str(), e.message().c_str(), e.value()); ++ name.c_str(), GetSystemErrorStr(wres).c_str(), (int) wres); + return; + } + +--- rts/System/FileSystem/Archives/SevenZipArchive.h.orig 2014-10-07 20:09:51 UTC ++++ rts/System/FileSystem/Archives/SevenZipArchive.h +@@ -95,7 +95,6 @@ class CSevenZipArchive : public CBufferedArchive (priv + int packedSize; + }; + int GetFileName(const CSzArEx* db, int i); +- const char* GetErrorStr(int res); + + std::vector fileData; + UInt16 *tempBuf; +--- rts/System/Net/UDPListener.cpp.orig 2014-10-07 20:09:51.000000000 +0000 ++++ rts/System/Net/UDPListener.cpp +@@ -34,8 +34,7 @@ UDPListener::UDPListener(int port, const std::string& + const std::string err = TryBindSocket(port, &socket, ip); + + if (err.empty()) { +- boost::asio::socket_base::non_blocking_io socketCommand(true); +- socket->io_control(socketCommand); ++ socket->non_blocking(true); + + mySocket = socket; + SetAcceptingConnections(true);