From 619ab7a22d9999b9531652aff750e44802afeb3f Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 1 May 2017 18:39:05 -0400 Subject: [PATCH] haiku: Various fixes from haikuports. Based on patch here: https://github.com/haikuports/haikuports/blob/master/media-libs/libsdl2/patches/libsdl2-2.0.5.patchset --- configure | 17 +++++++++++------ configure.in | 12 ++++++------ src/main/haiku/SDL_BeApp.cc | 21 ++++++++++++++++++++- src/thread/pthread/SDL_systhread.c | 2 +- src/video/haiku/SDL_BWin.h | 4 ++-- src/video/haiku/SDL_bopengl.cc | 3 ++- 6 files changed, 42 insertions(+), 17 deletions(-) diff --git a/configure b/configure index a3e4104e7..aa2069732 100755 --- a/configure +++ b/configure @@ -16744,7 +16744,8 @@ done ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include " if test "x$ac_cv_member_struct_sigaction_sa_sigaction" = xyes; then : - $as_echo "#define HAVE_SA_SIGACTION 1" >>confdefs.h + +$as_echo "#define HAVE_SA_SIGACTION /**/" >>confdefs.h fi @@ -20173,7 +20174,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO"; then : have_const_param_XextAddDisplay=yes - $as_echo "#define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1" >>confdefs.h + +$as_echo "#define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY /**/" >>confdefs.h fi @@ -20207,7 +20209,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO"; then : have_XGenericEvent=yes - $as_echo "#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1" >>confdefs.h + +$as_echo "#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS /**/" >>confdefs.h fi @@ -20552,7 +20555,8 @@ _ACEOF if ac_fn_c_try_compile "$LINENO"; then : have_xinput2_multitouch=yes - $as_echo "#define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1" >>confdefs.h + +$as_echo "#define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH /**/" >>confdefs.h SUMMARY_video_x11="${SUMMARY_video_x11} xinput2_multitouch" @@ -22278,7 +22282,8 @@ _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_sem_timedwait=yes - $as_echo "#define HAVE_SEM_TIMEDWAIT 1" >>confdefs.h + +$as_echo "#define HAVE_SEM_TIMEDWAIT /**/" >>confdefs.h fi @@ -23670,7 +23675,7 @@ $as_echo "#define SDL_FILESYSTEM_HAIKU 1" >>confdefs.h fi # The Haiku platform requires special setup. SOURCES="$srcdir/src/main/haiku/*.cc $SOURCES" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lroot -lbe -lmedia -lgame -ldevice -ltextencoding" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lroot -lbe -lmedia -lgame -ldevice -ltextencoding -lstdc++.r4" ;; arm*-apple-darwin*|*-ios-*) ARCH=ios diff --git a/configure.in b/configure.in index f1acc11fe..7e9554019 100644 --- a/configure.in +++ b/configure.in @@ -276,7 +276,7 @@ if test x$enable_libc = xyes; then AC_CHECK_LIB(iconv, iconv_open, [LIBS="$LIBS -liconv"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"]) AC_CHECK_FUNCS(iconv) - AC_CHECK_MEMBER(struct sigaction.sa_sigaction,[AC_DEFINE(HAVE_SA_SIGACTION)], ,[#include ]) + AC_CHECK_MEMBER(struct sigaction.sa_sigaction,[AC_DEFINE([HAVE_SA_SIGACTION], [], [Description])], ,[#include ]) fi dnl AC_CHECK_SIZEOF(void*) @@ -1619,7 +1619,7 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically load X11 support [[default=ma ],[ ],[ have_const_param_XextAddDisplay=yes - AC_DEFINE(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY) + AC_DEFINE([SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY], [], [Description]) ]) AC_MSG_RESULT($have_const_param_XextAddDisplay) @@ -1637,7 +1637,7 @@ XGetEventData(display, cookie); XFreeEventData(display, cookie); ],[ have_XGenericEvent=yes - AC_DEFINE(SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS) + AC_DEFINE([SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS], [], [Description]) ]) AC_MSG_RESULT($have_XGenericEvent) @@ -1751,7 +1751,7 @@ int event_type = XI_TouchBegin; XITouchClassInfo *t; ],[ have_xinput2_multitouch=yes - AC_DEFINE(SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH) + AC_DEFINE([SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH], [], [Description]) SUMMARY_video_x11="${SUMMARY_video_x11} xinput2_multitouch" ]) AC_MSG_RESULT($have_xinput2_multitouch) @@ -2605,7 +2605,7 @@ AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]) sem_timedwait(NULL, NULL); ],[ have_sem_timedwait=yes - AC_DEFINE(HAVE_SEM_TIMEDWAIT) + AC_DEFINE([HAVE_SEM_TIMEDWAIT], [], [Description]) ]) AC_MSG_RESULT($have_sem_timedwait) fi @@ -3345,7 +3345,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau fi # The Haiku platform requires special setup. SOURCES="$srcdir/src/main/haiku/*.cc $SOURCES" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lroot -lbe -lmedia -lgame -ldevice -ltextencoding" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lroot -lbe -lmedia -lgame -ldevice -ltextencoding -lstdc++.r4" ;; arm*-apple-darwin*|*-ios-*) ARCH=ios diff --git a/src/main/haiku/SDL_BeApp.cc b/src/main/haiku/SDL_BeApp.cc index e966dc03f..c2976f6d4 100644 --- a/src/main/haiku/SDL_BeApp.cc +++ b/src/main/haiku/SDL_BeApp.cc @@ -25,8 +25,10 @@ /* Handle the BeApp specific portions of the application */ #include +#include #include #include +#include #include #include "SDL_BApp.h" /* SDL_BApp class definition */ @@ -51,7 +53,24 @@ StartBeApp(void *unused) { BApplication *App; - App = new SDL_BApp("application/x-SDL-executable"); + // default application signature + const char *signature = "application/x-SDL-executable"; + // dig resources for correct signature + image_info info; + int32 cookie = 0; + if (get_next_image_info(B_CURRENT_TEAM, &cookie, &info) == B_OK) { + BFile f(info.name, O_RDONLY); + if (f.InitCheck() == B_OK) { + BAppFileInfo app_info(&f); + if (app_info.InitCheck() == B_OK) { + char sig[B_MIME_TYPE_LENGTH]; + if (app_info.GetSignature(sig) == B_OK) + signature = strndup(sig, B_MIME_TYPE_LENGTH); + } + } + } + + App = new SDL_BApp(signature); App->Run(); delete App; diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c index fe30afc48..1eea63aba 100644 --- a/src/thread/pthread/SDL_systhread.c +++ b/src/thread/pthread/SDL_systhread.c @@ -52,7 +52,7 @@ #endif #ifdef __HAIKU__ -#include +#include #endif #include "SDL_assert.h" diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h index edba3fb25..f2f828734 100644 --- a/src/video/haiku/SDL_BWin.h +++ b/src/video/haiku/SDL_BWin.h @@ -38,9 +38,9 @@ extern "C" { #include #include #include -#include +#include #if SDL_VIDEO_OPENGL -#include +#include #endif #include "SDL_events.h" #include "../../main/haiku/SDL_BApp.h" diff --git a/src/video/haiku/SDL_bopengl.cc b/src/video/haiku/SDL_bopengl.cc index e4723f85f..4bec9fd6c 100644 --- a/src/video/haiku/SDL_bopengl.cc +++ b/src/video/haiku/SDL_bopengl.cc @@ -94,7 +94,8 @@ int BE_GL_SwapWindow(_THIS, SDL_Window * window) { } int BE_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) { - _GetBeApp()->SetCurrentContext(((SDL_BWin*)context)->GetGLView()); + SDL_BWin* win = (SDL_BWin*)context; + _GetBeApp()->SetCurrentContext(win ? win->GetGLView() : NULL); return 0; }