Browse Source

Merge topic 'include-dir-special'

9be48c4d0b Tests: Add coverage for special characters in include directories
dc0dc974a9 Xcode: Fix quoting of paths with square brackets

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4591
Brad King 5 years ago
parent
commit
eb28858586

+ 1 - 1
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;
   }

+ 18 - 0
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)

+ 11 - 0
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;