From dc0dc974a98f91a665ff8b0559ebf4a2b218f3b8 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 10 Apr 2020 09:35:32 -0400 Subject: Xcode: Fix quoting of paths with square brackets The Xcode project file format needs paths containing square brackets ('[' or ']') to be quoted. Issue: #20555 --- Source/cmGlobalXCodeGenerator.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index e74d618..bdc03c7 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -3550,7 +3550,7 @@ std::string cmGlobalXCodeGenerator::RelativeToBinary(const std::string& p) std::string cmGlobalXCodeGenerator::XCodeEscapePath(const std::string& p) { - if (p.find(' ') != std::string::npos) { + if (p.find_first_of(" []") != std::string::npos) { std::string t = cmStrCat('"', p, '"'); return t; } -- cgit v0.12 From 9be48c4d0bd4472d87264534e30ba79397bb691e Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 9 Apr 2020 15:35:33 -0400 Subject: Tests: Add coverage for special characters in include directories We have tests for special characters in preprocessor definitions and custom command line arguments. Add such a test for include directories. Currently the Makefiles generators do not escape paths in `depend.make` in all cases, so leave a FIXME comment and skip the test for those. Issue: #20555 --- Tests/IncludeDirectories/CMakeLists.txt | 18 ++++++++++++++++++ Tests/IncludeDirectories/main.cpp | 11 +++++++++++ 2 files changed, 29 insertions(+) diff --git a/Tests/IncludeDirectories/CMakeLists.txt b/Tests/IncludeDirectories/CMakeLists.txt index fa3309f..838a236 100644 --- a/Tests/IncludeDirectories/CMakeLists.txt +++ b/Tests/IncludeDirectories/CMakeLists.txt @@ -65,6 +65,24 @@ else() PROPERTIES COMPILE_FLAGS "-ITarProp") endif() +# Test escaping of special characters in include directory paths. +# FIXME: Implement full support in Makefile generators +if(NOT CMAKE_GENERATOR MATCHES "Make") + set(special_chars "~@#$%^&=[]{}()!'") + if(NOT CMAKE_GENERATOR STREQUAL "Visual Studio 9 2008") + string(APPEND special_chars ",") + endif() + if(NOT WIN32 AND NOT CYGWIN) + string(APPEND special_chars "*?<>") + endif() + set(special_dir "${CMAKE_CURRENT_BINARY_DIR}/special-${special_chars}-include") + file(WRITE "${special_dir}/SpecialDir.h" "#define SPECIAL_DIR_H\n") + set(special_space_dir "${CMAKE_CURRENT_BINARY_DIR}/special-space ${special_chars}-include") + file(WRITE "${special_space_dir}/SpecialSpaceDir.h" "#define SPECIAL_SPACE_DIR_H\n") + target_include_directories(IncludeDirectories PRIVATE "${special_dir}" "${special_space_dir}") + target_compile_definitions(IncludeDirectories PRIVATE INCLUDE_SPECIAL_DIR) +endif() + add_library(ordertest ordertest.cpp) target_include_directories(ordertest SYSTEM PUBLIC SystemIncludeDirectories/systemlib) target_include_directories(ordertest PUBLIC SystemIncludeDirectories/userlib) diff --git a/Tests/IncludeDirectories/main.cpp b/Tests/IncludeDirectories/main.cpp index a59d27c..7368ee9 100644 --- a/Tests/IncludeDirectories/main.cpp +++ b/Tests/IncludeDirectories/main.cpp @@ -3,6 +3,17 @@ #include "SrcProp.h" #include "TarProp.h" +#ifdef INCLUDE_SPECIAL_DIR +# include "SpecialDir.h" +# ifndef SPECIAL_DIR_H +# error "SPECIAL_DIR_H not defined" +# endif +# include "SpecialSpaceDir.h" +# ifndef SPECIAL_SPACE_DIR_H +# error "SPECIAL_SPACE_DIR_H not defined" +# endif +#endif + int main(int argc, char** argv) { return 0; -- cgit v0.12