Skip to content
Snippets Groups Projects

CMake package finder: use environment variables instead of global cmake registry

Merged Fabian Reister requested to merge cmake-package-finder-use-environment-variables into master
All threads resolved!
2 files
+ 35
13
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -50,10 +50,14 @@
#include <memory>
#include <ctime>
#include <mutex>
#include <cstdlib>
#define SCRIPT_PATH "ArmarXCore/core/system/cmake/FindPackageX.cmake"
#define CACHE_PATH "/ArmarXCMakeCache_" + (getenv("USER")?getenv("USER"):"DUMMY_USER")
extern char ** environ;
namespace armarx
{
std::string getHomeDir()
@@ -435,23 +439,41 @@ namespace armarx
{
std::vector<std::string> result;
using namespace std::filesystem;
auto home = getHomeDir();
if (!home.empty())
{
path p = path {home} / ".cmake" / "packages";
if (is_directory(p))
char ** env;
env = environ;
for (; *env; ++env) {
const std::string envVar(*env);
ARMARX_DEBUG << "Retrieved environment variable " << envVar;
const std::vector<std::string> elements = simox::alg::split(envVar, "=");
if(not (elements.size() == 2))
{
for (const path& entry : boost::make_iterator_range(directory_iterator(p), {}))
continue;
}
const std::string& envVarName = elements.front();
const std::string& envVarValue = elements.back();
if(simox::alg::ends_with(envVarName, "_DIR"))
{
const std::string packageName = simox::alg::remove_suffix(envVarName, "_DIR");
auto pckFinder = CMakePackageFinder {packageName, envVarValue, true};
ARMARX_DEBUG << "Package name: " << packageName;
ARMARX_DEBUG << "Path: " << envVarValue;
// check if this is really a package
if (pckFinder.packageFound() && !pckFinder.getBuildDir().empty())
{
const std::string pkg = entry.filename().string();
auto pckFinder = CMakePackageFinder {pkg, "", true};
if (pckFinder.packageFound() && !pckFinder.getBuildDir().empty())
{
result.push_back(pkg);
}
ARMARX_VERBOSE << "Found package " << packageName;
result.push_back(packageName);
}
}
}
return result;
}
Loading