aboutsummaryrefslogtreecommitdiffstats
path: root/games/spring
diff options
context:
space:
mode:
authoramdmi3 <amdmi3@FreeBSD.org>2013-12-16 19:22:24 +0800
committeramdmi3 <amdmi3@FreeBSD.org>2013-12-16 19:22:24 +0800
commit32371a2072bdfdd4514eaac811f99aff7437c797 (patch)
tree0d1f5f228c48e796f24299c9aab275c93622c830 /games/spring
parentc86ccf9e1a0c80c1ac8dbcf5d016cc8d4d2a916b (diff)
downloadfreebsd-ports-gnome-32371a2072bdfdd4514eaac811f99aff7437c797.tar.gz
freebsd-ports-gnome-32371a2072bdfdd4514eaac811f99aff7437c797.tar.zst
freebsd-ports-gnome-32371a2072bdfdd4514eaac811f99aff7437c797.zip
- Update to 94.1
- Unbreak - Support staging - Use new LIB_DEPENDS syntax
Diffstat (limited to 'games/spring')
-rw-r--r--games/spring/Makefile85
-rw-r--r--games/spring/distinfo4
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-AIClasses.hpp11
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-AttackHandler.cpp28
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-BuildUp.cpp11
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-DGunController.cpp11
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-DefenseMatrix.cpp38
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-KAIK.cpp51
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-Logger.cpp12
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-Logger.h14
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-MetalMap.cpp20
-rw-r--r--games/spring/files/patch-AI-Skirmish-KAIK-Unit.cpp48
-rw-r--r--games/spring/files/patch-CMakeLists.txt10
-rw-r--r--games/spring/files/patch-rts-CMakeLists.txt23
-rw-r--r--games/spring/files/patch-rts-Rendering-Shaders-ShaderStates.h11
-rw-r--r--games/spring/files/patch-rts-Sim-Misc-DefinitionTag.h18
-rw-r--r--games/spring/files/patch-rts-System-Platform-Linux-CrashHandler.cpp11
-rw-r--r--games/spring/files/patch-rts-System-Platform-Misc.cpp26
-rw-r--r--games/spring/files/patch-rts-System-Platform-Threading.cpp47
-rw-r--r--games/spring/files/patch-rts-System-Rectangle.h11
-rw-r--r--games/spring/files/patch-rts-System-SpringApp.cpp11
-rw-r--r--games/spring/files/patch-rts-System-creg-creg.h15
-rw-r--r--games/spring/files/patch-rts-build-cmake-FindAsciiDoc.cmake10
-rw-r--r--games/spring/files/patch-rts-builds-DS-CMakeLists.txt11
-rw-r--r--games/spring/files/patch-rts-builds-dedicated-CMakeLists.txt11
-rw-r--r--games/spring/files/patch-rts-lib-assimp-code-STEPFile.h18
-rw-r--r--games/spring/files/patch-rts-lib-gml-gmlcls.h23
-rw-r--r--games/spring/files/patch-rts-lib-headlessStubs-CMakeLists.txt13
-rw-r--r--games/spring/files/patch-rts-lib-lobby-Connection.h10
-rw-r--r--games/spring/files/patch-rts-lib-minizip-CMakeLists.txt10
-rw-r--r--games/spring/files/patch-tools-pr-downloader-src-lib-pugixml-pugixml.hpp38
-rw-r--r--games/spring/files/patch-tools-pr-downloader-src-lib-xmlrpc++-src-base64.h11
-rw-r--r--games/spring/files/patch-tools-unitsync-unitsync.cpp16
-rw-r--r--games/spring/pkg-plist195
34 files changed, 590 insertions, 292 deletions
diff --git a/games/spring/Makefile b/games/spring/Makefile
index e5a6181b7606..28840d67ab4e 100644
--- a/games/spring/Makefile
+++ b/games/spring/Makefile
@@ -2,19 +2,16 @@
# $FreeBSD$
PORTNAME= spring
-PORTVERSION= 0.82.7.1
-PORTREVISION= 3
+PORTVERSION= 94.1
CATEGORIES= games
-MASTER_SITES= SF/springrts/springrts/${PORTNAME}-${PORTVERSION}
+MASTER_SITES= SF/springrts/springrts/${PORTNAME}-${PORTVERSION} \
+ http://springrts.com/dl/
DISTNAME= ${PORTNAME}_${PORTVERSION}_src
MAINTAINER= amdmi3@FreeBSD.org
COMMENT= A project aiming to create a new and versatile RTS Engine
-DEPRECATED= Broken for more than 6 month
-EXPIRATION_DATE= 2013-12-22
-
-BROKEN= Does not build with recent boost
+LICENSE= GPLv2
LIB_DEPENDS= libfreetype.so:${PORTSDIR}/print/freetype2 \
libboost_thread.so:${PORTSDIR}/devel/boost-libs \
@@ -29,52 +26,82 @@ ONLY_FOR_ARCHS_REASON= relies on x86 floating-point math
USE_SDL= sdl
USE_OPENAL= al
-USE_GL= glew
+USE_GL= gl glu glew
USE_XORG= x11 xcursor
USE_LDCONFIG= yes
+USE_DOS2UNIX= *.h *.hpp *.cpp
-USES= cmake
+USES= cmake compiler:c++11-lib
CMAKE_ARGS= -DDATADIR:STRING="share/${PORTNAME}" \
- -DMARCH_FLAG:STRING= \
-DAI_TYPES:STRING="NATIVE" \
- -DMANDIR:STRING="man" \
- -DCREATE_MAN_PAGES:BOOL=false
+ -DDOCDIR:STRING="share/doc/${PORTNAME}" \
+ -DCREATE_MAN_PAGES:BOOL=false \
+ -DUNITSYNC_PYTHON_WRAPPER:BOOL=false \
+ -DCUSTOM_CFLAGS:BOOL=true
WRKSRC= ${WRKDIR}/${PORTNAME}_${PORTVERSION}
PORTDOCS= *
+PORTDATA= *
+
+OPTIONS_DEFINE= MANPAGES PR_DOWNLOADER DOCS
+OPTIONS_DEFAULT=MANPAGES PR_DOWNLOADER
+OPTIONS_SUB= *
+
+HTMLDOCS_DESC= Build and install HTML documentation
+PR_DOWNLOADER_DESC= Map and game downloader
-NO_STAGE= yes
-.include <bsd.port.pre.mk>
+MANPAGES_CMAKE_ON= -DCREATE_MAN_PAGES:BOOL=true -DMANDIR:STRING="man"
+MANPAGES_CMAKE_OFF= -DCREATE_MAN_PAGES:BOOL=false
+MANPAGES_BUILD_DEPENDS= 7z:${PORTSDIR}/archivers/p7zip \
+ asciidoc:${PORTSDIR}/textproc/asciidoc \
+ xsltproc:${PORTSDIR}/textproc/libxslt \
+ ${LOCALBASE}/share/xsl/docbook/manpages/docbook.xsl:${PORTSDIR}/textproc/docbook-xsl \
+ bash:${PORTSDIR}/shells/bash
+MANPAGES_DOCS_ON= -DUSERDOCS_PLAIN:BOOL=true
+MANPAGES_DOCS_OFF= -DUSERDOCS_PLAIN:BOOL=false
+
+PR_DOWNLOADER_LIB_DEPENDS=libcurl.so:${PORTSDIR}/ftp/curl
+
+.include <bsd.port.options.mk>
+
+.if ${ARCH} == "i386"
+BROKEN= does not build on i386 (undefined reference to __sync_fetch_and_add_8)
+.endif
.if defined(WITH_SYNC_DEBUG)
CFLAGS= # empty
CXXFLAGS= # empty
CMAKE_ARGS+= -DTRACE_SYNC=true -DSYNCDEBUG=true
-CMAKE_BUILD_TYPE= DEBUG2
+CMAKE_BUILD_TYPE=DEBUG2
+.endif
+
+.if ! ${PORT_OPTIONS:MPR_DOWNLOADER}
+post-extract:
+ @${RM} ${WRKSRC}/tools/pr-downloader/CMakeLists.txt
.endif
post-patch:
- @${REINPLACE_CMD} -E -e '/FIND_PACKAGE.*(Python|JNI)/ d' \
- ${WRKSRC}/tools/unitsync/CMakeLists.txt
- @${REINPLACE_CMD} -e 's|/etc/\(spring/datadir\)|${PREFIX}/\1|g; \
- /AddDirs.*GetBinaryPath/ d' \
+ @${REINPLACE_CMD} -e 's|-O2||' ${WRKSRC}/CMakeLists.txt
+ @${REINPLACE_CMD} -e 's|/etc/\(spring/datadir\)|${PREFIX}/\1|g' \
${WRKSRC}/rts/System/FileSystem/DataDirLocater.cpp
@${REINPLACE_CMD} -e 's|x1F3F|x0F3F|g' \
- ${WRKSRC}/rts/System/FPUCheck.h
+ ${WRKSRC}/rts/System/Sync/FPUCheck.cpp
@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \
${WRKSRC}/rts/build/cmake/*.cmake
@${REINPLACE_CMD} -e 's|execinfo|${LOCALBASE}/lib/libexecinfo.so|' \
- ${WRKSRC}/rts/CMakeLists.txt
+ ${WRKSRC}/rts/CMakeLists.txt \
+ ${WRKSRC}/rts/builds/dedicated/CMakeLists.txt
@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|' \
${WRKSRC}/rts/System/Platform/Misc.cpp
-
-post-install:
-.if ${PORT_OPTIONS:MDOCS}
- ${MKDIR} ${DOCSDIR}
- cd ${WRKSRC}/doc && ${COPYTREE_SHARE} "userdocs DevGuide.html HowTo* \
- SelectionKeys.txt StartScriptFormat.txt changelog.txt" ${DOCSDIR}/
+ @${REINPLACE_CMD} -e 's|/bin/bash|${LOCALBASE}&|' \
+ ${WRKSRC}/doc/manpages/make_manpages.sh
+.if ! ${PORT_OPTIONS:MMANPAGES}
+ @${REINPLACE_CMD} -e '/set(CREATE_MAN_PAGES)/ d' \
+ ${WRKSRC}/doc/CMakeLists.txt
.endif
- @${ECHO_CMD}; ${CAT} ${PKGMESSAGE}; ${ECHO_CMD}
-.include <bsd.port.post.mk>
+pre-build:
+ cd ${WRKSRC} && ${MAKE} generateVersionFiles
+
+.include <bsd.port.mk>
diff --git a/games/spring/distinfo b/games/spring/distinfo
index 3dca17e827d2..7441eff9bada 100644
--- a/games/spring/distinfo
+++ b/games/spring/distinfo
@@ -1,2 +1,2 @@
-SHA256 (spring_0.82.7.1_src.tar.gz) = 24a02b9489a52d96bc78899dda577e05ab24933f501ea50b504ae197777fde74
-SIZE (spring_0.82.7.1_src.tar.gz) = 11277409
+SHA256 (spring_94.1_src.tar.gz) = 26da7271baa8b3dd57022541d98e6a4841084d749788b698c4f8a914cf9e7004
+SIZE (spring_94.1_src.tar.gz) = 11793404
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-AIClasses.hpp b/games/spring/files/patch-AI-Skirmish-KAIK-AIClasses.hpp
new file mode 100644
index 000000000000..33bb0f2e3eb7
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-AIClasses.hpp
@@ -0,0 +1,11 @@
+--- AI/Skirmish/KAIK/AIClasses.hpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/AIClasses.hpp 2013-11-11 03:13:58.779774182 +0400
+@@ -111,7 +111,7 @@
+ #define math GetMathHandler()
+ #define pather GetPathFinder()
+ #define ut GetUnitTable()
+-#define tm GetThreatMap()
++#define thm GetThreatMap()
+ #define uh GetUnitHandler()
+ #define dm GetDefenseMatrix()
+ #define ah GetAttackHandler()
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-AttackHandler.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-AttackHandler.cpp
new file mode 100644
index 000000000000..66951df51f6e
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-AttackHandler.cpp
@@ -0,0 +1,28 @@
+--- AI/Skirmish/KAIK/AttackHandler.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/AttackHandler.cpp 2013-11-11 03:16:31.073773664 +0400
+@@ -829,9 +829,9 @@
+
+ ai->pather->micropather->SetMapData(
+ ai->pather->MoveArrays[group_in->GetWorstMoveType()],
+- ai->tm->GetThreatArray(),
+- ai->tm->GetThreatMapWidth(),
+- ai->tm->GetThreatMapHeight()
++ ai->thm->GetThreatArray(),
++ ai->thm->GetThreatMapWidth(),
++ ai->thm->GetThreatMapHeight()
+ );
+
+
+@@ -930,9 +930,9 @@
+ // in each group (movement map PATHTOUSE is hack)
+ ai->pather->micropather->SetMapData(
+ ai->pather->MoveArrays[PATHTOUSE],
+- ai->tm->GetThreatArray(),
+- ai->tm->GetThreatMapWidth(),
+- ai->tm->GetThreatMapHeight()
++ ai->thm->GetThreatArray(),
++ ai->thm->GetThreatMapWidth(),
++ ai->thm->GetThreatMapHeight()
+ );
+
+ // calculate and draw k-means for the base perimeters every 10 seconds
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-BuildUp.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-BuildUp.cpp
new file mode 100644
index 000000000000..a0fd6e0bca3e
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-BuildUp.cpp
@@ -0,0 +1,11 @@
+--- AI/Skirmish/KAIK/BuildUp.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/BuildUp.cpp 2013-11-11 03:15:30.794774021 +0400
+@@ -32,7 +32,7 @@
+ void CBuildUp::Update(int frame) {
+ if (frame % 15 == 0) {
+ // update current threat map
+- ai->tm->Update();
++ ai->thm->Update();
+ ai->uh->UpdateUpgradeTasks(frame);
+
+ GetEconState(&econState);
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-DGunController.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-DGunController.cpp
new file mode 100644
index 000000000000..bd490eab928e
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-DGunController.cpp
@@ -0,0 +1,11 @@
+--- AI/Skirmish/KAIK/DGunController.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/DGunController.cpp 2013-11-11 03:17:24.007772549 +0400
+@@ -166,7 +166,7 @@
+ if (canDGun) {
+ IssueOrder(dgunPos, CMD_DGUN, 0);
+ } else {
+- bool bDanger = ai->tm->ThreatAtThisPoint(commanderPos/*curTargetPos*/) > ai->tm->GetAverageThreat();
++ bool bDanger = ai->thm->ThreatAtThisPoint(commanderPos/*curTargetPos*/) > ai->thm->GetAverageThreat();
+
+ if (bDanger) {
+ state.Reset(currentFrame, true);
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-DefenseMatrix.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-DefenseMatrix.cpp
new file mode 100644
index 000000000000..799da11a53f7
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-DefenseMatrix.cpp
@@ -0,0 +1,38 @@
+--- AI/Skirmish/KAIK/DefenseMatrix.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/DefenseMatrix.cpp 2013-11-11 03:16:52.800773805 +0400
+@@ -84,7 +84,7 @@
+ int y = (int) (builderpos.z / f3multiplier);
+ float fastSumMap = sumMap[y * ai->pather->PathMapXSize + x];
+ float3 spotpos = float3(x * f3multiplier, 0, y * f3multiplier);
+- float myscore = fastSumMap / (builderpos.distance2D(spotpos) + averagemapsize / 8) * ((ai->pather->HeightMap[y * ai->pather->PathMapXSize + x] + 200) / (ai->pather->AverageHeight + 10)) / (ai->tm->ThreatAtThisPoint(spotpos) + 0.01);
++ float myscore = fastSumMap / (builderpos.distance2D(spotpos) + averagemapsize / 8) * ((ai->pather->HeightMap[y * ai->pather->PathMapXSize + x] + 200) / (ai->pather->AverageHeight + 10)) / (ai->thm->ThreatAtThisPoint(spotpos) + 0.01);
+ bestscore_fast = myscore;
+ bestspotx_fast = x;
+ bestspoty_fast = y;
+@@ -131,7 +131,7 @@
+
+ float3 bestPosibleSpotpos = float3(bestX * f3multiplier, 0, bestY * f3multiplier);
+ // this must be guessed, set it to the best possible (slow)
+- float bestThreatAtThisPoint = 0.01 + ai->tm->GetAverageThreat() - 1;
++ float bestThreatAtThisPoint = 0.01 + ai->thm->GetAverageThreat() - 1;
+ float bestDistance = builderpos.distance2D(bestPosibleSpotpos);
+ float bestHeight = ai->pather->HeightMap[cachePoint->y * ai->pather->PathMapXSize + cachePoint->x] + 200;
+ float bestPosibleMyScore = bestScoreInThisBox / (bestDistance + averagemapsize / 4) * (bestHeight + 200) / bestThreatAtThisPoint;
+@@ -145,7 +145,7 @@
+ for (int sy = y * CACHEFACTOR; sy < ai->pather->PathMapYSize && sy < (y * CACHEFACTOR + CACHEFACTOR); sy++) {
+ float fastSumMap = sumMap[sy * ai->pather->PathMapXSize + sx];
+ float3 spotpos = float3(sx * f3multiplier, 0, sy * f3multiplier);
+- float myscore = fastSumMap / (builderpos.distance2D(spotpos) + averagemapsize / 4) * (ai->pather->HeightMap[sy * ai->pather->PathMapXSize + sx]+200) / (ai->tm->ThreatAtThisPoint(spotpos) + 0.01);
++ float myscore = fastSumMap / (builderpos.distance2D(spotpos) + averagemapsize / 4) * (ai->pather->HeightMap[sy * ai->pather->PathMapXSize + sx]+200) / (ai->thm->ThreatAtThisPoint(spotpos) + 0.01);
+ // THIS COULD BE REALLY SLOW!
+ if (myscore > bestscore_fast && BuildMaskArray[sy * ai->pather->PathMapXSize + sx] == 0 && ai->cb->CanBuildAt(def, spotpos)) {
+ bestscore_fast = myscore;
+@@ -199,7 +199,7 @@
+ }
+
+ spotFinder->InvalidateSumMap(x, y, Range + 1);
+- // ai->debug->MakeBWTGA(Chokepointmap, ai->tm->GetThreatMapWidth(), ai->tm->GetThreatMapHeight(), "DebugPathMatrix", 1);
++ // ai->debug->MakeBWTGA(Chokepointmap, ai->thm->GetThreatMapWidth(), ai->thm->GetThreatMapHeight(), "DebugPathMatrix", 1);
+ }
+
+
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-KAIK.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-KAIK.cpp
new file mode 100644
index 000000000000..6c20520e1ced
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-KAIK.cpp
@@ -0,0 +1,51 @@
+--- AI/Skirmish/KAIK/KAIK.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/KAIK.cpp 2013-11-11 03:15:53.601773605 +0400
+@@ -194,13 +194,13 @@
+ void CKAIK::EnemyDestroyed(int enemyUnitID, int attackerUnitID) {
+ if (ai->Initialized()) {
+ ai->dgunConHandler->NotifyEnemyDestroyed(enemyUnitID, attackerUnitID);
+- ai->tm->EnemyDestroyed(enemyUnitID, attackerUnitID);
++ ai->thm->EnemyDestroyed(enemyUnitID, attackerUnitID);
+ }
+ }
+
+ void CKAIK::EnemyDamaged(int enemyUnitID, int attackerUnitID, float damage, float3 dir) {
+ if (ai->Initialized()) {
+- ai->tm->EnemyDamaged(enemyUnitID, attackerUnitID);
++ ai->thm->EnemyDamaged(enemyUnitID, attackerUnitID);
+
+ damage = damage;
+ dir = dir;
+@@ -209,12 +209,12 @@
+
+ void CKAIK::EnemyCreated(int enemyUnitID) {
+ if (ai->Initialized()) {
+- ai->tm->EnemyCreated(enemyUnitID);
++ ai->thm->EnemyCreated(enemyUnitID);
+ }
+ }
+ void CKAIK::EnemyFinished(int enemyUnitID) {
+ if (ai->Initialized()) {
+- ai->tm->EnemyFinished(enemyUnitID);
++ ai->thm->EnemyFinished(enemyUnitID);
+ }
+ }
+
+@@ -229,7 +229,7 @@
+ }
+
+ if ((msg = strstr(msg, "ThreatMap::DBG")) != NULL) {
+- ai->tm->ToggleVisOverlay();
++ ai->thm->ToggleVisOverlay();
+ }
+ }
+ }
+@@ -298,7 +298,7 @@
+ ai->dgunConHandler->Update(frame);
+
+ if ((frame - ai->InitFrame()) == 1) {
+- // ai->tm->Init();
++ // ai->thm->Init();
+ ai->dm->Init();
+ }
+
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-Logger.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-Logger.cpp
new file mode 100644
index 000000000000..3353c31f52ef
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-Logger.cpp
@@ -0,0 +1,12 @@
+--- AI/Skirmish/KAIK/Logger.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/Logger.cpp 2013-11-11 03:18:04.431773779 +0400
+@@ -14,8 +14,7 @@
+
+ time_t now1;
+ time(&now1);
+-//FIXME:compile hack for macosx
+-#undef tm
++
+ struct tm* now2 = localtime(&now1);
+
+ std::stringstream ss;
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-Logger.h b/games/spring/files/patch-AI-Skirmish-KAIK-Logger.h
new file mode 100644
index 000000000000..243ad4b98a9b
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-Logger.h
@@ -0,0 +1,14 @@
+--- AI/Skirmish/KAIK/Logger.h.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/Logger.h 2013-11-11 04:04:46.414772522 +0400
+@@ -2,10 +2,8 @@
+ #define KAIK_LOGGER_HDR
+
+ #include <string>
+-//FIXME:compile hack for macosx
+-#undef tm
+ #include <fstream>
+-#define tm GetThreatMap()
++#define thm GetThreatMap()
+
+ namespace springLegacyAI {
+ class IAICallback;
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-MetalMap.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-MetalMap.cpp
new file mode 100644
index 000000000000..431847ac4891
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-MetalMap.cpp
@@ -0,0 +1,20 @@
+--- AI/Skirmish/KAIK/MetalMap.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/MetalMap.cpp 2013-11-11 03:17:46.615772673 +0400
+@@ -57,7 +57,7 @@
+
+ if (spotCoords.x >= 0.0f) {
+ float distance = spotCoords.distance2D(ai->cb->GetUnitPos(builderid)) + 150;
+- float myThreat = ai->tm->ThreatAtThisPoint(spotCoords);
++ float myThreat = ai->thm->ThreatAtThisPoint(spotCoords);
+ float spotScore = VectoredSpots[i].y / distance / (myThreat + 10);
+
+ // along with threatmap try to search for enemy armed units around cause
+@@ -92,7 +92,7 @@
+ // by presence of ARMED enemy units or buildings
+ bool b1 = (TempScore < spotScore);
+ bool b2 = (numEnemies == 0);
+- bool b3 = (myThreat <= (ai->tm->GetAverageThreat() * 1.5));
++ bool b3 = (myThreat <= (ai->thm->GetAverageThreat() * 1.5));
+ bool b4 = (ai->uh->TaskPlanExist(spotCoords, extractor));
+
+ if (b1 && b2 && b3 && !b4 && !bOccupied) {
diff --git a/games/spring/files/patch-AI-Skirmish-KAIK-Unit.cpp b/games/spring/files/patch-AI-Skirmish-KAIK-Unit.cpp
new file mode 100644
index 000000000000..aeeb5de687e3
--- /dev/null
+++ b/games/spring/files/patch-AI-Skirmish-KAIK-Unit.cpp
@@ -0,0 +1,48 @@
+--- AI/Skirmish/KAIK/Unit.cpp.orig 2013-03-26 03:58:45.000000000 +0400
++++ AI/Skirmish/KAIK/Unit.cpp 2013-11-11 03:16:19.873774077 +0400
+@@ -256,7 +256,7 @@
+ const FeatureDef* fDef = ai->cb->GetFeatureDef(featureIDs[i]);
+ const float3& fPos = ai->cb->GetFeaturePos(featureIDs[i]);
+ const float fDist = fPos.distance2D(ai->cb->GetUnitPos(uid));
+- const float fThreat = ai->tm->ThreatAtThisPoint(fPos);
++ const float fThreat = ai->thm->ThreatAtThisPoint(fPos);
+
+ if (fDef == 0)
+ continue;
+@@ -266,11 +266,11 @@
+ continue;
+ }
+
+- if (fDef->metal > bestScore && fThreat <= ai->tm->GetAverageThreat()) {
++ if (fDef->metal > bestScore && fThreat <= ai->thm->GetAverageThreat()) {
+ bestScore = fDef->metal;
+ bestFeatureID = featureIDs[i];
+ }
+- else if (bestScore == fDef->metal && fThreat <= ai->tm->GetAverageThreat()) {
++ else if (bestScore == fDef->metal && fThreat <= ai->thm->GetAverageThreat()) {
+ if (fDist < bestDist) {
+ bestFeatureID = featureIDs[i];
+ bestDist = fDist;
+@@ -282,7 +282,7 @@
+ const FeatureDef* fDef = ai->cb->GetFeatureDef(featureIDs[i]);
+ const float3& fPos = ai->cb->GetFeaturePos(featureIDs[i]);
+ const float fDist = fPos.distance2D(ai->cb->GetUnitPos(uid));
+- const float fThreat = ai->tm->ThreatAtThisPoint(fPos);
++ const float fThreat = ai->thm->ThreatAtThisPoint(fPos);
+
+ if (fDef == 0)
+ continue;
+@@ -291,11 +291,11 @@
+ continue;
+ }
+
+- if (fDef->energy > bestScore && fThreat < ai->tm->GetAverageThreat()) {
++ if (fDef->energy > bestScore && fThreat < ai->thm->GetAverageThreat()) {
+ bestScore = fDef->energy;
+ bestFeatureID = featureIDs[i];
+ }
+- else if (bestScore == fDef->energy && fThreat < ai->tm->GetAverageThreat()) {
++ else if (bestScore == fDef->energy && fThreat < ai->thm->GetAverageThreat()) {
+ if (fDist < bestDist) {
+ bestFeatureID = featureIDs[i];
+ bestDist = fDist;
diff --git a/games/spring/files/patch-CMakeLists.txt b/games/spring/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..db19184ab4e0
--- /dev/null
+++ b/games/spring/files/patch-CMakeLists.txt
@@ -0,0 +1,10 @@
+--- CMakeLists.txt.orig 2013-03-26 03:58:35.000000000 +0400
++++ CMakeLists.txt 2013-11-09 07:51:04.829392176 +0400
+@@ -364,7 +364,6 @@
+ elseif (MSVC)
+ # nothing to be done here
+ else (MSVC)
+- Message(FATAL_ERROR "unknown compiler")
+ endif ($ENV{CXX} MATCHES "icpc")
+
+ add_definitions(-DSTREFLOP_SSE) # would break AI compiling, but is undefined in ./AI/CMakeLists.txt
diff --git a/games/spring/files/patch-rts-CMakeLists.txt b/games/spring/files/patch-rts-CMakeLists.txt
index 2e18d6e9335b..1ba9519d4ea9 100644
--- a/games/spring/files/patch-rts-CMakeLists.txt
+++ b/games/spring/files/patch-rts-CMakeLists.txt
@@ -1,20 +1,11 @@
---- ./rts/CMakeLists.txt.orig 2010-09-06 16:16:17.000000000 +0400
-+++ ./rts/CMakeLists.txt 2010-09-15 23:05:01.000000000 +0400
-@@ -46,6 +46,8 @@
+--- rts/CMakeLists.txt.orig 2013-11-09 00:09:15.910054493 +0400
++++ rts/CMakeLists.txt 2013-11-09 00:18:23.355754880 +0400
+@@ -63,7 +63,7 @@
+ ENDIF (PREFER_STATIC_LIBS)
- LIST(APPEND engineCommonLibraries ${DEVIL_IL_LIBRARY})
-
-+LIST(APPEND spring_libraries execinfo)
-+
- ### Find include directories and add platform specific libraries
- LIST(APPEND engineCommonLibraries ${Boost_REGEX_LIBRARY} ${Boost_THREAD_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_SIGNALS_LIBRARY})
-
-@@ -53,7 +55,7 @@
-
- IF (UNIX)
# Needed for dynamically loading shared libraries (on some OS)
- LIST(APPEND engineCommonLibraries dl)
-+ LIST(APPEND engineCommonLibraries execinfo)
- ENDIF (UNIX)
++ LIST(APPEND engineCommonLibraries ${CMAKE_DL_LIBS} execinfo)
+ ENDIF (UNIX AND NOT MINGW)
- IF (MINGW)
+ FIND_PACKAGE_STATIC(ZLIB REQUIRED)
diff --git a/games/spring/files/patch-rts-Rendering-Shaders-ShaderStates.h b/games/spring/files/patch-rts-Rendering-Shaders-ShaderStates.h
new file mode 100644
index 000000000000..f5650c787ce6
--- /dev/null
+++ b/games/spring/files/patch-rts-Rendering-Shaders-ShaderStates.h
@@ -0,0 +1,11 @@
+--- rts/Rendering/Shaders/ShaderStates.h.orig 2013-12-06 06:06:48.795486079 +0400
++++ rts/Rendering/Shaders/ShaderStates.h 2013-12-06 06:30:20.577430223 +0400
+@@ -227,7 +227,7 @@
+ {
+ std::map<std::string, std::string>::const_iterator it = flags.find(flag);
+ if (it != flags.end()) {
+- std::istringstream buf(*it);
++ std::istringstream buf(it->second);
+ T temp;
+ buf >> temp;
+ return temp;
diff --git a/games/spring/files/patch-rts-Sim-Misc-DefinitionTag.h b/games/spring/files/patch-rts-Sim-Misc-DefinitionTag.h
new file mode 100644
index 000000000000..15328f6d59cc
--- /dev/null
+++ b/games/spring/files/patch-rts-Sim-Misc-DefinitionTag.h
@@ -0,0 +1,18 @@
+--- rts/Sim/Misc/DefinitionTag.h.orig 2013-12-06 22:23:53.818446384 +0400
++++ rts/Sim/Misc/DefinitionTag.h 2013-12-06 22:42:16.128369497 +0400
+@@ -15,7 +15,6 @@
+ #include <typeinfo>
+ #include "Lua/LuaParser.h"
+ #include "System/float3.h"
+-#include "System/Util.h"
+
+ //example usage: DUMMYTAG(Defs, DefClass, table, customParams)
+ struct table {};
+@@ -43,6 +42,7 @@
+ }
+ };
+
++#include "System/Util.h"
+
+ /**
+ * @brief Untyped definition tag meta data.
diff --git a/games/spring/files/patch-rts-System-Platform-Linux-CrashHandler.cpp b/games/spring/files/patch-rts-System-Platform-Linux-CrashHandler.cpp
new file mode 100644
index 000000000000..a39a1368bb1c
--- /dev/null
+++ b/games/spring/files/patch-rts-System-Platform-Linux-CrashHandler.cpp
@@ -0,0 +1,11 @@
+--- rts/System/Platform/Linux/CrashHandler.cpp.orig 2013-03-26 03:58:36.000000000 +0400
++++ rts/System/Platform/Linux/CrashHandler.cpp 2013-11-09 00:15:32.446878961 +0400
+@@ -323,7 +323,7 @@
+
+ static void ForcedExitAfterTenSecs() {
+ boost::this_thread::sleep(boost::posix_time::seconds(10));
+- std::_Exit(-1);
++ exit(-1);
+ }
+
+
diff --git a/games/spring/files/patch-rts-System-Platform-Misc.cpp b/games/spring/files/patch-rts-System-Platform-Misc.cpp
index 1a484ff123c7..15fd10eaf191 100644
--- a/games/spring/files/patch-rts-System-Platform-Misc.cpp
+++ b/games/spring/files/patch-rts-System-Platform-Misc.cpp
@@ -1,7 +1,16 @@
---- rts/System/Platform/Misc.cpp.orig 2010-09-06 16:16:18.000000000 +0400
-+++ rts/System/Platform/Misc.cpp 2010-09-15 22:44:06.000000000 +0400
-@@ -106,7 +106,7 @@
- procExeFilePath = std::string(pathReal);
+--- rts/System/Platform/Misc.cpp.orig 2012-02-12 22:27:27.502768102 +0400
++++ rts/System/Platform/Misc.cpp 2012-02-13 01:50:43.365521912 +0400
+@@ -2,7 +2,7 @@
+
+ #include "Misc.h"
+
+-#ifdef linux
++#if defined(linux) || defined(__FreeBSD__)
+ #include <unistd.h>
+ #include <dlfcn.h> // for dladdr(), dlopen()
+
+@@ -187,7 +187,7 @@
+ procExeFilePath = GetRealPath(path);
}
#else
- #error implement this
@@ -9,3 +18,12 @@
#endif
if (procExeFilePath.empty()) {
+@@ -208,7 +208,7 @@
+ // this will only be used if moduleFilePath stays empty
+ const char* error = NULL;
+
+-#if defined(linux) || defined(__APPLE__)
++#if defined(linux) || defined(__APPLE__) || defined(__FreeBSD__)
+ #ifdef __APPLE__
+ #define SHARED_LIBRARY_EXTENSION "dylib"
+ #else
diff --git a/games/spring/files/patch-rts-System-Platform-Threading.cpp b/games/spring/files/patch-rts-System-Platform-Threading.cpp
new file mode 100644
index 000000000000..f09508b7f012
--- /dev/null
+++ b/games/spring/files/patch-rts-System-Platform-Threading.cpp
@@ -0,0 +1,47 @@
+--- rts/System/Platform/Threading.cpp.orig 2013-03-26 03:58:36.000000000 +0400
++++ rts/System/Platform/Threading.cpp 2013-11-09 00:13:03.263078447 +0400
+@@ -39,7 +39,7 @@
+ static boost::thread::id simThreadID;
+ static boost::thread::id batchThreadID;
+ #endif
+-#if defined(__APPLE__)
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ #elif defined(WIN32)
+ static DWORD cpusSystem = 0;
+ #else
+@@ -52,7 +52,7 @@
+ if (inited)
+ return;
+
+- #if defined(__APPLE__)
++ #if defined(__APPLE__) || defined(__FreeBSD__)
+ // no-op
+
+ #elif defined(WIN32)
+@@ -76,7 +76,7 @@
+ return ~0;
+ }
+
+- #if defined(__APPLE__)
++ #if defined(__APPLE__) || defined(__FreeBSD__)
+ // no-op
+
+ #elif defined(WIN32)
+@@ -151,7 +151,7 @@
+ boost::uint32_t GetAvailableCoresMask()
+ {
+ boost::uint32_t systemCores = 0;
+- #if defined(__APPLE__)
++ #if defined(__APPLE__) || defined(__FreeBSD__)
+ // no-op
+ systemCores = ~0;
+
+@@ -269,7 +269,7 @@
+
+ void SetThreadScheduler()
+ {
+- #if defined(__APPLE__)
++ #if defined(__APPLE__) || defined(__FreeBSD__)
+ // no-op
+
+ #elif defined(WIN32)
diff --git a/games/spring/files/patch-rts-System-Rectangle.h b/games/spring/files/patch-rts-System-Rectangle.h
new file mode 100644
index 000000000000..b8f4e69f7bd4
--- /dev/null
+++ b/games/spring/files/patch-rts-System-Rectangle.h
@@ -0,0 +1,11 @@
+--- ./rts/System/Rectangle.h.orig 2013-03-26 03:58:36.000000000 +0400
++++ ./rts/System/Rectangle.h 2013-11-11 00:22:51.737774094 +0400
+@@ -45,7 +45,7 @@
+ y1 < rect.y2 && y2 > rect.y1;
+ }
+
+- bool operator< (const SRectangle& other) {
++ bool operator< (const SRectangle& other) const {
+ if (x1 == other.x1) {
+ return (z1 < other.z1);
+ } else {
diff --git a/games/spring/files/patch-rts-System-SpringApp.cpp b/games/spring/files/patch-rts-System-SpringApp.cpp
deleted file mode 100644
index 8f1bcac3ca2e..000000000000
--- a/games/spring/files/patch-rts-System-SpringApp.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
---- rts/System/SpringApp.cpp.orig 2010-09-06 16:16:18.000000000 +0400
-+++ rts/System/SpringApp.cpp 2010-09-15 23:03:15.000000000 +0400
-@@ -255,7 +255,7 @@
- logOutput.Print("CPU: affinity failed");
- }
- }
--#elif defined(__APPLE__)
-+#elif defined(__APPLE__) || defined(__FreeBSD__) // may still use something like below for FreeBSD
- // no-op
- #else
- if (affinity > 0) {
diff --git a/games/spring/files/patch-rts-System-creg-creg.h b/games/spring/files/patch-rts-System-creg-creg.h
new file mode 100644
index 000000000000..ad6c9716edd5
--- /dev/null
+++ b/games/spring/files/patch-rts-System-creg-creg.h
@@ -0,0 +1,15 @@
+--- rts/System/creg/creg.h.orig 2013-12-06 06:06:48.806486080 +0400
++++ rts/System/creg/creg.h 2013-12-06 07:18:09.477443592 +0400
+@@ -442,10 +442,10 @@
+ // Stupid GCC likes this template<> crap very much
+ #define CR_BIND_TEMPLATE(TCls, ctor_args) \
+ template<> creg::IMemberRegistrator* TCls::memberRegistrator=0; \
+- template<> creg::Class* TCls::GetClass() const { return binder.class_; } \
+ template<> void TCls::_ConstructInstance(void* d) { new(d) MyType ctor_args; } \
+ template<> void TCls::_DestructInstance(void* d) { ((MyType*)d)->~MyType(); } \
+- template<> creg::ClassBinder TCls::binder(#TCls, 0, 0, &TCls::memberRegistrator, sizeof(TCls), alignof(TCls), TCls::hasVTable, TCls::_ConstructInstance, TCls::_DestructInstance);
++ template<> creg::ClassBinder TCls::binder(#TCls, 0, 0, &TCls::memberRegistrator, sizeof(TCls), alignof(TCls), TCls::hasVTable, TCls::_ConstructInstance, TCls::_DestructInstance); \
++ template<> creg::Class* TCls::GetClass() const { return binder.class_; }
+
+ /** @def CR_BIND_DERIVED_INTERFACE
+ * Bind an abstract derived class
diff --git a/games/spring/files/patch-rts-build-cmake-FindAsciiDoc.cmake b/games/spring/files/patch-rts-build-cmake-FindAsciiDoc.cmake
new file mode 100644
index 000000000000..389fc2a4f1aa
--- /dev/null
+++ b/games/spring/files/patch-rts-build-cmake-FindAsciiDoc.cmake
@@ -0,0 +1,10 @@
+--- rts/build/cmake/FindAsciiDoc.cmake.orig 2013-11-09 03:59:29.984998154 +0400
++++ rts/build/cmake/FindAsciiDoc.cmake 2013-11-09 04:04:52.833206309 +0400
+@@ -41,6 +41,7 @@
+ PATH_SUFFIXES
+ xml/docbook/stylesheet/nwalsh/manpages
+ sgml/docbook/xsl-stylesheets/manpages
++ xsl/docbook/manpages
+ DOC "DocBook XSL Style-Sheet"
+ )
+
diff --git a/games/spring/files/patch-rts-builds-DS-CMakeLists.txt b/games/spring/files/patch-rts-builds-DS-CMakeLists.txt
deleted file mode 100644
index 4e143fd198d1..000000000000
--- a/games/spring/files/patch-rts-builds-DS-CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
---- rts/builds/DS/CMakeLists.txt.orig 2010-09-06 16:16:18.000000000 +0400
-+++ rts/builds/DS/CMakeLists.txt 2010-09-15 23:46:32.000000000 +0400
-@@ -21,7 +21,7 @@
- LIST(APPEND engineDedicatedLibraries headlessStubs)
- IF (UNIX)
- # Needed for dynamically loading shared libraries (on some OS)
-- LIST(APPEND engineDedicatedLibraries dl)
-+ #LIST(APPEND engineDedicatedLibraries dl)
- ENDIF (UNIX)
-
- IF (MINGW OR APPLE)
diff --git a/games/spring/files/patch-rts-builds-dedicated-CMakeLists.txt b/games/spring/files/patch-rts-builds-dedicated-CMakeLists.txt
new file mode 100644
index 000000000000..1788b3cf2754
--- /dev/null
+++ b/games/spring/files/patch-rts-builds-dedicated-CMakeLists.txt
@@ -0,0 +1,11 @@
+--- ./rts/builds/dedicated/CMakeLists.txt.orig 2013-03-26 03:58:36.000000000 +0400
++++ ./rts/builds/dedicated/CMakeLists.txt 2013-11-09 00:39:09.704093624 +0400
+@@ -24,7 +24,7 @@
+ LIST(APPEND engineDedicatedLibraries headlessStubs)
+ IF (UNIX)
+ # Needed for dynamically loading shared libraries (on some OS)
+- LIST(APPEND engineDedicatedLibraries dl)
++ LIST(APPEND engineDedicatedLibraries ${CMAKE_DL_LIBS} execinfo)
+ ENDIF (UNIX)
+
+ IF (MINGW OR APPLE)
diff --git a/games/spring/files/patch-rts-lib-assimp-code-STEPFile.h b/games/spring/files/patch-rts-lib-assimp-code-STEPFile.h
new file mode 100644
index 000000000000..a051d822cac4
--- /dev/null
+++ b/games/spring/files/patch-rts-lib-assimp-code-STEPFile.h
@@ -0,0 +1,18 @@
+--- rts/lib/assimp/code/STEPFile.h.orig 2013-03-26 03:58:36.000000000 +0400
++++ rts/lib/assimp/code/STEPFile.h 2013-11-11 04:15:43.177772957 +0400
+@@ -195,13 +195,13 @@
+ // conversion support.
+ template <typename T>
+ const T& ResolveSelect(const DB& db) const {
+- return Couple<T>(db).MustGetObject(To<EXPRESS::ENTITY>())->To<T>();
++ return Couple<T>(db).MustGetObject(To<EXPRESS::ENTITY>())->template To<T>();
+ }
+
+ template <typename T>
+ const T* ResolveSelectPtr(const DB& db) const {
+ const EXPRESS::ENTITY* e = ToPtr<EXPRESS::ENTITY>();
+- return e?Couple<T>(db).MustGetObject(*e)->ToPtr<T>():(const T*)0;
++ return e?Couple<T>(db).MustGetObject(*e)->template ToPtr<T>():(const T*)0;
+ }
+
+ public:
diff --git a/games/spring/files/patch-rts-lib-gml-gmlcls.h b/games/spring/files/patch-rts-lib-gml-gmlcls.h
index 982cf8bb3265..d4ba7fc30884 100644
--- a/games/spring/files/patch-rts-lib-gml-gmlcls.h
+++ b/games/spring/files/patch-rts-lib-gml-gmlcls.h
@@ -1,7 +1,7 @@
---- ./rts/lib/gml/gmlcls.h.orig 2010-09-06 16:16:18.000000000 +0400
-+++ ./rts/lib/gml/gmlcls.h 2010-09-15 23:36:35.000000000 +0400
-@@ -60,7 +60,7 @@
- //#define BOOST_AC_USE_PTHREADS
+--- rts/lib/gml/gmlcls.h.orig 2013-12-07 00:06:39.928020847 +0400
++++ rts/lib/gml/gmlcls.h 2013-12-07 00:09:21.477010398 +0400
+@@ -43,7 +43,7 @@
+ extern bool ThreadRegistered();
// memory barriers for different platforms
-#if defined(__APPLE__) || defined(__FreeBSD__)
@@ -9,7 +9,7 @@
# include <libkern/OSAtomic.h>
# define GML_MEMBAR OSMemoryBarrier()
#elif defined(__GNUC__)
-@@ -112,7 +112,7 @@
+@@ -95,7 +95,7 @@
# define GML_TYPENAME
#endif
@@ -18,3 +18,16 @@
# define GML_USE_SPEEDY_TLS 1
# include "System/Platform/errorhandler.h"
# include "speedy-tls.h"
+@@ -234,11 +234,7 @@
+ }
+ virtual ~gmlBaseMutexLock() {
+ if (GML::Enabled()) {
+-#if (BOOST_VERSION >= 103500)
+- ((T*)lockdata)->boost::unique_lock<U>::~unique_lock();
+-#else
+- ((T*)lockdata)->boost::scoped_lock<U>::~scoped_lock();
+-#endif
++ ((T*)lockdata)->~T();
+ }
+ }
+ };
diff --git a/games/spring/files/patch-rts-lib-headlessStubs-CMakeLists.txt b/games/spring/files/patch-rts-lib-headlessStubs-CMakeLists.txt
new file mode 100644
index 000000000000..9f342c93559b
--- /dev/null
+++ b/games/spring/files/patch-rts-lib-headlessStubs-CMakeLists.txt
@@ -0,0 +1,13 @@
+--- rts/lib/headlessStubs/CMakeLists.txt.orig 2013-03-26 03:58:36.000000000 +0400
++++ rts/lib/headlessStubs/CMakeLists.txt 2013-12-07 07:05:38.984034014 +0400
+@@ -15,8 +15,8 @@
+ ELSE (MINGW)
+ # Use a direct copy of the GL and SDL headers,
+ # as these may not be available on headless systems.
+- INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+- INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/SDL)
++ INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/include)
++ INCLUDE_DIRECTORIES(BEFORE ${CMAKE_SOURCE_DIR}/include/SDL)
+ ENDIF (MINGW)
+
+ ADD_LIBRARY(headlessStubs STATIC EXCLUDE_FROM_ALL ${headlessStubsSources})
diff --git a/games/spring/files/patch-rts-lib-lobby-Connection.h b/games/spring/files/patch-rts-lib-lobby-Connection.h
deleted file mode 100644
index 25ede7f23a5a..000000000000
--- a/games/spring/files/patch-rts-lib-lobby-Connection.h
+++ /dev/null
@@ -1,10 +0,0 @@
---- rts/lib/lobby/Connection.h.orig 2010-12-10 17:17:43.000000000 +0300
-+++ rts/lib/lobby/Connection.h 2010-12-10 17:19:28.000000000 +0300
-@@ -6,6 +6,7 @@
- #include <boost/asio/streambuf.hpp>
- #include <boost/asio/deadline_timer.hpp>
- #include <boost/asio/ip/tcp.hpp>
-+#include <list>
- #include <string>
-
- struct ClientStatus
diff --git a/games/spring/files/patch-rts-lib-minizip-CMakeLists.txt b/games/spring/files/patch-rts-lib-minizip-CMakeLists.txt
new file mode 100644
index 000000000000..052ecb63c54d
--- /dev/null
+++ b/games/spring/files/patch-rts-lib-minizip-CMakeLists.txt
@@ -0,0 +1,10 @@
+--- rts/lib/minizip/CMakeLists.txt.orig 2013-03-26 03:58:36.000000000 +0400
++++ rts/lib/minizip/CMakeLists.txt 2013-11-09 04:02:41.051969166 +0400
+@@ -1,7 +1,6 @@
+ # Spring supplied CMake build file
+
+ Set(MINIZIP_FIND_QUIETLY TRUE)
+-FIND_PACKAGE_STATIC(MiniZip)
+
+ If (MINIZIP_FOUND)
+ # Use the system supplied MiniZip library
diff --git a/games/spring/files/patch-tools-pr-downloader-src-lib-pugixml-pugixml.hpp b/games/spring/files/patch-tools-pr-downloader-src-lib-pugixml-pugixml.hpp
new file mode 100644
index 000000000000..29b2df62d3ed
--- /dev/null
+++ b/games/spring/files/patch-tools-pr-downloader-src-lib-pugixml-pugixml.hpp
@@ -0,0 +1,38 @@
+--- tools/pr-downloader/src/lib/pugixml/pugixml.hpp.orig 2013-12-06 06:19:54.039431635 +0400
++++ tools/pr-downloader/src/lib/pugixml/pugixml.hpp 2013-12-06 06:24:02.124415606 +0400
+@@ -17,32 +17,9 @@
+ #include "pugiconfig.hpp"
+
+ #ifndef PUGIXML_NO_STL
+-namespace std
+-{
+- struct bidirectional_iterator_tag;
+-
+-#ifdef __SUNPRO_CC
+- // Sun C++ compiler has a bug which forces template argument names in forward declarations to be the same as in actual definitions
+- template <class _T> class allocator;
+- template <class _charT> struct char_traits;
+- template <class _charT, class _Traits> class basic_istream;
+- template <class _charT, class _Traits> class basic_ostream;
+- template <class _charT, class _Traits, class _Allocator> class basic_string;
+-#else
+- // Borland C++ compiler has a bug which forces template argument names in forward declarations to be the same as in actual definitions
+- template <class _Ty> class allocator;
+- template <class _Ty> struct char_traits;
+- template <class _Elem, class _Traits> class basic_istream;
+- template <class _Elem, class _Traits> class basic_ostream;
+- template <class _Elem, class _Traits, class _Ax> class basic_string;
+-#endif
+-
+- // Digital Mars compiler has a bug which requires a forward declaration for explicit instantiation (otherwise type selection is messed up later, producing link errors)
+- // Also note that we have to declare char_traits as a class here, since it's defined that way
+-#ifdef __DMC__
+- template <> class char_traits<char>;
+-#endif
+-}
++# include <istream>
++# include <ostream>
++# include <string>
+ #endif
+
+ // Macro for deprecated features
diff --git a/games/spring/files/patch-tools-pr-downloader-src-lib-xmlrpc++-src-base64.h b/games/spring/files/patch-tools-pr-downloader-src-lib-xmlrpc++-src-base64.h
new file mode 100644
index 000000000000..4b669b62384d
--- /dev/null
+++ b/games/spring/files/patch-tools-pr-downloader-src-lib-xmlrpc++-src-base64.h
@@ -0,0 +1,11 @@
+--- tools/pr-downloader/src/lib/xmlrpc++/src/base64.h.orig 2013-03-26 03:58:49.000000000 +0400
++++ tools/pr-downloader/src/lib/xmlrpc++/src/base64.h 2013-11-09 14:42:21.013340982 +0400
+@@ -13,6 +13,8 @@
+ # include <iterator>
+ #endif
+
++#include <ios>
++
+ static
+ int _base64Chars[]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
diff --git a/games/spring/files/patch-tools-unitsync-unitsync.cpp b/games/spring/files/patch-tools-unitsync-unitsync.cpp
deleted file mode 100644
index 625a06946873..000000000000
--- a/games/spring/files/patch-tools-unitsync-unitsync.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
---- tools/unitsync/unitsync.cpp.orig 2010-01-31 20:03:33.000000000 +0300
-+++ tools/unitsync/unitsync.cpp 2010-02-04 16:13:38.000000000 +0300
-@@ -259,8 +259,11 @@
- EXPORT(int) Init(bool isServer, int id)
- {
- try {
-- if (!logOutputInitialised)
-- logOutput.SetFileName("unitsync.log");
-+ if (!logOutputInitialised) {
-+ string fname = getenv("HOME");
-+ fname += "/.spring/unitsync.log";
-+ logOutput.SetFileName(fname.c_str());
-+ }
- if (!configHandler)
- ConfigHandler::Instantiate(); // use the default config file
- FileSystemHandler::Initialize(false);
diff --git a/games/spring/pkg-plist b/games/spring/pkg-plist
index 3ab12683b56d..2b623d7f0f1b 100644
--- a/games/spring/pkg-plist
+++ b/games/spring/pkg-plist
@@ -1,200 +1,19 @@
+%%PR_DOWNLOADER%%bin/pr-downloader
bin/spring
bin/spring-dedicated
bin/spring-headless
bin/spring-multithreaded
+%%PR_DOWNLOADER%%lib/libpr-downloader_shared.so
+%%PR_DOWNLOADER%%lib/libpr-downloader_static.a
lib/libspringserver.so
lib/libunitsync.so
+%%MANPAGES%%man/man6/spring-dedicated.6.gz
+%%MANPAGES%%man/man6/spring-headless.6.gz
+%%MANPAGES%%man/man6/spring-multithreaded.6.gz
+%%MANPAGES%%man/man6/spring.6.gz
share/applications/spring.desktop
share/mime/packages/spring.xml
share/pixmaps/application-x-spring-demo.png
share/pixmaps/spring.png
-%%DATADIR%%/AI/Interfaces/C/0.1/InterfaceInfo.lua
-%%DATADIR%%/AI/Interfaces/C/0.1/libAIInterface.so
-%%DATADIR%%/AI/Skirmish/AAI/0.9/AIInfo.lua
-%%DATADIR%%/AI/Skirmish/AAI/0.9/AIOptions.lua
-%%DATADIR%%/AI/Skirmish/AAI/0.9/FAQ.txt
-%%DATADIR%%/AI/Skirmish/AAI/0.9/ReadMe.txt
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/general.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/help/example_general.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/help/example_mod.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/AA5.0project.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/AAIA10.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/BA.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/BOTA.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/BOTA_14.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/CA-BETA1.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/Expand_and_Exterminate_v_0.171.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/FF_1.21_S.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/KuroTA-v047.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/PURE0.51.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/S44Lyuban_v106.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/StarWars01.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/XTA.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/XTAPEV9585.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/gundam_1.1_epic.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/gundam_1.1_tiny.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod/tc.cfg
-%%DATADIR%%/AI/Skirmish/AAI/0.9/libSkirmishAI.so
-%%DATADIR%%/AI/Skirmish/CppTestAI/0.1/AIInfo.lua
-%%DATADIR%%/AI/Skirmish/CppTestAI/0.1/AIOptions.lua
-%%DATADIR%%/AI/Skirmish/CppTestAI/0.1/libSkirmishAI.so
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/AIInfo.lua
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/AIOptions.lua
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/BA-categorization-patch.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/BA-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/BA-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/BOTA-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/BOTA-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/NOTA-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/NOTA-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/SA-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/SA-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/XTA-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/XTA-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/ca-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/ca-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/ct-categorization.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/ct-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs/template-config.cfg
-%%DATADIR%%/AI/Skirmish/E323AI/3.25.0/libSkirmishAI.so
-%%DATADIR%%/AI/Skirmish/KAIK/0.13/AIInfo.lua
-%%DATADIR%%/AI/Skirmish/KAIK/0.13/AIOptions.lua
-%%DATADIR%%/AI/Skirmish/KAIK/0.13/libSkirmishAI.so
-%%DATADIR%%/AI/Skirmish/NullAI/0.1/AIInfo.lua
-%%DATADIR%%/AI/Skirmish/NullAI/0.1/AIOptions.lua
-%%DATADIR%%/AI/Skirmish/NullAI/0.1/libSkirmishAI.so
-%%DATADIR%%/AI/Skirmish/RAI/0.601/AIInfo.lua
-%%DATADIR%%/AI/Skirmish/RAI/0.601/AIOptions.lua
-%%DATADIR%%/AI/Skirmish/RAI/0.601/libSkirmishAI.so
-%%DATADIR%%/LuaUI/CHANGELOG.txt
-%%DATADIR%%/LuaUI/Config/README.txt
-%%DATADIR%%/LuaUI/Fonts/FreeMonoBold_12.lua
-%%DATADIR%%/LuaUI/Fonts/FreeMonoBold_12.png
-%%DATADIR%%/LuaUI/Fonts/README
-%%DATADIR%%/LuaUI/Headers/colors.h.lua
-%%DATADIR%%/LuaUI/Headers/keysym.h.lua
-%%DATADIR%%/LuaUI/Icons/chi.png
-%%DATADIR%%/LuaUI/Icons/cross.png
-%%DATADIR%%/LuaUI/Icons/diamond.png
-%%DATADIR%%/LuaUI/Icons/e.png
-%%DATADIR%%/LuaUI/Icons/hemi-down.png
-%%DATADIR%%/LuaUI/Icons/hemi-up.png
-%%DATADIR%%/LuaUI/Icons/hemi.png
-%%DATADIR%%/LuaUI/Icons/hourglass-side.png
-%%DATADIR%%/LuaUI/Icons/hourglass.png
-%%DATADIR%%/LuaUI/Icons/m-down.png
-%%DATADIR%%/LuaUI/Icons/m-up.png
-%%DATADIR%%/LuaUI/Icons/m.png
-%%DATADIR%%/LuaUI/Icons/sphere.png
-%%DATADIR%%/LuaUI/Icons/square.png
-%%DATADIR%%/LuaUI/Icons/square_+.png
-%%DATADIR%%/LuaUI/Icons/square_x.png
-%%DATADIR%%/LuaUI/Icons/star-dark.png
-%%DATADIR%%/LuaUI/Icons/star.png
-%%DATADIR%%/LuaUI/Icons/tri-down.png
-%%DATADIR%%/LuaUI/Icons/tri-up.png
-%%DATADIR%%/LuaUI/Icons/triangle-down.png
-%%DATADIR%%/LuaUI/Icons/triangle-up.png
-%%DATADIR%%/LuaUI/Icons/x.png
-%%DATADIR%%/LuaUI/Images/flags25x15.png
-%%DATADIR%%/LuaUI/Images/highlight_strip.png
-%%DATADIR%%/LuaUI/Images/players.png
-%%DATADIR%%/LuaUI/Models/colors.lua
-%%DATADIR%%/LuaUI/Models/colors.mtl
-%%DATADIR%%/LuaUI/Models/colors.obj
-%%DATADIR%%/LuaUI/NEWS.txt
-%%DATADIR%%/LuaUI/README.txt
-%%DATADIR%%/LuaUI/Sounds/README.txt
-%%DATADIR%%/LuaUI/Sounds/bounce.wav
-%%DATADIR%%/LuaUI/Sounds/flag_grab.wav
-%%DATADIR%%/LuaUI/Sounds/land.wav
-%%DATADIR%%/LuaUI/Sounds/message_admin.wav
-%%DATADIR%%/LuaUI/Sounds/message_private.wav
-%%DATADIR%%/LuaUI/Sounds/message_team.wav
-%%DATADIR%%/LuaUI/Sounds/pop.wav
-%%DATADIR%%/LuaUI/Sounds/teamgrab.wav
-%%DATADIR%%/LuaUI/Widgets/camera_shake.lua
-%%DATADIR%%/LuaUI/Widgets/camera_smooth_move.lua
-%%DATADIR%%/LuaUI/Widgets/gui_buildspacing.lua
-%%DATADIR%%/LuaUI/Widgets/gui_comm_ends.lua
-%%DATADIR%%/LuaUI/Widgets/gui_hilight_unit.lua
-%%DATADIR%%/LuaUI/Widgets/gui_selbuttons.lua
-%%DATADIR%%/LuaUI/Widgets/gui_team_platter.lua
-%%DATADIR%%/LuaUI/Widgets/gui_xray_shader.lua
-%%DATADIR%%/LuaUI/Widgets/headless_setup.lua
-%%DATADIR%%/LuaUI/Widgets/ingame_lobby.example.lua
-%%DATADIR%%/LuaUI/Widgets/minimap_relative.lua
-%%DATADIR%%/LuaUI/Widgets/minimap_startbox.lua
-%%DATADIR%%/LuaUI/Widgets/unit_factory_guard.lua
-%%DATADIR%%/LuaUI/Widgets/unit_immobile_buider.lua
-%%DATADIR%%/LuaUI/Widgets/unit_metal_maker.lua
-%%DATADIR%%/LuaUI/Widgets/unit_stockpile.lua
-%%DATADIR%%/LuaUI/actions.lua
-%%DATADIR%%/LuaUI/callins.lua
-%%DATADIR%%/LuaUI/ctrlpanel.txt
-%%DATADIR%%/LuaUI/debug.lua
-%%DATADIR%%/LuaUI/flags.lua
-%%DATADIR%%/LuaUI/fonts.lua
-%%DATADIR%%/LuaUI/layout.lua
-%%DATADIR%%/LuaUI/loadmodel.lua
-%%DATADIR%%/LuaUI/main.lua
-%%DATADIR%%/LuaUI/savetable.lua
-%%DATADIR%%/LuaUI/selector.lua
-%%DATADIR%%/LuaUI/setupdefs.lua
-%%DATADIR%%/LuaUI/system.lua
-%%DATADIR%%/LuaUI/tweakmode.lua
-%%DATADIR%%/LuaUI/utils.lua
-%%DATADIR%%/LuaUI/widgets.lua
-%%DATADIR%%/PALETTE.PAL
-%%DATADIR%%/base/cursors.sdz
-%%DATADIR%%/base/maphelper.sdz
-%%DATADIR%%/base/spring/bitmaps.sdz
-%%DATADIR%%/base/springcontent.sdz
-%%DATADIR%%/cmdcolors.txt
-%%DATADIR%%/ctrlpanel.txt
-%%DATADIR%%/fonts/AUTHORS
-%%DATADIR%%/fonts/COPYING
-%%DATADIR%%/fonts/CREDITS
-%%DATADIR%%/fonts/FreeSansBold.otf
-%%DATADIR%%/fonts/README
-%%DATADIR%%/luaui.lua
-%%DATADIR%%/selectkeys.txt
-%%DATADIR%%/springrc-template-headless.txt
-%%DATADIR%%/teamcolors.lua
-%%DATADIR%%/uikeys.txt
-@dirrm %%DATADIR%%/fonts
-@dirrm %%DATADIR%%/base/spring
-@dirrm %%DATADIR%%/base
-@dirrm %%DATADIR%%/LuaUI/Widgets
-@dirrm %%DATADIR%%/LuaUI/Sounds
-@dirrm %%DATADIR%%/LuaUI/Models
-@dirrm %%DATADIR%%/LuaUI/Images
-@dirrm %%DATADIR%%/LuaUI/Icons
-@dirrm %%DATADIR%%/LuaUI/Headers
-@dirrm %%DATADIR%%/LuaUI/Fonts
-@dirrm %%DATADIR%%/LuaUI/Config
-@dirrm %%DATADIR%%/LuaUI
-@dirrm %%DATADIR%%/AI/Skirmish/RAI/0.601
-@dirrm %%DATADIR%%/AI/Skirmish/RAI
-@dirrm %%DATADIR%%/AI/Skirmish/NullAI/0.1
-@dirrm %%DATADIR%%/AI/Skirmish/NullAI
-@dirrm %%DATADIR%%/AI/Skirmish/KAIK/0.13
-@dirrm %%DATADIR%%/AI/Skirmish/KAIK
-@dirrm %%DATADIR%%/AI/Skirmish/E323AI/3.25.0/configs
-@dirrm %%DATADIR%%/AI/Skirmish/E323AI/3.25.0
-@dirrm %%DATADIR%%/AI/Skirmish/E323AI
-@dirrm %%DATADIR%%/AI/Skirmish/CppTestAI/0.1
-@dirrm %%DATADIR%%/AI/Skirmish/CppTestAI
-@dirrm %%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/mod
-@dirrm %%DATADIR%%/AI/Skirmish/AAI/0.9/cfg/help
-@dirrm %%DATADIR%%/AI/Skirmish/AAI/0.9/cfg
-@dirrm %%DATADIR%%/AI/Skirmish/AAI/0.9
-@dirrm %%DATADIR%%/AI/Skirmish/AAI
-@dirrm %%DATADIR%%/AI/Skirmish
-@dirrm %%DATADIR%%/AI/Interfaces/C/0.1
-@dirrm %%DATADIR%%/AI/Interfaces/C
-@dirrm %%DATADIR%%/AI/Interfaces
-@dirrm %%DATADIR%%/AI
-@dirrm %%DATADIR%%
@dirrmtry share/mime/packages
@dirrmtry share/mime