Date: Fri, 6 Mar 2009 12:41:17 -0800 SDL-1.2
authorSam Lantinga <slouken@libsdl.org>
Tue, 17 Mar 2009 03:58:53 +0000
branchSDL-1.2
changeset 4164 7a4c511c980a
parent 4163 bec67d0b6645
child 4165 3b8ac3d311a2
Date: Fri, 6 Mar 2009 12:41:17 -0800 From: scott mc Subject: Re: [SDL] patch for building on haiku Ok. I've combined the various Haiku patches for the SDL-1.2 branch into one .diff file
configure.in
include/SDL_platform.h
include/begin_code.h
src/video/bwindow/SDL_sysvideo.cc
src/video/bwindow/SDL_sysyuv.cc
src/video/bwindow/SDL_sysyuv.h
test/configure.in
test/testplatform.c
--- a/configure.in	Tue Feb 17 05:25:25 2009 +0000
+++ b/configure.in	Tue Mar 17 03:58:53 2009 +0000
@@ -40,7 +40,7 @@
 AC_SUBST(LT_AGE)
 
 dnl Detect the canonical build and host environments
-AC_CONFIG_AUX_DIRS($srcdir/build-scripts)
+AC_CONFIG_AUX_DIR([build-scripts])
 AC_CANONICAL_HOST
 AC_C_BIGENDIAN
 if test x$ac_cv_c_bigendian = xyes; then
@@ -2493,7 +2493,7 @@
         SDL_CFLAGS="$SDL_CFLAGS -Dmain=SDL_main -D_WIN32_WCE=0x420"
         SDL_LIBS="-lSDLmain $SDL_LIBS"
         ;;
-    *-*-beos*)
+    *-*-beos* | *-*-haiku*)
         ARCH=beos
         ac_default_prefix=/boot/develop/tools/gnupro
         CheckDummyVideo
@@ -2536,8 +2536,16 @@
         fi
         # Set up files for the shared object loading library
         if test x$enable_loadso = xyes; then
-            AC_DEFINE(SDL_LOADSO_BEOS)
-            SOURCES="$SOURCES $srcdir/src/loadso/beos/*.c"
+            case "$host" in
+                *-*-beos*)
+                    AC_DEFINE(SDL_LOADSO_BEOS)
+                    SOURCES="$SOURCES $srcdir/src/loadso/beos/*.c"
+                ;;
+                *-*-haiku*)
+                    AC_DEFINE(SDL_LOADSO_DLOPEN)
+                    SOURCES="$SOURCES $srcdir/src/loadso/dlopen/*.c"
+                ;;
+            esac    
             have_loadso=yes
         fi
         # The BeOS platform requires special setup.
--- a/include/SDL_platform.h	Tue Feb 17 05:25:25 2009 +0000
+++ b/include/SDL_platform.h	Tue Mar 17 03:58:53 2009 +0000
@@ -33,6 +33,10 @@
 #undef __BEOS__
 #define __BEOS__	1
 #endif
+#if defined(__HAIKU__)
+#undef __HAIKU__
+#define __HAIKU__ 1
+#endif
 #if defined(bsdi) || defined(__bsdi) || defined(__bsdi__)
 #undef __BSDI__
 #define __BSDI__	1
@@ -45,6 +49,10 @@
 #undef __FREEBSD__
 #define __FREEBSD__	1
 #endif
+#if defined(__HAIKU__)
+#undef __HAIKU__
+#define __HAIKU__	1
+#endif
 #if defined(hpux) || defined(__hpux) || defined(__hpux__)
 #undef __HPUX__
 #define __HPUX__	1
--- a/include/begin_code.h	Tue Feb 17 05:25:25 2009 +0000
+++ b/include/begin_code.h	Tue Mar 17 03:58:53 2009 +0000
@@ -33,7 +33,7 @@
 
 /* Some compilers use a special export keyword */
 #ifndef DECLSPEC
-# if defined(__BEOS__)
+# if defined(__BEOS__) || defined(__HAIKU__)
 #  if defined(__GNUC__)
 #   define DECLSPEC	__declspec(dllexport)
 #  else
--- a/src/video/bwindow/SDL_sysvideo.cc	Tue Feb 17 05:25:25 2009 +0000
+++ b/src/video/bwindow/SDL_sysvideo.cc	Tue Mar 17 03:58:53 2009 +0000
@@ -57,7 +57,7 @@
 static void BE_FreeHWSurface(_THIS, SDL_Surface *surface);
 
 static int BE_ToggleFullScreen(_THIS, int fullscreen);
-static SDL_Overlay *BE_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface *display);
+SDL_Overlay *BE_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface *display);
 
 /* OpenGL functions */
 #if SDL_VIDEO_OPENGL
@@ -637,8 +637,12 @@
 			int32 cookie = 0;
 			while (get_next_image_info(0,&cookie,&info) == B_OK) {
 				void *location = NULL;
-				if (get_image_symbol((image_id)cookie,"glBegin",B_SYMBOL_TYPE_ANY,&location) == B_OK) {
-					_this->gl_config.dll_handle = (void*)cookie;
+#ifdef __HAIKU__
+				if (get_image_symbol(info.id,"glBegin",B_SYMBOL_TYPE_ANY,&location) == B_OK) { // This is how it actually works in Haiku
+#else
+				if (get_image_symbol((image_id)cookie,"glBegin",B_SYMBOL_TYPE_ANY,&location) == B_OK) { // I don't know if that *did* work in BeOS
+#endif
+					_this->gl_config.dll_handle = (void*)info.id;
 					_this->gl_config.driver_loaded = 1;
 					SDL_strlcpy(_this->gl_config.driver_path, "libGL.so", SDL_arraysize(_this->gl_config.driver_path));
 				}
--- a/src/video/bwindow/SDL_sysyuv.cc	Tue Feb 17 05:25:25 2009 +0000
+++ b/src/video/bwindow/SDL_sysyuv.cc	Tue Mar 17 03:58:53 2009 +0000
@@ -94,7 +94,7 @@
 
 // See <GraphicsDefs.h> [btw: Cb=U, Cr=V]
 // See also http://www.fourcc.org/indexyuv.htm
-enum color_space convert_color_space(Uint32 format) {
+color_space convert_color_space(Uint32 format) {
 	switch (format) {
 	case SDL_YV12_OVERLAY:
 		return B_YUV9;
--- a/src/video/bwindow/SDL_sysyuv.h	Tue Feb 17 05:25:25 2009 +0000
+++ b/src/video/bwindow/SDL_sysyuv.h	Tue Mar 17 03:58:53 2009 +0000
@@ -62,7 +62,7 @@
 };
 
 extern BBitmap * BE_GetOverlayBitmap(BRect bounds, color_space cs);
-extern SDL_Overlay* BE_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface* display);
+SDL_Overlay* BE_CreateYUVOverlay(_THIS, int width, int height, Uint32 format, SDL_Surface* display);
 extern int BE_LockYUVOverlay(_THIS, SDL_Overlay* overlay);
 extern void BE_UnlockYUVOverlay(_THIS, SDL_Overlay* overlay);
 extern int BE_DisplayYUVOverlay(_THIS, SDL_Overlay* overlay, SDL_Rect* src, SDL_Rect* dst);
--- a/test/configure.in	Tue Feb 17 05:25:25 2009 +0000
+++ b/test/configure.in	Tue Mar 17 03:58:53 2009 +0000
@@ -20,7 +20,7 @@
         MATHLIB=""
         SYS_GL_LIBS="-lopengl32"
         ;;
-    *-*-beos*)
+    *-*-beos* | *-*-haiku*)
         EXE=""
         MATHLIB=""
         SYS_GL_LIBS="-lGL"
--- a/test/testplatform.c	Tue Feb 17 05:25:25 2009 +0000
+++ b/test/testplatform.c	Tue Mar 17 03:58:53 2009 +0000
@@ -162,6 +162,8 @@
 			"Dreamcast"
 #elif __FREEBSD__
 			"FreeBSD"
+#elif __HAIKU__
+			"Haiku"
 #elif __HPUX__
 			"HP-UX"
 #elif __IRIX__