فهرست منبع

ENH: Using separate CMAKE_SHARED_LIBRARY_SONAME flags for C and CXX.

Brad King 22 سال پیش
والد
کامیت
c1add9106c

+ 2 - 2
Modules/CMakeDefaultMakeRuleVariables.cmake

@@ -43,7 +43,7 @@
 # create a shared C++ library
 IF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
   SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
-      "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
 
 # create a c++ shared module copy the shared library rule by default
@@ -54,7 +54,7 @@ ENDIF(NOT CMAKE_CXX_CREATE_SHARED_MODULE)
 # create a C shared library
 IF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
   SET(CMAKE_C_CREATE_SHARED_LIBRARY
-      "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
 
 # create a C shared module just copy the shared library rule

+ 2 - 1
Modules/Platform/Linux.cmake

@@ -7,4 +7,5 @@ SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
 SET(CMAKE_SHARED_LIBRARY_LINK_FLAGS "-rdynamic")  
 SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG "-Wl,-rpath,")
 SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG_SEP ":")
-SET(CMAKE_SHARED_LIBRARY_SONAME_FLAG "-Wl,-soname,")
+SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
+SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-Wl,-soname,")

+ 7 - 4
Modules/Platform/SunOS.cmake

@@ -3,7 +3,8 @@ IF(CMAKE_SYSTEM MATCHES "SunOS-4.*")
    SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared -Wl,-r") 
    SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG "-Wl,-R")
    SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG_SEP ":")  
-   SET(CMAKE_SHARED_LIBRARY_SONAME_FLAG "-h")
+   SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-h")
+   SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-h")
 ENDIF(CMAKE_SYSTEM MATCHES "SunOS-4.*")
 
 IF(CMAKE_SYSTEM MATCHES "SunOS-5*.")
@@ -11,7 +12,8 @@ IF(CMAKE_SYSTEM MATCHES "SunOS-5*.")
   SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-G")
   SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG "-R")
   SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG_SEP ":")
-  SET(CMAKE_SHARED_LIBRARY_SONAME_FLAG "-h")
+  SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-h")
+  SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-h")
   SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "-KPIC") 
   SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-G")
   SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-R")
@@ -21,20 +23,21 @@ IF(CMAKE_SYSTEM MATCHES "SunOS-5*.")
     SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
     SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG "-Wl,-R")
     SET(CMAKE_SHARED_LIBRARY_RUNTIME_FLAG_SEP ":")  
-    SET(CMAKE_SHARED_LIBRARY_SONAME_FLAG "-Wl,-h")
+    SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-h")
   ENDIF(CMAKE_COMPILER_IS_GNUCC)
   IF(CMAKE_COMPILER_IS_GNUCXX)
     SET(CMAKE_SHARED_LIBRARY_CXX_FLAGS "-fPIC") 
     SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "-shared")
     SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-Wl,-R")
     SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG_SEP ":")  
+    SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-Wl,-h")
   ENDIF(CMAKE_COMPILER_IS_GNUCXX)
 ENDIF(CMAKE_SYSTEM MATCHES "SunOS-5*.")
 
 IF(CMAKE_COMPILER_IS_GNUCXX)
   IF(CMAKE_COMPILER_IS_GNUCC)
     SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
-        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>  <CMAKE_SHARED_LIBRARY_SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>  <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
   ELSE(CMAKE_COMPILER_IS_GNUCC)
     # Take default rule from CMakeDefaultMakeRuleVariables.cmake.
   ENDIF(CMAKE_COMPILER_IS_GNUCC)

+ 4 - 3
Source/cmLocalUnixMakefileGenerator.cxx

@@ -935,7 +935,8 @@ static RuleVariables ruleReplaceVars[] =
 
   {"<CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS>", "CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS"},
   {"<CMAKE_SHARED_MODULE_CREATE_C_FLAGS>", "CMAKE_SHARED_MODULE_CREATE_C_FLAGS"},
-  {"<CMAKE_SHARED_LIBRARY_SONAME_FLAG>", "CMAKE_SHARED_LIBRARY_SONAME_FLAG"},
+  {"<CMAKE_SHARED_LIBRARY_SONAME_C_FLAG>", "CMAKE_SHARED_LIBRARY_SONAME_C_FLAG"},
+  {"<CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG>", "CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG"},
   {"<CMAKE_C_LINK_FLAGS>", "CMAKE_C_LINK_FLAGS"},
 
   {"<CMAKE_AR>", "CMAKE_AR"},
@@ -1020,7 +1021,7 @@ cmLocalUnixMakefileGenerator::ExpandRuleVariables(std::string& s,
     }
   if(targetSOName)
     {
-    if(m_Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_SONAME_FLAG"))
+    if(m_Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_SONAME_C_FLAG"))
       {
       cmSystemTools::ReplaceString(s, "<TARGET_SONAME>", targetSOName);
       }
@@ -3114,7 +3115,7 @@ void cmLocalUnixMakefileGenerator::GetLibraryNames(const char* n,
   const char* soversion = t.GetProperty("SOVERSION");
   if((t.GetType() != cmTarget::SHARED_LIBRARY &&
       t.GetType() != cmTarget::MODULE_LIBRARY) ||
-     !m_Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_SONAME_FLAG"))
+     !m_Makefile->GetDefinition("CMAKE_SHARED_LIBRARY_SONAME_C_FLAG"))
     {
     // Versioning is supported only for shared libraries and modules,
     // and then only when the platform supports an soname flag.