Browse Source

Restore support for target names with '+' (#13986)

Extend the range of valid target names with the + sign.  This character
can commonly be used for target names, such as those containing 'c++'.
Add a test but skip it for Borland and Watcom tools which do not support
the character.

Suggested-By: Benjamin Kloster
Stephen Kelly 12 years ago
parent
commit
1bdd167577

+ 1 - 1
Source/cmGeneratorExpression.cxx

@@ -393,7 +393,7 @@ bool cmGeneratorExpression::IsValidTargetName(const std::string &input)
   cmsys::RegularExpression targetNameValidator;
   // The ':' is supported to allow use with IMPORTED targets. At least
   // Qt 4 and 5 IMPORTED targets use ':' as the namespace delimiter.
-  targetNameValidator.compile("^[A-Za-z0-9_.:-]+$");
+  targetNameValidator.compile("^[A-Za-z0-9_.:+-]+$");
 
   return targetNameValidator.find(input.c_str());
 }

+ 7 - 0
Tests/CMakeCommands/target_link_libraries/CMakeLists.txt

@@ -102,7 +102,14 @@ target_compile_definitions(depG INTERFACE
     TEST_DEF
 )
 
+
 add_executable(targetC targetC.cpp)
+if(NOT BORLAND AND NOT WATCOM)
+  # Linking to a target containing a + should be non-fatal, though it does
+  # not work at all on Borland or watcom
+  add_library(wrapc++ empty.cpp)
+  target_link_libraries(targetC wrapc++)
+endif()
 # The TARGET_PROPERTY expression is duplicated below to test that there is no
 # shortcutting of the evaluation by returning an empty string.
 set(_exe_test $<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>)

+ 1 - 0
Tests/CMakeCommands/target_link_libraries/empty.cpp

@@ -0,0 +1 @@
+// No content