From c0848cd5528c0623d360be34004a411955ce6c98 Mon Sep 17 00:00:00 2001
From: Scott McCreary <scottmc2@gmail.com>
Date: Sun, 22 Dec 2013 10:01:12 -0800
Subject: applying patch boost-1.55.0.patch


diff --git a/boost/config/platform/haiku.hpp b/boost/config/platform/haiku.hpp
new file mode 100644
index 0000000..1b15c7e
--- /dev/null
+++ b/boost/config/platform/haiku.hpp
@@ -0,0 +1,27 @@
+//  (C) Copyright John Maddock 2001. 
+//  Use, modification and distribution are subject to the 
+//  Boost Software License, Version 1.0. (See accompanying file 
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org for most recent version.
+	
+//  Haiku specific config options:
+
+#define BOOST_PLATFORM "Haiku"
+
+#define BOOST_NO_INTRINSIC_WCHAR_T
+#define BOOST_HAS_UNISTD_H
+	
+#define BOOST_HAS_BETHREADS
+	
+#ifndef BOOST_DISABLE_THREADS
+#   define BOOST_HAS_THREADS
+#endif
+
+//
+// thread API's not auto detected:
+//
+#define BOOST_HAS_GETTIMEOFDAY
+
+// boilerplate code:
+#include <boost/config/posix_features.hpp>
diff --git a/boost/config/select_platform_config.hpp b/boost/config/select_platform_config.hpp
index 2af61d2..5052d85 100644
--- a/boost/config/select_platform_config.hpp
+++ b/boost/config/select_platform_config.hpp
@@ -41,6 +41,10 @@
 // win32:
 #  define BOOST_PLATFORM_CONFIG "boost/config/platform/win32.hpp"
 
+#elif defined(__HAIKU__)
+// Haiku
+#  define BOOST_PLATFORM_CONFIG "boost/config/platform/haiku.hpp"
+
 #elif defined(__BEOS__)
 // BeOS
 #  define BOOST_PLATFORM_CONFIG "boost/config/platform/beos.hpp"
diff --git a/boost/config/stdlib/libstdcpp3.hpp b/boost/config/stdlib/libstdcpp3.hpp
index 976ab76..66bc96d 100644
--- a/boost/config/stdlib/libstdcpp3.hpp
+++ b/boost/config/stdlib/libstdcpp3.hpp
@@ -36,7 +36,8 @@
         || defined(_GLIBCXX__PTHREADS) \
         || defined(_GLIBCXX_HAS_GTHREADS) \
         || defined(_WIN32) \
-        || defined(_AIX)
+        || defined(_AIX) \
+        || defined(__HAIKU__)
       //
       // If the std lib has thread support turned on, then turn it on in Boost
       // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT
diff --git a/boost/thread/detail/platform.hpp b/boost/thread/detail/platform.hpp
index 1f33b1a..1b8917c 100644
--- a/boost/thread/detail/platform.hpp
+++ b/boost/thread/detail/platform.hpp
@@ -34,6 +34,8 @@
 #  define BOOST_THREAD_WIN32
 #elif defined(__BEOS__)
 #  define BOOST_THREAD_BEOS
+#elif defined(__HAIKU__)
+#  define BOOST_THREAD_BEOS
 #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
 #  define BOOST_THREAD_MACOS
 //#  define BOOST_THREAD_WAIT_BUG boost::posix_time::microseconds(1000)
diff --git a/tools/build/v2/engine/boehm_gc/dyn_load.c b/tools/build/v2/engine/boehm_gc/dyn_load.c
index 36968ba..e725bdc 100644
--- a/tools/build/v2/engine/boehm_gc/dyn_load.c
+++ b/tools/build/v2/engine/boehm_gc/dyn_load.c
@@ -64,7 +64,7 @@ static int (*GC_has_static_roots)(const char *, void *, size_t);
     !defined(AIX) && !defined(SCO_ELF) && !defined(DGUX) && \
     !(defined(FREEBSD) && defined(__ELF__)) && \
     !(defined(NETBSD) && defined(__ELF__)) && !defined(HURD) && \
-    !defined(DARWIN) && !defined(CYGWIN32)
+    !defined(DARWIN) && !defined(CYGWIN32) !(defined(HAIKU)
  --> We only know how to find data segments of dynamic libraries for the
  --> above.  Additional SVR4 variants might not be too
  --> hard to add.
@@ -82,6 +82,10 @@ static int (*GC_has_static_roots)(const char *, void *, size_t);
 #   define ELFSIZE ARCH_ELFSIZE
 #endif
 
+#if defined(HAIKU)
+
+#endif
+
 #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
     (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
     (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
@@ -216,7 +220,8 @@ void GC_register_dynamic_libraries()
 
 #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \
     (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \
-    (defined(NETBSD) && defined(__ELF__)) || defined(HURD)
+    (defined(NETBSD) && defined(__ELF__)) || defined(HURD) || \
+    defined(HAIKU)
 
 
 #ifdef USE_PROC_FOR_LIBRARIES
diff --git a/tools/build/v2/engine/boehm_gc/include/gc.h b/tools/build/v2/engine/boehm_gc/include/gc.h
index cc95088..590a868 100644
--- a/tools/build/v2/engine/boehm_gc/include/gc.h
+++ b/tools/build/v2/engine/boehm_gc/include/gc.h
@@ -494,7 +494,7 @@ GC_API void * GC_malloc_atomic_ignore_off_page(size_t lb);
 /* of compilers.							*/
 /* This may also be desirable if it is possible but expensive to	*/
 /* retrieve the call chain.						*/
-#if (defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) \
+#if (defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__HAIKU__) \
      || defined(__FreeBSD__) || defined(__DragonFly__)) & !defined(GC_CAN_SAVE_CALL_STACKS)
 # define GC_ADD_CALLER
 # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 
diff --git a/tools/build/v2/engine/boehm_gc/include/gc_config_macros.h b/tools/build/v2/engine/boehm_gc/include/gc_config_macros.h
index 66abf0b..797eddd 100644
--- a/tools/build/v2/engine/boehm_gc/include/gc_config_macros.h
+++ b/tools/build/v2/engine/boehm_gc/include/gc_config_macros.h
@@ -45,7 +45,8 @@
 			     || defined(GC_AIX_THREADS) \
 			     || defined(GC_LINUX_THREADS) \
 			     || defined(GC_NETBSD_THREADS) \
-			     || defined(GC_GNU_THREADS))
+			     || defined(GC_GNU_THREADS)) \
+			     || defined(GC_HAIKU_THREADS)
 # define _REENTRANT
 	/* Better late than never.  This fails if system headers that	*/
 	/* depend on this were previously included.			*/
@@ -62,6 +63,7 @@
 # if defined(GC_SOLARIS_THREADS) || defined(GC_FREEBSD_THREADS) || \
 	defined(GC_IRIX_THREADS) || defined(GC_LINUX_THREADS) || \
 	defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
+	defined(GC_HAIKU_THREADS) || \
 	defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
         defined(GC_AIX_THREADS) || defined(GC_NETBSD_THREADS) || \
         (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) || \
diff --git a/tools/build/v2/engine/boehm_gc/include/private/gcconfig.h b/tools/build/v2/engine/boehm_gc/include/private/gcconfig.h
index 20f35bc..7e798a7 100644
--- a/tools/build/v2/engine/boehm_gc/include/private/gcconfig.h
+++ b/tools/build/v2/engine/boehm_gc/include/private/gcconfig.h
@@ -215,6 +215,11 @@
 #    define BEOS
 #    define mach_type_known
 # endif
+# if defined(__HAIKU__) && defined(_X86_)
+#    define I386
+#    define HAIKU
+#    define mach_type_known
+# endif
 # if defined(LINUX) && (defined(i386) || defined(__i386__))
 #    define I386
 #    define mach_type_known
@@ -1014,6 +1019,13 @@
       extern int etext[];
 #     define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
 #   endif
+#   ifdef HAIKU
+#     define OS_TYPE "HAIKU"
+#     include <OS.h>
+#     define GETPAGESIZE() B_PAGE_SIZE
+      extern int etext[];
+#     define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
+#   endif
 #   ifdef SOLARIS
 #	define OS_TYPE "SOLARIS"
         extern int _etext[], _end[];
diff --git a/tools/build/v2/engine/boehm_gc/os_dep.c b/tools/build/v2/engine/boehm_gc/os_dep.c
index bb8fa08..a7edf72 100644
--- a/tools/build/v2/engine/boehm_gc/os_dep.c
+++ b/tools/build/v2/engine/boehm_gc/os_dep.c
@@ -777,6 +777,16 @@ ptr_t GC_get_main_stack_base(void){
 # endif /* BEOS */
 
 
+# ifdef HAIKU
+# include <OS.h>
+ptr_t GC_get_main_stack_base(void){
+	thread_info th;
+	get_thread_info(find_thread(NULL),&th);
+	return th.stack_end;
+}
+# endif /* HAIKU */
+
+
 # ifdef OS2
 
 ptr_t GC_get_main_stack_base(void)
@@ -1095,7 +1105,7 @@ ptr_t GC_get_main_stack_base(void)
 
 #endif /* FREEBSD_STACKBOTTOM */
 
-#if !defined(BEOS) && !defined(AMIGA) && !defined(MSWIN32) \
+#if !defined(BEOS) && !defined(HAIKU) && !defined(AMIGA) && !defined(MSWIN32) \
     && !defined(MSWINCE) && !defined(OS2) && !defined(NOSYS) && !defined(ECOS) \
     && !defined(CYGWIN32)
 
@@ -1154,7 +1164,7 @@ ptr_t GC_get_main_stack_base(void)
 #   endif /* STACKBOTTOM */
 }
 
-# endif /* ! AMIGA, !OS 2, ! MS Windows, !BEOS, !NOSYS, !ECOS */
+# endif /* ! AMIGA, !OS 2, ! MS Windows, !BEOS, !HAIKU, !NOSYS, !ECOS */
 
 #if defined(GC_LINUX_THREADS) && !defined(HAVE_GET_STACK_BASE)
 
diff --git a/tools/build/v2/engine/fileunix.c b/tools/build/v2/engine/fileunix.c
index bff3a42..1f60be2 100644
--- a/tools/build/v2/engine/fileunix.c
+++ b/tools/build/v2/engine/fileunix.c
@@ -80,7 +80,10 @@ struct ar_hdr  /* archive file member header - printable ascii */
 };
 #endif
 
-#if defined( OS_QNX ) || defined( OS_BEOS ) || defined( OS_MPEIX )
+# if defined( OS_QNX ) || \
+     defined( OS_BEOS ) || \
+     defined( OS_HAIKU ) || \
+     defined( OS_MPEIX )
 # define NO_AR
 # define HAVE_AR
 #endif
diff --git a/tools/build/v2/engine/jam.h b/tools/build/v2/engine/jam.h
index 86ad0e8..7c0bb69 100644
--- a/tools/build/v2/engine/jam.h
+++ b/tools/build/v2/engine/jam.h
@@ -125,6 +125,11 @@
     #define OS_BEOS
     #define NO_VFORK
 #endif
+#ifdef __HAIKU__
+    #define unix
+    #define OSMINOR "OS=HAIKU"
+    #define OS_HAIKU
+#endif
 #ifdef __bsdi__
     #define OSMINOR "OS=BSDI"
     #define OS_BSDI
diff --git a/tools/build/v2/engine/jambase.c b/tools/build/v2/engine/jambase.c
index b15282b..5a127a1 100644
--- a/tools/build/v2/engine/jambase.c
+++ b/tools/build/v2/engine/jambase.c
@@ -548,6 +548,18 @@ char *jambase[] = {
 "NOARSCAN    ?= true ;\n",
 "STDHDRS     ?= /boot/develop/headers/posix ;\n",
 "}\n",
+"else if $(OS) = HAIKU\n",
+"{\n",
+"BINDIR      ?= /boot/common/bin ;\n",
+"CC          ?= gcc ;\n",
+"C++         ?= $(CC) ;\n",
+"FORTRAN     ?= \"\" ;\n",
+"LIBDIR      ?= /boot/common/lib ;\n",
+"LINK        ?= gcc ;\n",
+"LINKLIBS    ?= -lnetwork ;\n",
+"NOARSCAN    ?= true ;\n",
+"STDHDRS     ?= /boot/develop/headers/posix ;\n",
+"}\n",
 "else if $(OS) = BEOS\n",
 "{\n",
 "BINDIR      ?= /boot/apps ;\n",
diff --git a/tools/build/v2/tools/builtin.jam b/tools/build/v2/tools/builtin.jam
index 176de13..1c3466f 100644
--- a/tools/build/v2/tools/builtin.jam
+++ b/tools/build/v2/tools/builtin.jam
@@ -41,7 +41,7 @@ import generate ;
 
 
 .os-names = aix bsd cygwin darwin freebsd hpux iphone linux netbsd openbsd osf
-    qnx qnxnto sgi solaris unix unixware windows
+    qnx qnxnto sgi solaris unix unixware windows haiku
     elf  # Not actually an OS -- used for targeting bare metal where object
          # format is ELF.  This catches both -elf and -eabi gcc targets and well
          # as other compilers targeting ELF. It is not clear how often we need
@@ -76,6 +76,7 @@ local rule default-host-os ( )
             case COHERENT     : host-os = unix    ;
             case DRAGONFLYBSD : host-os = bsd     ;
             case IRIX         : host-os = sgi     ;
+	        case HAIKU	      : host-os = haiku   ;
             case MACOSX       : host-os = darwin  ;
             case KFREEBSD     : host-os = freebsd ;
             case LINUX        : host-os = linux   ;
diff --git a/tools/build/v2/tools/builtin.py b/tools/build/v2/tools/builtin.py
index 35c1a40..c430fad 100644
--- a/tools/build/v2/tools/builtin.py
+++ b/tools/build/v2/tools/builtin.py
@@ -103,6 +103,7 @@ def default_host_os():
         elif host_os == 'MACOSX': host_os = 'darwin'
         elif host_os == 'KFREEBSD': host_os = 'freebsd'
         elif host_os == 'LINUX': host_os = 'linux'
+        elif host_os == 'HAIKU': host_os = 'haiku'
         else: host_os = 'unix'
     return host_os.lower()
 
diff --git a/tools/build/v2/tools/gcc.jam b/tools/build/v2/tools/gcc.jam
index ef90f05..2de76cf 100644
--- a/tools/build/v2/tools/gcc.jam
+++ b/tools/build/v2/tools/gcc.jam
@@ -1029,10 +1029,11 @@ rule setup-threading ( targets * : sources * : properties * )
             case cygwin  : option = -mthreads ;
             case solaris : option = -pthreads ; libs = rt ;
             case beos    : # No threading options.
+            case haiku   : option = ;
             case *bsd    : option = -pthread ;  # There is no -lrt on BSD.
             case sgi     : # gcc on IRIX does not support multi-threading.
             case darwin  : # No threading options.
-            case *       : option = -pthread ; libs = rt ;
+            case *       : option = -pthreads ; libs = rt ;
         }
 
         if $(option)
diff --git a/tools/build/v2/tools/gcc.py b/tools/build/v2/tools/gcc.py
index c2f3b02..4f60d22 100644
--- a/tools/build/v2/tools/gcc.py
+++ b/tools/build/v2/tools/gcc.py
@@ -677,6 +677,9 @@ elif bjam.variable('UNIX'):
     elif host_os_name == 'BeOS':
         # BeOS has no threading options, don't set anything here.
         pass
+    elif host_os_name == 'Haiku':
+        flags('gcc', 'OPTIONS', ['<threading>multi'], ['-lroot'])
+        # there is no -lrt on HAIKU
     elif host_os_name.endswith('BSD'):
         flags('gcc', 'OPTIONS', ['<threading>multi'], ['-pthread'])
         # there is no -lrt on BSD
diff --git a/tools/build/v2/tools/python.jam b/tools/build/v2/tools/python.jam
index d48bb78..070f5d2 100644
--- a/tools/build/v2/tools/python.jam
+++ b/tools/build/v2/tools/python.jam
@@ -639,13 +639,14 @@ local rule system-library-dependencies ( target-os )
         case qnx* : return ;
         case darwin : return ;
         case windows : return ;
+        case haiku : return ;
 
         case hpux : return  <library>rt ;
         case *bsd : return  <library>pthread <toolset>gcc:<library>util ;
 
         case aix : return  <library>pthread <library>dl ;
 
-        case * : return  <library>pthread <library>dl
+        case * : return ;   <library>pthread <library>dl
             <toolset>gcc:<library>util <toolset-intel:platform>linux:<library>util ;
     }
 }
-- 
1.8.3.4


From 03631bc8fb6cff21669ca0cb87188c2c3b0d4928 Mon Sep 17 00:00:00 2001
From: Scott McCreary <scottmc2@gmail.com>
Date: Sun, 22 Dec 2013 10:01:23 -0800
Subject: applying patch type_traits.patch


diff --git a/boost/config/platform/haiku.hpp b/boost/config/platform/haiku.hpp
index 1b15c7e..899765d 100644
--- a/boost/config/platform/haiku.hpp
+++ b/boost/config/platform/haiku.hpp
@@ -9,18 +9,26 @@
 
 #define BOOST_PLATFORM "Haiku"
 
-#define BOOST_NO_INTRINSIC_WCHAR_T
 #define BOOST_HAS_UNISTD_H
+#define GLIBC_HAVE_LONG_LONG
+#define BOOST_HAS_STDINT_H
+#define BOOST_HASH_NO_EXTENSIONS
 	
 #define BOOST_HAS_BETHREADS
 	
 #ifndef BOOST_DISABLE_THREADS
 #   define BOOST_HAS_THREADS
 #endif
+#define BOOST_NO_CXX11_HDR_TYPE_TRAITS
+#define BOOST_NO_CXX11_ATOMIC_SMART_PTR
+#define BOOST_NO_CXX11_STATIC_ASSERT
+#define BOOST_NO_CXX11_VARIADIC_MACROS
 
 //
 // thread API's not auto detected:
 //
+#define BOOST_HAS_SCHED_YIELD
+#define BOOST_HAS_PTHREAD_YIELD
 #define BOOST_HAS_GETTIMEOFDAY
 
 // boilerplate code:
-- 
1.8.3.4


From f2a0265af90e6c7bac9b7627fd0049f7479e5ab3 Mon Sep 17 00:00:00 2001
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
Date: Tue, 7 Jan 2014 21:49:28 +0100
Subject: We don't have XSI shared memory, so don't try to use it.


diff --git a/boost/interprocess/detail/workaround.hpp b/boost/interprocess/detail/workaround.hpp
index 6ce2ea1..3b303eb 100644
--- a/boost/interprocess/detail/workaround.hpp
+++ b/boost/interprocess/detail/workaround.hpp
@@ -73,7 +73,7 @@
    #endif
 
    //Check for XSI shared memory objects. They are available in nearly all UNIX platforms
-   #if !defined(__QNXNTO__)
+   #if !defined(__QNXNTO__) && !defined(__HAIKU__)
       #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS
    #endif
 
-- 
1.8.3.4


From d94967fa8fdea2842ec02fab90df0ec4efaac685 Mon Sep 17 00:00:00 2001
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
Date: Thu, 9 Jan 2014 22:40:40 +0100
Subject: filesystem: don't crash because of unsupported locale in libstdc++

See https://svn.boost.org/trac/boost/ticket/4688
We do the same as on Mac OS X and assume the filesystem uses utf-8.

diff --git a/libs/filesystem/src/path.cpp b/libs/filesystem/src/path.cpp
index c740dec..3285d39 100644
--- a/libs/filesystem/src/path.cpp
+++ b/libs/filesystem/src/path.cpp
@@ -35,7 +35,7 @@
 #ifdef BOOST_WINDOWS_API
 # include "windows_file_codecvt.hpp"
 # include <windows.h>
-#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) || defined(__HAIKU__)
 # include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
 #endif
 
@@ -828,7 +828,7 @@ namespace
     codecvt_facet_ptr(&std::use_facet<std::codecvt<wchar_t, char, std::mbstate_t> >
       (path_locale));
 
-#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+#elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) || defined(__HAIKU__)
 
   // "All BSD system functions expect their string parameters to be in UTF-8 encoding
   // and nothing else." See
@@ -903,7 +903,7 @@ namespace filesystem
   const path::codecvt_type& path::codecvt()
   {
 #   if defined(BOOST_POSIX_API) && \
-      !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__))
+      !(defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) || defined(__HAIKU__))
       // A local static initialized by calling path::imbue ensures that std::locale(""),
       // which may throw, is called only if path_locale and condecvt_facet will actually
       // be used. Thus misconfigured environmental variables will only cause an
-- 
1.8.3.4

