games/spring: unbreak with boost 1.66

PR:		224124
Obtained from:	upstream
Approved by:	portmgr blanket
This commit is contained in:
Jan Beich 2018-03-03 22:40:56 +00:00
parent 3e0b78e13f
commit 03c244cc3d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=463538
2 changed files with 184 additions and 2 deletions

View File

@ -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 \

View File

@ -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 <algorithm>
-#include <boost/system/error_code.hpp>
#include <stdexcept>
#include <string.h> //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> 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);