summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2013-07-27 09:14:56 (GMT)
committerStephen Kelly <steveire@gmail.com>2013-07-29 13:50:24 (GMT)
commitf868e47236f8872a1edc84ae084f49609def06ad (patch)
treecc551b34ccb3382bf6650b3368e8ae10d21e0899
parent46558d290be1760828714545f41afae17b0c71c9 (diff)
downloadCMake-f868e47236f8872a1edc84ae084f49609def06ad.zip
CMake-f868e47236f8872a1edc84ae084f49609def06ad.tar.gz
CMake-f868e47236f8872a1edc84ae084f49609def06ad.tar.bz2
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.
-rw-r--r--Source/cmExportFileGenerator.cxx2
-rw-r--r--Tests/ExportImport/Export/CMakeLists.txt3
-rw-r--r--Tests/ExportImport/Export/empty.cpp4
3 files changed, 8 insertions, 1 deletions
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index 36802b5..084829d 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/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] = "";
diff --git a/Tests/ExportImport/Export/CMakeLists.txt b/Tests/ExportImport/Export/CMakeLists.txt
index 49f1c58..1910f8c 100644
--- a/Tests/ExportImport/Export/CMakeLists.txt
+++ b/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
diff --git a/Tests/ExportImport/Export/empty.cpp b/Tests/ExportImport/Export/empty.cpp
new file mode 100644
index 0000000..1787013
--- /dev/null
+++ b/Tests/ExportImport/Export/empty.cpp
@@ -0,0 +1,4 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int empty() { return 0; }