Commit Graph

324 Commits

Author SHA1 Message Date
Stephen Kelly 290e92ada8 Move GetIncludeDirectories to cmGeneratorTarget. 2012-09-19 15:32:09 +02:00
Stephen Kelly 9facfd1336 Move GetCreateRuleVariable to cmGeneratorTarget. 2012-09-19 15:31:32 +02:00
Stephen Kelly 78bfee35d5 Make cmLocalGenerator::AddArchitectureFlags take a cmGeneratorTarget. 2012-09-19 15:31:29 +02:00
Stephen Kelly 4f5384e75c Move GetLinkInformation to cmGeneratorTarget 2012-09-19 15:30:57 +02:00
Stephen Kelly 987e12e2f9 Move GenerateTargetManifest to cmGeneratorTarget. 2012-09-19 15:30:49 +02:00
Stephen Kelly ecc1acb94c Remove incorrect doc string for link type enum
This is actually a duplicate doc string for a method a few lines above.
2012-08-20 00:05:03 +02:00
Nicolas Despres f8e0a5109f Re-factor framework directory computation. 2012-07-17 14:03:11 +02:00
Nicolas Despres f36c7b0bbe Re-factor Mac OS X content directory computation. 2012-07-17 14:03:11 +02:00
Modestas Vainius e1409ac59b Support building shared libraries or modules without soname (#13155)
Add a boolean target property NO_SONAME which may be used to disable
soname for the specified shared library or module even if the platform
supports it.  This property should be useful for private shared
libraries or various plugins which live in private directories and have
not been designed to be found or loaded globally.

Replace references to <CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG> and
hard-coded -install_name flags with a conditional <SONAME_FLAG> which is
expanded to the value of the CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG
definition as long as soname supports is enabled for the target in
question.  Keep expanding CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG in
rules in case third party projects still use it.  Such projects would
not yet use NO_SONAME so the adjacent <TARGET_SONAME> will always be
expanded.  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.

The Ninja generator performs rule variable substitution only once
globally per rule to put its own placeholders.  Final substitution is
performed by ninja at build time.  Therefore we cannot conditionally
replace the soname placeholders on a per-target basis.  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
soname is enabled.
2012-04-30 11:50:27 -04:00
Brad King c403f27a2d Add $<TARGET_OBJECTS:...> expression to use an object library
For now do not allow an OBJECT library to reference other object
libraries.  Teach cmTarget::ComputeLinkImplementation to include the
languages of object libraries used by a target.
2012-03-16 10:12:15 -04:00
Brad King b87d7a60a0 Add OBJECT_LIBRARY target type
This library type can compile sources to object files but does not link
or archive them.  It will be useful to reference from executable and
normal library targets for direct inclusion of object files in them.

Diagnose and reject the following as errors:

* An OBJECT library may not be referenced in target_link_libraries.

* An OBJECT library may contain only compiling sources and supporting
  headers and custom commands.  Other source types that are not normally
  ignored are not allowed.

* An OBJECT library may not have PRE_BUILD, PRE_LINK, or POST_BUILD
  commands.

* An OBJECT library may not be installed, exported, or imported.

Some of these cases may be supported in the future but are not for now.

Teach the VS generator that OBJECT_LIBRARY targets are "linkable" just
like STATIC_LIBRARY targets for the LinkLibraryDependencies behavior.
2012-03-13 14:37:32 -04:00
Brad King 51b67366ed Merge branch 'cleanup-object-file-names' into object-library 2012-03-09 15:15:37 -05:00
David Cole 580171185b Merge topic 'target-include-directories'
d662dff Fix shadowed variable warning on dashboard results
f66e735 Fix compiler warning reported on older Borland dashboard.
d90eed4 Fix compiler error reported on older Borland dashboard.
8233636 Update the documentation regarding INCLUDE_DIRECTORIES.
d899eb7 Call ExpandVariablesInString for each target's INCLUDE_DIRECTORIES
c21db87 Make search paths ordered and unique
22021f0 Remove cmMakefile::GetIncludeDirectories
9106b56 Extract and use the INCLUDE_DIRECTORIES target properties.
840509b Keep the INCLUDE_DIRECTORIES target property up to date.
a4d5f7b Add API to get the ordered includes for a target.
8adaee2 CMake: Eliminate cmMakefile::IncludeDirectories
7620932 Remove include flags memoization.
97a5faa Make it safe to call this method without creating duplicates.
edd5303 Refactor GetIncludeFlags to take includes instead of fetching them
2012-03-08 15:13:15 -05:00
Brad King 4ae7f3656b Remove unused partial OBJECT_FILES property implementation
Remove partial implementation added by commit ca0230a3 (check in initial
conv library stuff, 2007-02-16) since it was never finished.  It does
not make sense for multi-configuration generators since no specific
build configuration is processed at CMake time.
2012-03-06 13:20:17 -05:00
Brad King 573fa3bf13 Factor cmInstallType out of cmTarget::TargetType
The purpose of the TargetType enumeration was overloaded for install
type because install rules were once recorded as targets.  Factor the
install types out into their own enumeration.
2012-02-27 13:19:57 -05:00
Stephen Kelly a4d5f7b9b2 Add API to get the ordered includes for a target. 2012-02-22 06:31:49 -05:00
David Cole 174ecf51f8 Merge topic 'refactor-versioned-lib-names'
96f65ba cmTarget: Create helper method for versioned library names
2011-12-07 16:46:35 -05:00
Brad King 96f65ba68e cmTarget: Create helper method for versioned library names
Replace the duplicate logic for the realName and soName of versioned
shared libraries with calls to a new ComputeVersionedName method.
2011-12-06 14:19:44 -05:00
Brad King afb00fef19 Add CMAKE_GNUtoMS option to convert GNU .dll.a to MS .lib
Teach the Windows-GNU.cmake platform file to look for Visual Studio
tools matching the target ABI.  Add an extra step to the link command
for shared libraries and executables that export symbols and on which a
new GNUtoMS property is set (initialized by the CMAKE_GNUtoMS option).
Tell the GNU linker to output a module definition (.def) file listing
exported symbols in addition to the GNU-format import library (.dll.a).
Pass the .def file to the MS "lib" tool to construct a MS-format DLL
import library (.lib).

Teach the install(TARGETS) command to install the MS import library next
to the GNU one.  Teach the install(EXPORT) and export() command to set
the IMPORTED_IMPLIB property pointing at the import library to use the
import library matching the tools in the importing project.
2011-12-05 18:13:49 -05:00
Nicolas Despres 3db2973bd2 Refactor TargetTypeNames.
Make it a static method instead of an array. It is safer for the
type checking and if we add a new target type we will be warned to add
a case to the switch.
2011-10-02 18:30:42 +01:00
Brad King d6b2a1a9b3 Merge topic 'effective-platform-name'
74c73d5 Correct KWStyle line too long error
0c030ef Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects.
2011-07-26 14:57:41 -04:00
David Cole 0c030ef72c Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects.
Facilitates building iOS projects, enabling switching back and forth
between simulator and device builds at development time.
2011-07-18 16:37:06 -04:00
Alex Neundorf 9dbba1b464 Fix #12342: Add APPEND_STRING option to set_property()
set_property() has APPEND, which creates a list. E.g. when
appending to COMPILE_FLAGS a string is needed, not a list.
With the APPEND_STRING option the value is append as string,
not as list.

Alex
2011-07-15 20:57:33 +02:00
Modestas Vainius 7c5e412c4a Documentation: Fix a few typos (#11883)
W: cmake: manpage-has-errors-from-man usr/share/man/man1/cmake.1.gz 10029: warning [p 158, 13.5i]: can't break line
I: cmake: spelling-error-in-manpage usr/share/man/man1/cmake.1.gz informations information
I: cmake: spelling-error-in-manpage usr/share/man/man1/cmake.1.gz dependant dependent
I: cmake: spelling-error-in-manpage usr/share/man/man1/cmake.1.gz prefered preferred
I: cmake: spelling-error-in-binary ./usr/bin/cmake prefered preferred
I: cmake: spelling-error-in-binary ./usr/bin/cpack prefered preferred
I: cmake: spelling-error-in-binary ./usr/bin/ctest prefered preferred
I: cmake-data: spelling-error-in-manpage usr/share/man/man1/cmakepolicies.1.gz prefered preferred
I: cmake-curses-gui: spelling-error-in-binary ./usr/bin/ccmake prefered preferred
I: cmake-qt-gui: spelling-error-in-binary ./usr/bin/cmake-gui prefered preferred
2011-02-22 17:24:51 -05:00
Richard Bateman 5457b8254c Add support for CFBundle targets on the Mac (#11295)
This commit enables building, for example, plugin bundles
to be loaded by web browsers.
2011-01-11 12:54:44 -05:00
Brad King 2dc39b8c32 Define per-target OSX_ARCHITECTURES property
The CMAKE_OSX_ARCHITECTURES variable works only as a global setting.
This commit defines target properties

  OSX_ARCHITECTURES
  OSX_ARCHITECTURES_<CONFIG>

to specify OS X architectures on a per-target and per-configuration
basis.  See issue #8725.
2009-10-21 13:00:49 -04:00
Brad King 0fb5b2c88c Invalidate target link info when necessary
In cmTarget we compute the link implementation, link interface, and link
closure structures on-demand and cache the results.  This commit teaches
cmTarget to invalidate results after a LINK_INTERFACE_* property changes
or a new link library is added.  We also clear the results at the end of
the Configure step to ensure the Generate step uses up-to-date results.
2009-10-05 09:06:59 -04:00
Brad King daa2f3aa41 Combine duplicate code in target property methods
In cmTarget::SetProperty and cmTarget::AppendProperty we check whether
changing the property invalidates cached information.  The check was
duplicated in the two methods, so this commit moves the check into a
helper method called from both.
2009-10-05 09:06:44 -04:00
Brad King 78f0811628 Create explicit cmTarget::FinishConfigure step
This method is called during ConfigureFinalPass on every target.  It
gives each target a chance to do some final processing after it is known
that no more commands will affect it.  Currently we just call the old
AnalyzeLibDependencies that used to be called directly.
2009-10-05 09:06:29 -04:00
Brad King 847875bebd Remove unused cmTarget::AddLinkLibrary method 2009-10-05 09:05:57 -04:00
Brad King 1e48243591 Introduce "build feature" lookup framework
This creates cmTarget::GetFeature and cmMakefile::GetFeature methods to
query "build feature" properties.  These methods handle local-to-global
scope and per-configuration property lookup.  Specific build features
will be defined later.
2009-10-02 13:52:01 -04:00
Brad King 96afb12087 Convert CMake to OSI-approved BSD License
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.
2009-09-28 11:43:28 -04:00
Brad King 4224513cce Save source dependencies from custom command trace
In each target we trace dependencies among custom commands to pull in
all source files and build rules necessary to complete the target.  This
commit teaches cmTarget to save the inter-source dependencies found
during its analysis.  Later this can be used by generators that need to
topologically order custom command rules.
2009-09-07 10:11:43 -04:00
Brad King 4eb5f1bef6 Cleanup cmTarget source file list representation
This teaches cmTarget to use a set of cmSourceFile pointers to guarantee
unique insertion of source files in a target.  The order of insertion is
still preserved in the SourceFiles vector.
2009-09-04 12:39:05 -04:00
Brad King 69251f7549 Define 'multiplicity' for cyclic dependencies
We create target property "LINK_INTERFACE_MULTIPLICITY" and a per-config
version "LINK_INTERFACE_MULTIPLICITY_<CONFIG>".  It sets the number of
times a linker should scan through a mutually dependent group of static
libraries.  The largest value of this property on any target in the
group is used.  This will help projects link even for extreme cases of
cyclic inter-target dependencies.
2009-09-01 10:37:37 -04:00
Brad King 463b3f03bd Create cmTarget DLL query methods
We creates methods IsDLLPlatform() and HasImportLibrary().  The former
returns true on Windows.  The latter returns whether the target has a
DLL import library.  It is true on Windows for shared libraries and
executables with exports.
2009-08-11 09:07:42 -04:00
Brad King 19792bf30e ENH: Consider link dependencies for link language
This teaches cmTarget to account for the languages compiled into link
dependencies when determining the linker language for its target.

We list the languages compiled into a static archive in its link
interface.  Any target linking to it knows that the runtime libraries
for the static archive's languages must be available at link time.  For
now this affects only the linker language selection, but later it will
allow CMake to automatically list the language runtime libraries.
2009-07-10 13:53:28 -04:00
Brad King 173448d988 ENH: Pass config to cmTarget::GetLinkerLanguage
This passes the build configuration to most GetLinkerLanguage calls.  In
the future the linker language will account for targets linked in each
configuration.
2009-07-08 13:04:04 -04:00
Brad King a3a046643a ENH: Pass config to cmTarget RPATH install methods
This passes the build configuration to cmTarget methods IsChrpathUsed
and NeedRelinkBeforeInstall.  Later these methods will use the value.
2009-07-08 13:03:47 -04:00
Brad King 7c67524dfa ENH: Introduce cmTarget::LinkImplementation API
The new method centralizes loops that process raw OriginalLinkLibraries
to extract the link implementation (libraries linked into the target)
for each configuration.  Results are computed on demand and then cached.
This simplifies link interface computation because the default case
trivially copies the link implementation.
2009-07-08 12:04:48 -04:00
Brad King aef8fe509b COMP: Pimplize cmTarget ImportInfo and OutputInfo
These member structures are accessed only in the cmTarget implementation
so they do not need to be defined in the header.  This cleanup also aids
Visual Studio 6 in compiling them.
2009-07-08 08:31:30 -04:00
Brad King 94a4a614ca STYLE: Fix comment on cmTarget::LinkInterface
The comment had a typo and was longer than necessary.
2009-07-07 10:56:51 -04:00
Brad King 34f78ee552 ENH: Simplify cmTarget link interface storage
This makes the LinkInterface struct a member of cmTarget, pimplizes the
config-to-interface map, and stores interface instances by value.
2009-07-07 09:45:29 -04:00
Brad King a608467180 ENH: Simpler cmTarget::GetLinkerLanguage signature
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.
2009-07-07 07:44:12 -04:00
Brad King 06b0a692f4 ENH: Centralize default link interface computation
When LINK_INTERFACE_LIBRARIES is not set we use the link implementation
to implicitly define the link interface.  These changes centralize the
decision so that all linkable targets internally have a link interface.
2009-07-06 16:25:20 -04:00
Brad King 26df00f83a ENH: Move CMP0004 check into cmTarget
This moves code implementing policy CMP0004 into cmTarget::CheckCMP0004.
The implementation is slightly simpler and can be re-used outside of
cmComputeLinkDepends.
2009-07-06 16:24:45 -04:00
Brad King 82a8c6b0c7 ENH: Exception safe link interface computation
This fixes cmTarget::GetLinkInterface to compute and return the link
interface in an exception-safe manner.  We manage the link interface
returned by cmTarget::ComputeLinkInterface using auto_ptr.
2009-07-06 16:24:32 -04:00
Brad King 275c21d351 ENH: Refactor target output dir computation
This creates cmTarget::GetOutputInfo to compute, cache, and lookup
target output directory information on a per-configuration basis.  It
avoids re-computing the information every time it is needed.
2009-07-03 10:33:59 -04:00
Brad King 392b38cef7 ENH: Remove cmTarget internal type arguments
Internally cmTarget was passing the target type in several name
computation signatures to support computation of both shared and static
library names for one target.  We no longer need to compute both names,
so this change simplifies the internals by using the GetType method and
dropping the type from method signatures.
2009-05-01 10:39:44 -04:00
Brad King bcb9a479db ENH: Remove cmTarget::GetExecutableCleanNames
This method was redundant with GetExecutableNames.
2009-05-01 10:39:28 -04:00
Brad King 430cc2b4b7 ENH: Always imply CLEAN_DIRECT_OUTPUT target prop
This property was left from before CMake always linked using full path
library names for targets it builds.  In order to safely link with
"-lfoo" we needed to avoid having both shared and static libraries in
the build tree for targets that switch on BUILD_SHARED_LIBS.  This meant
cleaning both shared and static names before creating the library, which
led to the creation of CLEAN_DIRECT_OUTPUT to disable the behavior.

Now that we always link with a full path we do not need to clean old
library names left from an alternate setting of BUILD_SHARED_LIBS.  This
change removes the CLEAN_DIRECT_OUTPUT property and instead uses its
behavior always.  It removes some complexity from cmTarget internally.
2009-05-01 10:38:35 -04:00
Brad King 2740db5ede ENH: Allow more specification of target file names
This creates target properties ARCHIVE_OUTPUT_NAME, LIBRARY_OUTPUT_NAME,
and RUNTIME_OUTPUT_NAME, and per-configuration equivalent properties
ARCHIVE_OUTPUT_NAME_<CONFIG>, LIBRARY_OUTPUT_NAME_<CONFIG>, and
RUNTIME_OUTPUT_NAME_<CONFIG>.  They allow specification of target output
file names on a per-type, per-configuration basis.  For example, a .dll
and its .lib import library may have different base names.

For consistency and to avoid ambiguity, the old <CONFIG>_OUTPUT_NAME
property is now also available as OUTPUT_NAME_<CONFIG>.

See issue #8920.
2009-05-01 09:45:43 -04:00
Brad King 617eb981d4 ENH: Refactor target output file type computation
This creates method cmTarget::GetOutputTargetType to compute the output
file type 'ARCHIVE', 'LIBRARY', or 'RUNTIME' from the platform and
target type.  It factors out logic from the target output directory
computation code for later re-use.
2009-05-01 09:45:19 -04:00
Brad King d0ed46e3d6 ENH: Define target-specific support directories
This creates method cmTarget::GetSupportDirectory to compute a
target-specific support directory in the build tree.  It uses the
"CMakeFiles/<name>.dir" convention already used by the Makefile
generators.  The method will be useful for any code that needs to
generate per-target information into the build tree for use by CMake
tools that do not run at generate time.
2009-02-10 08:50:09 -05:00
Brad King 3c5cf1bb8c ENH: Allow a custom list of debug configurations
Create a DEBUG_CONFIGURATIONS global property as a way for projects to
specify which configuration names are considered to be 'debug'
configurations.
2008-09-04 17:34:25 -04:00
Brad King fe98e57e38 ENH: Disallow link-type keywords in link interface
The LINK_INTERFACE_LIBRARIES target property may not contain the
"debug", "optimized", or "general" keywords.  These keywords are
supported only by the target_link_libraries (and link_libraries) command
and are not a generic library list feature in CMake.  When a user
attempts to add one of these keywords to the property value, we now
produce an error message that refers users to alternative means.
2008-08-19 11:43:51 -04:00
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 b93f0318fe ENH: Support full-path libs w/out valid names.
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.
2008-07-23 12:59:14 -04:00
Brad King da4f142cc1 ENH: Add full target version signature cmTarget::GetTargetVersion. 2008-07-09 10:09:00 -04:00
Brad King 771bdb7ef8 BUG: Make sure all source files are found before generating.
- Previously this was done implicitly by the check for a target
    link language which checked all source full paths.
  - The recent change to support computing a link language without
    finding all the source files skipped the implicit check.
  - This change adds an explicit check to find all source files.
2008-05-12 17:43:45 -04:00
Bill Hoffman f2b2861248 ENH: remove qualifier from .h file 2008-04-08 16:13:43 -04:00
Brad King 67834f2d53 BUG: Correct Mac OS X framework behavior
- 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
2008-04-08 00:06:47 -04:00
Brad King 1829bed8b5 BUG: Do not create target output directory in cmTarget. Let the generators do it. 2008-04-07 13:39:13 -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 d46ff28ac9 ENH: Convert CMAKE_LINK_OLD_PATHS to policy CMP0003.
- 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
2008-03-13 16:23:18 -04:00
Brad King f7f03347a6 ENH: Improve new error/warning message generation
- Add cmListFileBacktrace to record stack traces
  - Move main IssueMessage method to the cmake class instance
    (make the backtrace an explicit argument)
  - Change cmMakefile::IssueMessage to construct a backtrace
    and call the cmake instance version
  - Record a backtrace at the point a target is created
    (useful later for messages issued by generators)
2008-03-13 13:48:57 -04:00
Brad King 34c76d4304 ENH: Use builtin chrpath instead of relinking ELF targets
- 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
2008-03-01 12:51:07 -05:00
Brad King fd37a6ec3d ENH: Better linker search path computation.
- 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
2008-02-21 11:41:11 -05:00
Brad King 9ed4266306 ENH: Cleanup impl of PUBLIC_HEADER, PRIVATE_HEADER, and RESOURCE properties 2008-02-18 16:38:34 -05:00
Brad King 07be6bb87b ENH: When linking to versioned targets whose real file name is known pass the real name to the linker instead of the symlink name. 2008-02-06 13:34:44 -05:00
Brad King 16186ec18c BUG: Remove InstallNameFixupPath from cmTarget and cmInstallTargetGenerator.
- Motivation:
    - It depended on the order of installation
    - It supported only a single destination for each target
    - It created directory portions of an install name without user request
  - Updated ExportImport test to install targets in an order that expoed
    this bug
2008-02-01 13:08:12 -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 6066e92ba2 BUG: cmTarget instances should not be copied. Removed pass-by-value arguments from cmLocalVisualStudio7Generator::WriteGroup and cmLocalVisualStudio6Generator::WriteGroup. Updated cmTarget to make this easier to find. 2008-01-29 17:30:34 -05:00
Brad King ffac622a85 ENH: Add cmTarget::GetLinkInformation method to allow several places in the generators to share link information while only computing it once per configuration for a target. Use it to simplify the chrpath feature. 2008-01-29 15:07:33 -05:00
Brad King e3b1bdb058 ENH: Support exporting/importing of AppBundle targets.
- Imported bundles have the MACOSX_BUNDLE property set
  - Added cmTarget::IsAppBundleOnApple method to simplify checks
  - Document BUNDLE keyword in INSTALL command
  - Updated IMPORTED_LOCATION property documentation for bundles
  - Updated ExportImport test to test bundles
2008-01-28 14:46:16 -05:00
Brad King 28ea034737 ENH: Support exporting/importing of Framework targets.
- 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
2008-01-28 13:05:58 -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 96fd5909d9 ENH: Implement linking with paths to library files instead of -L and -l separation. See bug #3832
- This is purely an implementation improvement.  No interface has changed.
  - Create cmComputeLinkInformation class
  - Move and re-implement logic from:
      cmLocalGenerator::ComputeLinkInformation
      cmOrderLinkDirectories
  - Link libraries to targets with their full path (if it is known)
  - Dirs specified with link_directories command still added with -L
  - Make link type specific to library names without paths
    (name libfoo.a without path becomes -Wl,-Bstatic -lfoo)
  - Make directory ordering specific to a runtime path computation feature
    (look for conflicting SONAMEs instead of library names)
  - Implement proper rpath support on HP-UX and AIX.
2008-01-22 09:13:04 -05:00
Brad King caca9b8065 ENH: Add AppendProperty methods for use by C++ code in CMake. Simplify implementation of SET_PROPERTY command by using them. 2008-01-17 18:13:55 -05:00
Brad King 430296dc96 ENH: Moved global inter-target dependency analysis and cycle-prevention code up from cmGlobalUnixMakefileGenerator3 to cmGlobalGenerator. Simplified cmGlobalUnixMakefileGenerator3 to use it. Later other generators may be modified to use it also. 2007-12-23 15:03:42 -05:00
Alexander Neundorf 3ae731fab7 ENH: add support for chrpath, so the RPATH in ELF files can be changed when
installing without having to link the target again -> can save a lot of time

chrpath is handled very similar to install_name_tool on the mac. If the
RPATH in the build tree file is to short, it is padded using the separator
character.
This is currently disabled by default, it can be enabled using the option
CMAKE_USE_CHRPATH. There are additional checks whether it is safe to enable
it. I will rework them and use FILE(READ) instead to detect whether the
binaries are actually ELF files.

chrpath is available here
http://www.tux.org/pub/X-Windows/ftp.hungry.com/chrpath/
or kde svn (since a few days): http://websvn.kde.org/trunk/kdesupport/chrpath/

Alex
2007-12-18 17:50:27 -05:00
David Cole 8e4c7b99e1 ENH: Finish up the Framework creation code restructuring. Frameworks build and install now. More work needed on the packaging step. See Tests/Framework for example use. 2007-10-10 11:06:15 -04:00
David Cole 9a4e7ea742 ENH: Add InstallNameFixupPath to support installing built frameworks on the Mac. Change Application to Applications in the BundleTest. Also correct small typo (tcl->Tcl) noted in bug 4572. 2007-08-24 13:30:41 -04:00
Brad King 9f2de08f90 ENH: Added cmTarget::GetLanguages method to centralize computation of the list of languages compiled in a target. 2007-08-02 13:38:39 -04:00
Brad King cac79e92b8 STYLE: Fixed line-too-long, fixed indentation, removed trailing whitespace, added function separator comment lines. 2007-07-02 13:32:41 -04:00
Brad King 35936433e1 ENH: Merging changes from branch CMake-SourceFile2-b between tags
CMake-SourceFile2-bp and CMake-SourceFile2-b-mp1 to trunk.  This
commit is surrounded by tags CMake-SourceFile2-b-mp1-pre and
CMake-SourceFile2-b-mp1-post on the trunk.

The changes re-implement cmSourceFile and the use of it to allow
instances to be created much earlier.  The use of cmSourceFileLocation
allows locating a source file referenced by a user to be much simpler
and more robust.  The two SetName methods are no longer needed so some
duplicate code has been removed.  The strange "SourceName" stuff is
gone.  Code that created cmSourceFile instances on the stack and then
sent them to cmMakefile::AddSource has been simplified and converted
to getting cmSourceFile instances from cmMakefile.  The CPluginAPI has
preserved the old API through a compatibility interface.

Source lists are gone.  Targets now get real instances of cmSourceFile
right away instead of storing a list of strings until the final pass.

TraceVSDependencies has been re-written to avoid the use of
SourceName.  It is now called TraceDependencies since it is not just
for VS.  It is now implemented with a helper object which makes the
code simpler.
2007-06-18 11:59:23 -04:00
Alexander Neundorf 9d4f3a0686 STYLE: remove duplicate non-const accessors GetLocalGenerator(int) and
GetLocaGenerators(cmLocalGenerators) from cmGlobalGenerator(). Now there is
one const accessor which is even faster since it returns a reference
(instead of copying a vector)
-more const to ensure that this the returned local generators don't actually
get modified
-removed duplicated code in GetCTestCommand() and GetCPackCommand()
-added some const accessors

Alex
2007-06-15 10:10:24 -04:00
Brad King 3f2dd9bc54 ENH: Made cmTarget::GetSourceFiles method return reference to const so addition of cmSourceFile pointers must be done with an access method in cmTarget. 2007-05-28 10:25:03 -04:00
Brad King d2f62e6ac3 ENH: Made cmTarget::GetSourceLists return a reference to const so that all additions of sources must go through access methods in cmTarget. 2007-05-28 09:59:08 -04:00
Brad King c288da754a BUG: Target names in the COMMAND part of a custom command should not create a file-level dependency that forces the command to rerun when the executable target rebuilds, but the target-level dependency should still be created. Target names in a DEPENDS should do both a target-level and file-level dependency. Updated the BuildDepends test to check that this works. 2007-05-23 13:27:00 -04:00
Alexander Neundorf 4878c00905 ENH: add the IMPORT keyword to ADD_EXECUTABLE(), which generates an
"imported" executable target. This can then be used e.g. with
ADD_CUSTOM_COMMAND() to generate stuff. It adds a second container for
"imported" targets, and FindTarget() now takes an additional argument bool
useImportedTargets to specify whether you also want to search in the
imported targets or only in the "normal" targets.

Alex
2007-05-22 10:24:59 -04:00
Alexander Neundorf e701ef77d8 STYLE: functions use upper case for the first letter
Alex
2007-05-09 09:35:59 -04:00
Alexander Neundorf 7f11536704 ENH: now target names can be used in add_custom_command() and
add_custom_target() as COMMAND, and cmake will recognize them and replace
them with the actual output path of these executables. Also the dependency
will be added automatically. Test included.
ENH: moved TraceVSDependencies() to the end of GlobalGenerator::Configure(),
so it is done now in one central place

Alex
2007-05-09 08:25:45 -04:00
Brad King af95f61d76 ENH: Created method cmTarget::GetExportMacro to centralize computation of the export symbol name. This removes duplicate code from all the generators. Also enabled the export definition for executable targets with the ENABLE_EXPORTS property set. 2007-03-27 23:13:25 -04:00
Brad King fc7c433463 ENH: Added support for import libraries created by executable and module targets. The module import libraries should never be used but some windows compilers always create them for .dll files since there is no distinction from shared libraries on that platform. The executable import libraries may be used to create modules that when loaded bind to symbols from the executables. This is an enhancement related to bug#4210 though not requested by it explicitly. 2007-03-19 10:00:36 -04:00
Ken Martin b99129d2d8 ENH: some code cleanup 2007-03-12 10:26:59 -04:00
Brad King 92ff60b6a6 ENH: Added target properties ARCHIVE_OUTPUT_DIRECTORY, LIBRARY_OUTPUT_DIRECTORY, and RUNTIME_OUTPUT_DIRECTORY. If set these override EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH for a specific target. They can be used to distribute target files in the build tree with the same granularity that the INSTALL command provides for the install tree. This addresses bug#2240 and bug#4210. 2007-03-09 15:14:27 -05:00
Brad King 528f60f4a6 ENH: Added implib option to cmTarget::GetDirectory to support a separate directory containing the import library. This is an incremental step for bug#4210. 2007-03-09 09:30:16 -05:00
Brad King 01dc699d82 ENH: Combined cmTarget::GetDirectory and cmTarget::GetOutputDir since they are nearly the same. This is another step for bug#2240. 2007-03-08 15:33:19 -05:00
Brad King 33ee83714d ENH: Replaced LibraryOutputPath and ExecutableOutputPath variables in Makefile and VS generators to instead ask each target for its output path. This significantly reduces total code size and centralizes previously duplicate code. It is also a step towards bug#2240. 2007-03-08 14:57:28 -05:00
Andy Cedilnik 8ad3430931 ENH: Make EXCLUDE_FROM_ALL a target and directory properties. Also, make IsInAll use EXCLUDE_FROM_ALL. Also, enable the test that tests this 2007-02-23 09:46:27 -05:00
Ken Martin 84315a7d57 BUG: fix accidental checkin 2007-02-19 14:32:36 -05:00
Ken Martin 09699018cc ENH: turn on spaces in path test 2007-02-19 13:20:27 -05:00
Bill Hoffman ca0230a33e ENH: check in initial conv library stuff 2007-02-16 16:12:17 -05:00
Brad King 4bc0fd0941 ENH: Added cmTarget::GetPDBName method to simplify computation of .pdb file name for a target. 2007-02-01 16:54:49 -05:00
Brad King 712345ffc4 BUG: The .pdb file generated for a library or executable should match the real file name used for the target. This addresses bug#3277. 2007-02-01 09:57:24 -05:00
Ken Martin 27379d7b08 ENH: make properties a bit more formal with documentation and chaining 2006-12-07 09:45:32 -05:00
Ken Martin daa6d2bc04 ENH: updated handling of debug and optimized target link libraries 2006-11-29 11:00:17 -05:00
Brad King b155f3aa1c ENH: Adding image version number (major.minor) property to windows binaries. Default is 0.0, but the VERSION target property may change the value. Windows now has first-class support for dll and exe versioning. This addresses bug#1219. 2006-10-16 18:17:14 -04:00
Bill Hoffman 0f2f074978 ENH: fix for vtk 4.4 and other projects that may try to link to a module 2006-05-19 13:02:12 -04:00
Ken Martin cac30b5ff8 STYLE: fix line length 2006-05-12 14:12:13 -04:00
Brad King 2301a025ea ENH: Added global TargetManifest computation between Configure and Generate steps. This allows generators to know what other targets will exist on disk when the build completes. 2006-04-04 11:48:19 -04:00
Andy Cedilnik ed5f95cf23 ENH: Add proper support for installing bundles 2006-03-28 13:16:15 -05:00
Ken Martin 3d96e52261 STYLE: some m_ to this-> cleanup 2006-03-15 11:02:08 -05:00
Bill Hoffman 6b47b28867 ENH: fix line length style stuff 2006-03-10 11:13:15 -05:00
Brad King 5792dc8da8 ENH: Replaced UpdateLocation method with call to GetLocation. Added comment about problems with the LOCATION attribute. 2006-03-03 18:06:44 -05:00
Andy Cedilnik bc4e5581ee ENH: Add support for exporting graphviz of the project dependencies 2006-03-03 14:24:31 -05:00
Andy Cedilnik c4156b4531 COMP: Even more global target fixes 2006-02-24 17:35:35 -05:00
Brad King 586a9427d3 ENH: Created target property INSTALL_NAME_DIR initalized by CMAKE_INSTALL_NAME_DIR specifying the directory portion of the OSX install_name field in shared libraries. This is the OSX equivalent of RPATH. 2006-02-24 13:13:14 -05:00
Andy Cedilnik ea5564624c ENH: Add a notion of a global target 2006-02-23 10:03:24 -05:00
Brad King 8dd00d5b1e BUG: Fixed relink with new install framework. 2006-02-19 17:27:47 -05:00
Brad King 81677b3130 ENH: Generate import libraries for DLLs on Cygwin and MinGW. 2006-02-18 15:37:23 -05:00
Brad King 537e2b4ed5 ENH: Implemented RPATH specification support. It is documented by the command SET_TARGET_PROPERTIES. 2006-02-16 15:19:00 -05:00
Brad King 22c62c9e65 BUG: Sweeping changes to cleanup computation of target names. This should
fix many bugs related to target names being computed inconsistently.

- Centralized computation of a target's file name to a method in
  cmTarget.  Now that global knowledge is always available the
  *_CMAKE_PATH cache variables are no longer needed.

- Centralized computation of link library command lines and link
  directory search order.

- Moved computation of link directories needed to link CMake targets
  to be after evaluation of linking dependencies.

This also removed alot of duplicate code in which each version had its
own bugs.

This commit is surrounded by the tags

  CMake-TargetNameCentralization1-pre

and

  CMake-TargetNameCentralization1-post

so make the large set of changes easy to identify.
2006-01-13 18:18:32 -05:00
Bill Hoffman 452925649a ENH: add better support for framework linking 2005-12-26 13:14:19 -05:00
Brad King 163e3ff56c ENH: Removed cmMakefile arguments from cmTarget methods because cmTarget has the ivar m_Makefile now. Re-implemented cmLocalUnixMakefileGenerator3::AppendAnyDepend to use the new global knowledge and avoid the need to look at the cache for information about other targets. This should fix problems with custom commands and executables with the OUTPUT_NAME set. Also the <target>_LIBRARY_TYPE cache variable is no longer needed at all and has been removed. 2005-12-14 10:47:33 -05:00
Ken Martin 345fb993aa ENH: some fixes for better backwards compatibility 2005-10-10 11:49:17 -04:00
Brad King d392acb4e6 ENH: Added versioned executable support. This partially addresses bug#2143. Also made OUTPUT_NAME work when installing executables. 2005-08-17 16:11:18 -04:00
Ken Martin 369308ca76 ENH: make LOCATION an computed property of the target and get rid of a bunch of const junk 2005-06-22 09:06:46 -04:00
Brad King b1c5289787 ENH: Created cmTarget::GetLibraryNames to replace cmLocalUnixMakefileGenerator2::GetLibraryNames. Added cmTarget::GetLibraryCleanNames to be used by cmLocalUnixMakefileGenerator2. Now when a library is linked both the shared and static versions are removed from the build tree. In this way we avoid having both kinds of libraries present when the user switches BUILD_SHARED_LIBS on/off. This prevents problems with turning off shared libraries and then expecting the linker to use the static libraries only to find it is using the out-of-date shared versions. 2005-04-22 16:11:00 -04:00
Brad King 1b71f4477b ENH: Added cmTarget::GetBaseName and cmTarget::GetFullName methods and removed cmLocalGenerator::GetFullTargetName and cmLocalUnixMakefileGenerator2::GetBaseTargetName. This functionality is more sensibly implemented in cmTarget. It is also needed for an upcoming feature in which both the shared and static versions of a library will be removed before one is linked. 2005-04-22 15:23:21 -04:00
Brad King 1088f39327 COMP: Added missing forward declaration of cmMakefile. This was only working because cmCustomCommand.h declared it. 2005-02-18 16:12:08 -05:00
Bill Hoffman 7cef36c628 ENH: add the ability to generate custom commands for a language that is not supported by an IDE 2004-10-21 14:34:02 -04:00
Bill Hoffman 692ba48c4e ENH: major changes to support addition of languages from cmake modules directory. 2004-09-22 14:42:05 -04:00
Bill Hoffman 9655299f08 ENH: initial fortran support 2004-08-06 14:51:41 -04:00
Andy Cedilnik b1a7421840 ENH: Styart working on bundles support and abstract WIN32_EXECUTABLE 2004-02-28 18:59:19 -05:00
Andy Cedilnik d13e30f3ae ENH: Make install on windows seems to work now 2004-01-27 12:37:30 -05:00
Ken Martin 072db6ad70 removed redundent includes 2003-08-10 18:30:54 -04:00
Ken Martin 117f961a5a moved function into cmTarget 2003-06-24 15:10:47 -04:00
Ken Martin ba68f771b3 yikes added new custom command support 2003-06-03 10:30:23 -04:00
Bill Hoffman 3859417d1a ENH: add target properties 2002-12-20 17:15:45 -05:00
Amitha Perera 939035ad91 BUG: the dependency analysis would incorrectly alphabetically re-order the
link lines, which affects external libraries pulled up from deep within
the dependency tree. Fixed by preserving order everywhere.
2002-11-19 18:01:05 -05:00
Brad King 1f6a3c67b1 ENH: Added reference to Copyright.txt. Removed old reference to ITK copyright. Changed program name to CMake instead of Insight in source file header. Also removed tabs. 2002-10-23 18:03:27 -04:00
Ken Martin 7ddb408621 removed some includes 2002-09-27 16:24:10 -04:00
Amitha Perera 0e6b39e52f BUG: Correct some of the dependency analysis code.
- Make sure the original link line is untouched
- Avoid duplicating the link line when supporting version < 1.4
- Make sure the cyclic dependencies and such are output correctly in
  complicated cases.
- Avoid outputing dependencies that are already satisfied on the original
  link line when possible.
2002-05-10 13:35:42 -04:00
Bill Hoffman 6734d3bb88 ENH: change set<string> to set<cmStdString> to avoid long symbols that crash ar on solaris 2002-05-09 09:33:52 -04:00
Bill Hoffman cdf550de13 ENH: rework library depend stuff 2002-05-03 16:34:05 -04:00
Amitha Perera 4bff970413 - bug fix where paths weren't being output when LIB_OUT_PATH *isn't* used
- test case for above mentioned bug
- more comments. Comments are good.
2002-05-03 00:27:34 -04:00
Bill Hoffman 46e9d970e9 remove canonical conversion for lib names 2002-05-02 16:13:18 -04:00
Amitha Perera 4fe8947bcc BUG: The library paths should stay with the libraries during dependency analysis. 2002-05-02 13:41:40 -04:00
Bill Hoffman 27fe57b716 ENH: change LINK_LIBRARY to add to targets 2002-05-02 13:17:10 -04:00
Amitha Perera 1f8df8585e ENH: Add library dependency analysis. 2002-05-01 14:00:21 -04:00
Bill Hoffman 4ea0f6b949 ENH: add enable language support for PROJECT command, this means that a C only project can be built with cmake, even without a cxx compiler 2002-04-02 15:43:23 -05:00
Bill Hoffman 8b3b49a010 ENH: major change, the cmMakefile now contains a master list of cmSourceFile objects, the source lists reference the list via pointers, also you can now set properties on a file, like compile flags, abstract, etc. 2002-03-29 10:06:30 -05:00
Will Schroeder a6a43d5320 ENH:Updated copyright 2002-01-21 15:30:43 -05:00
Luis Ibanez bf7470be7c FIX: GENERATED_CODE type is no longer needed: generated code is not a Target. 2001-12-11 02:17:53 -05:00
Luis Ibanez f86418e99f ENH: A type of target was added for representing GENERATED_CODE 2001-11-29 01:48:23 -05:00
Yves Starreveld 247c1640da Changes to allow MODULE type target for a shared library 2001-08-28 18:02:59 -04:00
Bill Hoffman ddd5a7d729 ENH: change all maps of string to be maps of cmStdString, to reduce symbol length in object files. 2001-08-22 11:58:17 -04:00
Brad King cfa25e9e1a ENH: Added INSTALL_PROGRAMS command and corresponding support. This involved splitting cmTarget::INSTALL into INSTALL_FILES and INSTALL_PROGRAMS enum values. INSTALL_FILES no longer adds execute permission. The INSTALL_PROGRAMS commnad takes either a list of explicit names, or a regex. It will not expand source lists like the INSTALL_FILES command will. 2001-07-31 11:29:21 -04:00
Brad King e693d47253 ENH: Added support for selection of static/shared build on a per-library basis. 2001-07-02 15:38:02 -04:00
Ken Martin 012603c746 duh 2001-06-13 13:53:11 -04:00
Ken Martin 521e301116 minor cvs web changeCMakeLists.txt 2001-06-13 13:49:24 -04:00
Bill Hoffman 4f77d737c9 ENH: move utilities to targets from makefile, and add versioning to cache 2001-06-07 14:52:29 -04:00
Ken Martin dbebd0a276 added install rules 2001-05-23 11:31:43 -04:00
Ken Martin 32f7cef6f3 added win32 executable option 2001-05-10 13:52:23 -04:00
Ken Martin 089aa3e106 option to make utilities in the all target 2001-05-04 15:50:26 -04:00
Bill Hoffman 96ec40943c ENH: implement ADD_TARGET command, and add an ALL_BUILD target 2001-05-01 16:55:32 -04:00
Ken Martin 2da0c57d46 added TARGET_LINK_LIBRARY command and support for debug and release libraries to link against 2001-04-30 10:44:00 -04:00
Will Schroeder 54cfe84f3f ENH:New copyright 2001-04-27 08:01:17 -04:00
Ken Martin 73f04d1409 many fixes and cleanup and features 2001-04-24 16:49:12 -04:00
Ken Martin 24bce99cbf cleaned up the coding style made ivars private etc 2001-04-19 13:28:46 -04:00
Ken Martin 865ec96644 major changes to support multiple libraries and source lists 2001-04-11 14:59:02 -04:00