diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2008-09-15 17:53:28 -0400 |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2008-09-15 17:53:28 -0400 |
commit | 64fc597de292228b244a3ab18a33bcd8488e09d6 (patch) | |
tree | 17910ce2705e14c5428fdc4b1365b5c025867c58 | |
parent | f49f1d2973039b6e706326d763950c2ecd1d3153 (diff) | |
download | cmake-64fc597de292228b244a3ab18a33bcd8488e09d6.tar.gz |
ENH: add initial support for HAIKU OS from bug# 7425
-rw-r--r-- | Modules/CMakeFortranCompilerId.F90.in | 4 | ||||
-rw-r--r-- | Modules/CMakePlatformId.h.in | 6 | ||||
-rw-r--r-- | Modules/CheckForPthreads.c | 2 | ||||
-rw-r--r-- | Modules/Platform/Haiku.cmake | 14 | ||||
-rw-r--r-- | Source/CTest/cmCTestTestHandler.cxx | 10 | ||||
-rw-r--r-- | Source/cmCTest.cxx | 9 | ||||
-rw-r--r-- | Source/cmDependsJavaLexer.cxx | 2 | ||||
-rw-r--r-- | Source/cmDependsJavaLexer.h | 2 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 5 | ||||
-rw-r--r-- | Source/kwsys/DynamicLoader.cxx | 14 | ||||
-rw-r--r-- | Source/kwsys/ProcessUNIX.c | 2 | ||||
-rw-r--r-- | Source/kwsys/SystemTools.cxx | 7 | ||||
-rw-r--r-- | Source/kwsys/testDynamicLoader.cxx | 6 | ||||
-rw-r--r-- | Source/kwsys/testProcess.c | 2 | ||||
-rw-r--r-- | Utilities/cmcurl/CMake/CurlTests.c | 2 | ||||
-rw-r--r-- | Utilities/cmcurl/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Utilities/cmcurl/curl/curl.h | 2 | ||||
-rw-r--r-- | Utilities/cmzlib/zconf.h | 2 | ||||
-rw-r--r-- | Utilities/cmzlib/zutil.h | 8 | ||||
-rwxr-xr-x | bootstrap | 12 |
20 files changed, 97 insertions, 16 deletions
diff --git a/Modules/CMakeFortranCompilerId.F90.in b/Modules/CMakeFortranCompilerId.F90.in index 0949b5051f..c7facb5503 100644 --- a/Modules/CMakeFortranCompilerId.F90.in +++ b/Modules/CMakeFortranCompilerId.F90.in @@ -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__) diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in index 1f1fca6ff8..8e786ba79f 100644 --- a/Modules/CMakePlatformId.h.in +++ b/Modules/CMakePlatformId.h.in @@ -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" diff --git a/Modules/CheckForPthreads.c b/Modules/CheckForPthreads.c index a846567ffc..d831078510 100644 --- a/Modules/CheckForPthreads.c +++ b/Modules/CheckForPthreads.c @@ -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 diff --git a/Modules/Platform/Haiku.cmake b/Modules/Platform/Haiku.cmake new file mode 100644 index 0000000000..b3c2ea3301 --- /dev/null +++ b/Modules/Platform/Haiku.cmake @@ -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) diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 90a33cb73b..83d882b421 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -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 diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index 77bf10267e..012571f922 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -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 } diff --git a/Source/cmDependsJavaLexer.cxx b/Source/cmDependsJavaLexer.cxx index 3af688adbb..1a5907f479 100644 --- a/Source/cmDependsJavaLexer.cxx +++ b/Source/cmDependsJavaLexer.cxx @@ -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 diff --git a/Source/cmDependsJavaLexer.h b/Source/cmDependsJavaLexer.h index 78ee089ca3..df7cffd705 100644 --- a/Source/cmDependsJavaLexer.h +++ b/Source/cmDependsJavaLexer.h @@ -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 diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 1d2a0cf49d..298d779e2d 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -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; diff --git a/Source/kwsys/DynamicLoader.cxx b/Source/kwsys/DynamicLoader.cxx index 1fdcaf0115..9ca9146399 100644 --- a/Source/kwsys/DynamicLoader.cxx +++ b/Source/kwsys/DynamicLoader.cxx @@ -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 diff --git a/Source/kwsys/ProcessUNIX.c b/Source/kwsys/ProcessUNIX.c index 515bceb8c9..32b4d9e928 100644 --- a/Source/kwsys/ProcessUNIX.c +++ b/Source/kwsys/ProcessUNIX.c @@ -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) diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index 1277d71a4c..d4a81745c8 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -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> diff --git a/Source/kwsys/testDynamicLoader.cxx b/Source/kwsys/testDynamicLoader.cxx index 9021239d5d..e2ab12a0b7 100644 --- a/Source/kwsys/testDynamicLoader.cxx +++ b/Source/kwsys/testDynamicLoader.cxx @@ -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 diff --git a/Source/kwsys/testProcess.c b/Source/kwsys/testProcess.c index 8ca56ed0c4..9002035cf5 100644 --- a/Source/kwsys/testProcess.c +++ b/Source/kwsys/testProcess.c @@ -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) diff --git a/Utilities/cmcurl/CMake/CurlTests.c b/Utilities/cmcurl/CMake/CurlTests.c index c5ba7c28fc..d74a4f0166 100644 --- a/Utilities/cmcurl/CMake/CurlTests.c +++ b/Utilities/cmcurl/CMake/CurlTests.c @@ -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; diff --git a/Utilities/cmcurl/CMakeLists.txt b/Utilities/cmcurl/CMakeLists.txt index d2f319de29..bd5ddfb171 100644 --- a/Utilities/cmcurl/CMakeLists.txt +++ b/Utilities/cmcurl/CMakeLists.txt @@ -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) diff --git a/Utilities/cmcurl/curl/curl.h b/Utilities/cmcurl/curl/curl.h index f6dad457b6..157c634a46 100644 --- a/Utilities/cmcurl/curl/curl.h +++ b/Utilities/cmcurl/curl/curl.h @@ -1133,7 +1133,7 @@ typedef enum { } #endif -#ifdef __BEOS__ +#if defined __BEOS__ || defined __HAIKU__ #include <support/SupportDefs.h> #endif diff --git a/Utilities/cmzlib/zconf.h b/Utilities/cmzlib/zconf.h index 7a3b6fdc1f..6eb52d1334 100644 --- a/Utilities/cmzlib/zconf.h +++ b/Utilities/cmzlib/zconf.h @@ -237,7 +237,7 @@ # endif #endif -#if defined (__BEOS__) +#if defined (__BEOS__) && !defined (__HAIKU__) # ifdef ZLIB_DLL # ifdef ZLIB_INTERNAL # define ZEXPORT __declspec(dllexport) diff --git a/Utilities/cmzlib/zutil.h b/Utilities/cmzlib/zutil.h index b7d5eff81b..74ef1f89fd 100644 --- a/Utilities/cmzlib/zutil.h +++ b/Utilities/cmzlib/zutil.h @@ -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 @@ -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= |