[Cmake-commits] CMake branch, next, updated. v2.8.6-2219-g87a6705

Brad King brad.king at kitware.com
Thu Dec 15 08:16:03 EST 2011


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  87a670500359d638a83c89482edf5923708e431d (commit)
       via  5d9934312d0b553eafb7c690487215cff7ddedb3 (commit)
      from  f767b8cca32bfda3e5fa35b612c8591e7908e326 (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=87a670500359d638a83c89482edf5923708e431d
commit 87a670500359d638a83c89482edf5923708e431d
Merge: f767b8c 5d99343
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Dec 15 08:16:00 2011 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Thu Dec 15 08:16:00 2011 -0500

    Merge topic 'osx-dependent-libraries' into next
    
    5d99343 Do not link private dependent shared libraries on OS X > 10.4


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5d9934312d0b553eafb7c690487215cff7ddedb3
commit 5d9934312d0b553eafb7c690487215cff7ddedb3
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Dec 14 13:59:39 2011 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Dec 15 08:14:30 2011 -0500

    Do not link private dependent shared libraries on OS X > 10.4
    
    The default OS X 10.4 linker incorrectly searches for dependencies of
    linked shared libraries only under the -isysroot location.  It fails to
    find dependencies of linked shared libraries in cases such as the
    ExportImport test.  It produces errors like:
    
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning can't open dynamic library:
     libtestLib3Imp.dylib
     referenced from: /.../ExportImport/Root/lib/libtestLib3lib.1.2.dylib
     (checking for undefined symbols may be affected) (No such file or directory, errno = 2)
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols: _testLib3Imp
     referenced from libtestLib3lib expected to be defined in
     libtestLib3Imp.dylib
    
    or with CMAKE_SKIP_RPATH off to enable install_name in the Export side:
    
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning can't open dynamic library:
     /Developer/SDKs/MacOSX10.4u.sdk/.../ExportImport/Export/impl/libtestLib3Imp.dylib
     referenced from: /.../ExportImport/Export/libtestLib3lib.1.2.dylib
     (checking for undefined symbols may be affected) (No such file or directory, errno = 2)
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols:_testLib3Imp
     referenced from libtestLib3lib expected to be defined in
     /.../ExportImport/Export/impl/libtestLib3Imp.dylib
    
    Note how "/Developer/SDKs/MacOSX10.4u.sdk" is prepended to the dependent
    library path.
    
    Commit 2cff26fa (Support linking to shared libs with dependent libs,
    2008-01-31) and commit 82fcaebe (Pass dependent library search path to
    linker on some platforms, 2008-02-01) worked around the problem by
    defining platform variable CMAKE_LINK_DEPENDENT_LIBRARY_FILES.  It tells
    CMake to link to dependent libraries explicitly by their path thus
    telling the linker where to find them.
    
    Unfortunately the workaround had the side effect of linking dependent
    libraries and defeats most benefits of LINK_INTERFACE_LIBRARIES.
    Fortunately OS X 10.5 and above do not need to find transitive
    dependencies at all so we can avoid the workaround on Modern OS X.

diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake
index c11c8fb..867c788 100644
--- a/Modules/Platform/Darwin.cmake
+++ b/Modules/Platform/Darwin.cmake
@@ -187,11 +187,13 @@ IF(XCODE)
   SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
 ENDIF(XCODE)
 
-# Need to list dependent shared libraries on link line.  When building
-# with -isysroot (for universal binaries), the linker always looks for
-# dependent libraries under the sysroot.  Listing them on the link
-# line works around the problem.
-SET(CMAKE_LINK_DEPENDENT_LIBRARY_FILES 1)
+IF("${_CURRENT_OSX_VERSION}" VERSION_LESS "10.5")
+  # Need to list dependent shared libraries on link line.  When building
+  # with -isysroot (for universal binaries), the linker always looks for
+  # dependent libraries under the sysroot.  Listing them on the link
+  # line works around the problem.
+  SET(CMAKE_LINK_DEPENDENT_LIBRARY_FILES 1)
+ENDIF()
 
 SET(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w)
 SET(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w)
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index f8ab686..edf6c35 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -161,7 +161,9 @@ listed on the command line.
   - On Windows, DLLs are not directly linked, and the import libraries
     have no transitive dependencies.
 
-  - On Mac, we need to actually list the transitive dependencies.
+  - On Mac OS X 10.5 and above transitive dependencies are not needed.
+
+  - On Mac OS X 10.4 and below we need to actually list the dependencies.
     Otherwise when using -isysroot for universal binaries it cannot
     find the dependent libraries.  Listing them on the command line
     tells the linker where to find them, but unfortunately also links

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

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list