Commit Graph

71 Commits

Author SHA1 Message Date
Brad King 061d20be38 ENH: Add UNKNOWN type for IMPORTED libraries
When creating an IMPORTED target for a library that has been found on
disk, it may not be known whether the library is STATIC or SHARED.
However, the library may still be linked using the file found from disk.
Use of an IMPORTED target is still important to allow per-configuration
files to be specified for the library.

This change creates an UNKNOWN type for IMPORTED library targets.  The
IMPORTED_LOCATION property (and its per-config equivalents) specifies
the location of the library.  CMake makes no assumptions about the
library that cannot be inferred from the file on disk.  This will help
projects and find-modules import targets found on disk or specified by
the user.
2008-08-18 11:39:22 -04:00
Brad King d76b20bf3a BUG: Avoid bogus dependency on executable targets
When an executable target within the project is named in
target_link_libraries for another target, but the executable does not
have the ENABLE_EXPORTS property set, then the executable cannot really
be linked.  This is probably a case where the user intends to link to a
third-party library that happens to have the same name as an executable
target in the project (or else will get an error at build time).  We
need to avoid making the other target depend on the executable target
incorrectly, since the executable may actually want to link to that
target and this is not a circular depenency.
2008-08-06 17:48:53 -04:00
Brad King 08221c2a49 BUG: Preserve all non-targets on user link lines
In CMake 2.4 the generated link line for a target always preserved the
originally specified libraries in their original order.  Dependencies
were satisfied by inserting extra libraries into the line, though it had
some bugs.  In CMake 2.6.0 we preserved only the items on the link line
that are not known to be shared libraries.  This reduced excess
libraries on the link line.  However, since we link to system libraries
(such as /usr/lib/libm.so) by asking the linker to search (-lm), some
linkers secretly replace the library with a static library in another
implicit search directory (developers can override this by using an
imported target to force linking by full path).  When this happens the
order still matters.

To avoid this and other potential subtle issues this commit restores
preservation of all non-target items and static library targets.  This
will create cases of unnecessary, duplicate shared libraries on the link
line if the user specifies them, but at least it will work.  In the
future we can attempt a more advanced analysis to safely remove
duplicate shared libraries from the link line.
2008-07-30 10:23:41 -04:00
Brad King 96c9e7de7e BUG: Preserve shared lib order for 2.4 compatibility
We preserve the order and multiplicity of libraries directly linked by a
target as specified by the user.  Items known to be shared libraries may
be safely skipped because order preservation is only needed for static
libraries.  However, CMake 2.4 did not skip shared libs, so we do the
same when in 2.4 compatibility mode.
2008-07-30 09:25:52 -04:00
Brad King 3a5bdaa213 ENH: When preserving potentially static portions of original user link lines recognize shared library names by their extension and skip them. 2008-04-30 18:04:48 -04:00
Brad King 85c983885b BUG: Fix preservation of static libraries on original link lines. 2008-04-23 00:40:19 -04:00
Brad King bd09f6eabc ENH: Simplify link lines in some cases by not allowing targets to be inferred dependees of items with unknown dependencies. 2008-04-23 00:40:12 -04:00
Brad King 3652a8e913 BUG: Fix bug 6605 more completely
- CMake 2.4 added link directories for targets linked
    in the optimized configuration even when building debug
  - Old behavior for policy CMP0003 must account for this
2008-03-31 12:47:31 -04:00
Brad King bf4cef9d5c ENH: Add policy CMP_0004 to require library names to have no leading or trailing whitespace. Replace previous check of CMAKE_BACKWARDS_COMPATIBILITY against version 2.4 with the policy. 2008-03-13 16:35:39 -04:00
Brad King dab5ea859a COMP: Fix Borland 5.5 build
- Its <iosfwd> header includes windows.h which
    defines GetCurrentDirectory
  - It defines 'interface' so we cannot use it as
    a variable name.
2008-02-24 14:05:11 -05:00
Brad King 98621ecfaa BUG: Update cmComputeLinkDepends to support leading/trailing whitespace stripping off link items for compatibility. 2008-02-13 15:29:55 -05:00
Brad King 7b048433c1 BUG: Fix cmComputeLinkDepends::AddVarLinkEntries
- Track link type correctly
  - Use _LINK_TYPE variables exported by CMake 2.4
2008-02-11 10:31:38 -05:00
Brad King 544c263f48 COMP: Add missing assert include. 2008-02-07 16:24:54 -05:00
Brad King 4987e17f46 ENH: Improve link line generation for static library cycles.
- Move Tarjan algorithm from cmComputeTargetDepends
    into its own class cmComputeComponentGraph
  - Use cmComputeComponentGraph to identify the component DAG
    of link dependencies in cmComputeLinkDepends
  - Emit non-trivial component members more than once but always
    in a contiguous group on the link line
2008-02-07 16:14:05 -05:00
Brad King 82fcaebe28 ENH: Pass dependent library search path to linker on some platforms.
- Move runtime path ordering out of cmComputeLinkInformation
    into its own class cmOrderRuntimeDirectories.
  - Create an instance of cmOrderRuntimeDirectories for runtime
    path ordering and another instance for dependent library
    path ordering.
  - Replace CMAKE_DEPENDENT_SHARED_LIBRARY_MODE with explicit
    CMAKE_LINK_DEPENDENT_LIBRARY_FILES boolean.
  - Create CMAKE_LINK_DEPENDENT_LIBRARY_DIRS boolean.
  - Create variables to specify -rpath-link flags:
      CMAKE_SHARED_LIBRARY_RPATH_LINK_<LANG>_FLAG
      CMAKE_EXECUTABLE_RPATH_LINK_<LANG>_FLAG
  - Enable -rpath-link flag on Linux and QNX.
  - Documentation and error message updates
2008-02-01 08:56:00 -05:00
Brad King 2cff26fa52 ENH: Support linking to shared libs with dependent libs
- Split IMPORTED_LINK_LIBRARIES into two parts:
      IMPORTED_LINK_INTERFACE_LIBRARIES
      IMPORTED_LINK_DEPENDENT_LIBRARIES
  - Add CMAKE_DEPENDENT_SHARED_LIBRARY_MODE to select behavior
  - Set mode to LINK for Darwin (fixes universal binary problem)
  - Update ExportImport test to account for changes
2008-01-31 15:45:31 -05:00
Brad King 7902bc06aa ENH: Implemented link-interface specification feature.
- Shared libs and executables with exports may now have
    explicit transitive link dependencies specified
  - Created LINK_INTERFACE_LIBRARIES and related properties
  - Exported targets get the interface libraries as their
    IMPORTED_LINK_LIBRARIES property.
  - The export() and install(EXPORT) commands now give
    an error when a linked target is not included since
    the user can change the interface libraries instead
    of adding the target.
2008-01-30 17:25:52 -05:00
Brad King ed5661821c BUG: cmComputeLinkDepends should not follow the dependencies of executables. 2008-01-30 12:15:17 -05:00
Brad King 5594ad4885 ENH: Updated exporting and importing of targets to support libraries and configurations.
- Created cmExportFileGenerator hierarchy to implement export file generation
  - Installed exports use per-config import files loaded by a central one.
  - Include soname of shared libraries in import information
  - Renamed PREFIX to NAMESPACE in INSTALL(EXPORT) and EXPORT() commands
  - Move addition of CMAKE_INSTALL_PREFIX to destinations to install generators
  - Import files compute the installation prefix relative to their location when loaded
  - Add mapping of importer configurations to importee configurations
  - Rename IMPORT targets to IMPORTED targets to distinguish from windows import libraries
  - Scope IMPORTED targets within directories to isolate them
  - Place all properties created by import files in the IMPORTED namespace
  - Document INSTALL(EXPORT) and EXPORT() commands.
  - Document IMPORTED signature of add_executable and add_library
  - Enable finding of imported targets in cmComputeLinkDepends
2008-01-28 08:38:36 -05:00
Brad King 8f97980615 COMP: Use kwsys to get STL set_intersection algorithm. 2008-01-27 15:09:58 -05:00
Brad King 99b97dece8 ENH: Created cmComputeLinkDepends to compute link dependencies.
- This will be useful for imported library dependencies
  - Replaces old cmTarget analyze-lib-depends stuff for linking
  - Formalizes graph construction and dump
  - Explicitly represents dependency inferral sets
  - Use BFS of initial dependencies to preserve order
2008-01-27 13:42:49 -05:00