Warzone 2100 port (#13170)

This commit is contained in:
Peppersawce
2026-03-29 07:55:32 +02:00
committed by GitHub
parent 389666848e
commit e325317476
3 changed files with 378 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
resource app_flags B_SINGLE_LAUNCH;
resource app_version {
major = @MAJOR@,
middle = @MIDDLE@,
minor = @MINOR@,
variety = B_APPV_FINAL,
internal = 0,
short_info = "Warzone 2100",
long_info = "@LONG_INFO@"
};
resource app_signature "application/x-vnd.warzone2100";
resource large_icon array {
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFF67661B1B1B1B1B1B1B1C1C1C1C1C1C1B1B1B616767676767FFFFFFFF"
$"FFFF671B191213131313131313131313121212121211111110100F876767FFFF"
$"FFFF6013051419150F10181B1B1112121967120F1961676767878E058E1BFFFF"
$"FFFF660904171C1713141B1D1E1412121D1E13121A1B1B1B1B1B14030A1CFFFF"
$"FFFF6609AE671C1714141C1E1E1513141E1E1514131313131D6010D50A60FFFF"
$"FFFF1D090A671C1714141C1E1E1514141E1E1715161515186067D5070A66FFFF"
$"FFFF1C0705671B141111191B1C1312121B1C131211101161678ED5D50867FFFF"
$"FFFF6007D56766120CAE676666B50A0A87670A0709D5AE8D8DB50AD50966FFFF"
$"FFFF1C09AE676012AED56766660AD5D567660A0707D5671B19B50AAE0B1DFFFF"
$"FFFF1D09B567661107D5671C1C0AD5091B1D10AEB50E1D1C140CD5D50866FFFF"
$"FF191B07D5191C12D5D51A1C1D0EAEAE1C1B8E8E0A146767080706070866FFFF"
$"FF676707D5676012AEAE196066AEAEB56767B5D5D56767160405070708668EFF"
$"FF8767D5AE8D878EAE8E6767670C070E601B08D5111B6610D5B50AD509678EFF"
$"FF67670AAE136767081160606087D5136787B5B5876767B5B5AE0CB509678EFF"
$"FF676707060D66668E67670A8D678E6767138E136767676767678705086116FF"
$"FF191905D5D5876767678EAE8E671B6067AEAEB56666666666676706076787FF"
$"FF676708B5AEAEAEAEAEAE8EAEAE0AD5D5D5D5D5070707080808070A09678DFF"
$"FF8E6787AEAEAEAE8E8D8D8767676767676767878767678EAEAEAEB58D8DB5FF"
$"FFFF126116B5081566878E8E8E12128E8EAE8E1313131367870CD58D670EFFFF"
$"FFFFFF131B17181B11D511121210188E13128E8E131306AE6787671B10FFFFFF"
$"FFFFFFFF156160128E8E148E610867AE180C671213160DD50F666711FFFFFFFF"
$"FFFFFFFFFF04186709AEAE151605670A1807181312160F09676704FFFFFFFFFF"
$"FFFFFFFFFFFFFF6014D514190A04670A18AF671214160E12660FFFFFFFFFFFFF"
$"FFFFFFFFFFFFFF171B0D141715D5140811110FAE13130B6715FFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFF61181212121212118E1111111111676708FFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFF131B1B1B1B606060606666666667678EFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFF0505050505050505050505050505FFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
};
resource mini_icon array {
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFF671B1B1B1B1D1C1C1B676767FFFF"
$"FF6713161217161316121616871067FF"
$"FF871261141C1A131E1317181C0E15FF"
$"FF161219131B19131D14131667D58EFF"
$"FF1513670C6787D5670808878EB515FF"
$"FF151317D51B16B51C10AE1BAFD58EFF"
$"FF8E8E87AE67870C6609876708D513FF"
$"FF8E0E678E67678E67AE678713AE13FF"
$"FF12B58E8D8E8E87AE0A1313130E13FF"
$"FF6710AE878E8787878787878EAE8DFF"
$"FFFF18180F121315131314B58767FFFF"
$"FFFFFF180E150D121315140F67FFFFFF"
$"FFFFFFFF6714121111101316FFFFFFFF"
$"FFFFFFFF151616878787878EFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
};

View File

@@ -0,0 +1,183 @@
From 81fc679557028d79c94e872dfb3eeb0f69ebfeff Mon Sep 17 00:00:00 2001
From: Peppersawce <michaelpeppers89@yahoo.it>
Date: Mon, 27 Oct 2025 20:05:20 +0100
Subject: Haiku fixes
diff --git a/3rdparty/readerwriterqueue/atomicops.h b/3rdparty/readerwriterqueue/atomicops.h
index f58bcf8..24b145d 100644
--- a/3rdparty/readerwriterqueue/atomicops.h
+++ b/3rdparty/readerwriterqueue/atomicops.h
@@ -372,7 +372,7 @@ extern "C" {
}
#elif defined(__MACH__)
#include <mach/mach.h>
-#elif defined(__unix__)
+#elif defined(__unix__) || defined(__HAIKU__)
#include <semaphore.h>
#elif defined(FREERTOS)
#include <FreeRTOS.h>
@@ -510,7 +510,7 @@ namespace moodycamel
}
}
};
-#elif defined(__unix__)
+#elif defined(__unix__) || defined(__HAIKU__)
//---------------------------------------------------------
// Semaphore (POSIX, Linux)
//---------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 372438b..6a94833 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -212,7 +212,11 @@ endif()
INCLUDE(AddTargetLinkFlagsIfSupported)
# Use "-fPIC" / "-fPIE" for all targets by default, including static libs
-set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+if (HAIKU)
+ set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
+else()
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+endif()
set(WZ_WIN_HAS_PDB FALSE)
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")
diff --git a/lib/framework/wzglobal.h b/lib/framework/wzglobal.h
index ad32013..46fa2de 100644
--- a/lib/framework/wzglobal.h
+++ b/lib/framework/wzglobal.h
@@ -108,7 +108,7 @@
# define WZ_OS_RELIANT
#elif defined(__linux__) || defined(__linux)
# define WZ_OS_LINUX
-#elif defined(__FreeBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__HAIKU__)
# define WZ_OS_FREEBSD
# define WZ_OS_BSD4
#elif defined(__FreeBSD_kernel__) && !defined(__FreeBSD__)
diff --git a/lib/sound/oggvorbis.cpp b/lib/sound/oggvorbis.cpp
index c02f6d1..2fd4aba 100644
--- a/lib/sound/oggvorbis.cpp
+++ b/lib/sound/oggvorbis.cpp
@@ -57,7 +57,7 @@ static size_t wz_ogg_read(void *ptr, size_t size, size_t nmemb, void *datasource
return WZ_PHYSFS_readBytes(fileHandle, ptr, static_cast<PHYSFS_uint32>(readLen));
}
-static int wz_ogg_seek(void *datasource, int64_t offset, int whence)
+static int wz_ogg_seek(void *datasource, ogg_int64_t offset, int whence)
{
PHYSFS_file *fileHandle;
int64_t newPos;
diff --git a/lib/wzmaplib/src/map_io.cpp b/lib/wzmaplib/src/map_io.cpp
index 992b649..60c97d8 100644
--- a/lib/wzmaplib/src/map_io.cpp
+++ b/lib/wzmaplib/src/map_io.cpp
@@ -744,7 +744,9 @@ bool enumerateDirInternal(const std::string& rootBasePath, const std::string& ba
continue;
}
fullFilePath = basePath + "/" + dir->d_name;
- if (dir->d_type == DT_DIR)
+ struct stat stbuf;
+ stat(dir->d_name, &stbuf);
+ if (S_ISDIR(stbuf.st_mode))
{
// recurse
if (((enumDirFlags & ENUM_FOLDERS) == ENUM_FOLDERS))
diff --git a/src/version.cpp b/src/version.cpp
index 7db79e8..e0be3cc 100644
--- a/src/version.cpp
+++ b/src/version.cpp
@@ -225,14 +225,14 @@ std::string version_getBuildIdentifierReleaseEnvironment()
if (strlen(vcs_tag))
{
optional<TagVer> tagVersion = version_extractVersionNumberFromTag(vcs_tag);
- if (tagVersion.has_value() && strlen(tagVersion.value().qualifier) != 0)
+ /*if (tagVersion.has_value() && strlen(tagVersion.value().qualifier) != 0)
{
buildReleaseEnvironmentStr = "preview";
}
else
- {
+ {*/
buildReleaseEnvironmentStr = "release";
- }
+ //}
}
else
{
--
2.51.0
From 1b4035c7f8778d9525d000ca582cae4018229078 Mon Sep 17 00:00:00 2001
From: Peppersawce <michaelpeppers89@yahoo.it>
Date: Fri, 31 Oct 2025 17:05:13 +0100
Subject: GameNetworkingSockets: fake being FreeBSD
diff --git a/3rdparty/GameNetworkingSockets/CMakeLists.txt b/3rdparty/GameNetworkingSockets/CMakeLists.txt
index 25bc6a6..314b759 100644
--- a/3rdparty/GameNetworkingSockets/CMakeLists.txt
+++ b/3rdparty/GameNetworkingSockets/CMakeLists.txt
@@ -155,7 +155,7 @@ function(set_target_common_gns_properties TGT)
target_compile_definitions(${TGT} PUBLIC LINUX)
elseif(CMAKE_SYSTEM_NAME MATCHES Darwin)
target_compile_definitions(${TGT} PUBLIC OSX)
- elseif(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
+ elseif(CMAKE_SYSTEM_NAME MATCHES FreeBSD OR CMAKE_SYSTEM_NAME MATCHES Haiku)
target_compile_definitions(${TGT} PUBLIC FREEBSD)
elseif(CMAKE_SYSTEM_NAME MATCHES Windows)
target_compile_definitions(${TGT} PUBLIC _WINDOWS)
diff --git a/3rdparty/GameNetworkingSockets/src/CMakeLists.txt b/3rdparty/GameNetworkingSockets/src/CMakeLists.txt
index 998bd7f..c669832 100644
--- a/3rdparty/GameNetworkingSockets/src/CMakeLists.txt
+++ b/3rdparty/GameNetworkingSockets/src/CMakeLists.txt
@@ -294,7 +294,7 @@ macro(set_clientlib_target_properties GNS_TARGET)
#if(USE_STEAMWEBRTC AND NOT STEAMWEBRTC_USE_STATIC_LIBS)
# target_link_libraries(${GNS_TARGET} PRIVATE dl)
#endif()
- elseif(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
+ elseif(CMAKE_SYSTEM_NAME MATCHES FreeBSD OR CMAKE_SYSTEM_NAME MATCHES Haiku)
elseif(CMAKE_SYSTEM_NAME MATCHES Windows)
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
diff --git a/3rdparty/GameNetworkingSockets/src/public/minbase/minbase_identify.h b/3rdparty/GameNetworkingSockets/src/public/minbase/minbase_identify.h
index 2ab5730..df3e3c7 100644
--- a/3rdparty/GameNetworkingSockets/src/public/minbase/minbase_identify.h
+++ b/3rdparty/GameNetworkingSockets/src/public/minbase/minbase_identify.h
@@ -166,7 +166,7 @@
#elif defined( LINUX ) || defined( __LINUX__ ) || defined(linux) || defined(__linux) || defined(__linux__)
#define IsLinux() true
#define IsPosix() true
-#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__)
#define IsBSD() true
#define IsPosix() true
#elif defined( _POSIX_VERSION ) || defined( POSIX ) || defined( VALVE_POSIX )
--
2.51.0
From 0f55b8733407b8e378623b82c965e7e5a445f140 Mon Sep 17 00:00:00 2001
From: Peppersawce <michaelpeppers89@yahoo.it>
Date: Fri, 31 Oct 2025 17:57:34 +0100
Subject: Just work already
diff --git a/3rdparty/GameNetworkingSockets/src/tier0/dbg.cpp b/3rdparty/GameNetworkingSockets/src/tier0/dbg.cpp
index 455ab45..1baef41 100644
--- a/3rdparty/GameNetworkingSockets/src/tier0/dbg.cpp
+++ b/3rdparty/GameNetworkingSockets/src/tier0/dbg.cpp
@@ -139,7 +139,7 @@ void AssertMsgImplementationV( bool _bFatal, bool bFmt, const char* pstrFile, un
#elif defined( __clang__ )
abort();
#else
- std::quick_exit( EXIT_FAILURE );
+ abort();
#endif
}
--
2.51.0

View File

@@ -0,0 +1,126 @@
SUMMARY="A free and open-source 3D real-time strategy game"
DESCRIPTION="Warzone 2100 was originally developed by Pumpkin Studios and published by Eidos Interactive.
In 1999, it was released commercially for Microsoft Windows and Sony PlayStation.
Pumpkin Studios ended their support for Warzone 2100 on January 5, 2000.
In 2004, after fan petition, Warzone's source code was released publicly under an open-source license.
It has been developed, maintained, and improved by the community ever since, under the banner of the 'Warzone 2100 Project'."
HOMEPAGE="https://wz2100.net/"
COPYRIGHT="
2004-2026 Warzone 2100 Project
1999-2000 Pumpkin Studios
"
LICENSE="GNU GPL v2"
REVISION="1"
SOURCE_URI="https://github.com/Warzone2100/warzone2100/releases/download/$portVersion/warzone2100_src.tar.xz"
CHECKSUM_SHA256="431fe2436cff96878e2ed4edc6d0739453ad6293d6430b5832de9b522ff0b13a"
SOURCE_DIR="warzone2100"
SOURCE_URI_2="https://github.com/Warzone2100/data-terrain-high/releases/download/v3/high.wz#noarchive"
CHECKSUM_SHA256_2="a16a06c2a6b68e86a03934240880ec0b0fd72666606af3bf12ed5ffda7734f0e"
PATCHES="warzone2100-$portVersion.patchset"
ADDITIONAL_FILES="warzone2100.rdef.in"
ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"
PROVIDES="
warzone2100$secondaryArchSuffix = $portVersion
cmd:warzone2100
"
REQUIRES="
haiku$secondaryArchSuffix
lib:libcurl$secondaryArchSuffix
lib:libfreetype$secondaryArchSuffix
lib:libfribidi$secondaryArchSuffix
lib:libharfbuzz$secondaryArchSuffix
lib:libintl$secondaryArchSuffix
lib:libminiupnpc$secondaryArchSuffix
lib:libogg$secondaryArchSuffix
lib:libopenal$secondaryArchSuffix
lib:libopus$secondaryArchSuffix
lib:libpng16$secondaryArchSuffix
lib:libphysfs$secondaryArchSuffix
lib:libprotobuf$secondaryArchSuffix
lib:libSDL3$secondaryArchSuffix
lib:libsodium$secondaryArchSuffix
lib:libsqlite3$secondaryArchSuffix
lib:libtheoradec$secondaryArchSuffix
lib:libvorbis$secondaryArchSuffix
lib:libvorbisfile$secondaryArchSuffix
lib:libz$secondaryArchSuffix
lib:libzip$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
gcc${secondaryArchSuffix}_syslibs_devel
devel:libcurl$secondaryArchSuffix
devel:libfreetype$secondaryArchSuffix
devel:libfribidi$secondaryArchSuffix
devel:libharfbuzz$secondaryArchSuffix
devel:libminiupnpc$secondaryArchSuffix
devel:libogg$secondaryArchSuffix
devel:libopenal$secondaryArchSuffix
devel:libopus$secondaryArchSuffix
#devel:libopusfile$secondaryArchSuffix # Uses in-source one even when included
devel:libpng16$secondaryArchSuffix
devel:libprotobuf$secondaryArchSuffix
devel:libphysfs$secondaryArchSuffix
devel:libSDL3$secondaryArchSuffix
devel:libsodium$secondaryArchSuffix
devel:libsqlite3$secondaryArchSuffix
devel:libtheora$secondaryArchSuffix
devel:libvorbis$secondaryArchSuffix
devel:libvulkan$secondaryArchSuffix
devel:libzip$secondaryArchSuffix
"
BUILD_PREREQUIRES="
cmd:asciidoc # Optional, for documentation
cmd:basisu
cmd:cmake
cmd:gcc$secondaryArchSuffix
#cmd:git # Optional, inclusion messes up config/settings dir
cmd:gettext
#cmd:glslc # Optional, for vulkan renderer (that won't compile)
cmd:make
cmd:pkg_config$secondaryArchSuffix
cmd:zip
"
BUILD()
{
cmake -Bbuild -S. $cmakeDirArgs \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXE_LINKER_FLAGS="-lbsd -lnetwork" \
-DWZ_DOWNLOAD_PREBUILT_PACKAGES_ASSET_DIR=$sourceDir2
make -C build $jobArgs
}
INSTALL()
{
make -C build install
# Remove unneeded files
rm -rf $dataDir/{applications,icons,metainfo}
# Generate the rdef
local MAJOR="`echo "$portVersion" | cut -d. -f1`"
local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
local MINOR="`echo "$portVersion" | cut -d. -f3`"
local LONG_INFO="$SUMMARY"
sed \
-e "s|@MAJOR@|$MAJOR|" \
-e "s|@MIDDLE@|$MIDDLE|" \
-e "s|@MINOR@|$MINOR|" \
-e "s|@LONG_INFO@|$LONG_INFO|" \
$portDir/additional-files/warzone2100.rdef.in > warzone2100.rdef
addResourcesToBinaries warzone2100.rdef $prefix/bin/warzone2100
# Make the app name uppercase then link it back in lowercase for cmd
mkdir -p $appsDir && mv $prefix/bin/warzone2100 $appsDir/"Warzone 2100"
ln -s $appsDir/"Warzone 2100" $prefix/bin/warzone2100
addAppDeskbarSymlink $appsDir/"Warzone 2100"
}