[Cmake-commits] CMake branch, next, updated. v2.8.8-2756-g3fdd731

Brad King brad.king at kitware.com
Mon Apr 30 13:00:57 EDT 2012


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  3fdd731a2a9318ebc16716eadfd1fd4298650b63 (commit)
       via  71f64e7576263b4a6f3f69247eb05c58fe66eb4f (commit)
       via  104870120c73efca3406b65fb80117314fac61cf (commit)
       via  0c0fe7ad34c571342f643fd560fdf2d8962d8744 (commit)
       via  fc2605a55bb99dba03487956035de7b84eda3ab0 (commit)
       via  91f8288bcbcbd07043ad881b8ec34256c78ce043 (commit)
       via  fa628062b71c73879f60ff332513a1f7a80b1158 (commit)
       via  6dbd0415186a16e9909eda3d2f048677a99842af (commit)
      from  361ef9d96cd4e954e3a528deb59a8f0ece67e9d4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3fdd731a2a9318ebc16716eadfd1fd4298650b63
commit 3fdd731a2a9318ebc16716eadfd1fd4298650b63
Merge: 361ef9d 71f64e7
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 30 13:00:49 2012 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Apr 30 13:00:49 2012 -0400

    Merge topic 'revive-module-no-soname' into next
    
    71f64e7 Merge branch 'no-soname' into revive-module-no-soname
    1048701 Fix line-too-long style error
    0c0fe7a Revert "Revert topic 'module-no-soname' (#13155)"
    fc2605a Push responsibility for soname flag outside local generator (#13155).
    91f8288 Fix NO_SONAME support in Ninja generator (#13155).
    fa62806 Handle -install_name via SONAME_FLAG substitution on OS X (#13155).
    6dbd041 Keep expanding CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG in rules (#13155).


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=71f64e7576263b4a6f3f69247eb05c58fe66eb4f
commit 71f64e7576263b4a6f3f69247eb05c58fe66eb4f
Merge: 0c0fe7a 1048701
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 30 12:59:22 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Apr 30 12:59:22 2012 -0400

    Merge branch 'no-soname' into revive-module-no-soname


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=104870120c73efca3406b65fb80117314fac61cf
commit 104870120c73efca3406b65fb80117314fac61cf
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 30 12:59:13 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Apr 30 12:59:13 2012 -0400

    Fix line-too-long style error

diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 42a0ef6..6362d80 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -968,7 +968,8 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
         {
         return replaceValues.SONameFlag;
         }
-      if(replaceValues.TargetInstallNameDir && variable == "TARGET_INSTALLNAME_DIR")
+      if(replaceValues.TargetInstallNameDir &&
+         variable == "TARGET_INSTALLNAME_DIR")
         {
         return replaceValues.TargetInstallNameDir;
         }
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 36cd6b2..bb8bd3f 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -372,8 +372,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
       this->GetMakefile()->GetSONameFlag(this->TargetLinkLanguage);
     vars["SONAME"] = this->TargetNameSO;
     if (targetType == cmTarget::SHARED_LIBRARY) {
-      std::string install_name_dir =
-        this->GetTarget()->GetInstallNameDirForBuildTree(this->GetConfigName());
+      std::string install_name_dir = this->GetTarget()
+        ->GetInstallNameDirForBuildTree(this->GetConfigName());
 
       if (!install_name_dir.empty()) {
         vars["INSTALLNAME_DIR"] =

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0c0fe7ad34c571342f643fd560fdf2d8962d8744
commit 0c0fe7ad34c571342f643fd560fdf2d8962d8744
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Apr 30 12:56:56 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Apr 30 12:56:56 2012 -0400

    Revert "Revert topic 'module-no-soname' (#13155)"
    
    This reverts commit 1a25d0ee78e0a9ece106c14837b307560b4fb2f2.
    Restore the topic so additional commits can be merged for reference.

diff --git a/Modules/CMakeCInformation.cmake b/Modules/CMakeCInformation.cmake
index 6b5efba..afac7a4 100644
--- a/Modules/CMakeCInformation.cmake
+++ b/Modules/CMakeCInformation.cmake
@@ -164,7 +164,7 @@ INCLUDE(CMakeCommonLanguageInclude)
 # 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> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <SONAME_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
diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake
index 25abb8c..608b833 100644
--- a/Modules/CMakeCXXInformation.cmake
+++ b/Modules/CMakeCXXInformation.cmake
@@ -242,7 +242,7 @@ INCLUDE(CMakeCommonLanguageInclude)
 # 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> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_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
diff --git a/Modules/CMakeFortranInformation.cmake b/Modules/CMakeFortranInformation.cmake
index 76cf34e..2cbd7f8 100644
--- a/Modules/CMakeFortranInformation.cmake
+++ b/Modules/CMakeFortranInformation.cmake
@@ -171,7 +171,7 @@ INCLUDE(CMakeCommonLanguageInclude)
 # create a Fortran shared library
 IF(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY)
   SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
-      "<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 ENDIF(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY)
 
 # create a Fortran shared module just copy the shared library rule
diff --git a/Modules/Compiler/XL.cmake b/Modules/Compiler/XL.cmake
index d2567d5..d293610 100644
--- a/Modules/Compiler/XL.cmake
+++ b/Modules/Compiler/XL.cmake
@@ -47,7 +47,7 @@ macro(__compiler_xl lang)
     # files so that we export only the symbols actually provided by the sources.
     set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
       "${CMAKE_XL_CreateExportList} <OBJECT_DIR>/objects.exp <OBJECTS>"
-      "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -Wl,-bE:<OBJECT_DIR>/objects.exp <CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
+      "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -Wl,-bE:<OBJECT_DIR>/objects.exp <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
       )
   endif()
 endmacro()
diff --git a/Modules/Platform/SunOS.cmake b/Modules/Platform/SunOS.cmake
index 9f2ee2e..2291c34 100644
--- a/Modules/Platform/SunOS.cmake
+++ b/Modules/Platform/SunOS.cmake
@@ -8,7 +8,7 @@ ENDIF(CMAKE_SYSTEM MATCHES "SunOS-4.*")
 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_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+        "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>  <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
   ELSE(CMAKE_COMPILER_IS_GNUCC)
     # Take default rule from CMakeDefaultMakeRuleVariables.cmake.
   ENDIF(CMAKE_COMPILER_IS_GNUCC)
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index c4f5dfb..eb19df5 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -137,10 +137,20 @@ cmExportFileGenerator
       (mf->IsOn("WIN32") || mf->IsOn("CYGWIN") || mf->IsOn("MINGW"));
     if(!dll_platform)
       {
-      std::string soname = target->GetSOName(config);
-      std::string prop = "IMPORTED_SONAME";
+      std::string prop;
+      std::string value;
+      if(target->HasSOName(config))
+        {
+        prop = "IMPORTED_SONAME";
+        value = target->GetSOName(config);
+        }
+      else
+        {
+        prop = "IMPORTED_NO_SONAME";
+        value = "TRUE";
+        }
       prop += suffix;
-      properties[prop] = soname;
+      properties[prop] = value;
       }
     }
 
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 13ede5d..9d82b6f 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -783,7 +783,6 @@ static const char* ruleReplaceVars[] =
   "CMAKE_SHARED_MODULE_${LANG}_FLAGS",
   "CMAKE_SHARED_LIBRARY_${LANG}_FLAGS",
   "CMAKE_${LANG}_LINK_FLAGS",
-  "CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG",
   "CMAKE_${LANG}_ARCHIVE",
   "CMAKE_AR",
   "CMAKE_CURRENT_SOURCE_DIR",
@@ -954,22 +953,20 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
         }
       }
     }
-  if(replaceValues.TargetSOName)
+  if(variable == "TARGET_SONAME" || variable == "SONAME_FLAG")
     {
-    if(variable == "TARGET_SONAME")
+    if(replaceValues.TargetSOName && replaceValues.Language)
       {
-      if(replaceValues.Language)
+      std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
+      name += replaceValues.Language;
+      name += "_FLAG";
+      if(const char *flag = this->Makefile->GetDefinition(name.c_str()))
         {
-        std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
-        name += replaceValues.Language;
-        name += "_FLAG";
-        if(this->Makefile->GetDefinition(name.c_str()))
-          {
-          return replaceValues.TargetSOName;
-          }
+        return ((variable == "TARGET_SONAME") ?
+                replaceValues.TargetSOName : flag);
         }
-      return "";
       }
+    return "";
     }
   if(replaceValues.TargetInstallNameDir)
     {
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 38aa59d..e0ef4dd 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -714,7 +714,10 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
   std::string linkString = linklibs.str();
   vars.LinkLibraries = linkString.c_str();
   vars.ObjectsQuoted = buildObjs.c_str();
-  vars.TargetSOName= targetNameSO.c_str();
+  if (this->Target->HasSOName(this->ConfigName))
+    {
+    vars.TargetSOName= targetNameSO.c_str();
+    }
   vars.LinkFlags = linkFlags.c_str();
 
   // Compute the directory portion of the install_name setting.
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 2bad32c..8975e0f 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -152,7 +152,10 @@ cmNinjaNormalTargetGenerator
                                                 cmLocalGenerator::SHELL);
     vars.ObjectDir = objdir.c_str();
     vars.Target = "$out";
-    vars.TargetSOName = "$SONAME";
+    if (this->GetTarget()->HasSOName(this->GetConfigName()))
+      {
+      vars.TargetSOName = "$SONAME";
+      }
     vars.TargetInstallNameDir = "$INSTALLNAME_DIR";
     vars.TargetPDB = "$TARGET_PDB";
 
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index cfa9976..c96ca94 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -823,6 +823,19 @@ void cmTarget::DefineProperties(cmake *cm)
      "CMAKE_SKIP_BUILD_RPATH if it is set when a target is created.");
 
   cm->DefineProperty
+    ("NO_SONAME", cmProperty::TARGET,
+     "Whether to set \"soname\" when linking a shared library or module.",
+     "Enable this boolean property if a generated shared library or module "
+     "should not have \"soname\" set. Default is to set \"soname\" on all "
+     "shared libraries and modules as long as the platform supports it. "
+     "Generally, use this property only for leaf private libraries or "
+     "plugins. If you use it on normal shared libraries which other targets "
+     "link against, on some platforms a linker will insert a full path to "
+     "the library (as specified at link time) into the dynamic section of "
+     "the dependant binary. Therefore, once installed, dynamic linker may "
+     "eventually fail to locate the library for the binary.");
+
+  cm->DefineProperty
     ("SOVERSION", cmProperty::TARGET,
      "What version number is this target.",
      "For shared libraries VERSION and SOVERSION can be used to specify "
@@ -831,6 +844,7 @@ void cmTarget::DefineProperties(cmake *cm)
      "supports symlinks and the linker supports so-names. "
      "If only one of both is specified the missing is assumed to have "
      "the same version number. "
+     "SOVERSION is ignored if NO_SONAME property is set. "
      "For shared libraries and executables on Windows the VERSION "
      "attribute is parsed to extract a \"major.minor\" version number. "
      "These numbers are used as the image version of the binary. ");
@@ -2995,6 +3009,26 @@ std::string cmTarget::GetPDBName(const char* config)
 }
 
 //----------------------------------------------------------------------------
+bool cmTarget::HasSOName(const char* config)
+{
+  // Construct the name of the soname flag variable for this language.
+  const char* ll = this->GetLinkerLanguage(config);
+  std::string sonameFlag = "CMAKE_SHARED_LIBRARY_SONAME";
+  if(ll)
+    {
+    sonameFlag += "_";
+    sonameFlag += ll;
+    }
+  sonameFlag += "_FLAG";
+  // soname is supported only for shared libraries and modules,
+  // and then only when the platform supports an soname flag.
+  return ((this->GetType() == cmTarget::SHARED_LIBRARY ||
+           this->GetType() == cmTarget::MODULE_LIBRARY) &&
+          !this->GetPropertyAsBool("NO_SONAME") &&
+          this->Makefile->GetDefinition(sonameFlag.c_str()));
+}
+
+//----------------------------------------------------------------------------
 std::string cmTarget::GetSOName(const char* config)
 {
   if(this->IsImported())
@@ -3327,22 +3361,10 @@ void cmTarget::GetLibraryNames(std::string& name,
     return;
     }
 
-  // Construct the name of the soname flag variable for this language.
-  const char* ll = this->GetLinkerLanguage(config);
-  std::string sonameFlag = "CMAKE_SHARED_LIBRARY_SONAME";
-  if(ll)
-    {
-    sonameFlag += "_";
-    sonameFlag += ll;
-    }
-  sonameFlag += "_FLAG";
-
   // Check for library version properties.
   const char* version = this->GetProperty("VERSION");
   const char* soversion = this->GetProperty("SOVERSION");
-  if((this->GetType() != cmTarget::SHARED_LIBRARY &&
-      this->GetType() != cmTarget::MODULE_LIBRARY) ||
-     !this->Makefile->GetDefinition(sonameFlag.c_str()) ||
+  if(!this->HasSOName(config) ||
      this->IsFrameworkOnApple())
     {
     // Versioning is supported only for shared libraries and modules,
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index d41c827..d70cacd 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -347,6 +347,9 @@ public:
   /** Get the name of the pdb file for the target.  */
   std::string GetPDBName(const char* config=0);
 
+  /** Whether this library has soname enabled and platform supports it.  */
+  bool HasSOName(const char* config);
+
   /** Get the soname of the target.  Allowed only for a shared library.  */
   std::string GetSOName(const char* config);
 
diff --git a/Tests/Plugin/CMakeLists.txt b/Tests/Plugin/CMakeLists.txt
index b0942c0..31ca59c 100644
--- a/Tests/Plugin/CMakeLists.txt
+++ b/Tests/Plugin/CMakeLists.txt
@@ -39,6 +39,50 @@ TARGET_LINK_LIBRARIES(example_exe kwsys)
 ADD_LIBRARY(example_mod_1 MODULE src/example_mod_1.c)
 TARGET_LINK_LIBRARIES(example_mod_1 example_exe)
 
+
+IF(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG AND
+    "${CMAKE_C_CREATE_SHARED_MODULE}" MATCHES "SONAME_FLAG")
+  # Add a second plugin that should not have any soname.
+  ADD_LIBRARY(example_mod_2 MODULE src/example_mod_1.c)
+  TARGET_LINK_LIBRARIES(example_mod_2 example_exe)
+  SET_PROPERTY(TARGET example_mod_2 PROPERTY NO_SONAME 1)
+
+  # Verify that targets export with proper IMPORTED SONAME properties.
+  EXPORT(TARGETS example_mod_1 example_mod_2 NAMESPACE exp_
+    FILE ${CMAKE_CURRENT_BINARY_DIR}/mods.cmake)
+  INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/mods.cmake)
+  GET_PROPERTY(configs TARGET exp_example_mod_1 PROPERTY IMPORTED_CONFIGURATIONS)
+  FOREACH(c ${configs})
+    STRING(TOUPPER "${c}" CONFIG)
+    GET_PROPERTY(soname1 TARGET exp_example_mod_1 PROPERTY IMPORTED_SONAME_${CONFIG})
+    GET_PROPERTY(soname2 TARGET exp_example_mod_2 PROPERTY IMPORTED_NO_SONAME_${CONFIG})
+    IF(soname1)
+      MESSAGE(STATUS "exp_example_mod_1 has IMPORTED_SONAME_${CONFIG} as expected: ${soname1}")
+    ELSE()
+      MESSAGE(SEND_ERROR "exp_example_mod_1 does not have IMPORTED_SONAME_${CONFIG} but should")
+    ENDIF()
+    IF(soname2)
+      MESSAGE(STATUS "exp_example_mod_2 has IMPORTED_NO_SONAME_${CONFIG} as expected: ${soname2}")
+    ELSE()
+      MESSAGE(SEND_ERROR "exp_example_mod_2 does not have IMPORTED_NO_SONAME_${CONFIG} but should")
+    ENDIF()
+  ENDFOREACH()
+
+  # Parse the binary to check for SONAME if possible.
+  IF("${CMAKE_EXECUTABLE_FORMAT}" MATCHES "ELF")
+    FIND_PROGRAM(READELF_EXE readelf)
+    IF(READELF_EXE)
+      ADD_CUSTOM_TARGET(check_mod_soname ALL COMMAND
+        ${CMAKE_COMMAND} -Dreadelf=${READELF_EXE}
+                         -Dmod1=$<TARGET_FILE:example_mod_1>
+                         -Dmod2=$<TARGET_FILE:example_mod_2>
+        -P ${CMAKE_CURRENT_SOURCE_DIR}/check_mod_soname.cmake
+        )
+      ADD_DEPENDENCIES(check_mod_soname example_mod_1 example_mod_2)
+    ENDIF()
+  ENDIF()
+ENDIF()
+
 # TODO:
 #  - create a plugin that links to a static lib
 #  - create a plugin that links to a shared lib
diff --git a/Tests/Plugin/check_mod_soname.cmake b/Tests/Plugin/check_mod_soname.cmake
new file mode 100644
index 0000000..3737b45
--- /dev/null
+++ b/Tests/Plugin/check_mod_soname.cmake
@@ -0,0 +1,14 @@
+execute_process(COMMAND ${readelf} -d ${mod1} OUTPUT_FILE ${mod1}.readelf.txt)
+execute_process(COMMAND ${readelf} -d ${mod2} OUTPUT_FILE ${mod2}.readelf.txt)
+file(STRINGS ${mod1}.readelf.txt soname1 REGEX "\\(SONAME\\)")
+file(STRINGS ${mod2}.readelf.txt soname2 REGEX "\\(SONAME\\)")
+if(soname1)
+  message(STATUS "${mod1} has soname as expected: ${soname1}")
+else()
+  message(FATAL_ERROR "${mod1} has no soname but should:\n  ${soname1}")
+endif()
+if(soname2)
+  message(FATAL_ERROR "${mod2} has soname but should not:\n  ${soname2}")
+else()
+  message(STATUS "${mod2} has no soname as expected")
+endif()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fc2605a55bb99dba03487956035de7b84eda3ab0
commit fc2605a55bb99dba03487956035de7b84eda3ab0
Author:     Modestas Vainius <modax at debian.org>
AuthorDate: Sun Apr 29 09:15:04 2012 +0300
Commit:     Modestas Vainius <modax at debian.org>
CommitDate: Sun Apr 29 09:24:43 2012 +0300

    Push responsibility for soname flag outside local generator (#13155).
    
    In order to keep cmLocalGenerator::ExpandRuleVariable() more straightforward,
    transfer full responsibility of setting SONameFlag to the caller.

diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 10c3829..42a0ef6 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -964,17 +964,9 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
         {
         return replaceValues.TargetSOName;
         }
-      if(variable == "SONAME_FLAG")
+      if(variable == "SONAME_FLAG" && replaceValues.SONameFlag)
         {
-        if(replaceValues.SONameFlag)
-          {
-          return replaceValues.SONameFlag;
-          }
-        // else default to the CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG value
-        if(replaceValues.Language)
-          {
-          return this->GetMakefile()->GetSONameFlag(replaceValues.Language);
-          }
+        return replaceValues.SONameFlag;
         }
       if(replaceValues.TargetInstallNameDir && variable == "TARGET_INSTALLNAME_DIR")
         {
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index e0ef4dd..db59ffd 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -716,6 +716,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
   vars.ObjectsQuoted = buildObjs.c_str();
   if (this->Target->HasSOName(this->ConfigName))
     {
+    vars.SONameFlag = this->Makefile->GetSONameFlag(linkLanguage);
     vars.TargetSOName= targetNameSO.c_str();
     }
   vars.LinkFlags = linkFlags.c_str();

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=91f8288bcbcbd07043ad881b8ec34256c78ce043
commit 91f8288bcbcbd07043ad881b8ec34256c78ce043
Author:     Modestas Vainius <modax at debian.org>
AuthorDate: Sat Apr 28 20:46:48 2012 +0300
Commit:     Modestas Vainius <modax at debian.org>
CommitDate: Sat Apr 28 23:25:39 2012 +0300

    Fix NO_SONAME support in Ninja generator (#13155).
    
    As noted in 1a25d0ee point (1), NO_SONAME support for Ninja was broken. Rather
    than omitting $SONAME from rules.ninja, simply do not write its contents for
    targets which have NO_SONAME. Since 3 variables are affected by NO_SONAME
    ($SONAME, $SONAME_FLAG, $INSTALLNAME_DIR), set them only if
    cmTarget::HasSOName() is enabled.
    
    With the addition of SONAME_FLAG variable handling to Ninja, it makes 3
    references to CMAKE_SHARED_LIBRARY_SONAME_<LANG>_FLAG in the code. Therefore,
    refactor its expansion to the cmMakefile::GetSONameFlag() method.

diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index ffa7cc7..10c3829 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -964,14 +964,16 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
         {
         return replaceValues.TargetSOName;
         }
-      if(replaceValues.Language && variable == "SONAME_FLAG")
+      if(variable == "SONAME_FLAG")
         {
-        std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
-        name += replaceValues.Language;
-        name += "_FLAG";
-        if(const char *flag = this->Makefile->GetDefinition(name.c_str()))
+        if(replaceValues.SONameFlag)
           {
-          return flag;
+          return replaceValues.SONameFlag;
+          }
+        // else default to the CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG value
+        if(replaceValues.Language)
+          {
+          return this->GetMakefile()->GetSONameFlag(replaceValues.Language);
           }
         }
       if(replaceValues.TargetInstallNameDir && variable == "TARGET_INSTALLNAME_DIR")
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index 3e93819..cb84a30 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -228,6 +228,7 @@ public:
     const char* ObjectDir;
     const char* Flags;
     const char* ObjectsQuoted;
+    const char* SONameFlag;
     const char* TargetSOName;
     const char* TargetInstallNameDir;
     const char* LinkFlags;
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index e7e5eda..e3ef1b8 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -2201,6 +2201,14 @@ bool cmMakefile::PlatformIs64Bit() const
   return false;
 }
 
+const char* cmMakefile::GetSONameFlag(const char* language) const
+{
+  std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
+  name += language;
+  name += "_FLAG";
+  return GetDefinition(name.c_str());
+}
+
 bool cmMakefile::CanIWriteThisFile(const char* fileName)
 {
   if ( !this->IsOn("CMAKE_DISABLE_SOURCE_CHANGES") )
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 960ba39..ebd5bcf 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -593,6 +593,9 @@ public:
   /** Return whether the target platform is 64-bit.  */
   bool PlatformIs64Bit() const;
 
+  /** Retrieve soname flag for the specified language if supported */
+  const char* GetSONameFlag(const char* language) const;
+
   /**
    * Get a list of preprocessor define flags.
    */
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 8975e0f..36cd6b2 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -152,10 +152,8 @@ cmNinjaNormalTargetGenerator
                                                 cmLocalGenerator::SHELL);
     vars.ObjectDir = objdir.c_str();
     vars.Target = "$out";
-    if (this->GetTarget()->HasSOName(this->GetConfigName()))
-      {
-      vars.TargetSOName = "$SONAME";
-      }
+    vars.SONameFlag = "$SONAME_FLAG";
+    vars.TargetSOName = "$SONAME";
     vars.TargetInstallNameDir = "$INSTALLNAME_DIR";
     vars.TargetPDB = "$TARGET_PDB";
 
@@ -369,17 +367,20 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
                              this->GetTarget(),
                              this->TargetLinkLanguage,
                              this->GetConfigName());
-  vars["SONAME"] = this->TargetNameSO;
-
-  if (targetType == cmTarget::SHARED_LIBRARY) {
-    std::string install_name_dir =
-      this->GetTarget()->GetInstallNameDirForBuildTree(this->GetConfigName());
-
-    if (!install_name_dir.empty()) {
-      vars["INSTALLNAME_DIR"] =
-        this->GetLocalGenerator()->Convert(install_name_dir.c_str(),
-            cmLocalGenerator::NONE,
-            cmLocalGenerator::SHELL, false);
+  if (this->GetTarget()->HasSOName(this->GetConfigName())) {
+    vars["SONAME_FLAG"] =
+      this->GetMakefile()->GetSONameFlag(this->TargetLinkLanguage);
+    vars["SONAME"] = this->TargetNameSO;
+    if (targetType == cmTarget::SHARED_LIBRARY) {
+      std::string install_name_dir =
+        this->GetTarget()->GetInstallNameDirForBuildTree(this->GetConfigName());
+
+      if (!install_name_dir.empty()) {
+        vars["INSTALLNAME_DIR"] =
+          this->GetLocalGenerator()->Convert(install_name_dir.c_str(),
+              cmLocalGenerator::NONE,
+              cmLocalGenerator::SHELL, false);
+      }
     }
   }
 
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index c96ca94..4789197 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -3011,21 +3011,12 @@ std::string cmTarget::GetPDBName(const char* config)
 //----------------------------------------------------------------------------
 bool cmTarget::HasSOName(const char* config)
 {
-  // Construct the name of the soname flag variable for this language.
-  const char* ll = this->GetLinkerLanguage(config);
-  std::string sonameFlag = "CMAKE_SHARED_LIBRARY_SONAME";
-  if(ll)
-    {
-    sonameFlag += "_";
-    sonameFlag += ll;
-    }
-  sonameFlag += "_FLAG";
   // soname is supported only for shared libraries and modules,
   // and then only when the platform supports an soname flag.
   return ((this->GetType() == cmTarget::SHARED_LIBRARY ||
            this->GetType() == cmTarget::MODULE_LIBRARY) &&
           !this->GetPropertyAsBool("NO_SONAME") &&
-          this->Makefile->GetDefinition(sonameFlag.c_str()));
+          this->Makefile->GetSONameFlag(this->GetLinkerLanguage(config)));
 }
 
 //----------------------------------------------------------------------------

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fa628062b71c73879f60ff332513a1f7a80b1158
commit fa628062b71c73879f60ff332513a1f7a80b1158
Author:     Modestas Vainius <modax at debian.org>
AuthorDate: Sat Apr 28 20:14:22 2012 +0300
Commit:     Modestas Vainius <modax at debian.org>
CommitDate: Sat Apr 28 23:23:06 2012 +0300

    Handle -install_name via SONAME_FLAG substitution on OS X (#13155).
    
    Actually, -install_name is already in
    CMAKE_SHARED_LIBRARY_SONAME_{C,CXX,FORTRAN}_FLAG on Darwin. Therefore, simply
    expand it via <SONAME_FLAG> in the platform files in order to make it NO_SONAME
    aware.
    
    What is more, make <TARGET_INSTALLNAME_DIR> NO_SONAME aware as well. Since
    -install_name is soname on OS X, this should not be a problem if this variable
    is expanded only if soname is enabled.
    
    This commit should address concerns expressed in 1a25d0ee point (2).

diff --git a/Modules/Platform/Darwin-icc.cmake b/Modules/Platform/Darwin-icc.cmake
index b62036c..e675c0e 100644
--- a/Modules/Platform/Darwin-icc.cmake
+++ b/Modules/Platform/Darwin-icc.cmake
@@ -84,11 +84,11 @@ ENDIF(XCODE)
 SET(CMAKE_MacOSX_Content_COMPILE_OBJECT "\"${CMAKE_COMMAND}\" -E copy_if_different <SOURCE> <OBJECT>")
 
 SET(CMAKE_C_CREATE_SHARED_LIBRARY
-  "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+  "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
-  "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+  "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
-  "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+  "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 
 SET(CMAKE_CXX_CREATE_SHARED_MODULE
       "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake
index f9d37c3..a19bfe7 100644
--- a/Modules/Platform/Darwin.cmake
+++ b/Modules/Platform/Darwin.cmake
@@ -207,11 +207,11 @@ ENDIF()
 SET(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w)
 SET(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w)
 SET(CMAKE_C_CREATE_SHARED_LIBRARY
-  "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+  "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
-  "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+  "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
-  "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+  "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 
 SET(CMAKE_CXX_CREATE_SHARED_MODULE
       "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
@@ -223,9 +223,9 @@ SET(CMAKE_Fortran_CREATE_SHARED_MODULE
       "<CMAKE_Fortran_COMPILER>  <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
 
 SET(CMAKE_C_CREATE_MACOSX_FRAMEWORK
-      "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 SET(CMAKE_CXX_CREATE_MACOSX_FRAMEWORK
-      "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+      "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
 
 
  
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 8892807..ffa7cc7 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -954,28 +954,33 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
         }
       }
     }
-  if(variable == "TARGET_SONAME" || variable == "SONAME_FLAG")
+  if(variable == "TARGET_SONAME" || variable == "SONAME_FLAG" ||
+     variable == "TARGET_INSTALLNAME_DIR")
     {
-    if(replaceValues.TargetSOName && replaceValues.Language)
+    // All these variables depend on TargetSOName
+    if(replaceValues.TargetSOName)
       {
-      std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
-      name += replaceValues.Language;
-      name += "_FLAG";
-      if(const char *flag = this->Makefile->GetDefinition(name.c_str()))
+      if(variable == "TARGET_SONAME")
         {
-        return ((variable == "TARGET_SONAME") ?
-                replaceValues.TargetSOName : flag);
+        return replaceValues.TargetSOName;
+        }
+      if(replaceValues.Language && variable == "SONAME_FLAG")
+        {
+        std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
+        name += replaceValues.Language;
+        name += "_FLAG";
+        if(const char *flag = this->Makefile->GetDefinition(name.c_str()))
+          {
+          return flag;
+          }
+        }
+      if(replaceValues.TargetInstallNameDir && variable == "TARGET_INSTALLNAME_DIR")
+        {
+        return replaceValues.TargetInstallNameDir;
         }
       }
     return "";
     }
-  if(replaceValues.TargetInstallNameDir)
-    {
-    if(variable == "TARGET_INSTALLNAME_DIR")
-      {
-      return replaceValues.TargetInstallNameDir;
-      }
-    }
   if(replaceValues.LinkLibraries)
     {
     if(variable == "LINK_LIBRARIES")

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6dbd0415186a16e9909eda3d2f048677a99842af
commit 6dbd0415186a16e9909eda3d2f048677a99842af
Author:     Modestas Vainius <modax at debian.org>
AuthorDate: Sat Apr 28 19:30:31 2012 +0300
Commit:     Modestas Vainius <modax at debian.org>
CommitDate: Sat Apr 28 23:22:56 2012 +0300

    Keep expanding CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG in rules (#13155).
    
    As mentioned in 1a25d0ee point (3), some third party projects might still
    depend on rule variables like <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG>. No problem
    here since there is absolutely no harm done if we keep expanding it. In case of
    <TARGET_SONAME> expansion, it won't happen if NO_SONAME is enabled. However,
    that's a new feature which is not enabled by default hence it is rather
    reasonable to expect projects to adapt if they want to support it.

diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 9d82b6f..8892807 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -783,6 +783,7 @@ static const char* ruleReplaceVars[] =
   "CMAKE_SHARED_MODULE_${LANG}_FLAGS",
   "CMAKE_SHARED_LIBRARY_${LANG}_FLAGS",
   "CMAKE_${LANG}_LINK_FLAGS",
+  "CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG",
   "CMAKE_${LANG}_ARCHIVE",
   "CMAKE_AR",
   "CMAKE_CURRENT_SOURCE_DIR",

-----------------------------------------------------------------------

Summary of changes:
 Modules/CMakeCInformation.cmake             |    2 +-
 Modules/CMakeCXXInformation.cmake           |    2 +-
 Modules/CMakeFortranInformation.cmake       |    2 +-
 Modules/Compiler/XL.cmake                   |    2 +-
 Modules/Platform/Darwin-icc.cmake           |    6 ++--
 Modules/Platform/Darwin.cmake               |   10 +++---
 Modules/Platform/SunOS.cmake                |    2 +-
 Source/cmExportFileGenerator.cxx            |   16 ++++++++--
 Source/cmLocalGenerator.cxx                 |   34 ++++++++++-----------
 Source/cmLocalGenerator.h                   |    1 +
 Source/cmMakefile.cxx                       |    8 +++++
 Source/cmMakefile.h                         |    3 ++
 Source/cmMakefileLibraryTargetGenerator.cxx |    6 +++-
 Source/cmNinjaNormalTargetGenerator.cxx     |   26 +++++++++-------
 Source/cmTarget.cxx                         |   39 ++++++++++++++++--------
 Source/cmTarget.h                           |    3 ++
 Tests/Plugin/CMakeLists.txt                 |   44 +++++++++++++++++++++++++++
 Tests/Plugin/check_mod_soname.cmake         |   14 ++++++++
 18 files changed, 161 insertions(+), 59 deletions(-)
 create mode 100644 Tests/Plugin/check_mod_soname.cmake


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list