summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/CMakeGenericSystem.cmake2
-rw-r--r--Modules/Platform/BlueGeneL.cmake2
-rw-r--r--Modules/Platform/Generic.cmake2
-rw-r--r--Source/cmAddLibraryCommand.cxx5
-rw-r--r--Source/cmake.cxx13
-rw-r--r--Source/cmake.h3
6 files changed, 23 insertions, 4 deletions
diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake
index 2af179d..2b50622 100644
--- a/Modules/CMakeGenericSystem.cmake
+++ b/Modules/CMakeGenericSystem.cmake
@@ -20,7 +20,7 @@ SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
# basically all general purpose OSs support shared libs
-SET(CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS FALSE)
+SET_PROPERTIES(GLOBAL PROPERTIES TARGET_SUPPORTS_SHARED_LIBS TRUE)
SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL
"If set, runtime paths are not added when using shared libraries.")
diff --git a/Modules/Platform/BlueGeneL.cmake b/Modules/Platform/BlueGeneL.cmake
index a89988a..5d9111b 100644
--- a/Modules/Platform/BlueGeneL.cmake
+++ b/Modules/Platform/BlueGeneL.cmake
@@ -1,5 +1,5 @@
#the compute nodes on BlueGene/L don't support shared libs
-SET(CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS TRUE)
+SET_PROPERTIES(GLOBAL PROPERTIES TARGET_SUPPORTS_SHARED_LIBS FALSE)
SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "") # -shared
diff --git a/Modules/Platform/Generic.cmake b/Modules/Platform/Generic.cmake
index 9c78745..b6629e2 100644
--- a/Modules/Platform/Generic.cmake
+++ b/Modules/Platform/Generic.cmake
@@ -8,5 +8,5 @@
# and/or ${CMAKE_SYSTEM_NAME}-<compiler_basename>-${CMAKE_SYSTEM_PROCESSOR}.cmake
# (embedded) targets without operating system usually don't support shared libraries
-SET(CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS TRUE)
+SET_PROPERTIES(GLOBAL PROPERTIES TARGET_SUPPORTS_SHARED_LIBS FALSE)
diff --git a/Source/cmAddLibraryCommand.cxx b/Source/cmAddLibraryCommand.cxx
index cc55f80..bbfa5ce 100644
--- a/Source/cmAddLibraryCommand.cxx
+++ b/Source/cmAddLibraryCommand.cxx
@@ -16,6 +16,8 @@
=========================================================================*/
#include "cmAddLibraryCommand.h"
+#include "cmake.h"
+
// cmLibraryCommand
bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
{
@@ -82,7 +84,8 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
STATIC. But at this point we know only the name of the target, but not
yet its linker language. */
if ((type != cmTarget::STATIC_LIBRARY) &&
- (this->Makefile->IsOn("CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS")))
+ (this->Makefile->GetCMakeInstance()->GetPropertyAsBool(
+ "TARGET_SUPPORTS_SHARED_LIBS") == false))
{
std::string msg = "ADD_LIBRARY for library ";
msg += args[0];
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index bbd0fb2..b6efa10 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -128,6 +128,7 @@ cmake::cmake()
cmTarget::DefineProperties(this);
cmMakefile::DefineProperties(this);
cmTest::DefineProperties(this);
+ cmake::DefineProperties(this);
#ifdef __APPLE__
struct rlimit rlp;
@@ -2930,6 +2931,18 @@ int cmake::ExecuteLinkScript(std::vector<std::string>& args)
return result;
}
+void cmake::DefineProperties(cmake *cm)
+{
+ cm->DefineProperty
+ ("TARGET_SUPPORTS_SHARED_LIBS", cmProperty::GLOBAL,
+ "Does the target platform support shared libraries.",
+ "TARGET_SUPPORTS_SHARED_LIBS is a boolean specifying whether the target "
+ "platform supports shared libraries. Basically all current general "
+ "general purpose OS do so, the exception are usually embedded systems "
+ "with no or special OSs.");
+}
+
+
void cmake::DefineProperty(const char *name, cmProperty::ScopeType scope,
const char *ShortDescription,
const char *FullDescription,
diff --git a/Source/cmake.h b/Source/cmake.h
index 8f6b283..f61cf90 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -312,6 +312,9 @@ class cmake
bool IsPropertyDefined(const char *name, cmProperty::ScopeType scope);
bool IsPropertyChained(const char *name, cmProperty::ScopeType scope);
+ // Define the properties
+ static void DefineProperties(cmake *cm);
+
protected:
cmPropertyMap Properties;