Ver Fonte

Fix crash on export of target with empty INTERFACE_INCLUDE_DIRECTORIES.

The new feature of install(TARGETS ... INCLUDES DESTINATION) introduced
in commit 650e61f8 (Add a convenient way to add the includes install
dir to the INTERFACE., 2013-01-05) introduced this crash. If the
new feature is used with a target which has no
INTERFACE_INCLUDE_DIRECTORIES, a segfault occurred.
Stephen Kelly há 12 anos atrás
pai
commit
f868e47236

+ 1 - 1
Source/cmExportFileGenerator.cxx

@@ -291,7 +291,7 @@ void cmExportFileGenerator::PopulateIncludeDirectoriesInterface(
     {
     return;
     }
-  if (!*input && tei->InterfaceIncludeDirectories.empty())
+  if ((input && !*input) && tei->InterfaceIncludeDirectories.empty())
     {
     // Set to empty
     properties[propName] = "";

+ 3 - 0
Tests/ExportImport/Export/CMakeLists.txt

@@ -270,6 +270,8 @@ set_property(TARGET cmp0022NEW APPEND PROPERTY INTERFACE_LINK_LIBRARIES testLib2
 set_property(TARGET cmp0022OLD APPEND PROPERTY INTERFACE_LINK_LIBRARIES testLib2)
 set_property(TARGET cmp0022OLD APPEND PROPERTY LINK_INTERFACE_LIBRARIES testLib3)
 
+add_library(noIncludesInterface empty.cpp)
+
 install(TARGETS testLibRequired
                 testLibIncludeRequired1
                 testLibIncludeRequired2
@@ -278,6 +280,7 @@ install(TARGETS testLibRequired
                 testLibIncludeRequired5
                 testLibIncludeRequired6
                 testSharedLibRequired
+                noIncludesInterface
         EXPORT RequiredExp DESTINATION lib
         INCLUDES DESTINATION
           installIncludesTest

+ 4 - 0
Tests/ExportImport/Export/empty.cpp

@@ -0,0 +1,4 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int empty() { return 0; }