소스 검색

BUG: Fixed shared library version support for Fortran. This addresses bug#3558.

Brad King 19 년 전
부모
커밋
c9506c30f0
2개의 변경된 파일18개의 추가작업 그리고 8개의 파일을 삭제
  1. 1 0
      Modules/Platform/Linux.cmake
  2. 17 8
      Source/cmInstallTargetGenerator.cxx

+ 1 - 0
Modules/Platform/Linux.cmake

@@ -7,4 +7,5 @@ SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
 SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
 SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
 SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-Wl,-soname,")
+SET(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-Wl,-soname,")
 INCLUDE(Platform/UnixPaths)

+ 17 - 8
Source/cmInstallTargetGenerator.cxx

@@ -81,16 +81,25 @@ void cmInstallTargetGenerator::GenerateScript(std::ostream& os)
       {
       // Add shared library installation properties if this platform
       // supports them.
-      const char* lib_version = this->Target->GetProperty("VERSION");
-      const char* lib_soversion = this->Target->GetProperty("SOVERSION");
-      if(!this->Target->GetMakefile()
-         ->GetDefinition("CMAKE_SHARED_LIBRARY_SONAME_C_FLAG"))
+      const char* lib_version = 0;
+      const char* lib_soversion = 0;
+
+      // Versioning is supported only for shared libraries and modules,
+      // and then only when the platform supports an soname flag.
+      cmGlobalGenerator* gg =
+        this->Target->GetMakefile()->GetLocalGenerator()->GetGlobalGenerator();
+      if(const char* linkLanguage = this->Target->GetLinkerLanguage(gg))
         {
-        // Versioning is supported only for shared libraries and modules,
-        // and then only when the platform supports an soname flag.
-        lib_version = 0;
-        lib_soversion = 0;
+        std::string sonameFlagVar = "CMAKE_SHARED_LIBRARY_SONAME_";
+        sonameFlagVar += linkLanguage;
+        sonameFlagVar += "_FLAG";
+        if(this->Target->GetMakefile()->GetDefinition(sonameFlagVar.c_str()))
+          {
+          lib_version = this->Target->GetProperty("VERSION");
+          lib_soversion = this->Target->GetProperty("SOVERSION");
+          }
         }
+
       if(lib_version)
         {
         props += " VERSION ";