summaryrefslogtreecommitdiffstats
path: root/Source/cmExportFileGenerator.cxx
Commit message (Collapse)AuthorAgeFilesLines
* export: Add initial CPS supportMatthew Woehlke2024-08-141-2/+12
| | | | | | | | | | | | | | | | | Add initial support for exporting (install only, for now) Common Package Specification (https://cps-org.github.io/cps/) format package descriptions. This has some limitations, such as not supporting generator expressions (as these cannot be portably exported), and only partially supporting transitive dependencies, but should be usable for at least some simple cases. (Actually, $<LINK_ONLY> is theoretically supportable, but is not yet implemented.) This still needs tests; these will be added in the next commit. Other potential improvements include support for language-specific compile definitions and inferring some package properties from project properties. Additionally, there is no module support yet; this is partly pending on having a tool agnostic format for providing the necessary information.
* export: Factor out CMake-specific export generation (2/2)Matthew Woehlke2024-07-231-979/+97
| | | | | | | | | | | | | | | | | | In order to support generation of Common Package Specifications, the mechanisms CMake uses to export package information need to be made more abstract. The prior commits began this refactoring; this continues by (actually) restructuring the classes used to generate the actual export files. To minimize churn, this introduces virtual base classes and diamond inheritance in order to separate logic which is format-agnostic but depends on the export mode (build-tree versus install-tree) from logic which is format-specific but mode-agnostic. This could probably be refactored further to use helper classes instead, and a future commit may do that, however an initial attempt to do that was proving even more invasive, such that this approach was deemed more manageable. While we're at it, add 'const' in more places where possible.
* export: Fix const placementMatthew Woehlke2024-07-181-39/+39
| | | | | | | | Use clang-format to fix placement of const qualifiers to be consistently right of the typename. The inconsistency was getting annoying, especially as the following refactor changes a lot of methods and sometimes adds const. (Being inconsistent within a file is not ideal, but in some cases there was inconsistency within single lines!)
* export: Factor out CMake-specific export generation (1/2)Matthew Woehlke2024-07-181-7/+13
| | | | | | | | | | | | | | | | In order to support generation of Common Package Specifications, the mechanisms CMake uses to export package information need to be made more abstract. As a first step toward this, refactor cmInstallExportGenerator so that logic specific to config.cmake and Android .mk lives in separate subclasses. While we're at it, clean up the code style a bit and try to use moves a bit more consistently. This is step 1 of 2. The next step will refactor the individual file generators along similar lines, which will also involve creating additional classes for format-agnostic logic that is shared between build-tree and install-tree variants.
* export: Immediately report actual version requiredMatthew Woehlke2024-07-181-1/+4
| | | | | | | | | Slightly tweak the logic that tests if a user can consume exported targets to immediately report the actual version required, rather than potentially giving the consumer false hope by reporting that 2.8 is required, only to immediately run another check that requires a more recent CMake version. (Note that the two-level check is presumably needed because CMake < 2.8 wouldn't understand VERSION_LESS.)
* Merge topic 'custom-transitive-properties'Brad King2024-07-161-0/+1
|\ | | | | | | | | | | | | | | | | 7a77a6c642 Restore support for exporting INTERFACE with missing dependencies Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Acked-by: Robert Maynard <robertjmaynard@gmail.com> Merge-request: !9656
| * Restore support for exporting INTERFACE with missing dependenciesBrad King2024-07-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since commit c16acd35b3 (GenEx: Add support for custom transitive link properties, 2024-05-09, v3.30.0-rc1~82^2) evaluation of `TRANSITIVE_LINK_PROPERTIES` by `install(EXPORT)` enables discovery of missing dependencies on INTERFACE libraries that we did not previously diagnose. This regressed existing projects that relied on such non-diagnosis. Although commit 2fc9e482a9 (Evaluation of TRANSITIVE_LINK_PROPERTIES isn't considered a usage, 2024-07-05) fixed this, it also made a significant change to the `UseTo` infrastructure that may have other subtle effects. Replace the fix with an approach that explicitly models suppression of the relevant diagnostics. Fixes: #26108
* | export: Increase maximum policy version in exported files to 3.29Brad King2024-06-051-2/+2
|/ | | | | | The files generated by `install(EXPORT)`, `export()`, and `install_jar_exports()` commands are known to work with policies as of CMake 3.29, so enable them in sufficiently new CMake versions.
* GenEx: Add support for custom transitive link propertiesBrad King2024-05-211-0/+2
| | | | | | | | | Teach the `$<TARGET_PROPERTY:...>` generator expression to check for a new `TRANSITIVE_LINK_PROPERTIES` property in the target's link closure to enable transitive evaluation of named properties through the link closure, including entries guarded by `$<LINK_ONLY:...>`. Fixes: #20416
* GenEx: Add support for custom transitive compile propertiesBrad King2024-05-211-0/+19
| | | | | | | | | Teach the `$<TARGET_PROPERTY:...>` generator expression to check for a new `TRANSITIVE_COMPILE_PROPERTIES` property in the target's link closure to enable transitive evaluation of named properties through the link closure, excluding entries guarded by `$<LINK_ONLY:...>`. Issue: #20416
* cmTarget: support the `CXX_MODULE_STD` propertyBen Boeckel2024-04-111-0/+8
|
* cmExportFileGenerator: support always exporting propertiesBen Boeckel2024-04-111-9/+24
|
* Merge topic 'export-find_dependency-calls'Brad King2024-03-121-1/+1
|\ | | | | | | | | | | | | | | b1c4806914 install(EXPORT): Drop REQUIRED from exported find_dependency calls Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !9329
| * install(EXPORT): Drop REQUIRED from exported find_dependency callsBrad King2024-03-111-1/+1
| | | | | | | | | | | | | | | | | | | | In commit c6e6861e63 (install(EXPORT): Export find_dependency() calls, 2023-11-07, v3.29.0-rc1~439^2~1) we made the calls `REQUIRED`. However, a dependency is only required if the dependent package is required. `find_dependency` already forwards the `REQUIRED` mark, and also already marks the dependent package as not found if the dependency is missing. Fixes: #25756
* | Merge topic 'cxxmodules-no-export-basedirs-as-include-paths'Brad King2024-02-291-1/+4
|\ \ | |/ | | | | | | | | | | | | | | 65bd837786 Merge branch 'backport-3.28-cxxmodules-no-export-basedirs-as-include-paths' 028f3134e5 cmExportFileGenerator: only export include paths for HEADERS file sets Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !9295
| * Merge branch 'backport-3.28-cxxmodules-no-export-basedirs-as-include-paths'Brad King2024-02-281-1/+4
| |\
| | * cmExportFileGenerator: only export include paths for HEADERS file setsBen Boeckel2024-02-281-1/+4
| | |
| * | Merge topic 'cxxmodules-transitive-modules-usage' into release-3.29Brad King2024-02-211-5/+1
| |\ \ | | |/ | | | | | | | | | | | | | | | | | | | | | | | | ec348ee4b9 cmGeneratorTarget: discover synthetic targets recursively 67466ddf65 cmExportFileGenerator: export link libraries as-is a2e3e61a31 Tests/CXXModules: test transitive modules usage Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9273
* | | Merge topic 'cxxmodules-transitive-modules-usage'Brad King2024-02-211-5/+1
|\ \ \ | | |/ | |/| | | | | | | | | | | | | | | | | | | | | | ec348ee4b9 cmGeneratorTarget: discover synthetic targets recursively 67466ddf65 cmExportFileGenerator: export link libraries as-is a2e3e61a31 Tests/CXXModules: test transitive modules usage Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9273
| * | cmExportFileGenerator: export link libraries as-isBen Boeckel2024-02-201-5/+1
| | | | | | | | | | | | | | | | | | | | | This allows for transitive modules to work because `$<COMPILE_ONLY>`-wrapped dependencies do not end up in the `linked-target-dirs` collator property. Test suite exported property tests updated to account for the change.
* | | export: Increase maximum policy version in exported files to 3.28Brad King2024-02-061-3/+4
| |/ |/| | | | | | | | | The files generated by `install(EXPORT)`, `export()`, and `install_jar_exports()` commands are known to work with policies as of CMake 3.28, so enable them in sufficiently new CMake versions.
* | Merge branch 'backport-cxxmodules-export-file-collisions'Brad King2024-01-181-4/+5
|\ \ | |/
| * cxxmodules: make export trampoline script files uniqueBen Boeckel2024-01-181-4/+5
| | | | | | | | | | | | | | | | | | | | | | Include the name of the `EXPORT` in the filename when generating export information for C++ modules. This allows the same directory to be used for multiple sets of C++ module-using targets. For `export(TARGETS)` uses, generate a name based on the hash of the concatenation of the target names involved with the `export()` call. Fixes: #25609
* | install(EXPORT): Add ability to point to .xcframework fileKyle Edwards2023-11-151-17/+47
| | | | | | | | Issue: #25262
* | install(EXPORT): Export find_dependency() callsKyle Edwards2023-11-131-1/+93
| | | | | | | | | | | | Issue: #20511 Co-Authored-by: Brad King <brad.king@kitware.com> Co-Authored-by: Robert Maynard <rmaynard@nvidia.com>
* | cmExportFileGenerator: Add function to set required CMake versionKyle Edwards2023-11-131-19/+37
| |
* | Merge topic 'cxxmodules-export-fileset-info'Brad King2023-10-171-4/+31
|\ \ | |/ | | | | | | | | | | | | 0f36156740 cxxmodules: include `INCLUDES DESTINATION` directories Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !8886
| * cxxmodules: include `INCLUDES DESTINATION` directoriesBen Boeckel2023-10-161-4/+31
| | | | | | | | | | | | | | These paths are added outside the normal property management mechanisms. Shuttle the value to the C++ module export as needed. Fixes: #25289
* | export: Increase maximum policy version in exported files to 3.27Brad King2023-10-031-2/+2
|/ | | | | | The files generatd by `install(EXPORT)` and `export()` commands are known to work with policies as of CMake 3.27, so enable them in sufficiently new CMake versions.
* cmExportFileGenerator: relocate include directories for C++ modulesBen Boeckel2023-09-261-8/+25
| | | | | | | Include directories are paths that need munged on install to support the installation prefix. Fixes: #25275
* cmExportFileGenerator: export private compile info for C++ modulesBen Boeckel2023-08-171-0/+72
| | | | | | | | | When consuming exported targets which contain C++ modules, the consuming project must be able to recompile BMI files using the original target's flags. This is because a module source may use some private target usage requirement but not want to propagate it to consumers. To facilitate this, export the private information as necessary for consumers to be able to perform the BMI compilations.
* cmComputeLinkInformation: prepare Item consumers for `OBJECT` librariesBen Boeckel2023-08-011-1/+1
| | | | | | | | After b665966933 (cmComputeLinkInformation: track `OBJECT` library dependencies, 2023-07-22), introduced in !8645 as a fix for #25112, `OBJECT` libraries were tracked in a separate member to reduce the risk of further regressions. This commit prepares consumers to handle `OBJECT` libraries once they start appearing as link items.
* cmList: Add container conversion to stringMarc Chevrier2023-06-221-1/+1
|
* export: Increase maximum policy version in exported files to 3.26Brad King2023-06-071-2/+2
| | | | | | The files generatd by `install(EXPORT)` and `export()` commands are known to work with policies as of CMake 3.26, so enable them in sufficiently new CMake versions.
* Merge topic 'compile-only-genex'Brad King2023-05-051-0/+16
|\ | | | | | | | | | | | | | | | | c42630ee62 cmGeneratorExpressionNode: implement `COMPILE_ONLY` genex 0fb923c460 cmGeneratorExpressionNode: implement `COMPILE_ONLY` genex Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !8411
| * cmGeneratorExpressionNode: implement `COMPILE_ONLY` genexBen Boeckel2023-04-121-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This generator expression is the inverse of `LINK_ONLY` and only coveys usage requirements for the purposes of compilation. Its intended use is to avoid needing to export targets that do not have link usage requirements (e.g., header-only libraries) when used by another target. It will also be used to represent private usage requirements on exported C++ module-containing targets in the future. Eventually there should be logic to collapse nesting of `$<COMPILE_ONLY>` and `$<LINK_ONLY>` when generating instances of either. A TODO is left in the code for this case. See: #15415
* | CMake code rely on cmList class for CMake lists management (part. 1)Marc Chevrier2023-04-241-2/+3
| |
* | install(EXPORT): Fall back to set_property(APPEND) for FILE_SETKyle Edwards2023-04-121-1/+16
|/ | | | | | | | | FILE_SET was introduced in CMake 3.23, so install(EXPORT) puts it behind a version gate. However, this results in the include directories not being picked up by older versions of CMake. Fall back to set_property(APPEND) for versions of CMake older than 3.23. Fixes: #24787
* Apple: Handle generation and comsuption of text-based stubs (.tbd files)Marc Chevrier2023-03-011-1/+2
| | | | Fixes: #24123
* export: Increase maximum policy version in exported files to 3.25Brad King2023-02-011-2/+2
| | | | | | The files generatd by `install(EXPORT)` and `export()` commands are known to work with policies as of CMake 3.25, so enable them in sufficiently new CMake versions.
* CMake: fix sizeof string literal violationsKyle Edwards2022-11-181-4/+3
|
* cmGeneratorExpression: Require cmake instanceKyle Edwards2022-11-111-1/+1
|
* export: Increase maximum policy version in exported files to 3.24Brad King2022-10-121-2/+2
| | | | | | The files generatd by `install(EXPORT)` and `export()` commands are known to work with policies as of CMake 3.24, so enable them in sufficiently new CMake versions.
* Merge topic 'export-no-shdeps'Brad King2022-08-161-0/+7
|\ | | | | | | | | | | | | 0ebff0d61a export: Restore exclusion of private shared library dependencies from checks Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7557
| * export: Restore exclusion of private shared library dependencies from checksBrad King2022-08-151-0/+7
| | | | | | | | | | | | | | | | | | | | | | Refactoring in commit 8c65b7042e (cmExportFileGenerator: Simplify collection of targets missing from export set, 2022-04-11, v3.24.0-rc1~281^2) accidentally dropped the behavior change from commit 0ad2a1c181 (Export: Never treat private link libraries as public package dependencies., 2013-09-24, v3.0.0-rc1~559^2). Restore the behavior and add a test. Fixes: #23838
* | cmExport*FileGenerator: support exporting C++ module propertiesBen Boeckel2022-07-061-0/+25
| | | | | | | | | | C++ module properties will be generated at build time, so generate code that includes the files actually responsible for the information.
* | Add EXPORT_NO_SYSTEM target property, deprecate IMPORTED_NO_SYSTEMDa Quexian2022-06-171-0/+4
| | | | | | | | | | | | Issue: #18040 Signed-off-by: Da Quexian <daquexian566@gmail.com>
* | export: Increase maximum policy version in exported files to 3.23Brad King2022-06-141-2/+2
|/ | | | | | The files generatd by `install(EXPORT)` and `export()` commands are known to work with policies as of CMake 3.23, so enable them in sufficiently new CMake versions.
* generated-scripts: improve prose messages with CMake listsBen Boeckel2022-04-201-2/+4
| | | | | | Instead of printing a CMake list, make it an English-style list. This also allows the line-break algorithm to make these messages much more readable.
* generated-scripts: unset used variablesBen Boeckel2022-04-201-1/+4
|