From 8fc951456acdcd12315333097338ecd8453df2da Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 6 Aug 2016 22:27:19 +0200 Subject: Import changes from 1.55.0: buildtools diff --git a/tools/build/src/engine/boehm_gc/dyn_load.c b/tools/build/src/engine/boehm_gc/dyn_load.c index 36968ba..91c0efa 100644 --- a/tools/build/src/engine/boehm_gc/dyn_load.c +++ b/tools/build/src/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. @@ -216,7 +216,7 @@ 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/src/engine/boehm_gc/include/gc.h b/tools/build/src/engine/boehm_gc/include/gc.h index cc95088..590a868 100644 --- a/tools/build/src/engine/boehm_gc/include/gc.h +++ b/tools/build/src/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/src/engine/boehm_gc/include/gc_config_macros.h b/tools/build/src/engine/boehm_gc/include/gc_config_macros.h index 66abf0b..fb61f26 100644 --- a/tools/build/src/engine/boehm_gc/include/gc_config_macros.h +++ b/tools/build/src/engine/boehm_gc/include/gc_config_macros.h @@ -45,6 +45,7 @@ || defined(GC_AIX_THREADS) \ || defined(GC_LINUX_THREADS) \ || defined(GC_NETBSD_THREADS) \ + || defined(GC_HAIKU_THREADS) \ || defined(GC_GNU_THREADS)) # define _REENTRANT /* Better late than never. This fails if system headers that */ @@ -61,7 +62,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_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/src/engine/boehm_gc/include/private/gcconfig.h b/tools/build/src/engine/boehm_gc/include/private/gcconfig.h index 20f35bc..7e798a7 100644 --- a/tools/build/src/engine/boehm_gc/include/private/gcconfig.h +++ b/tools/build/src/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 +# 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/src/engine/boehm_gc/os_dep.c b/tools/build/src/engine/boehm_gc/os_dep.c index bb8fa08..f61858d 100644 --- a/tools/build/src/engine/boehm_gc/os_dep.c +++ b/tools/build/src/engine/boehm_gc/os_dep.c @@ -776,6 +776,15 @@ ptr_t GC_get_main_stack_base(void){ } # endif /* BEOS */ +# ifdef HAIKU +# include +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 @@ -1095,7 +1104,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) diff --git a/tools/build/src/engine/fileunix.c b/tools/build/src/engine/fileunix.c index bff3a42..db9dcf9 100644 --- a/tools/build/src/engine/fileunix.c +++ b/tools/build/src/engine/fileunix.c @@ -80,7 +80,7 @@ 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_MPEIX ) || defined( OS_HAIKU ) # define NO_AR # define HAVE_AR #endif diff --git a/tools/build/src/engine/jam.h b/tools/build/src/engine/jam.h index 497a5bf..b9e7297 100644 --- a/tools/build/src/engine/jam.h +++ b/tools/build/src/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/src/engine/jambase.c b/tools/build/src/engine/jambase.c index b15282b..daef19e 100644 --- a/tools/build/src/engine/jambase.c +++ b/tools/build/src/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/system/bin ;\n", +"CC ?= gcc ;\n", +"C++ ?= $(CC) ;\n", +"FORTRAN ?= \"\" ;\n", +"LIBDIR ?= /boot/system/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/src/tools/builtin.jam b/tools/build/src/tools/builtin.jam index d62680a..4bde8e7 100644 --- a/tools/build/src/tools/builtin.jam +++ b/tools/build/src/tools/builtin.jam @@ -40,8 +40,8 @@ import convert ; import generate ; -.os-names = aix android bsd cygwin darwin freebsd hpux iphone linux netbsd openbsd osf - qnx qnxnto sgi solaris unix unixware windows +.os-names = aix android bsd cygwin darwin freebsd haiku hpux iphone linux netbsd + openbsd osf qnx qnxnto sgi solaris unix unixware windows 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 HQIKU : host-os = haiku ; case MACOSX : host-os = darwin ; case KFREEBSD : host-os = freebsd ; case LINUX : host-os = linux ; diff --git a/tools/build/src/tools/builtin.py b/tools/build/src/tools/builtin.py index 68ddfed..d0f6649 100644 --- a/tools/build/src/tools/builtin.py +++ b/tools/build/src/tools/builtin.py @@ -82,7 +82,7 @@ def variant (name, parents_or_properties, explicit_properties = []): feature.compose ("" + name, explicit_properties.all()) __os_names = """ - amiga aix bsd cygwin darwin dos emx freebsd hpux iphone linux netbsd + amiga aix bsd cygwin darwin dos emx freebsd haiku hpux iphone linux netbsd openbsd osf qnx qnxnto sgi solaris sun sunos svr4 sysv ultrix unix unixware vms windows """.split() diff --git a/tools/build/src/tools/gcc.jam b/tools/build/src/tools/gcc.jam index ce9be9d..cce9508 100644 --- a/tools/build/src/tools/gcc.jam +++ b/tools/build/src/tools/gcc.jam @@ -1034,6 +1034,7 @@ rule setup-threading ( targets * : sources * : properties * ) case cygwin : option = -mthreads ; case solaris : option = -pthreads ; libs = rt ; case beos : # No threading options. + case haiku : # No threading options. 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. diff --git a/tools/build/src/tools/gcc.py b/tools/build/src/tools/gcc.py index 97f1e79..1fd0880 100644 --- a/tools/build/src/tools/gcc.py +++ b/tools/build/src/tools/gcc.py @@ -686,6 +686,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': + # Haiku has no threading options, don't set anything here. + pass elif host_os_name.endswith('BSD'): flags('gcc', 'OPTIONS', ['multi'], ['-pthread']) # there is no -lrt on BSD diff --git a/tools/build/src/tools/python.jam b/tools/build/src/tools/python.jam index 783b9ce..1a41a1e 100644 --- a/tools/build/src/tools/python.jam +++ b/tools/build/src/tools/python.jam @@ -639,6 +639,7 @@ local rule system-library-dependencies ( target-os ) case qnx* : return ; case darwin : return ; case windows : return ; + case haiku : return ; case hpux : return rt ; case *bsd : return pthread gcc:util ; -- 2.7.0 From 7330f29833a6478c960ff9234850e29bfe685f78 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 6 Aug 2016 22:27:41 +0200 Subject: Import changes from 1.55.0: sourcecode diff --git a/boost/config/platform/haiku.hpp b/boost/config/platform/haiku.hpp new file mode 100644 index 0000000..5994a36 --- /dev/null +++ b/boost/config/platform/haiku.hpp @@ -0,0 +1,31 @@ +//  (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_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 + +// +// thread API's not auto detected: +// +#define BOOST_HAS_GETTIMEOFDAY +#define BOOST_HAS_SCHED_YIELD +#define BOOST_HAS_PTHREAD_YIELD + +// boilerplate code: +#include diff --git a/boost/config/select_platform_config.hpp b/boost/config/select_platform_config.hpp index 2dddc6a..e072c49 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__) +// BeOS +# 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 b26d1ff..416d7e6 100644 --- a/boost/config/stdlib/libstdcpp3.hpp +++ b/boost/config/stdlib/libstdcpp3.hpp @@ -36,6 +36,7 @@ || defined(_GLIBCXX__PTHREADS) \ || defined(_GLIBCXX_HAS_GTHREADS) \ || defined(_WIN32) \ + || defined(__HAIKU__) \ || defined(_AIX) // // If the std lib has thread support turned on, then turn it on in Boost diff --git a/boost/thread/detail/platform.hpp b/boost/thread/detail/platform.hpp index 1f33b1a..3670ffa 100644 --- a/boost/thread/detail/platform.hpp +++ b/boost/thread/detail/platform.hpp @@ -32,7 +32,7 @@ # define BOOST_THREAD_CYGWIN #elif (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(BOOST_DISABLE_WIN32) # define BOOST_THREAD_WIN32 -#elif defined(__BEOS__) +#elif defined(__BEOS__) || defined(__HAIKU__) # define BOOST_THREAD_BEOS #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) # define BOOST_THREAD_MACOS -- 2.7.0 From d0449587d4bfe1e72338afe7df6a002873da2599 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 6 Aug 2016 22:30:52 +0200 Subject: interprocess: disable XSI shared memory. diff --git a/boost/interprocess/detail/workaround.hpp b/boost/interprocess/detail/workaround.hpp index d0456b5..9ef1faf 100644 --- a/boost/interprocess/detail/workaround.hpp +++ b/boost/interprocess/detail/workaround.hpp @@ -77,7 +77,7 @@ #endif //Check for XSI shared memory objects. They are available in nearly all UNIX platforms - #if !defined(__QNXNTO__) && !defined(__ANDROID__) + #if !defined(__QNXNTO__) && !defined(__ANDROID__) && !defined(__HAIKU__) #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS #endif -- 2.7.0 From d3744cdf7451f46432a494f25ab8b8c461142df5 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 6 Aug 2016 22:33:57 +0200 Subject: filesystem: Haiku uses UTF-8 for filename like FreeBSD and Apple. diff --git a/libs/filesystem/src/path.cpp b/libs/filesystem/src/path.cpp index 784e31a..88c06b8 100644 --- a/libs/filesystem/src/path.cpp +++ b/libs/filesystem/src/path.cpp @@ -36,7 +36,7 @@ # include "windows_file_codecvt.hpp" # include #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \ - || defined(__FreeBSD__) || defined(__OPEN_BSD__) + || defined(__FreeBSD__) || defined(__OPEN_BSD__) || defined(__HAIKU__) # include #endif @@ -831,7 +831,7 @@ namespace std::locale global_loc = std::locale(); return std::locale(global_loc, new windows_file_codecvt); # elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \ - || defined(__FreeBSD__) || defined(__OpenBSD__) + || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__) // "All BSD system functions expect their string parameters to be in UTF-8 encoding // and nothing else." See // http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/FileEncodings.html -- 2.7.0