1From 8b1be1258d061ef9db9b2b22f95813d051374cfb Mon Sep 17 00:00:00 2001
2From: Adrien Destugues <pulkomandy@gmail.com>
3Date: Sat, 6 Aug 2016 22:27:19 +0200
4Subject: Import changes from 1.55.0: buildtools
5
6
7diff --git a/tools/build/src/engine/boehm_gc/include/gc_config_macros.h b/tools/build/src/engine/boehm_gc/include/gc_config_macros.h
8index 762162a..723b4c3 100644
9--- a/tools/build/src/engine/boehm_gc/include/gc_config_macros.h
10+++ b/tools/build/src/engine/boehm_gc/include/gc_config_macros.h
11@@ -62,7 +62,7 @@
12 
13 # if defined(GC_SOLARIS_THREADS) || defined(GC_FREEBSD_THREADS) || \
14 	defined(GC_IRIX_THREADS) || defined(GC_LINUX_THREADS) || \
15-	defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || \
16+	defined(GC_HPUX_THREADS) || defined(GC_OSF1_THREADS) || defined(GC_HAIKU_THREADS) || \
17 	defined(GC_DGUX386_THREADS) || defined(GC_DARWIN_THREADS) || \
18         defined(GC_AIX_THREADS) || defined(GC_NETBSD_THREADS) || \
19         (defined(GC_WIN32_THREADS) && defined(__CYGWIN32__)) || \
20diff --git a/tools/build/src/engine/boehm_gc/include/private/gcconfig.h b/tools/build/src/engine/boehm_gc/include/private/gcconfig.h
21index 61cf9eac..427a9be 100644
22--- a/tools/build/src/engine/boehm_gc/include/private/gcconfig.h
23+++ b/tools/build/src/engine/boehm_gc/include/private/gcconfig.h
24@@ -219,6 +219,12 @@
25 #    define I386
26 #    define HAIKU
27 #    define mach_type_known
28+# endif
29+# if defined(__HAIKU__) && defined(__x86_64__)
30+#    define X86_64
31+#    define HAIKU
32+#    define mach_type_known
33+# endif
34 # if defined(LINUX) && (defined(i386) || defined(__i386__))
35 #    define I386
36 #    define mach_type_known
37@@ -1025,6 +1031,13 @@
38 #     extern int etext[];
39 #     define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
40 #   endif
41+#   ifdef HAIKU
42+#     define OS_TYPE "HAIKU"
43+#     include <OS.h>
44+#     define GETPAGESIZE() B_PAGE_SIZE
45+      extern int etext[];
46+#     define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff))
47+#   endif
48 #   ifdef SOLARIS
49 #	define OS_TYPE "SOLARIS"
50         extern int _etext[], _end[];
51diff --git a/tools/build/src/engine/boehm_gc/os_dep.c b/tools/build/src/engine/boehm_gc/os_dep.c
52index 2dd087f..8be17f8 100644
53--- a/tools/build/src/engine/boehm_gc/os_dep.c
54+++ b/tools/build/src/engine/boehm_gc/os_dep.c
55@@ -776,6 +776,15 @@ ptr_t GC_get_main_stack_base(void){
56 }
57 # endif /* BEOS */
58 
59+# ifdef HAIKU
60+# include <OS.h>
61+ptr_t GC_get_main_stack_base(void){
62+       thread_info th;
63+       get_thread_info(find_thread(NULL),&th);
64+       return th.stack_end;
65+}
66+# endif /* HAIKU */
67+
68 
69 # ifdef HAIKU
70 # include <OS.h>
71@@ -1106,7 +1115,7 @@ ptr_t GC_get_main_stack_base(void)
72 
73 #endif /* FREEBSD_STACKBOTTOM */
74 
75-#if !defined(BEOS) && !defined(AMIGA) && !defined(MSWIN32) \
76+#if !defined(BEOS) && !defined(__HAIKU__) && !defined(AMIGA) && !defined(MSWIN32) \
77     && !defined(MSWINCE) && !defined(OS2) && !defined(NOSYS) && !defined(ECOS) \
78     && !defined(CYGWIN32) && !defined(HAIKU)
79 
80diff --git a/tools/build/src/engine/jam.h b/tools/build/src/engine/jam.h
81index a6abf41..b774a59 100644
82--- a/tools/build/src/engine/jam.h
83+++ b/tools/build/src/engine/jam.h
84@@ -162,6 +162,11 @@
85     #define OS_BEOS
86     #define NO_VFORK
87 #endif
88+#ifdef __HAIKU__
89+    #define unix
90+    #define OSMINOR "OS=HAIKU"
91+    #define OS_HAIKU
92+#endif
93 #ifdef __bsdi__
94     #define OSMINOR "OS=BSDI"
95     #define OS_BSDI
96diff --git a/tools/build/src/tools/builtin.py b/tools/build/src/tools/builtin.py
97index 1a80c3f..031c014 100644
98--- a/tools/build/src/tools/builtin.py
99+++ b/tools/build/src/tools/builtin.py
100@@ -82,7 +82,7 @@ def variant (name, parents_or_properties, explicit_properties = []):
101     feature.compose ("<variant>" + name, explicit_properties.all())
102 
103 __os_names = """
104-    amiga aix appletv bsd cygwin darwin dos emx freebsd hpux iphone linux netbsd
105+    amiga aix appletv bsd cygwin darwin dos emx freebsd haiku hpux iphone linux netbsd
106     openbsd osf qnx qnxnto sgi solaris sun sunos svr4 sysv ultrix unix unixware
107     vms windows
108 """.split()
109-- 
1102.37.3
111
112
113From 8a48ec20f7fb03bd5fbcefd5f1e7259bb37fbdb6 Mon Sep 17 00:00:00 2001
114From: Adrien Destugues <pulkomandy@gmail.com>
115Date: Sat, 6 Aug 2016 22:27:41 +0200
116Subject: Import changes from 1.55.0: sourcecode
117
118
119diff --git a/boost/thread/detail/platform.hpp b/boost/thread/detail/platform.hpp
120index 172a601..c706e40 100644
121--- a/boost/thread/detail/platform.hpp
122+++ b/boost/thread/detail/platform.hpp
123@@ -34,7 +34,7 @@
124 #if ! defined BOOST_THREAD_WIN32
125 #  define BOOST_THREAD_WIN32
126 #endif
127-#elif defined(__BEOS__)
128+#elif defined(__BEOS__) || defined(__HAIKU__)
129 #  define BOOST_THREAD_BEOS
130 #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
131 #  define BOOST_THREAD_MACOS
132-- 
1332.37.3
134
135
136From 389501f44db62e8041e7629da8b4ada6dec2e003 Mon Sep 17 00:00:00 2001
137From: Jerome Duval <jerome.duval@gmail.com>
138Date: Sat, 14 Oct 2017 11:47:09 +0200
139Subject: Haiku needs bsd and _BSD_SOURCE.
140
141
142diff --git a/tools/build/src/engine/build.jam b/tools/build/src/engine/build.jam
143index a92b70f..e1655dd 100644
144--- a/tools/build/src/engine/build.jam
145+++ b/tools/build/src/engine/build.jam
146@@ -583,6 +583,11 @@ if $(OS) = VMS
147 {
148     --defs += VMS ;
149 }
150+if $(OS) = HAIKU
151+{
152+	--defs += _BSD_SOURCE ;
153+	--libs += -lbsd ;
154+}
155 --defs += YYSTACKSIZE=5000 ;
156 
157 if $(with-python)
158diff --git a/tools/build/src/engine/build.sh b/tools/build/src/engine/build.sh
159index 7e46e38..67293a0 100755
160--- a/tools/build/src/engine/build.sh
161+++ b/tools/build/src/engine/build.sh
162@@ -150,6 +150,13 @@ case $BOOST_JAM_TOOLSET in
163         BOOST_JAM_OS="NT"
164         ;;
165 
166+	    *haiku*)
167+	    BOOST_JAM_CC=cc
168+	    BOOST_JAM_OPT_JAM="$BOOST_JAM_OPT_JAM -D_BSD_SOURCE -lbsd"
169+	    BOOST_JAM_OPT_MKJAMBASE="$BOOST_JAM_OPT_MKJAMBASE -D_BSD_SOURCE -lbsd"
170+	    BOOST_JAM_OPT_YYACC="$BOOST_JAM_OPT_YYACC -D_BSD_SOURCE -lbsd"
171+	    ;;
172+
173         *)
174         BOOST_JAM_CC=gcc
175         esac
176-- 
1772.37.3
178
179
180From e92ab804d523656e6e1954dc74b347e563508ef4 Mon Sep 17 00:00:00 2001
181From: begasus <begasus@gmail.com>
182Date: Sun, 18 Dec 2022 08:16:06 +0100
183Subject: fix build, kudos to Jessicah and waddlesplash
184
185
186diff --git a/libs/filesystem/src/operations.cpp b/libs/filesystem/src/operations.cpp
187index 53dcdb7..f424785 100644
188--- a/libs/filesystem/src/operations.cpp
189+++ b/libs/filesystem/src/operations.cpp
190@@ -2112,8 +2112,13 @@ namespace
191     error_code ec = path_max(path_size);
192     if (ec)return ec;
193     dirent de;
194-    buffer = std::malloc((sizeof(dirent) - sizeof(de.d_name))
195-      +  path_size + 1); // + 1 for "/0"
196+    #ifdef __HAIKU__
197+        buffer = std::malloc(sizeof(dirent)
198+          +  path_size + 1);
199+    #else
200+        buffer = std::malloc((sizeof(dirent) - sizeof(de.d_name))
201+          +  path_size + 1); // + 1 for "/0"
202+    #endif
203     return ok;
204   }  
205 
206-- 
2072.37.3
208
209
210From 499e9f8a1b17b694a23bd08d6fb8591cc693bf0b Mon Sep 17 00:00:00 2001
211From: PulkoMandy <pulkomandy@pulkomandy.tk>
212Date: Fri, 13 Jan 2023 22:10:19 +0100
213Subject: Temporarily disable use of cfsetspeed in Haiku
214
215It is not available for now.
216
217diff --git a/boost/asio/impl/serial_port_base.ipp b/boost/asio/impl/serial_port_base.ipp
218index 9954f77..a558e8e 100644
219--- a/boost/asio/impl/serial_port_base.ipp
220+++ b/boost/asio/impl/serial_port_base.ipp
221@@ -114,7 +114,8 @@ BOOST_ASIO_SYNC_OP_VOID serial_port_base::baud_rate::store(
222     ec = boost::asio::error::invalid_argument;
223     BOOST_ASIO_SYNC_OP_VOID_RETURN(ec);
224   }
225-# if defined(_BSD_SOURCE) || defined(_DEFAULT_SOURCE)
226+# if (defined(_BSD_SOURCE) || defined(_DEFAULT_SOURCE)) && !defined(__HAIKU__)
227+  // TODO enable this when Haiku implements cfsetpseed (#18220)
228   ::cfsetspeed(&storage, baud);
229 # else
230   ::cfsetispeed(&storage, baud);
231-- 
2322.37.3
233
234