summaryrefslogtreecommitdiffstats
path: root/Source/cmQtAutoGenInitializer.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Merge topic 'fix-23523' into release-3.24Brad King2022-06-291-12/+16
|\ | | | | | | | | | | | | | | 10668f26c9 AUTOUIC: Fix internal paths of generated ui_foo.h files Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !7419
| * AUTOUIC: Fix internal paths of generated ui_foo.h filesJosiah Bills2022-06-281-12/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For every file foo.ui we generate a ui_foo.h file in ${target}_autogen/include or ${target}_autogen/include_$<CONFIG> in the multi-config case. Even .ui files in subdirectories are handled this way. That means, .ui files with the same base name will conflict in a target. However, for .ui files in subdirectories we added generated sources with the nonexistent path ${target}_autogen/include/subdir/ui_foo.h. This patch fixes that. Also, CMake will now yield an error if a target has multiple .ui files with the same base name. Fixes #23523
* | AutoMoc: Take AUTOMOC_BUILD_DIR into account in depfileJoerg Bornemann2022-05-251-1/+4
|/ | | | | | | | | | | | | | | | | For the Ninja generator and targets that have AUTOMOC_BUILD_DIR set, the AutoMoc target was always out of date. That was because the depfile in the AutoMoc build directory was referencing the wrong timestamp file: target_autogen/timestamp: ...dependencies... instead of automoc_build_dir/timestamp: ...dependencies... Use the relative path of the timestamp file as rule name for the depfile. That path is calculated with AUTOMOC_BUILD_DIR taken into account. Fixes: #23547
* LINK_LIBRARIES: Evaluate separately for linking and usage requirementsBrad King2022-03-221-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | We evaluate `LINK_LIBRARIES` and `INTERFACE_LINK_LIBRARIES` for two purposes: * Constructing the link line. * Collecting usage requirements. We evaluate `INTERFACE_LINK_LIBRARIES` separately for each purpose in order to support the `$<LINK_ONLY:...>` generator expression used to express private link dependencies of a static library. Previously we only evaluated `LINK_LIBRARIES` for linking, and used that result for collecting usage requirements too. Therefore `$<LINK_ONLY:...>` does not work in `LINK_LIBRARIES`. With the introduction of `INTERFACE_LINK_LIBRARIES_DIRECT`, evaluation of `LINK_LIBRARIES` now needs to distinguish these two cases in order to honor link dependencies encountered through `$<LINK_ONLY:...>` without also exposing other usage requirements through private dependencies of a static library. Revise internal infrastructure to distinguish the two cases when evaluating `LINK_LIBRARIES`. Make the information available in code paths for `INTERFACE_LINK_LIBRARIES_DIRECT` and `LINK_ONLY`. Defer actually using the information to later commits. Issue: #22496
* cmCustomCommand: Track main dependency explicitlyNAKAMURA Takumi2021-12-141-9/+3
| | | | | | | Store the main dependency as the first entry in the dependency list plus a boolean member indicating its existence. Note that this slightly changes existing behavior: the main dependency was previously the last entry of the dependency list.
* AutoMoc: Only add the WIN32 define if the target system is WindowsJoerg Bornemann2021-11-191-3/+3
| | | | | | | | | | | When there's no moc_predefs.h generated, we add the WIN32 define as fallback. Before this change, we added the WIN32 define if the host system was Windows. That's wrong when cross-compiling. Now we're checking whether the target system is Windows. Fixes: #22933
* cmLocalGenerator: Simplify Add{Custom,Utility}CommandNAKAMURA Takumi2021-11-181-36/+57
|
* cmCustomCommand: Move constructor arguments to individual settersNAKAMURA Takumi2021-11-181-5/+7
| | | | | | | | Make `cmCustomCommand` have just only default constructor. Use each setter instead. This follows the builder pattern. Introduce `cc::SetOutputs(std::string output)`. This will be used later, as substitution for `cc::SetOutputs({output})`.
* Merge topic 'autogen-dep-on-imported-implib-only-target'Brad King2021-09-271-1/+10
|\ | | | | | | | | | | | | | | | | 895fa3433f cmQtAutoGenInitializer: support IMPLIB-only imported targets 354c1f5628 Tests/RunCMake/Autogen: test CMP0111 behavior Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !6558
| * cmQtAutoGenInitializer: support IMPLIB-only imported targetsBen Boeckel2021-09-241-1/+10
| | | | | | | | | | | | | | Instead of using the target name directly (which ends up in the `Ninja` generators querying for the `LOCATION` parameter), wrap up the target name in a `$<TARGET_LINKER_FILE:>` to avoid the query for the unset property.
* | Rename cmProp in cmValueMarc Chevrier2021-09-211-6/+6
| |
* | Merge topic 'mocmacrosonce'Brad King2021-09-091-0/+3
|\ \ | |/ |/| | | | | | | | | | | | | 8ff0c2b1dd AutoMoc: Do not list moc macros multiple times 6e2f4029c0 cmAlgorithms: Preserve const-ness in cmRemoveDuplicates range signature Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !6459
| * AutoMoc: Do not list moc macros multiple timesDavid Redondo2021-09-031-0/+3
| | | | | | | | | | | | | | | | When working on a project with a nested dependency tree, a macro can be added multiple times. For example in a project I am working on, in the warning "includes the moc file [... ] but does not contain a [...] macro" the macro list contains 127 entries but only 25 unique ones.
| * Merge topic 'autouic-header-depends'Brad King2021-07-261-26/+27
| |\ | | | | | | | | | | | | | | | | | | e5ec0e52f4 AUTOUIC: Fix generating of dependency rules for UI header files Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6380
| * | AutoGen: Fix needless compilation of mocs_compilation.cppJoerg Bornemann2021-07-011-5/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For an AUTOMOC'ed target foo, when depfiles are used, there are the following dependencies: foo_autogen -> foo_autogen/timestamp foo_autogen/mocs_compilation.cpp -> foo_autogen/timestamp The first is used to trigger AUTOGEN. The second erroneously triggers a recompilation of mocs_compilation.cpp when any source file of target foo is touched. Remove the latter dependency and replace it with an order-only dependency from foo_autogen/mocs_compilation.cpp to foo_autogen_timestamp_deps. That is achieved by making mocs_compilation.cpp or its per-configuration variants byproduct(s) of the timestamp file. Fixes: #22338
* | | AUTOUIC: Revert "Fix generating of dependency rules for UI header files"Brad King2021-08-191-27/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Revert commit e5ec0e52f4 (AUTOUIC: Fix generating of dependency rules for UI header files, 2021-07-22, v3.21.1~8^2) because it caused regressions. For example, changing one C++ source can now cause many others to rebuild. Revert the change pending further investigation. Fixes: #22531 Issue: #16776
* | | Merge topic 'autouic-header-depends' into release-3.21Brad King2021-07-261-26/+27
|\ \ \ | | |/ | |/| | | | | | | | | | | | | e5ec0e52f4 AUTOUIC: Fix generating of dependency rules for UI header files Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6380
| * | AUTOUIC: Fix generating of dependency rules for UI header filesAlexey Edelev2021-07-231-26/+27
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We could not rely on .ui files when generating the ninja rules for the generated UI header files. .ui files might be added to the target sources but never processed by AUTOUIC afterward, since UI header files are never included in a source code. Instead of adding dependency rules based on the .ui files, this approach scans non-generated source files for includes of the UI header files, as AUTOUIC does. This gives the consistent set of UI header files at configure time, that could be used to generate byproducts rules for the AUTOUIC. Also, the path to the generated UI header file depends not on the .ui file location but on the include line is used in source files. Fixes: #16776
* | AutoGen: Fix needless compilation of mocs_compilation.cppJoerg Bornemann2021-07-231-5/+23
|/ | | | | | | | | | | | | | | | | | | | | For an AUTOMOC'ed target foo, when depfiles are used, there are the following dependencies: foo_autogen -> foo_autogen/timestamp foo_autogen/mocs_compilation.cpp -> foo_autogen/timestamp The first is used to trigger AUTOGEN. The second erroneously triggers a recompilation of mocs_compilation.cpp when any source file of target foo is touched. Remove the latter dependency and replace it with an order-only dependency from foo_autogen/mocs_compilation.cpp to foo_autogen_timestamp_deps. That is achieved by making mocs_compilation.cpp or its per-configuration variants byproduct(s) of the timestamp file. Fixes: #22338
* Source: Remove unnecessary comparisons to nullptrVitaly Stakhovsky2021-05-101-17/+17
|
* AutoGen: Retrieve Qt version from moc as fallbackJoerg Bornemann2021-04-231-2/+72
| | | | | | | | | | | | Consider the case where the find_package call for QtCore is wrapped in a function call. Then AutoGen cannot determine the Qt version, because it only looks at variables and directory properties. The former don't leave the function scope and the latter are not set by default. As a fallback, locate the moc executable via its target and call it with the --version argument to determine the Qt version. Issue: #22028
* Autogen: Add detection of UI file changes to the pre-build VS caseDuncan Barber2021-04-101-1/+39
| | | | | | | This is achieved by adding a rule file which carries the UI files as dependencies but performs no meaningful command. Its output path points to a timestamp file which is instead touched by the pre-build command that runs autogen. The rule file therefore triggers the build if any of the files have been changed more recently than the last autogen run. Fixes: #17959 Fixes: #18741
* Autogen: Move duplicated filename generation code into a functionDuncan Barber2021-04-101-26/+21
|
* Autogen: Move duplicated executable dependency code into a functionDuncan Barber2021-04-101-10/+13
|
* Autogen: Rename the variable for UI files with UIC optionsDuncan Barber2021-04-101-2/+3
| | | | Monitoring for UI file changes in the target sources will require keeping track of the files without options as well so this will improve clarity.
* Autogen: Fix a bug in setting the UIC source groupDuncan Barber2021-04-041-1/+7
| | | | If the relative path to a UI file was empty then the source group for the corresponding autogen header file would not apply because of a double slash in the path.
* Merge topic 'ninja-automoc-cycle'Brad King2021-03-301-3/+3
|\ | | | | | | | | | | | | | | | | | | ca7c76269b Tests: Add test for Ninja automoc dependency cyle 54ad3e4958 autogen: Don't include SKIP_AUTOMOC files in depfile Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Jörg Bornemann <joerg.bornemann@qt.io> Acked-by: Craig Scott <craig.scott@crascit.com> Merge-request: !5956
| * autogen: Don't include SKIP_AUTOMOC files in depfileKyle Edwards2021-03-291-3/+3
| | | | | | | | | | | | | | SKIP_AUTOMOC files should not be included in moc processing, which means they shouldn't be included in the depfile either. Remove them. Fixes: #21977
| * Merge topic 'autogen-cmp0116-fix' into release-3.20Brad King2021-02-241-28/+11
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 339dbc901f Help: Note that CMP0116 is recorded at the time of CC creation e3740e020e Tests: Test Qt autogen target with CMP0116 set to WARN cf34011ce7 Tests: Test per-CC behavior of CMP0116 3a95503512 Ninja: Use CMP0116 status recorded at time of custom command's creation f01f10e8fb cmCustomCommand: Record value of CMP0116 at time of creation Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5848
* | \ Merge topic 'autouic-headers-ninja'Brad King2021-02-241-0/+31
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | 1265c65b33 AUTOUIC: Collect ui header files for Ninja generator Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5803
| * | | AUTOUIC: Collect ui header files for Ninja generatorAlexey Edelev2021-02-231-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The '<user target>_autogen/timestamp' target supposed to generate ui header files using the 'uic'. Ninja must have information about these header files as a result of generating. The fix collects .ui files of the user target and generates a list of the ui headers that need to be added to the generating results of the '<user target>_autogen/timestamp' target. The case when the .ui files are not specified and collected by AUTOUIC from the include directives of the project source files is not covered in this patch. Fixes: #16776
* | | | Merge topic 'autogen-cmp0116-fix'Brad King2021-02-241-28/+11
|\ \ \ \ | |_|/ / |/| | / | | |/ | |/| | | | | | | | | | | | | | | | | | | 339dbc901f Help: Note that CMP0116 is recorded at the time of CC creation e3740e020e Tests: Test Qt autogen target with CMP0116 set to WARN cf34011ce7 Tests: Test per-CC behavior of CMP0116 3a95503512 Ninja: Use CMP0116 status recorded at time of custom command's creation f01f10e8fb cmCustomCommand: Record value of CMP0116 at time of creation Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5848
| * | cmCustomCommand: Record value of CMP0116 at time of creationKyle Edwards2021-02-231-28/+11
| |/
* | Autogen: Don't change the order of HEADERS array in AutogenInfo.jsonCraig Scott2021-02-221-2/+2
|/ | | | | | | | | | | Qt6 reads our internal AutogenInfo.json file. In 92d7b456e5 (Autogen: Add support for per-config sources, 2020-10-20), the ordering of the HEADERS array elements was changed and this broke their cmake_automoc_parser. We don't need to change the order of the array elements, we can append to the existing ones instead. Do this to allow their cmake_automoc_parser to continue to work. Fixes: #21823
* Code style: add missed explicit 'this->'Oleksandr Koval2021-01-051-33/+38
| | | | | CMake uses explicit 'this->' style. Using custom clang-tidy check we can detect and fix places where 'this->' was missed.
* Autogen: Add support for per-config sourcesBrad King2020-12-161-39/+88
| | | | Fixes: #20682
* AutoGen: Account for CMP0116 in the depfileKyle Edwards2020-12-081-5/+18
| | | | Fixes: #21467
* GENERATED prop: Add implementation for policy CMP0118 being set to NEWDeniz Bahadir2020-11-241-1/+1
| | | | | | | | | | | | | | | | | | * Adding implementation for policy CMP0118 being set to `NEW`. * Adding new tests for policy CMP0118 being set to `NEW`. * Checking the `GENERATED` property with `get_source_file_property` or `get_property` now always returns exactly `1` or `0`. No other values will be returned. Note, that this is a backwards-incompatible change, even when policy CMP0118 is unset or set to `OLD`. * Additionally, as `get_source_file_property` and `get_property` now always check if a source-file was marked globally visible, even when CMP0118 is unset or set to `OLD`, they possibly return `1` where they might have returned `0` before the changes introduced by this commit. Note, that this is a backwards-incompatible change, even when policy CMP0118 is unset or set to `OLD`. * As a consequence, the tests for policy CMP0118 being unset or set to `OLD` got slightly adjusted, too, to reflect these changes in behavior.
* cmSourceFile::GetPropertyForUser: return cmPropVitaly Stakhovsky2020-11-041-1/+1
| | | | also fix GetSafeProperty() return type
* cmMakefile::GetDefinition: return cmPropVitaly Stakhovsky2020-09-021-2/+2
|
* Merge topic 'automoc-depend-project-file'Brad King2020-09-011-0/+1
|\ | | | | | | | | | | | | | | 776059ef0f Merge branch 'backport-3.17-automoc-depend-project-file' 6b20bbd2dd AutoMoc: Restore support for re-running after project file changes Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5166
| * Merge branch 'backport-3.17-automoc-depend-project-file'Brad King2020-08-311-0/+1
| |\
| | * AutoMoc: Restore support for re-running after project file changesJoerg Bornemann2020-08-311-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For Qt >= 5.15.0 and Ninja generators AutoMoc creates a depfile to let Ninja decide when to run AutoMoc. This was introduced by commit aebfbcaa46 (AutoGen: Use depfiles for the XXX_autogen ninja targets, 2020-01-14, v3.17.0-rc1~58^2). However, AutoMoc was not triggered after adding a new moc-able file to the project. This patch adds the project file (and potentially included files) to the dependencies in the depfile. Now, a re-run of AutoMoc is triggered if the project file changes. Fixes: #21127
* | | Merge topic 'automoc_timestamp_nmc_fix'Brad King2020-08-251-0/+4
|\ \ \ | |/ / | | | | | | | | | | | | | | | a48bb185c3 AutoGen: Fix moc and uic dependencies when building Qt itself Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5153
| * | AutoGen: Fix moc and uic dependencies when building Qt itselfAlexandru Croitor2020-08-251-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When building Qt itself, the moc and uic executables are spcecified via a generator expression of the form $<TARGET_FILE:Qt6::moc>, which ends populating Moc's and Uic's 'Executable' field but not the ExecutableTarget and ExecutableTargetName fields. In such a scenario, the code in cmQtAutoGenInitializer::InitAutogenTarget fails to add a dependency on moc (or uic), because ExecutableTarget is null. First try to add a dependency on the ExecutableTarget if it's not empty, otherwise try to add a dependency on the path specified in the 'Executable' field. Issue: #21118
* | | Merge topic 'automoc_timestamp_deps'Brad King2020-08-061-2/+45
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | 9a9ed4b9d3 Merge branch 'backport-3.17-automoc_timestamp_deps' 7445c9a58a AutoGen: Add test to check for correct AutoMoc dependencies a79056bb02 AutoGen: Fix over-specified direct dependencies of custom command Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Aleix <aleixpol@kde.org> Merge-request: !5085
| * | Merge branch 'backport-3.17-automoc_timestamp_deps'Brad King2020-08-051-2/+45
| |\ \ | | |/
| | * AutoGen: Fix over-specified direct dependencies of custom commandAlexandru Croitor2020-08-031-2/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The AutoMoc timestamp creating custom command explicitly depended on all dependencies of the origin target (associated to the AutoGen target). When an origin target depended on a shared library 'libfoo.so', if it was re-linked, the AutoMoc custom command would touch its output timestamp file, and thus cause needless rebuilding of sources, despite the shared library not having any influence on the AutoMoc generated files. Introduce a new '<target>_autogen_timestamp_deps' utility target, which will serve as an 'order-only' dependency for the custom command. This will prevent needless rebuilding, because touching 'libfoo.so' will not cause the custom command to be re-executed. The new AutoMoc dependency tree looks like: '_autogen_timestamp_deps (serves as order-only dep)' <- '<target_autogen>/timestamp' file ( + moc deps file) <- '<target>_autogen' target. Fixes: #21020
* | | Fix typos identified using codespellJean-Christophe Fillion-Robin2020-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See https://github.com/codespell-project/codespell#readme The following command was used: ``` codespell -q6 --skip="\ .git,\ *.json,\ ./Copyright.txt,\ ./Help/command/foreach.rst,\ ./Help/prop_test/REQUIRED_FILES.rst,\ ./Help/variable/CTEST_COVERAGE_COMMAND.rst,\ ./Modules/CMakeCheckCompilerFlagCommonPatterns.cmake,\ ./Modules/CMakeRCInformation.cmake,\ ./Modules/Internal/CPack/NSIS.template.in,\ ./Modules/FindMatlab.cmake,\ ./Modules/MatlabTestsRedirect.cmake,\ ./Modules/Platform/Windows-Clang.cmake,\ ./Modules/Platform/Windows-Intel-Fortran.cmake,\ ./Modules/Platform/Windows-MSVC.cmake,\ ./Source/CMakeVersion.cmake,\ ./Source/cmConvertMSBuildXMLToJSON.py,\ ./Source/cmCreateTestSourceList.cxx,\ ./Source/cmGlobalVisualStudio10Generator.cxx,\ ./Source/cmExportBuildFileGenerator.cxx,\ ./Source/cmExportInstallAndroidMKGenerator.cxx,\ ./Source/cmExportInstallFileGenerator.cxx,\ ./Source/cmExportSet.cxx,\ ./Source/cmExportTryCompileFileGenerator.cxx,\ ./Source/cmFindPackageCommand.cxx,\ ./Source/cmInstallCommand.cxx,\ ./Source/cmGeneratorExpressionLexer.cxx,\ ./Source/cmLocalVisualStudio7Generator.cxx,\ ./Source/cmOrderDirectories.cxx,\ ./Source/cmTarget.cxx,\ ./Source/kwsys/*,\ ./Source/QtDialog/CMakeSetupDialog.ui,\ ./Source/CPack/WiX/cmWIXRichTextFormatWriter.cxx,\ ./Source/CTest/cmParseCoberturaCoverage.h,\ ./Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in,\ ./Tests/RunCMake/CPack/tests/DMG_SLA/English.license.rtf,\ ./Tests/RunCMake/CPack/tests/DMG_SLA/German.license.txt,\ ./Tests/RunCMake/CPack/tests/DMG_SLA/German.menu.txt,\ ./Tests/RunCMake/GoogleTest/xml_output.cpp,\ ./Tests/RunCMake/Make/TargetMessages*,\ ./Utilities/*,\ " \ -L "\ dependees,\ endwhile,\ fo,\ filetest,\ helpfull,\ nd,\ objext,\ stoll,\ supercedes,\ superceded,\ vas,\ varn,\ " ```
* | | Merge topic 'cmnonempty'Kyle Edwards2020-07-151-1/+1
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | eaad8072ee cmNonempty: Convenience inlines to check for non-empty string Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5017