diff options
author | Brad King <brad.king@kitware.com> | 2012-06-20 15:04:35 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-06-20 15:26:05 (GMT) |
commit | 56148fd2bc5ddbf32b89bbf94034ea4b14c6716d (patch) | |
tree | 5b6e08f2865bffcafa981fc7e2cc4c8c2bfa0f32 | |
parent | 8df7aa54f0f78d48e4ed91001ac9ac9d39dbf535 (diff) | |
download | CMake-56148fd2bc5ddbf32b89bbf94034ea4b14c6716d.zip CMake-56148fd2bc5ddbf32b89bbf94034ea4b14c6716d.tar.gz CMake-56148fd2bc5ddbf32b89bbf94034ea4b14c6716d.tar.bz2 |
Do not crash on SHARED library without language (#13324)
Since commit e1409ac5 (Support building shared libraries or modules
without soname, 2012-04-22) CMake crashes on the code
add_library(foo SHARED foo.nolang)
because the logic to lookup the language's soname flag was moved from
cmTarget::GetLibraryNames to cmMakefile::GetSONameFlag without its check
for a NULL language. Restore the check for NULL.
Add RunCMake.Languages test to cover language error cases like this one.
-rw-r--r-- | Source/cmMakefile.cxx | 8 | ||||
-rw-r--r-- | Tests/RunCMake/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/Languages/CMakeLists.txt | 3 | ||||
-rw-r--r-- | Tests/RunCMake/Languages/NoLangSHARED-result.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/Languages/NoLangSHARED-stderr.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/Languages/NoLangSHARED.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/Languages/RunCMakeTest.cmake | 3 | ||||
-rw-r--r-- | Tests/RunCMake/Languages/foo.nolang | 0 |
8 files changed, 16 insertions, 2 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 0a709ae..1d78b3a 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -2197,8 +2197,12 @@ bool cmMakefile::PlatformIs64Bit() const const char* cmMakefile::GetSONameFlag(const char* language) const { - std::string name = "CMAKE_SHARED_LIBRARY_SONAME_"; - name += language; + std::string name = "CMAKE_SHARED_LIBRARY_SONAME"; + if(language) + { + name += "_"; + name += language; + } name += "_FLAG"; return GetDefinition(name.c_str()); } diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 1c6db39..23fc086 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -45,6 +45,7 @@ macro(add_RunCMake_test test) ) endmacro() +add_RunCMake_test(Languages) add_RunCMake_test(ObjectLibrary) add_RunCMake_test(build_command) diff --git a/Tests/RunCMake/Languages/CMakeLists.txt b/Tests/RunCMake/Languages/CMakeLists.txt new file mode 100644 index 0000000..e8db6b0 --- /dev/null +++ b/Tests/RunCMake/Languages/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Languages/NoLangSHARED-result.txt b/Tests/RunCMake/Languages/NoLangSHARED-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Languages/NoLangSHARED-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Languages/NoLangSHARED-stderr.txt b/Tests/RunCMake/Languages/NoLangSHARED-stderr.txt new file mode 100644 index 0000000..3f93cf8 --- /dev/null +++ b/Tests/RunCMake/Languages/NoLangSHARED-stderr.txt @@ -0,0 +1 @@ +CMake Error: CMake can not determine linker language for target:NoLang diff --git a/Tests/RunCMake/Languages/NoLangSHARED.cmake b/Tests/RunCMake/Languages/NoLangSHARED.cmake new file mode 100644 index 0000000..de6adf7 --- /dev/null +++ b/Tests/RunCMake/Languages/NoLangSHARED.cmake @@ -0,0 +1 @@ +add_library(NoLang SHARED foo.nolang) diff --git a/Tests/RunCMake/Languages/RunCMakeTest.cmake b/Tests/RunCMake/Languages/RunCMakeTest.cmake new file mode 100644 index 0000000..a99548f --- /dev/null +++ b/Tests/RunCMake/Languages/RunCMakeTest.cmake @@ -0,0 +1,3 @@ +include(RunCMake) + +run_cmake(NoLangSHARED) diff --git a/Tests/RunCMake/Languages/foo.nolang b/Tests/RunCMake/Languages/foo.nolang new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/Languages/foo.nolang |