diff options
Diffstat (limited to 'Source/cmGccDepfileReader.cxx')
-rw-r--r-- | Source/cmGccDepfileReader.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Source/cmGccDepfileReader.cxx b/Source/cmGccDepfileReader.cxx index eb3511a..96a562e 100644 --- a/Source/cmGccDepfileReader.cxx +++ b/Source/cmGccDepfileReader.cxx @@ -4,10 +4,13 @@ #include <type_traits> #include <utility> +#include <vector> #include <cm/optional> #include "cmGccDepfileLexerHelper.h" +#include "cmStringAlgorithms.h" +#include "cmSystemTools.h" cm::optional<cmGccDepfileContent> cmReadGccDepfile(const char* filePath) { @@ -17,3 +20,34 @@ cm::optional<cmGccDepfileContent> cmReadGccDepfile(const char* filePath) } return cm::nullopt; } + +cm::optional<cmGccDepfileContent> cmReadGccDepfile(const char* filePath, + const std::string& prefix) +{ + auto deps = cmReadGccDepfile(filePath); + + if (prefix.empty() || !deps) { + return deps; + } + + for (auto& dep : *deps) { + for (auto& rule : dep.rules) { + if (!cmSystemTools::FileIsFullPath(rule)) { + rule = cmStrCat(prefix, rule); + } + if (cmSystemTools::FileIsFullPath(rule)) { + rule = cmSystemTools::CollapseFullPath(rule); + } + } + for (auto& path : dep.paths) { + if (!cmSystemTools::FileIsFullPath(path)) { + path = cmStrCat(prefix, path); + } + if (cmSystemTools::FileIsFullPath(path)) { + path = cmSystemTools::CollapseFullPath(path); + } + } + } + + return deps; +} |