Bläddra i källkod

Merge topic 'haiku-updates'

54ef2be Haiku: Include files cleanup in cmCTest
38d5555 Haiku: Remove outdated preprocessor checks
1dc61f8 Haiku: Remove use of B_COMMON_DIRECTORY
7ebc1cb Haiku: Several fixes to platform module
Brad King 12 år sedan
förälder
incheckning
e81b6742f7

+ 1 - 1
Modules/FindLua51.cmake

@@ -54,7 +54,7 @@ find_library(LUA_LIBRARY
 
 
 if(LUA_LIBRARY)
 if(LUA_LIBRARY)
   # include the math library for Unix
   # include the math library for Unix
-  if(UNIX AND NOT APPLE AND NOT BEOS)
+  if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU)
     find_library(LUA_MATH_LIBRARY m)
     find_library(LUA_MATH_LIBRARY m)
     set( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries")
     set( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries")
   # For Windows and Mac, don't need to explicitly include the math library
   # For Windows and Mac, don't need to explicitly include the math library

+ 114 - 13
Modules/Platform/Haiku.cmake

@@ -1,22 +1,123 @@
-set(BEOS 1)
+# process only once
+if(HAIKU)
+  return()
+endif()
+
+set(HAIKU 1)
+set(UNIX 1)
 
 
-set(CMAKE_DL_LIBS root be)
-set(CMAKE_C_COMPILE_OPTIONS_PIC "-fPIC")
-set(CMAKE_C_COMPILE_OPTIONS_PIE "-fPIE")
+set(CMAKE_DL_LIBS "")
 set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
 set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-nostart")
+set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
 set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
+set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
 set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
 set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
+set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")
+
+# Determine, if the C or C++ compiler is configured for a secondary
+# architecture. If so, that will change the search paths we set below. We check
+# whether the compiler's library search paths contain a
+# "/boot/system/develop/lib/<subdir>/", which we assume to be the secondary
+# architecture specific subdirectory and extract the name of the architecture
+# accordingly.
+set(__HAIKU_COMPILER ${CMAKE_C_COMPILER})
+
+if(NOT __HAIKU_COMPILER)
+  set(__HAIKU_COMPILER ${CMAKE_CXX_COMPILER})
+endif()
+
+execute_process(
+  COMMAND ${__HAIKU_COMPILER} -print-search-dirs
+  OUTPUT_VARIABLE _HAIKU_SEARCH_DIRS
+  OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+string(REGEX MATCH ".*\nlibraries: =?([^\n]*:)?/boot/system/develop/lib/([^/]*)/(:[^\n]*)?\n.*" _dummy "\n${_HAIKU_SEARCH_DIRS}\n")
+set(CMAKE_HAIKU_SECONDARY_ARCH "${CMAKE_MATCH_2}")
+
+if(NOT CMAKE_HAIKU_SECONDARY_ARCH)
+  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "")
+  unset(CMAKE_HAIKU_SECONDARY_ARCH)
+else()
+  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "/${CMAKE_HAIKU_SECONDARY_ARCH}")
+
+  # Override CMAKE_*LIBRARY_ARCHITECTURE. This will cause FIND_LIBRARY to search
+  # the libraries in the correct subdirectory first. It still isn't completely
+  # correct, since the parent directories shouldn't be searched at all. The
+  # primary architecture library might still be found, if there isn't one
+  # installed for the secondary architecture or it is installed in a less
+  # specific location.
+  set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
+  set(CMAKE_C_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
+  set(CMAKE_CXX_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
+endif()
+
+list(APPEND CMAKE_SYSTEM_PREFIX_PATH
+  /boot/common/non-packaged
+  /boot/common
+  /boot/system
+  )
+
+LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
+  /boot/common/non-packaged/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  /boot/common/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  /boot/system/develop/headers/os
+  /boot/system/develop/headers/os/app
+  /boot/system/develop/headers/os/device
+  /boot/system/develop/headers/os/drivers
+  /boot/system/develop/headers/os/game
+  /boot/system/develop/headers/os/interface
+  /boot/system/develop/headers/os/kernel
+  /boot/system/develop/headers/os/locale
+  /boot/system/develop/headers/os/mail
+  /boot/system/develop/headers/os/media
+  /boot/system/develop/headers/os/midi
+  /boot/system/develop/headers/os/midi2
+  /boot/system/develop/headers/os/net
+  /boot/system/develop/headers/os/opengl
+  /boot/system/develop/headers/os/storage
+  /boot/system/develop/headers/os/support
+  /boot/system/develop/headers/os/translation
+  /boot/system/develop/headers/os/add-ons/graphics
+  /boot/system/develop/headers/os/add-ons/input_server
+  /boot/system/develop/headers/os/add-ons/screen_saver
+  /boot/system/develop/headers/os/add-ons/tracker
+  /boot/system/develop/headers/os/be_apps/Deskbar
+  /boot/system/develop/headers/os/be_apps/NetPositive
+  /boot/system/develop/headers/os/be_apps/Tracker
+  /boot/system/develop/headers/3rdparty
+  /boot/system/develop/headers/bsd
+  /boot/system/develop/headers/glibc
+  /boot/system/develop/headers/gnu
+  /boot/system/develop/headers/posix
+  /boot/system/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  )
+IF (CMAKE_HAIKU_SECONDARY_ARCH)
+  LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
+    /boot/system/develop/headers
+    )
+ENDIF (CMAKE_HAIKU_SECONDARY_ARCH)
+
+LIST(APPEND CMAKE_HAIKU_C_INCLUDE_DIRECTORIES
+  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES}
+  )
+
+LIST(APPEND CMAKE_HAIKU_CXX_INCLUDE_DIRECTORIES
+  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES})
+
+LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_HAIKU_C_INCLUDE_DIRECTORIES})
+
+LIST(APPEND CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES
+  /boot/common/non-packaged/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  /boot/common/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  /boot/system/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
+  )
+
+LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
+  ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES}
+  )
 
 
-include(Platform/UnixPaths)
-list(APPEND CMAKE_SYSTEM_PREFIX_PATH /boot/common)
-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH /boot/common/include)
-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH /boot/common/lib)
-list(APPEND CMAKE_SYSTEM_PROGRAM_PATH /boot/common/bin)
-list(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES /boot/common/lib)
-list(APPEND CMAKE_SYSTEM_INCLUDE_PATH /boot/develop/headers/3rdparty)
-list(APPEND CMAKE_SYSTEM_LIBRARY_PATH /boot/develop/lib/x86)
+LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES})
 
 
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
   set(CMAKE_INSTALL_PREFIX "/boot/common" CACHE PATH
   set(CMAKE_INSTALL_PREFIX "/boot/common" CACHE PATH

+ 6 - 5
Source/CPack/cmCPackGenerator.cxx

@@ -26,7 +26,8 @@
 #include <algorithm>
 #include <algorithm>
 
 
 #if defined(__HAIKU__)
 #if defined(__HAIKU__)
-#include <StorageKit.h>
+#include <FindDirectory.h>
+#include <StorageDefs.h>
 #endif
 #endif
 
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
@@ -1263,14 +1264,14 @@ const char* cmCPackGenerator::GetInstallPath()
   this->InstallPath += "-";
   this->InstallPath += "-";
   this->InstallPath += this->GetOption("CPACK_PACKAGE_VERSION");
   this->InstallPath += this->GetOption("CPACK_PACKAGE_VERSION");
 #elif defined(__HAIKU__)
 #elif defined(__HAIKU__)
-  BPath dir;
-  if (find_directory(B_COMMON_DIRECTORY, &dir) == B_OK)
+  char dir[B_PATH_NAME_LENGTH];
+  if (find_directory(B_SYSTEM_DIRECTORY, -1, false, dir, sizeof(dir)) == B_OK)
     {
     {
-    this->InstallPath = dir.Path();
+    this->InstallPath = dir;
     }
     }
   else
   else
     {
     {
-    this->InstallPath = "/boot/common";
+    this->InstallPath = "/boot/system";
     }
     }
 #else
 #else
   this->InstallPath = "/usr/local/";
   this->InstallPath = "/usr/local/";

+ 1 - 5
Source/cmCTest.cxx

@@ -53,14 +53,10 @@
 #include <cm_zlib.h>
 #include <cm_zlib.h>
 #include <cmsys/Base64.h>
 #include <cmsys/Base64.h>
 
 
-#if defined(__BEOS__)
+#if defined(__BEOS__) || defined(__HAIKU__)
 #include <be/kernel/OS.h>   /* disable_debugger() API. */
 #include <be/kernel/OS.h>   /* disable_debugger() API. */
 #endif
 #endif
 
 
-#if defined(__HAIKU__)
-#include <os/kernel/OS.h>   /* disable_debugger() API. */
-#endif
-
 
 
 #define DEBUGOUT std::cout << __LINE__ << " "; std::cout
 #define DEBUGOUT std::cout << __LINE__ << " "; std::cout
 #define DEBUGERR std::cerr << __LINE__ << " "; std::cerr
 #define DEBUGERR std::cerr << __LINE__ << " "; std::cerr

+ 8 - 6
Source/cmExportCommand.cxx

@@ -20,7 +20,8 @@
 #include "cmExportBuildFileGenerator.h"
 #include "cmExportBuildFileGenerator.h"
 
 
 #if defined(__HAIKU__)
 #if defined(__HAIKU__)
-#include <StorageKit.h>
+#include <FindDirectory.h>
+#include <StorageDefs.h>
 #endif
 #endif
 
 
 cmExportCommand::cmExportCommand()
 cmExportCommand::cmExportCommand()
@@ -319,14 +320,15 @@ void cmExportCommand::StorePackageRegistryDir(std::string const& package,
                                               const char* hash)
                                               const char* hash)
 {
 {
 #if defined(__HAIKU__)
 #if defined(__HAIKU__)
-  BPath dir;
-  if (find_directory(B_USER_SETTINGS_DIRECTORY, &dir) != B_OK)
+  char dir[B_PATH_NAME_LENGTH];
+  if (find_directory(B_USER_SETTINGS_DIRECTORY, -1, false, dir, sizeof(dir)) !=
+      B_OK)
     {
     {
     return;
     return;
     }
     }
-  dir.Append("cmake/packages");
-  dir.Append(package.c_str());
-  std::string fname = dir.Path();
+  std::string fname = dir;
+  fname += "/cmake/packages/";
+  fname += package;
 #else
 #else
   const char* home = cmSystemTools::GetEnv("HOME");
   const char* home = cmSystemTools::GetEnv("HOME");
   if(!home)
   if(!home)

+ 11 - 7
Source/cmFindPackageCommand.cxx

@@ -19,7 +19,9 @@
 #endif
 #endif
 
 
 #if defined(__HAIKU__)
 #if defined(__HAIKU__)
-#include <StorageKit.h>
+#include <string.h>
+#include <FindDirectory.h>
+#include <StorageDefs.h>
 #endif
 #endif
 
 
 void cmFindPackageNeedBackwardsCompatibility(const std::string& variable,
 void cmFindPackageNeedBackwardsCompatibility(const std::string& variable,
@@ -1584,12 +1586,14 @@ void cmFindPackageCommand::AddPrefixesUserRegistry()
 #if defined(_WIN32) && !defined(__CYGWIN__)
 #if defined(_WIN32) && !defined(__CYGWIN__)
   this->LoadPackageRegistryWinUser();
   this->LoadPackageRegistryWinUser();
 #elif defined(__HAIKU__)
 #elif defined(__HAIKU__)
-  BPath dir;
-  if (find_directory(B_USER_SETTINGS_DIRECTORY, &dir) == B_OK)
-    {
-    dir.Append("cmake/packages");
-    dir.Append(this->Name.c_str());
-    this->LoadPackageRegistryDir(dir.Path());
+  char dir[B_PATH_NAME_LENGTH];
+  if (find_directory(B_USER_SETTINGS_DIRECTORY, -1, false, dir, sizeof(dir)) ==
+      B_OK)
+    {
+    std::string fname = dir;
+    fname += "/cmake/packages/";
+    fname += Name;
+    this->LoadPackageRegistryDir(fname);
     }
     }
 #else
 #else
   if(const char* home = cmSystemTools::GetEnv("HOME"))
   if(const char* home = cmSystemTools::GetEnv("HOME"))

+ 7 - 5
Source/cmLocalGenerator.cxx

@@ -37,7 +37,8 @@
 #include <assert.h>
 #include <assert.h>
 
 
 #if defined(__HAIKU__)
 #if defined(__HAIKU__)
-#include <StorageKit.h>
+#include <FindDirectory.h>
+#include <StorageDefs.h>
 #endif
 #endif
 
 
 cmLocalGenerator::cmLocalGenerator()
 cmLocalGenerator::cmLocalGenerator()
@@ -349,16 +350,17 @@ void cmLocalGenerator::GenerateInstallRules()
     prefix = prefix_win32.c_str();
     prefix = prefix_win32.c_str();
     }
     }
 #elif defined(__HAIKU__)
 #elif defined(__HAIKU__)
+  char dir[B_PATH_NAME_LENGTH];
   if (!prefix)
   if (!prefix)
     {
     {
-    BPath dir;
-    if (find_directory(B_COMMON_DIRECTORY, &dir) == B_OK)
+    if (find_directory(B_SYSTEM_DIRECTORY, -1, false, dir, sizeof(dir))
+        == B_OK)
       {
       {
-      prefix = dir.Path();
+      prefix = dir;
       }
       }
     else
     else
       {
       {
-      prefix = "/boot/common";
+      prefix = "/boot/system";
       }
       }
     }
     }
 #else
 #else

+ 1 - 1
Tests/Complex/Library/CMakeLists.txt

@@ -51,7 +51,7 @@ define_property(
   FULL_DOCS "A simple etst proerty that means nothign and is used for nothing"
   FULL_DOCS "A simple etst proerty that means nothign and is used for nothing"
   )
   )
 set_target_properties(CMakeTestCLibraryShared PROPERTIES FOO BAR)
 set_target_properties(CMakeTestCLibraryShared PROPERTIES FOO BAR)
-if(NOT BEOS AND NOT WIN32)  # No libm on BeOS.
+if(NOT BEOS AND NOT WIN32 AND NOT HAIKU)  # No libm on BeOS.
   set_target_properties(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
   set_target_properties(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
 endif()
 endif()
 get_target_property(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
 get_target_property(FOO_BAR_VAR CMakeTestCLibraryShared FOO)

+ 1 - 1
Tests/ComplexOneConfig/Library/CMakeLists.txt

@@ -51,7 +51,7 @@ define_property(
   FULL_DOCS "A simple etst proerty that means nothign and is used for nothing"
   FULL_DOCS "A simple etst proerty that means nothign and is used for nothing"
   )
   )
 set_target_properties(CMakeTestCLibraryShared PROPERTIES FOO BAR)
 set_target_properties(CMakeTestCLibraryShared PROPERTIES FOO BAR)
-if(NOT BEOS AND NOT WIN32)  # No libm on BeOS.
+if(NOT BEOS AND NOT WIN32 AND NOT HAIKU)  # No libm on BeOS.
   set_target_properties(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
   set_target_properties(CMakeTestCLibraryShared PROPERTIES LINK_FLAGS "-lm")
 endif()
 endif()
 get_target_property(FOO_BAR_VAR CMakeTestCLibraryShared FOO)
 get_target_property(FOO_BAR_VAR CMakeTestCLibraryShared FOO)

+ 1 - 1
Utilities/cmcurl/CMake/CurlTests.c

@@ -38,7 +38,7 @@ main ()
 # define PLATFORM_AIX_V3
 # define PLATFORM_AIX_V3
 #endif
 #endif
 
 
-#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || (defined(__BEOS__) && !defined(__HAIKU__))
+#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
 #error "O_NONBLOCK does not work on this platform"
 #error "O_NONBLOCK does not work on this platform"
 #endif
 #endif
   int socket;
   int socket;

+ 1 - 1
Utilities/cmcurl/select.c

@@ -39,7 +39,7 @@
 #error "We can't compile without select() support!"
 #error "We can't compile without select() support!"
 #endif
 #endif
 
 
-#if defined(__BEOS__) && !defined(__HAIKU__)
+#if defined(__BEOS__)
 /* BeOS has FD_SET defined in socket.h */
 /* BeOS has FD_SET defined in socket.h */
 #include <socket.h>
 #include <socket.h>
 #endif
 #endif

+ 1 - 1
Utilities/cmzlib/zconf.h

@@ -237,7 +237,7 @@
 #  endif
 #  endif
 #endif
 #endif
 
 
-#if defined (__BEOS__) && !defined (__HAIKU__)
+#if defined (__BEOS__)
 #  ifdef ZLIB_DLL
 #  ifdef ZLIB_DLL
 #    ifdef ZLIB_INTERNAL
 #    ifdef ZLIB_INTERNAL
 #      define ZEXPORT   __declspec(dllexport)
 #      define ZEXPORT   __declspec(dllexport)

+ 0 - 6
Utilities/cmzlib/zutil.h

@@ -147,12 +147,6 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
 #  define OS_CODE  0x0f
 #  define OS_CODE  0x0f
 #endif
 #endif
 
 
-/* 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) 
 #if defined(_BEOS_) || defined(RISCOS) 
 #  define fdopen(fd,mode) NULL /* No fdopen() */
 #  define fdopen(fd,mode) NULL /* No fdopen() */
 #endif
 #endif