aboutsummaryrefslogtreecommitdiffstats
path: root/games
diff options
context:
space:
mode:
authorjbeich <jbeich@FreeBSD.org>2018-03-04 06:40:56 +0800
committerjbeich <jbeich@FreeBSD.org>2018-03-04 06:40:56 +0800
commit9e79efd66a82ea3817cf0be3542b6d3321ed10fb (patch)
tree821e396ed2f91c7af81580dec1fd2b1c2dc258df /games
parent05d3b6614316d60d5dd56cd04377083f32f8d8dd (diff)
downloadfreebsd-ports-gnome-9e79efd66a82ea3817cf0be3542b6d3321ed10fb.tar.gz
freebsd-ports-gnome-9e79efd66a82ea3817cf0be3542b6d3321ed10fb.tar.zst
freebsd-ports-gnome-9e79efd66a82ea3817cf0be3542b6d3321ed10fb.zip
games/spring: unbreak with boost 1.66
PR: 224124 Obtained from: upstream Approved by: portmgr blanket
Diffstat (limited to 'games')
-rw-r--r--games/spring/Makefile2
-rw-r--r--games/spring/files/patch-boost-1.66184
2 files changed, 184 insertions, 2 deletions
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 <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);