summaryrefslogtreecommitdiffstats
path: root/Source/cmComputeLinkInformation.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Convert CMake to OSI-approved BSD LicenseBrad King2009-09-281-14/+9
| | | | | | | This converts the CMake license to a pure 3-clause OSI-approved BSD License. We drop the previous license clause requiring modified versions to be plainly marked. We also update the CMake copyright to cover the full development time range.
* Factor implicit link info addition into methodsBrad King2009-08-241-28/+41
| | | | | | | In cmComputeLinkInformation::Compute we add implicit link information from languages other than the linker language to the end of the link line. This factors out that code into separate methods to improve readability and organization.
* BUG: Do not filter non-library implicit link itemsBrad King2009-07-281-1/+7
| | | | | | | We list implicit link items of languages linked into a target but filter them by the implicit libraries known to be passed by the main linker language. Implicit link flags like "-z..." should not be filtered out because they are not libraries.
* BUG: Always pass linker flags untouchedBrad King2009-07-281-21/+23
| | | | | | | | In cmComputeLinkInformation we recognize link options that look like library file names, but pass flags starting in '-' through untouched. This fixes the ordering of the check to recognize '-' flags first in case the rest of the option looks like a library file name, as in the case of "-l:libfoo.a".
* BUG: Do not recognize ':' in a library nameBrad King2009-07-281-1/+1
| | | | | | In cmComputeLinkInformation we construct regular expressions to recognize library file names. This fixes the expressions to not allow a colon (':') in the file name so that "-l:libfoo.a" is left alone.
* ENH: Link runtime libraries of all languagesBrad King2009-07-271-0/+69
| | | | | | | | | | | | | | | | | | This adds implicit libraries and search directories for languages linked into a target other than the linker language to its link line. For example, when linking an executable containing both C++ and Fortran code the C++ linker is used but we need to add the Fortran libraries. The variables CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES contain the implicit libraries and directories for each language. Entries for the linker language are known to be implicit in the generated link line. Entries for other languages that do not appear in the known implicit set are listed explicitly at the end of the link line.
* STYLE: Factor cmComputeLinkInformation constructorBrad King2009-07-141-15/+24
| | | | | This factors some code out of the constructor into a new method cmComputeLinkInformation::LoadImplicitLinkInfo for readability.
* ENH: Pass config to cmTarget::GetLinkerLanguageBrad King2009-07-081-1/+1
| | | | | | This passes the build configuration to most GetLinkerLanguage calls. In the future the linker language will account for targets linked in each configuration.
* ENH: Pass config to cmTarget RPATH install methodsBrad King2009-07-081-1/+1
| | | | | This passes the build configuration to cmTarget methods IsChrpathUsed and NeedRelinkBeforeInstall. Later these methods will use the value.
* ENH: Simpler cmTarget::GetLinkerLanguage signatureBrad King2009-07-071-2/+1
| | | | | | | This method previously required the global generator to be passed, but that was left from before cmTarget had its Makefile member. Now the global generator can be retrieved automatically, so we can drop the method argument.
* BUG: Do not create empty build-tree RPATHBrad King2009-06-111-4/+7
| | | | | | | | The fix for issue #9130 appends ':' to the end of the build-tree RPATH unconditionally. This changes the fix to add ':' only when the RPATH is not empty so that we do not create a build-tree RPATH with just ':'. An empty RPATH produces no string at all, so there is no chance of merging with a symbol name anyway.
* BUG: Do not mangle symbols when editing RPATHsBrad King2009-06-101-2/+7
| | | | | | | | | | | | | In ELF binaries the .dynstr string table is used both for the RPATH string and for program symbols. If a symbol name happens to match the end of the build-tree RPATH string the linker is allowed to merge the symbols. We must not allow this when the RPATH string will be replaced during installation because it will mangle the symbol. Therefore we always pad the end of the build-tree RPATH with ':' if it will be replaced. Tools tend not to use ':' at the end of symbol names, so it is unlikely to conflict. See issue #9130.
* BUG: Recognize .so shared libraries on HP-UXBrad King2009-06-031-0/+11
| | | | | | HP-UX uses both .sl and .so as extensions for shared libraries. This teaches CMake to recognize .so shared libraries so they are treated properly during link dependency analysis.
* ENH: Keep target information in final link lineBrad King2008-09-151-2/+2
| | | | | | | In cmComputeLinkInformation items in the final link line returned by GetItems now contain a pointer to their corresponding cmTarget if they were produced by a target. This makes available the set of all targets linked.
* ENH: Add UNKNOWN type for IMPORTED librariesBrad King2008-08-181-4/+9
| | | | | | | | | | | | | | | 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.
* BUG: Preserve all non-targets on user link linesBrad King2008-07-301-1/+0
| | | | | | | | | | | | | | | | | | | | | 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.
* ENH: Warn when system libraries may be hidden.Brad King2008-07-291-0/+4
| | | | | | | | We never explicitly specify system library directories in linker or runtime search paths. Furthermore, libraries in these directories are always linked by asking the linker to search for them. We need to generate a warning when explicitly specified search directories contain files that may hide the system libraries during the search.
* ENH: Provide context in path ordering warningsBrad King2008-07-291-3/+3
|
* ENH: do not depend on files that do not existBill Hoffman2008-07-291-0/+8
|
* ENH: Support full-path libs w/out valid names.Brad King2008-07-231-40/+68
| | | | | | | | This change introduces policy CMP0008 to decide how to treat full path libraries that do not appear to be valid library file names. Such libraries worked by accident in the VS IDE and Xcode generators with CMake 2.4 and below. We support them in CMake 2.6 by introducing this policy. See policy documentation added by this change for details.
* ENH: Skip libs in known dirs for CMP0003 warnings.Brad King2008-07-231-5/+9
| | | | | | | Sometimes we ask the linker to search for a library for which the path is known but for some reason cannot be specified by full path. In these cases do not include the library in CMP0003 warnings because we know the extra paths are not needed for it.
* ENH: Support full-path libs w/out extension in VS IDE.Brad King2008-07-211-1/+40
| | | | | | | - This case worked accidentally in CMake 2.4, though not in Makefiles. - Some projects build only with the VS IDE on windows and have this mistake. - Support them when 2.4 compatibility is enabled by adding the extension.
* ENH: When preserving potentially static portions of original user link lines ↵Brad King2008-04-301-1/+4
| | | | recognize shared library names by their extension and skip them.
* ENH: only complain about -l stuff for CMP0003Bill Hoffman2008-04-181-1/+5
|
* BUG: Correct Mac OS X framework behaviorBrad King2008-04-081-13/+3
| | | | | | | | | | | | - Place the built library in foo.framework/Versions/A/foo - Do not create unused content symlinks (like PrivateHeaders) - Do not use VERSION/SOVERSION properties for frameworks - Make cmTarget::GetDirectory return by value - Remove the foo.framework part from cmTarget::GetDirectory - Correct install_name construction and conversion on install - Fix MACOSX_PACKAGE_LOCATION under Xcode to use the Versions/<version> directory for frameworks - Update the Framework test to try these things
* BUG: Fix bug 6605 more completelyBrad King2008-03-311-0/+20
| | | | | | - 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
* ENH: Yet another attempt at warning for CMP0003.Brad King2008-03-211-50/+37
| | | | | | | - Give example code to avoid the warning - Make explanation more consise - Explicitly state this is for compatibility - Issue the warning for at most one target
* ENH: Clarify warning for policy CMP0003 further.Brad King2008-03-191-8/+11
|
* ENH: do not warn about frameworks as they are not affected by -L anywayBill Hoffman2008-03-191-2/+5
|
* ENH: try to reduce the number of CMP0003 warnings that people see. Only ↵Bill Hoffman2008-03-181-8/+24
| | | | report them for unique sets of libraries with no full path. Also add a message explaining the course of action that should be taken
* COMP: Fix unreachable code warning for break after return in switch in ↵Brad King2008-03-151-2/+0
| | | | CMP0003 impl.
* ENH: Improve CMP0003 to provide more compatibilityBrad King2008-03-141-3/+17
| | | | | | | - Targets built in the tree now add compatibility paths too - The warning message's first list includes at most one item for each unique compatibility path - Clarified error message further
* ENH: Convert CMAKE_LINK_OLD_PATHS to policy CMP0003.Brad King2008-03-131-18/+123
| | | | | | | | | - Policy is WARN by default so projects will build as they did in 2.4 without user intervention - Remove CMAKE_LINK_OLD_PATHS variable since it was never in a release and the policy supercedes it - Report target creation backtrace in warning message since policy should be set by that point
* ENH: Cleanup builtin chrpath supportBrad King2008-03-021-0/+12
| | | | | | | | | | | | - Move computation of extended build-tree rpath to cmComputeLinkInformation - Only enable the extended build-tree rpath if the target will be installed - Generalize the interface of file(CHRPATH) - When changing the rpath on installation only replace the part generated by CMake because the native tools (ex SunCC on Linux) might have added their own part to the rpath
* ENH: Use builtin chrpath instead of relinking ELF targetsBrad King2008-03-011-6/+0
| | | | | | | | | | - Add cmSystemTools::ChangeRPath method - Add undocumented file(CHRPATH) command - When installing use file(CHRPATH) to change the rpath instead of relinking - Remove CMAKE_CHRPATH lookup from CMakeFindBinUtils - Remove CMAKE_USE_CHRPATH option since this should always work
* BUG: cmComputeLinkInformation::CheckImplicitDirItem needs to extract the ↵Brad King2008-02-291-2/+2
| | | | filename portion of the link item to test against the library regex.
* ENH: Improve linking to third-party shared libraries on soname platformsBrad King2008-02-211-5/+20
| | | | | | | | | | | | | | - Reduce false positives in cases of unknown soname - Make library extension regular expressions match only at end of string - When linking to libraries in implicit dirs convert to the -l option only if the file name is one that can be found by the linker (ex. /usr/lib/libfoo.so.1 should be linked by full path) - Add cmSystemTools::GuessLibrarySOName to guess the soname of a library based on presence of a symlink - In cmComputeLinkInformation try to guess an soname before assuming that a third-party library is built without an soname - In cmOrderDirectories guess the soname of shared libraries in cases it is otherwise unknown
* ENH: Better linker search path computation.Brad King2008-02-211-75/+149
| | | | | | | | | | | | | - Use linker search path -L.. -lfoo for lib w/out soname when platform sets CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME - Rename cmOrderRuntimeDirectories to cmOrderDirectories and generalize it for both soname constraints and link library constraints - Use cmOrderDirectories to order -L directories based on all needed constraints - Avoid processing implicit link directories - For CMAKE_OLD_LINK_PATHS add constraints from libs producing them to produce old ordering
* BUG: Fix cmComputeLinkInformation to include the target's user link ↵Brad King2008-02-071-0/+5
| | | | directories in the runtime path computation. This bug was introduced when cmOrderRuntimeDirectories was introduced.
* ENH: When linking to versioned targets whose real file name is known pass ↵Brad King2008-02-061-7/+7
| | | | the real name to the linker instead of the symlink name.
* BUG: Added TARGET_ARCHIVES_MAY_BE_SHARED_LIBS global property to help ↵Brad King2008-02-041-2/+21
| | | | compute proper rpath information on AIX when shared libraries have names like "libfoo.a".
* ENH: Pass dependent library search path to linker on some platforms.Brad King2008-02-011-319/+225
| | | | | | | | | | | | | | | | - 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
* ENH: Support linking to shared libs with dependent libsBrad King2008-01-311-8/+50
| | | | | | | | | - 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
* ENH: Add target property LINK_SEARCH_END_STATIC to help people building ↵Brad King2008-01-311-1/+9
| | | | static binaries on some platforms.
* BUG: Move decision to switch library paths found in implicit link ↵Brad King2008-01-311-13/+53
| | | | directories to use -l options from cmFindLibraryCommand to cmComputeLinkInformation. Existing projects may depend on find_library returning a full path. This slightly weakens cmComputeLinkInformation but is necessary for compatibility.
* ENH: Update cmInstallTargetGenerator to get the shared libraries linked by a ↵Brad King2008-01-291-0/+13
| | | | target from cmComputeLinkInformation instead of duplicating the computation.
* ENH: Add cmTarget::GetLinkInformation method to allow several places in the ↵Brad King2008-01-291-0/+133
| | | | generators to share link information while only computing it once per configuration for a target. Use it to simplify the chrpath feature.
* ENH: Support exporting/importing of Framework targets.Brad King2008-01-281-4/+2
| | | | | | | | - Imported frameworks have the FRAMEWORK property set - Added cmTarget::IsFrameworkOnApple method to simplify checks - Also remove separate IMPORTED_ENABLE_EXPORTS property and just use ENABLE_EXPORTS since, like FRAMEWORK, it just represents the target type. - Document FRAMEWORK keyword in INSTALL command. - Updated IMPORTED_LOCATION property documentation for Frameworks
* ENH: Updated exporting and importing of targets to support libraries and ↵Brad King2008-01-281-18/+10
| | | | | | | | | | | | | | | | | | 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
* ENH: Created cmComputeLinkDepends to compute link dependencies.Brad King2008-01-271-25/+13
| | | | | | | | - 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