ENH: add initial support for HAIKU OS from bug# 7425
This commit is contained in:
parent
f49f1d2973
commit
64fc597de2
|
@ -50,6 +50,10 @@ PROGRAM CMakeFortranCompilerId
|
|||
PRINT *, 'INFO:platform[IRIX]'
|
||||
#elif defined(__hpux) || defined(__hpux__)
|
||||
PRINT *, 'INFO:platform[HP-UX]'
|
||||
#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU)
|
||||
PRINT *, 'INFO:platform[Haiku]'
|
||||
! Haiku also defines __BEOS__ so we must
|
||||
! put it prior to the check for __BEOS__
|
||||
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
|
||||
PRINT *, 'INFO:platform[BeOS]'
|
||||
#elif defined(__QNX__) || defined(__QNXNTO__)
|
||||
|
|
|
@ -35,6 +35,12 @@
|
|||
#elif defined(__hpux) || defined(__hpux__)
|
||||
# define PLATFORM_ID "HP-UX"
|
||||
|
||||
#elif defined(__HAIKU) || defined(__HAIKU__) || defined(_HAIKU)
|
||||
# define PLATFORM_ID "Haiku"
|
||||
/* Haiku also defines __BEOS__ so we must
|
||||
put it prior to the check for __BEOS__
|
||||
*/
|
||||
|
||||
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
|
||||
# define PLATFORM_ID "BeOS"
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ int main(int ac, char*av[]){
|
|||
pthread_create(&tid[0], 0, runner, (void*)1);
|
||||
pthread_create(&tid[1], 0, runner, (void*)2);
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) // (no usleep on BeOS 5.)
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) && !defined(__HAIKU__) // (no usleep on BeOS 5.)
|
||||
usleep(1); // for strange behavior on single-processor sun
|
||||
#endif
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
SET(BEOS 1)
|
||||
|
||||
# GCC is the default compiler on Haiku.
|
||||
INCLUDE(${CMAKE_ROOT}/Modules/Platform/gcc.cmake)
|
||||
|
||||
SET(CMAKE_DL_LIBS root be)
|
||||
SET(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
|
||||
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostart")
|
||||
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
|
||||
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
|
||||
SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
|
||||
SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-Wl,-soname,")
|
||||
|
||||
INCLUDE(Platform/UnixPaths)
|
|
@ -1052,7 +1052,17 @@ bool cmCTestTestHandler::GetValue(const char* tag,
|
|||
bool ret = true;
|
||||
if(line == tag)
|
||||
{
|
||||
#ifdef __HAIKU__
|
||||
int tmp = 0;
|
||||
fin >> tmp;
|
||||
value = false;
|
||||
if(tmp)
|
||||
{
|
||||
value = true;
|
||||
}
|
||||
#else
|
||||
fin >> value;
|
||||
#endif
|
||||
ret = cmSystemTools::GetLineFromStream(fin, line); // read blank line
|
||||
}
|
||||
else
|
||||
|
|
|
@ -49,10 +49,15 @@
|
|||
|
||||
#include <memory> // auto_ptr
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#if defined(__BEOS__) && !defined(__HAIKU__)
|
||||
#include <be/kernel/OS.h> /* disable_debugger() API. */
|
||||
#endif
|
||||
|
||||
#if defined(__HAIKU__)
|
||||
#include <os/kernel/OS.h> /* disable_debugger() API. */
|
||||
#endif
|
||||
|
||||
|
||||
#define DEBUGOUT std::cout << __LINE__ << " "; std::cout
|
||||
#define DEBUGERR std::cerr << __LINE__ << " "; std::cerr
|
||||
|
||||
|
@ -610,7 +615,7 @@ void cmCTest::BlockTestErrorDiagnostics()
|
|||
cmSystemTools::PutEnv("DASHBOARD_TEST_FROM_CTEST=" CMake_VERSION);
|
||||
#if defined(_WIN32)
|
||||
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
|
||||
#elif defined(__BEOS__)
|
||||
#elif defined(__BEOS__) || defined(__HAIKU__)
|
||||
disable_debugger(1);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#if defined(__BEOS__) || defined (__HAIKU__)
|
||||
#include <unistd.h> /* prevents a conflict with a #define later on... */
|
||||
#endif
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#if defined(__BEOS__) || defined(__HAIKU__)
|
||||
#include <unistd.h> /* prevents a conflict with a #define later on... */
|
||||
#endif
|
||||
|
||||
|
|
|
@ -932,6 +932,7 @@ bool RunCommandViaPopen(const char* command,
|
|||
cmSystemTools::Stdout(buffer);
|
||||
}
|
||||
output += buffer;
|
||||
buffer[0] = 0;
|
||||
fgets(buffer, BUFFER_SIZE, cpipe);
|
||||
}
|
||||
|
||||
|
@ -971,11 +972,13 @@ bool RunCommandViaPopen(const char* command,
|
|||
error << "SIGFPE";
|
||||
break;
|
||||
#endif
|
||||
#ifndef __HAIKU__
|
||||
#ifdef SIGBUS
|
||||
case SIGBUS:
|
||||
error << "SIGBUS";
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef SIGSEGV
|
||||
case SIGSEGV:
|
||||
error << "SIGSEGV";
|
||||
|
@ -1698,7 +1701,7 @@ int cmSystemToolsGZStructOpen(void* call_data, const char *pathname,
|
|||
}
|
||||
|
||||
// no fchmod on BeOS 5...do pathname instead.
|
||||
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) && !defined(__HAIKU__)
|
||||
if ((oflags & O_CREAT) && chmod(pathname, mode))
|
||||
{
|
||||
return -1;
|
||||
|
|
|
@ -335,11 +335,21 @@ const char* DynamicLoader::LastError()
|
|||
#endif //_WIN32
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// 4. Implementation for BeOS
|
||||
#ifdef __BEOS__
|
||||
// 4. Implementation for BeOS / Haiku
|
||||
#if defined __BEOS__ || defined(__HAIKU__)
|
||||
|
||||
#include <string.h> // for strerror()
|
||||
|
||||
#ifdef __BEOS__
|
||||
#include <be/kernel/image.h>
|
||||
#include <be/support/Errors.h>
|
||||
#endif
|
||||
|
||||
#ifdef __HAIKU__
|
||||
#include <os/kernel/image.h>
|
||||
#include <os/support/Errors.h>
|
||||
#endif
|
||||
|
||||
#define DYNAMICLOADER_DEFINED 1
|
||||
|
||||
namespace KWSYS_NAMESPACE
|
||||
|
|
|
@ -75,7 +75,7 @@ typedef ssize_t kwsysProcess_ssize_t;
|
|||
typedef int kwsysProcess_ssize_t;
|
||||
#endif
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||
/* BeOS 5 doesn't have usleep(), but it has snooze(), which is identical. */
|
||||
# include <be/kernel/OS.h>
|
||||
static inline void kwsysProcess_usleep(unsigned int msec)
|
||||
|
|
|
@ -131,7 +131,12 @@ public:
|
|||
#define _chdir chdir
|
||||
#endif
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||
#if defined(__HAIKU__)
|
||||
#include <os/kernel/OS.h>
|
||||
#include <os/storage/Path.h>
|
||||
#endif
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) && !defined(__HAIKU__)
|
||||
#include <be/kernel/OS.h>
|
||||
#include <be/storage/Path.h>
|
||||
|
||||
|
|
|
@ -17,10 +17,14 @@
|
|||
#include KWSYS_HEADER(ios/iostream)
|
||||
#include KWSYS_HEADER(stl/string)
|
||||
|
||||
#if defined(__BEOS__)
|
||||
#if defined(__BEOS__) && !defined(__HAIKU__)
|
||||
#include <be/kernel/OS.h> /* disable_debugger() API. */
|
||||
#endif
|
||||
|
||||
#if defined(__HAIKU__)
|
||||
#include <os/kernel/OS.h> /* disable_debugger() API. */
|
||||
#endif
|
||||
|
||||
// Work-around CMake dependency scanning limitation. This must
|
||||
// duplicate the above list of headers.
|
||||
#if 0
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
# pragma warn -8060 /* possibly incorrect assignment */
|
||||
#endif
|
||||
|
||||
#if defined(__BEOS__) && !defined(__ZETA__)
|
||||
#if defined(__BEOS__) && !defined(__ZETA__) && !defined(__HAIKU__)
|
||||
/* BeOS 5 doesn't have usleep(), but it has snooze(), which is identical. */
|
||||
# include <be/kernel/OS.h>
|
||||
static inline void testProcess_usleep(unsigned int msec)
|
||||
|
|
|
@ -38,7 +38,7 @@ main ()
|
|||
# define PLATFORM_AIX_V3
|
||||
#endif
|
||||
|
||||
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
|
||||
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || (defined(__BEOS__) && !defined(__HAIKU__))
|
||||
#error "O_NONBLOCK does not work on this platform"
|
||||
#endif
|
||||
int socket;
|
||||
|
|
|
@ -165,6 +165,8 @@ IF(BEOS)
|
|||
CHECK_LIBRARY_EXISTS_CONCAT("bnetapi" closesocket HAVE_LIBBNETAPI)
|
||||
ENDIF(BEOS)
|
||||
|
||||
CHECK_LIBRARY_EXISTS_CONCAT("network" recv HAVE_LIBNETWORK)
|
||||
|
||||
IF(NOT NOT_NEED_LIBNSL)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT("nsl" gethostbyname HAVE_LIBNSL)
|
||||
ENDIF(NOT NOT_NEED_LIBNSL)
|
||||
|
|
|
@ -1133,7 +1133,7 @@ typedef enum {
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef __BEOS__
|
||||
#if defined __BEOS__ || defined __HAIKU__
|
||||
#include <support/SupportDefs.h>
|
||||
#endif
|
||||
|
||||
|
|
|
@ -237,7 +237,7 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#if defined (__BEOS__)
|
||||
#if defined (__BEOS__) && !defined (__HAIKU__)
|
||||
# ifdef ZLIB_DLL
|
||||
# ifdef ZLIB_INTERNAL
|
||||
# define ZEXPORT __declspec(dllexport)
|
||||
|
|
|
@ -147,7 +147,13 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||
# define OS_CODE 0x0f
|
||||
#endif
|
||||
|
||||
#if defined(_BEOS_) || defined(RISCOS)
|
||||
/* Haiku defines both __HAIKU__ and __BEOS__ (for now) */
|
||||
/* many BeOS workarounds are no longer needed in Haiku */
|
||||
#if defined(__HAIKU__) && defined(__BEOS__)
|
||||
#undef __BEOS__
|
||||
#endif
|
||||
|
||||
#if defined(_BEOS_) || defined(RISCOS)
|
||||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
||||
#endif
|
||||
|
||||
|
|
12
bootstrap
12
bootstrap
|
@ -73,6 +73,13 @@ else
|
|||
cmake_system_beos=false
|
||||
fi
|
||||
|
||||
# Determine whether this is Haiku
|
||||
if echo "${cmake_system}" | grep Haiku >/dev/null 2>&1; then
|
||||
cmake_system_haiku=true
|
||||
else
|
||||
cmake_system_haiku=false
|
||||
fi
|
||||
|
||||
# Choose the generator to use for bootstrapping.
|
||||
if ${cmake_system_mingw}; then
|
||||
# Bootstrapping from an MSYS prompt.
|
||||
|
@ -603,6 +610,11 @@ if ${cmake_system_beos}; then
|
|||
cmake_ld_flags="${LDFLAGS} -lroot -lbe"
|
||||
fi
|
||||
|
||||
# Add Haiku toolkits...
|
||||
if ${cmake_system_haiku}; then
|
||||
cmake_ld_flags="${LDFLAGS} -lroot -lbe"
|
||||
fi
|
||||
|
||||
# Test C compiler
|
||||
cmake_c_compiler=
|
||||
|
||||
|
|
Loading…
Reference in New Issue