From 1b346350af4cc1b2d66c03b76ced8226724399fd Mon Sep 17 00:00:00 2001 From: Marc Chevrier Date: Tue, 30 Mar 2021 12:13:33 +0200 Subject: Makefiles dependencies: normalize windows paths Fixes: #21997 --- Source/cmGccDepfileLexerHelper.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/cmGccDepfileLexerHelper.cxx b/Source/cmGccDepfileLexerHelper.cxx index c782bcd..afa8e9b 100644 --- a/Source/cmGccDepfileLexerHelper.cxx +++ b/Source/cmGccDepfileLexerHelper.cxx @@ -12,6 +12,8 @@ #include "LexerParser/cmGccDepfileLexer.h" #ifdef _WIN32 +# include + # include "cmsys/Encoding.h" #endif @@ -123,11 +125,21 @@ void cmGccDepfileLexerHelper::sanitizeContent() if (it->rules.empty()) { it = this->Content.erase(it); } else { - // Remove empty paths + // Remove empty paths and normalize windows paths for (auto pit = it->paths.begin(); pit != it->paths.end();) { if (pit->empty()) { pit = it->paths.erase(pit); } else { +#if defined(_WIN32) + // Unescape the colon following the drive letter. + // Some versions of GNU compilers can escape this character. + // c\:\path must be transformed to c:\path + if (pit->size() >= 3 && std::toupper((*pit)[0]) >= 'A' && + std::toupper((*pit)[0]) <= 'Z' && (*pit)[1] == '\\' && + (*pit)[2] == ':') { + pit->erase(1, 1); + } +#endif ++pit; } } -- cgit v0.12