From 220c5dc45a61b37603e17c09d3ed9e030df55196 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 30 Sep 2010 11:01:35 -0400 Subject: Add test that CMake errors with empty libs When the library language cannot be determined, make sure CMake errors, not segfaults (bug #11230) --- Tests/CMakeLists.txt | 3 +++ Tests/EmptyLibrary/CMakeLists.txt | 4 ++++ Tests/EmptyLibrary/subdir/CMakeLists.txt | 1 + Tests/EmptyLibrary/subdir/test.h | 1 + 4 files changed, 9 insertions(+) create mode 100644 Tests/EmptyLibrary/CMakeLists.txt create mode 100644 Tests/EmptyLibrary/subdir/CMakeLists.txt create mode 100644 Tests/EmptyLibrary/subdir/test.h diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 5e88b5c..4de9ac3 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -153,6 +153,9 @@ IF(BUILD_TESTING) ADD_TEST_MACRO(ExportImport ExportImport) ADD_TEST_MACRO(Unset Unset) ADD_TEST_MACRO(PolicyScope PolicyScope) + ADD_TEST_MACRO(EmptyLibrary EmptyLibrary) + SET_TESTS_PROPERTIES(EmptyLibrary PROPERTIES + PASS_REGULAR_EXPRESSION "CMake Error: Cannot determine link language for target \"test\"") ADD_TEST_MACRO(CrossCompile CrossCompile) SET_TESTS_PROPERTIES(CrossCompile PROPERTIES PASS_REGULAR_EXPRESSION "TRY_RUN.. invoked in cross-compiling mode") diff --git a/Tests/EmptyLibrary/CMakeLists.txt b/Tests/EmptyLibrary/CMakeLists.txt new file mode 100644 index 0000000..baddbbf --- /dev/null +++ b/Tests/EmptyLibrary/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 2.6) +project(TestEmptyLibrary) + +add_subdirectory(subdir) diff --git a/Tests/EmptyLibrary/subdir/CMakeLists.txt b/Tests/EmptyLibrary/subdir/CMakeLists.txt new file mode 100644 index 0000000..e273f8d --- /dev/null +++ b/Tests/EmptyLibrary/subdir/CMakeLists.txt @@ -0,0 +1 @@ +add_library(test test.h) diff --git a/Tests/EmptyLibrary/subdir/test.h b/Tests/EmptyLibrary/subdir/test.h new file mode 100644 index 0000000..8511f53 --- /dev/null +++ b/Tests/EmptyLibrary/subdir/test.h @@ -0,0 +1 @@ +extern int dummy; -- cgit v0.12 From d3a89432fd5d35a33ee37bca78bbc2cafa113c42 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 30 Sep 2010 11:39:26 -0400 Subject: Fix which string is checked for in the test GNU Makefiles have an extra line that Visual Studio doesn't output. --- Tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 4de9ac3..c056e86 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -155,7 +155,7 @@ IF(BUILD_TESTING) ADD_TEST_MACRO(PolicyScope PolicyScope) ADD_TEST_MACRO(EmptyLibrary EmptyLibrary) SET_TESTS_PROPERTIES(EmptyLibrary PROPERTIES - PASS_REGULAR_EXPRESSION "CMake Error: Cannot determine link language for target \"test\"") + PASS_REGULAR_EXPRESSION "CMake Error: CMake can not determine linker language for target:test") ADD_TEST_MACRO(CrossCompile CrossCompile) SET_TESTS_PROPERTIES(CrossCompile PROPERTIES PASS_REGULAR_EXPRESSION "TRY_RUN.. invoked in cross-compiling mode") -- cgit v0.12 From 96a335fd8d43b1fd73de12d29c192a29eaf5231a Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 30 Sep 2010 14:54:20 -0400 Subject: XCode generation should fail if lang isn't known --- Source/cmGlobalXCodeGenerator.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index f989a5c..0976a4d 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -1424,6 +1424,9 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, std::string defFlags; bool shared = ((target.GetType() == cmTarget::SHARED_LIBRARY) || (target.GetType() == cmTarget::MODULE_LIBRARY)); + bool binary = ((target.GetType() == cmTarget::STATIC_LIBRARY) || + (target.GetType() == cmTarget::EXECUTABLE) || + shared); const char* lang = target.GetLinkerLanguage(configName); std::string cflags; @@ -1442,6 +1445,13 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, // Add shared-library flags if needed. this->CurrentLocalGenerator->AddSharedFlags(flags, lang, shared); } + else if(binary) + { + cmSystemTools::Error + ("CMake can not determine linker language for target:", + target.GetName()); + return; + } // Add define flags this->CurrentLocalGenerator-> -- cgit v0.12