From 74e3e83281b3472e010a44a30204b5cac4b1a29d Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 19 Dec 2015 14:51:01 +0000
Subject: glib_compile_schemas: links against gio, gobject and gmodule.

Otherwise build fails on Haiku.

diff --git a/gio/Makefile.am b/gio/Makefile.am
index df4f240..b03e662 100644
--- a/gio/Makefile.am
+++ b/gio/Makefile.am
@@ -827,7 +827,11 @@ gio_querymodules_LDADD	 = libgio-2.0.la 		\
 gconstructor_as_data.h: $(top_srcdir)/glib/gconstructor.h data-to-c.py
 	$(AM_V_GEN) $(srcdir)/data-to-c.py $(top_srcdir)/glib/gconstructor.h gconstructor_code $@
 
-glib_compile_schemas_LDADD = $(top_builddir)/glib/libglib-2.0.la
+glib_compile_schemas_LDADD = libgio-2.0.la 		\
+	$(top_builddir)/gobject/libgobject-2.0.la	\
+	$(top_builddir)/gmodule/libgmodule-2.0.la	\
+	$(top_builddir)/glib/libglib-2.0.la		\
+	$(NULL)
 glib_compile_schemas_SOURCES = \
 	gconstructor_as_data.h \
 	gvdb/gvdb-format.h		\
-- 
2.21.0


From d968dda5cb2ded7c7f0146e41081b9256962c5c5 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 19 Dec 2015 14:59:42 +0000
Subject: configure.ac: on Haiku

* don't use -pthread
* use -lbe -lroot as thread related libs.

diff --git a/configure.ac b/configure.ac
index 7afeb87..dc3297c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -158,6 +158,9 @@ case "$host" in
     ;;
 esac
 case $host in
+  *-*-haiku*)
+    LIBS="-lnetwork $LIBS"
+    ;;
   *-*-linux*)
     glib_os_linux=yes
     ;;
@@ -2014,8 +2017,8 @@ AS_IF([ test x"$have_threads" = xposix], [
   # One of them does for most gcc versions and some other platforms/compilers
   # too and could be considered as the canonical way to go. 
   case $host in
-    *-*-cygwin*|*-*-darwin*)
-       # skip cygwin and darwin -pthread or -pthreads test
+    *-*-cygwin*|*-*-darwin*|*-*-haiku*)
+       # skip cygwin, darwin and haiku -pthread or -pthreads test
        ;;
     *-solaris*)
       # These compiler/linker flags work with both Sun Studio and gcc
@@ -2180,6 +2183,15 @@ if test "x$G_THREAD_LIBS" = xerror; then
         AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
 fi
 
+case $host in
+  *-*-haiku*)
+    G_THREAD_LIBS="-lbe -lroot"
+    G_THREAD_LIBS_EXTRA="-L\$(top_builddir_full)/.libs"
+    ;;
+  *)
+    ;;
+esac
+
 AC_MSG_CHECKING(thread related libraries)
 AC_MSG_RESULT($G_THREAD_LIBS)
 
-- 
2.21.0


From d577ba25ece5e325739b7e91c5cad492430a5866 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 29 Jul 2017 12:13:00 +0200
Subject: g_dbus_message_print: use B_PRIiDEV on Haiku

because Haiku doesn't define major() and minor()

diff --git a/gio/gdbusmessage.c b/gio/gdbusmessage.c
index be001ae..c8919a6 100644
--- a/gio/gdbusmessage.c
+++ b/gio/gdbusmessage.c
@@ -33,8 +33,12 @@
 #elif MAJOR_IN_SYSMACROS
 #include <sys/sysmacros.h>
 #else
+#ifdef __HAIKU__
+#include <SupportDefs.h>
+#else
 #define MAJOR_MINOR_NOT_FOUND 1
 #endif
+#endif
 
 #include "gdbusutils.h"
 #include "gdbusmessage.h"
@@ -3480,8 +3484,14 @@ g_dbus_message_print (GDBusMessage *message,
               if (fstat (fds[n], &statbuf) == 0)
                 {
 #ifndef MAJOR_MINOR_NOT_FOUND                       
+#ifdef __HAIKU__
+                  g_string_append_printf (fs, "%s" "dev=%" B_PRIiDEV, fs->len > 0 ? "," : "",
+                                          statbuf.st_dev);
+#else
+
                   g_string_append_printf (fs, "%s" "dev=%d:%d", fs->len > 0 ? "," : "",
                                           (gint) major (statbuf.st_dev), (gint) minor (statbuf.st_dev));
+#endif
 #endif                  
                   g_string_append_printf (fs, "%s" "mode=0%o", fs->len > 0 ? "," : "",
                                           (guint) statbuf.st_mode);
@@ -3492,9 +3502,14 @@ g_dbus_message_print (GDBusMessage *message,
                   g_string_append_printf (fs, "%s" "gid=%u", fs->len > 0 ? "," : "",
                                           (guint) statbuf.st_gid);
 #ifndef MAJOR_MINOR_NOT_FOUND                     
+#ifdef __HAIKU__
+                  g_string_append_printf (fs, "%s" "rdev=%" B_PRIiDEV, fs->len > 0 ? "," : "",
+                                          statbuf.st_rdev);
+#else
                   g_string_append_printf (fs, "%s" "rdev=%d:%d", fs->len > 0 ? "," : "",
                                           (gint) major (statbuf.st_rdev), (gint) minor (statbuf.st_rdev));
 #endif                  
+#endif
                   g_string_append_printf (fs, "%s" "size=%" G_GUINT64_FORMAT, fs->len > 0 ? "," : "",
                                           (guint64) statbuf.st_size);
                   g_string_append_printf (fs, "%s" "atime=%" G_GUINT64_FORMAT, fs->len > 0 ? "," : "",
-- 
2.21.0


From 1225be0329f92ce05292d47044227bed84a67ab1 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 29 Jul 2017 12:19:31 +0200
Subject: gunixmounts.c: on Haiku

* define get_mtab_minitor_file() and _g_get_unix_mounts()
* like Inerix, _g_get_unix_mount_points() calls _g_get_unix_mounts().

diff --git a/gio/gunixmounts.c b/gio/gunixmounts.c
index f2db27e..abf4c3d 100644
--- a/gio/gunixmounts.c
+++ b/gio/gunixmounts.c
@@ -920,7 +920,18 @@ _g_get_unix_mounts (void)
 
   return return_list;
 }
+#elif defined(__HAIKU__)
+static char *
+get_mtab_monitor_file (void)
+{
+  return NULL;
+}
 
+static GList *
+_g_get_unix_mounts (void)
+{
+  return NULL;
+}
 /* Common code {{{2 */
 #else
 #error No _g_get_unix_mounts() implementation for system
@@ -1436,8 +1447,8 @@ _g_get_unix_mount_points (void)
   
   return g_list_reverse (return_list);
 }
-/* Interix {{{2 */
-#elif defined(__INTERIX)
+/* Interix, Haiku {{{2 */
+#elif defined(__INTERIX) || defined(__HAIKU__)
 static GList *
 _g_get_unix_mount_points (void)
 {
-- 
2.21.0


From 40d0e6168227335896a14b404bbad7ba46a9c16e Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Sat, 29 Jul 2017 12:32:14 +0200
Subject: glib/gutils.c: on Haiku define load_user_special_dirs()

use find_directory() from SupportDefs.h

diff --git a/glib/gutils.c b/glib/gutils.c
index 5813b22..5b294a6 100644
--- a/glib/gutils.c
+++ b/glib/gutils.c
@@ -70,6 +70,10 @@
 #include "gwin32.h"
 #endif
 
+#if defined(__HAIKU__)
+#include <FindDirectory.h>
+#include <fs_info.h>
+#endif
 
 /**
  * SECTION:misc_utils
@@ -1451,6 +1455,35 @@ load_user_special_dirs (void)
   g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = find_folder (kMovieDocumentsFolderType);
 }
 
+#elif defined(__HAIKU__)
+static void
+load_user_special_dirs (void)
+{
+  char path[B_PATH_NAME_LENGTH + B_FILE_NAME_LENGTH];
+
+  dev_t volume = dev_for_path("/boot");
+  if (find_directory(B_DESKTOP_DIRECTORY, volume, false, path, sizeof(path))
+      == B_OK) {
+    g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = g_strdup(path);
+    g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = g_strdup(path);
+  } else {
+    g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = NULL;
+    g_user_special_dirs[G_USER_DIRECTORY_DESKTOP] = NULL;
+  }
+
+  if (find_directory(B_USER_DIRECTORY, volume, false, path, sizeof(path))
+      == B_OK) {
+    g_user_special_dirs[G_USER_DIRECTORY_DOCUMENTS] = g_strdup(path);
+  } else
+    g_user_special_dirs[G_USER_DIRECTORY_DOWNLOAD] = NULL;
+
+  g_user_special_dirs[G_USER_DIRECTORY_MUSIC] = NULL;
+  g_user_special_dirs[G_USER_DIRECTORY_PICTURES] = NULL;
+  g_user_special_dirs[G_USER_DIRECTORY_PUBLIC_SHARE] = NULL;
+  g_user_special_dirs[G_USER_DIRECTORY_TEMPLATES] = NULL;
+  g_user_special_dirs[G_USER_DIRECTORY_VIDEOS] = NULL;
+}
+
 #elif defined(G_OS_WIN32)
 
 static void
-- 
2.21.0


From 23d15413eb7df653822c5a59ea8b08b4c3f61a86 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Wed, 20 Sep 2017 18:09:43 +0200
Subject: configure.ac: define G_OS_HAIKU


diff --git a/configure.ac b/configure.ac
index dc3297c..387286a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3348,6 +3348,10 @@ g_pid_format="\"$glib_pid_format\""
 g_pollfd_format="\"$glib_pollfd_format\""
 
 case $host in
+ *-*-haiku*)
+    glib_os="#define G_OS_UNIX
+#define G_OS_HAIKU"
+    ;;
   *-*-cygwin*)
     glib_os="#define G_OS_UNIX
 #define G_PLATFORM_WIN32
-- 
2.21.0


From 7bd65b60714d8273fc17e5e1d9ab05ebb1c1b4d5 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Sat, 18 May 2019 18:36:06 +1000
Subject: Enable always_malloc by default


diff --git a/glib/gslice.c b/glib/gslice.c
index 6b0f226..789e083 100644
--- a/glib/gslice.c
+++ b/glib/gslice.c
@@ -388,7 +388,9 @@ slice_config_init (SliceConfig *config)
        * This way it's possible to force gslice to be enabled under
        * valgrind just by setting G_SLICE to the empty string.
        */
+#ifndef __HAIKU__
       if (RUNNING_ON_VALGRIND)
+#endif
         config->always_malloc = TRUE;
     }
 }
-- 
2.21.0

