diff --git a/games-action/teeworlds/patches/teeworlds-0.6.3.patch b/games-action/teeworlds/patches/teeworlds-0.6.3.patch new file mode 100644 index 000000000..923557a4d --- /dev/null +++ b/games-action/teeworlds/patches/teeworlds-0.6.3.patch @@ -0,0 +1,283 @@ +diff -ur teeworlds-0.6.3-src-orig/bam.lua teeworlds-0.6.3-src/bam.lua +--- teeworlds-0.6.3-src-orig/bam.lua 2014-11-20 00:08:23.059768832 +0200 ++++ teeworlds-0.6.3-src/bam.lua 2014-12-17 00:47:27.678428672 +0200 +@@ -184,6 +184,12 @@ + settings.link.libs:Add("ws2_32") + settings.link.libs:Add("ole32") + settings.link.libs:Add("shell32") ++ elseif family == "beos" and platform == "haiku" then ++ settings.link.libs:Add("be") ++ settings.link.libs:Add("root") ++ settings.link.libs:Add("network") ++ settings.link.libs:Add("GL"); ++ settings.link.libs:Add("GLU"); + end + + -- compile zlib if needed +diff -ur teeworlds-0.6.3-src-orig/src/base/detect.h teeworlds-0.6.3-src/src/base/detect.h +--- teeworlds-0.6.3-src-orig/src/base/detect.h 2014-11-20 00:08:22.046137344 +0200 ++++ teeworlds-0.6.3-src/src/base/detect.h 2014-12-16 21:31:00.576192512 +0200 +@@ -68,7 +68,7 @@ + #endif + + /* beos family */ +-#if defined(__BeOS) || defined(__BEOS__) ++#if defined(__BeOS) || defined(__BEOS__) || defined(__HAIKU__) + #define CONF_FAMILY_BEOS 1 + #define CONF_FAMILY_STRING "beos" + #define CONF_PLATFORM_BEOS 1 +diff -ur teeworlds-0.6.3-src-orig/src/base/system.c teeworlds-0.6.3-src/src/base/system.c +--- teeworlds-0.6.3-src-orig/src/base/system.c 2014-11-20 00:08:22.047448064 +0200 ++++ teeworlds-0.6.3-src/src/base/system.c 2014-12-17 18:20:36.652738560 +0200 +@@ -9,7 +9,7 @@ + + #include "system.h" + +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + #include + #include + +@@ -372,7 +372,7 @@ + + void *thread_create(void (*threadfunc)(void *), void *u) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_t id; + pthread_create(&id, NULL, (void *(*)(void*))threadfunc, u); + return (void*)id; +@@ -385,7 +385,7 @@ + + void thread_wait(void *thread) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_join((pthread_t)thread, NULL); + #elif defined(CONF_FAMILY_WINDOWS) + WaitForSingleObject((HANDLE)thread, INFINITE); +@@ -396,7 +396,7 @@ + + void thread_destroy(void *thread) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + void *r = 0; + pthread_join((pthread_t)thread, &r); + #else +@@ -406,7 +406,7 @@ + + void thread_yield() + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + sched_yield(); + #elif defined(CONF_FAMILY_WINDOWS) + Sleep(0); +@@ -417,7 +417,7 @@ + + void thread_sleep(int milliseconds) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + usleep(milliseconds*1000); + #elif defined(CONF_FAMILY_WINDOWS) + Sleep(milliseconds); +@@ -428,7 +428,7 @@ + + void thread_detach(void *thread) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_detach((pthread_t)(thread)); + #elif defined(CONF_FAMILY_WINDOWS) + CloseHandle(thread); +@@ -440,7 +440,7 @@ + + + +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + typedef pthread_mutex_t LOCKINTERNAL; + #elif defined(CONF_FAMILY_WINDOWS) + typedef CRITICAL_SECTION LOCKINTERNAL; +@@ -452,7 +452,7 @@ + { + LOCKINTERNAL *lock = (LOCKINTERNAL*)mem_alloc(sizeof(LOCKINTERNAL), 4); + +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_mutex_init(lock, 0x0); + #elif defined(CONF_FAMILY_WINDOWS) + InitializeCriticalSection((LPCRITICAL_SECTION)lock); +@@ -464,7 +464,7 @@ + + void lock_destroy(LOCK lock) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_mutex_destroy((LOCKINTERNAL *)lock); + #elif defined(CONF_FAMILY_WINDOWS) + DeleteCriticalSection((LPCRITICAL_SECTION)lock); +@@ -476,7 +476,7 @@ + + int lock_try(LOCK lock) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + return pthread_mutex_trylock((LOCKINTERNAL *)lock); + #elif defined(CONF_FAMILY_WINDOWS) + return !TryEnterCriticalSection((LPCRITICAL_SECTION)lock); +@@ -487,7 +487,7 @@ + + void lock_wait(LOCK lock) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_mutex_lock((LOCKINTERNAL *)lock); + #elif defined(CONF_FAMILY_WINDOWS) + EnterCriticalSection((LPCRITICAL_SECTION)lock); +@@ -498,7 +498,7 @@ + + void lock_release(LOCK lock) + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + pthread_mutex_unlock((LOCKINTERNAL *)lock); + #elif defined(CONF_FAMILY_WINDOWS) + LeaveCriticalSection((LPCRITICAL_SECTION)lock); +@@ -508,7 +508,7 @@ + } + + #if !defined(CONF_PLATFORM_MACOSX) +- #if defined(CONF_FAMILY_UNIX) ++ #if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + void semaphore_init(SEMAPHORE *sem) { sem_init(sem, 0, 0); } + void semaphore_wait(SEMAPHORE *sem) { sem_wait(sem); } + void semaphore_signal(SEMAPHORE *sem) { sem_post(sem); } +@@ -527,7 +527,7 @@ + /* ----- time ----- */ + int64 time_get() + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + struct timeval val; + gettimeofday(&val, NULL); + return (int64)val.tv_sec*(int64)1000000+(int64)val.tv_usec; +@@ -546,7 +546,7 @@ + + int64 time_freq() + { +-#if defined(CONF_FAMILY_UNIX) ++#if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + return 1000000; + #elif defined(CONF_FAMILY_WINDOWS) + int64 t; +@@ -1354,6 +1354,16 @@ + return -1; + _snprintf(path, max, "%s/%s", home, appname); + return 0; ++#elif defined(CONF_FAMILY_BEOS) ++ #include ++ ++ dev_t device = (dev_t)-1; ++ char *datadir; ++ ++ status_t status = find_directory(B_USER_DATA_DIRECTORY, device, false, datadir, max); ++ if (status < B_OK) return -1; ++ snprintf(path, max, "%s/%s", datadir, appname); ++ return 0; + #else + char *home = getenv("HOME"); + #if !defined(CONF_PLATFORM_MACOSX) +@@ -1795,7 +1805,7 @@ + &theItem); + + RunStandardAlert(theItem, NULL, &itemIndex); +-#elif defined(CONF_FAMILY_UNIX) ++#elif defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + static char cmd[1024]; + int err; + /* use xmessage which is available on nearly every X11 system */ +diff -ur teeworlds-0.6.3-src-orig/src/base/system.h teeworlds-0.6.3-src/src/base/system.h +--- teeworlds-0.6.3-src-orig/src/base/system.h 2014-11-20 00:08:22.046137344 +0200 ++++ teeworlds-0.6.3-src/src/base/system.h 2014-12-16 21:31:00.580124672 +0200 +@@ -411,7 +411,7 @@ + /* Group: Semaphores */ + + #if !defined(CONF_PLATFORM_MACOSX) +- #if defined(CONF_FAMILY_UNIX) ++ #if defined(CONF_FAMILY_UNIX) || defined(CONF_FAMILY_BEOS) + #include + typedef sem_t SEMAPHORE; + #elif defined(CONF_FAMILY_WINDOWS) +diff -ur teeworlds-0.6.3-src-orig/src/engine/client/backend_sdl.cpp teeworlds-0.6.3-src/src/engine/client/backend_sdl.cpp +--- teeworlds-0.6.3-src-orig/src/engine/client/backend_sdl.cpp 2014-11-20 00:08:22.004980736 +0200 ++++ teeworlds-0.6.3-src/src/engine/client/backend_sdl.cpp 2014-12-16 23:45:27.095944704 +0200 +@@ -1,6 +1,6 @@ + +-#include "SDL.h" +-#include "SDL_opengl.h" ++#include ++#include + + #include + +diff -ur teeworlds-0.6.3-src-orig/src/engine/client/backend_sdl.h teeworlds-0.6.3-src/src/engine/client/backend_sdl.h +--- teeworlds-0.6.3-src-orig/src/engine/client/backend_sdl.h 2014-11-20 00:08:22.005767168 +0200 ++++ teeworlds-0.6.3-src/src/engine/client/backend_sdl.h 2014-12-17 18:21:15.679215104 +0200 +@@ -1,12 +1,12 @@ + +-#include "SDL.h" +-#include "SDL_opengl.h" ++#include ++#include + + #include "graphics_threaded.h" + + + +-// platform dependent implementations for transfering render context from the main thread to the graphics thread ++// platform dependent implementations for transfering render Context from the main thread to the graphics thread + // TODO: when SDL 1.3 comes, this can be removed + #if defined(CONF_FAMILY_WINDOWS) + struct SGLContext +@@ -49,7 +49,7 @@ + { + SGLContext Context; + Class NSOpenGLContextClass = (Class) objc_getClass("NSOpenGLContext"); +- SEL selector = sel_registerName("currentContext"); ++ SEL selector = sel_reg0isterName("currentContext"); + Context.m_Context = objc_msgSend((objc_object*) NSOpenGLContextClass, selector); + return Context; + } +@@ -117,6 +117,29 @@ + static void GL_MakeCurrent(const SGLContext &Context) { glXMakeCurrent(Context.m_pDisplay, Context.m_Drawable, Context.m_Context); } + static void GL_ReleaseContext(const SGLContext &Context) { glXMakeCurrent(Context.m_pDisplay, None, 0x0); } + static void GL_SwapBuffers(const SGLContext &Context) { glXSwapBuffers(Context.m_pDisplay, Context.m_Drawable); } ++#elif defined(CONF_FAMILY_BEOS) ++ ++ #include ++ #include ++ ++ struct SGLContext ++ { ++ BGLView* view; ++ }; ++ ++ static SGLContext GL_GetCurrentContext() ++ { ++ SGLContext Context; ++ ++ BApplication *be_app = new BApplication("application/x-vnd.tw-teeworlds"); ++ ++ Context.view = ((BGLView*) be_app->WindowAt(0)->ChildAt(0)); ++ return Context; ++ } ++ ++ static void GL_MakeCurrent(const SGLContext &Context) { Context.view->LockGL(); } ++ static void GL_ReleaseContext(const SGLContext &Context) { Context.view->UnlockGL(); } ++ static void GL_SwapBuffers(const SGLContext &Context) { Context.view->SwapBuffers(); } + #else + #error missing implementation + #endif diff --git a/games-action/teeworlds/teeworlds-0.6.3.recipe b/games-action/teeworlds/teeworlds-0.6.3.recipe new file mode 100644 index 000000000..a3713b30e --- /dev/null +++ b/games-action/teeworlds/teeworlds-0.6.3.recipe @@ -0,0 +1,59 @@ +SUMMARY="Teeworlds is a retro multiplayer shooter" +DESCRIPTION="Teeworlds is a free online multiplayer game, available for \ +all major operating systems. Battle with up to 16 players in a variety of \ +game modes, including Team Deathmatch and Capture The Flag. You can even \ +design your own maps!" + +LICENSE="Zlib" +COPYRIGHT="2007-2012 Magnus Auvinen" + +ARCHITECTURES="!x86" # Once it works, remove the bang +if [ $effectiveTargetArchitecture != "x86_gcc2" ]; then + ARCHITECTURES="!x86_gcc2 $ARCHITECTURES" # Once it works, remove the bang +else + ARCHITECTURES="!x86_gcc2 $ARCHITECTURES" +fi +SECONDARY_ARCHITECTURES="!x86_gcc2 !x86" # Once it works, remove the bang on x86 +REVISION="1" +HOMEPAGE="https://www.teeworlds.com" +SRC_URI="https://downloads.teeworlds.com/teeworlds-0.6.3-src.tar.gz" +CHECKSUM_SHA256="490ee7c372898761c609af8d7b0c6bd55942c6c6fcd7f361eefa00abfc70077b" +SOURCE_DIR="teeworlds-0.6.3-src" + +PROVIDES=" + teeworlds$secondaryArchSuffix = $portVersion + cmd:teeworlds$secondaryArchSuffix = $portVersion + " + +REQUIRES=" + haiku$secondaryArchSuffix >= $haikuVersion + lib:libGL$secondaryArchSuffix + lib:libGLU$secondaryArchSuffix + " + +BUILD_REQUIRES=" + " + +BUILD_PREREQUIRES=" + haiku${secondaryArchSuffix}_devel >= $haikuVersion + devel:libz$secondaryArchSuffix + devel:libsdl$secondaryArchSuffix + devel:libfreetype$secondaryArchSuffix + devel:libglu$secondaryArchSuffix + cmd:gcc$secondaryArchSuffix + cmd:bam$secondaryArchSuffix + cmd:python + " + +PATCHES="teeworlds-0.6.3.patch" + +BUILD() +{ + bam release +} + +INSTALL() +{ + mkdir -p $binDir + cp teeworlds $binDir +}