37 using namespace Parser;
38 using namespace Data_Structure;
41 std::map<std::string, DependencyTree> DependenciesGenerator::cachedTrees;
50 if (cachedTrees.count(packageName))
52 return cachedTrees[packageName];
56 std::vector<std::string> dependencies =
parser.getDependencies();
57 std::vector<std::string> depsConcat = dependencies;
59 if (!dependencies.empty() && !dependencies.at(0).empty())
61 for (
auto package : dependencies)
63 std::vector<std::string> deps = getDependencieTree(package);
66 if (std::find(depsConcat.begin(), depsConcat.end(), dep) == depsConcat.end())
68 depsConcat.push_back(dep);
75 ARMARX_DEBUG <<
"The package `" << packageName <<
"` does not have any dependencies.";
78 dependencies.push_back(packageName);
79 cachedTrees[packageName] = dependencies;
83 depsConcat.push_back(packageName);
85 cachedTrees[packageName] = depsConcat;
93 if (package.get() ==
nullptr)
95 ARMARX_WARNING_S <<
"Unable to generate Dependencies cfg for unknown package";
97 std::filesystem::path cacheFolderPath =
98 std::filesystem::path(ArmarXDataPath::GetCachePath()) /
"ComponentFiles";
100 if (!std::filesystem::exists(cacheFolderPath))
102 std::filesystem::create_directories(cacheFolderPath);
104 if (!std::filesystem::exists(cacheFolderPath))
106 ARMARX_ERROR_S <<
"Could not create Cache folder for ScenarioManagerPlugin at "
107 << cacheFolderPath.string();
111 std::filesystem::path cacheFilePath =
112 cacheFolderPath / std::filesystem::path(
"./" + package->getName() +
".dependencies.cfg");
114 std::ofstream out(cacheFilePath.string());
116 out <<
"ArmarX.ProjectName=" << package->getName() << std::endl;
119 std::string dataPaths =
"";
120 std::string depsString =
"";
123 for (
auto dep : deps)
129 if (pos != deps.size() - 1)
138 out <<
"ArmarX.ProjectDatapath=" << dataPaths << std::endl;
139 out <<
"ArmarX.ProjectDependencies=" << depsString << std::endl;