Browse Source

Use BeAPI for per-user package registry on Haiku

Applications on Haiku are discouraged from storing their data in $HOME.
This teaches export(PACKAGE) and find_package() to use the BeAPI on
Haiku to store the package registry instead of using ~/.cmake/packages.

See issue #9603.
Brad King 16 years ago
parent
commit
6c59b924d2
2 changed files with 27 additions and 0 deletions
  1. 15 0
      Source/cmExportCommand.cxx
  2. 12 0
      Source/cmFindPackageCommand.cxx

+ 15 - 0
Source/cmExportCommand.cxx

@@ -24,6 +24,10 @@
 
 #include "cmExportBuildFileGenerator.h"
 
+#if defined(__HAIKU__)
+#include <StorageKit.h>
+#endif
+
 cmExportCommand::cmExportCommand()
 :cmCommand()
 ,ArgumentGroup()
@@ -303,6 +307,16 @@ void cmExportCommand::StorePackageRegistryDir(std::string const& package,
                                               const char* content,
                                               const char* hash)
 {
+#if defined(__HAIKU__)
+  BPath dir;
+  if (find_directory(B_USER_SETTINGS_DIRECTORY, &dir) != B_OK)
+    {
+    return;
+    }
+  dir.Append("cmake/packages");
+  dir.Append(package.c_str());
+  std::string fname = dir.Path();
+#else
   const char* home = cmSystemTools::GetEnv("HOME");
   if(!home)
     {
@@ -312,6 +326,7 @@ void cmExportCommand::StorePackageRegistryDir(std::string const& package,
   cmSystemTools::ConvertToUnixSlashes(fname);
   fname += "/.cmake/packages/";
   fname += package;
+#endif
   cmSystemTools::MakeDirectory(fname.c_str());
   fname += "/";
   fname += hash;

+ 12 - 0
Source/cmFindPackageCommand.cxx

@@ -23,6 +23,10 @@
 #include "cmVariableWatch.h"
 #endif
 
+#if defined(__HAIKU__)
+#include <StorageKit.h>
+#endif
+
 void cmFindPackageNeedBackwardsCompatibility(const std::string& variable,
   int access_type, void*, const char* newValue,
   const cmMakefile*)
@@ -1159,6 +1163,14 @@ void cmFindPackageCommand::AddPrefixesRegistry()
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
   this->LoadPackageRegistryWin();
+#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());
+    }
 #else
   if(const char* home = cmSystemTools::GetEnv("HOME"))
     {