0
0
Fork 0
haikuports/games-action/teeworlds/patches/teeworlds-0.7.5.patchset

173 lines
5.2 KiB
Plaintext

From 7a12e331f2f9f46df9983796f71d5104ff045c08 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Tue, 13 Apr 2021 12:49:21 +1000
Subject: Add haiku support
diff --git a/CMakeLists.txt b/CMakeLists.txt
old mode 100755
new mode 100644
index 65dfdd3..9cf07fb
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,6 +60,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(TARGET_OS "windows")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(TARGET_OS "linux")
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Haiku")
+ set(TARGET_OS "haiku")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(TARGET_OS "mac")
endif()
@@ -149,7 +151,7 @@ function(add_c_compiler_flag_if_supported VARIABLE FLAG)
endif()
endfunction()
-if(NOT MSVC)
+if(NOT MSVC AND NOT HAIKU)
# Protect the stack pointer.
# -fstack-protector-all doesn't work on MinGW.
add_c_compiler_flag_if_supported(OUR_FLAGS -fstack-protector-strong)
@@ -409,6 +411,10 @@ elseif(TARGET_OS STREQUAL "mac")
)
set(PLATFORM_CLIENT_LIBS ${COCOA} ${OPENGL})
set(PLATFORM_LIBS ${CARBON})
+elseif(TARGET_OS STREQUAL "haiku")
+ set(PLATFORM_CLIENT)
+ find_package(OpenGL)
+ set(PLATFORM_LIBS GL network)
else()
set(PLATFORM_CLIENT)
find_package(OpenGL)
diff --git a/src/base/detect.h b/src/base/detect.h
old mode 100755
new mode 100644
index 5093162..9d68fb8
--- a/src/base/detect.h
+++ b/src/base/detect.h
@@ -82,6 +82,13 @@
#define CONF_PLATFORM_STRING "beos"
#endif
+#if defined(__HAIKU__)
+ #define CONF_FAMILY_UNIX 1
+ #define CONF_FAMILY_STRING "unix"
+ #define CONF_PLATFORM_HAIKU 1
+ #define CONF_PLATFORM_STRING "haiku"
+#endif
+
/* use gcc endianness definitions when available */
#if defined(__GNUC__) && !defined(__APPLE__) && !defined(__MINGW32__) && !defined(__sun)
diff --git a/src/base/system.c b/src/base/system.c
old mode 100755
new mode 100644
index 9a1a042..16c9013
--- a/src/base/system.c
+++ b/src/base/system.c
@@ -1541,6 +1541,11 @@ int fs_storage_path(const char *appname, char *path, int max)
if(!home)
return -1;
+#if defined(CONF_PLATFORM_HAIKU)
+ str_format(path, max, "%s/config/settings/%s", home, appname);
+ return 0;
+#endif
+
#if defined(CONF_PLATFORM_MACOSX)
str_format(path, max, "%s/Library/Application Support/%s", home, appname);
return 0;
@@ -1588,6 +1593,11 @@ int fs_makedir(const char *path)
return 0;
return -1;
#else
+#ifdef CONF_PLATFORM_HAIKU
+ struct stat st;
+ if (stat(path, &st) == 0)
+ return 0;
+#endif
if(mkdir(path, 0755) == 0)
return 0;
if(errno == EEXIST)
diff --git a/src/base/system.h b/src/base/system.h
old mode 100755
new mode 100644
index f08a9e3..a91e611
--- a/src/base/system.h
+++ b/src/base/system.h
@@ -503,7 +503,11 @@ void lock_unlock(LOCK lock);
/* if compiled with -pedantic-errors it will complain about long
not being a C90 thing.
*/
+#ifdef CONF_PLATFORM_HAIKU
+#include <SupportDefs.h>
+#else
__extension__ typedef long long int64;
+#endif
#else
typedef long long int64;
#endif
diff --git a/src/engine/client/backend_sdl.cpp b/src/engine/client/backend_sdl.cpp
old mode 100755
new mode 100644
index 5f92d58..064d65d
--- a/src/engine/client/backend_sdl.cpp
+++ b/src/engine/client/backend_sdl.cpp
@@ -698,7 +698,7 @@ int CGraphicsBackend_SDL_OpenGL::Init(const char *pName, int *pScreen, int *pWin
if(Flags&IGraphicsBackend::INITFLAG_BORDERLESS)
SdlFlags |= SDL_WINDOW_BORDERLESS;
if(Flags&IGraphicsBackend::INITFLAG_FULLSCREEN)
-#if defined(CONF_PLATFORM_MACOSX) // Todo SDL: remove this when fixed (game freezes when losing focus in fullscreen)
+#if defined(CONF_PLATFORM_MACOSX) || defined(CONF_PLATFORM_HAIKU) // Todo SDL: remove this when fixed (game freezes when losing focus in fullscreen)
SdlFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP; // always use "fake" fullscreen
*pWindowWidth = *pDesktopWidth;
*pWindowHeight = *pDesktopHeight;
@@ -829,7 +829,7 @@ void CGraphicsBackend_SDL_OpenGL::Maximize()
bool CGraphicsBackend_SDL_OpenGL::Fullscreen(bool State)
{
-#if defined(CONF_PLATFORM_MACOSX) // Todo SDL: remove this when fixed (game freezes when losing focus in fullscreen)
+#if defined(CONF_PLATFORM_MACOSX) || defined(CONF_PLATFORM_HAIKU) // Todo SDL: remove this when fixed (game freezes when losing focus in fullscreen)
return SDL_SetWindowFullscreen(m_pWindow, State ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0) == 0;
#else
return SDL_SetWindowFullscreen(m_pWindow, State ? SDL_WINDOW_FULLSCREEN : 0) == 0;
diff --git a/src/engine/shared/storage.cpp b/src/engine/shared/storage.cpp
old mode 100755
new mode 100644
index f646f3e..632c895
--- a/src/engine/shared/storage.cpp
+++ b/src/engine/shared/storage.cpp
@@ -5,6 +5,9 @@
#include <engine/storage.h>
#include "linereader.h"
#include <zlib.h>
+#ifdef CONF_PLATFORM_HAIKU
+#include <stdlib.h>
+#endif
// compiled-in data-dir path
#define DATA_DIR "data"
@@ -216,6 +219,9 @@ public:
void FindAppDir(const char *pArgv0)
{
+#ifdef CONF_PLATFORM_HAIKU
+ pArgv0 = realpath(pArgv0, NULL);
+#endif
// check for usable path in argv[0]
unsigned int Pos = ~0U;
for(unsigned i = 0; pArgv0[i]; ++i)
@@ -228,6 +234,9 @@ public:
if(!fs_is_dir(m_aAppDir))
m_aAppDir[0] = 0;
}
+#ifdef CONF_PLATFORM_HAIKU
+ free((void*)pArgv0);
+#endif
}
void FindDataDir()
--
2.30.2