From 6c59b924d2892191981f5fda94d8211d337d71c5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 28 Sep 2009 09:45:34 -0400 Subject: [PATCH] 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. --- Source/cmExportCommand.cxx | 15 +++++++++++++++ Source/cmFindPackageCommand.cxx | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/Source/cmExportCommand.cxx b/Source/cmExportCommand.cxx index 945cfee4f..56cb0d00e 100644 --- a/Source/cmExportCommand.cxx +++ b/Source/cmExportCommand.cxx @@ -24,6 +24,10 @@ #include "cmExportBuildFileGenerator.h" +#if defined(__HAIKU__) +#include +#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; diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index ff1d94c84..3a791d90d 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -23,6 +23,10 @@ #include "cmVariableWatch.h" #endif +#if defined(__HAIKU__) +#include +#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")) {