0e1faa28cb cmMakefile: Separate custom command setup from actual creation
56c204e8eb cmMakefile: Refactor AddCustomCommandOldStyle to be delay friendly
3061dc6ac9 add_custom_command: Add tests for rejecting literal quotes in commands
e893ab94ba cmMakefile: Validate command line for all custom commands
f1e846fdde cmMakefile: Extract custom command validation method
4926ab2454 cmMakefile: Create all generated byproducts as known sources
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3822
cc0900d9cd Help: Add release notes for AUTOMOC_PATH_PREFIX
692d8e3492 Help: Add documentation for AUTOMOC_PATH_PREFIX
1933ade9f1 Tests: At QtAutogen.MocIncludeSymlink test
706d9738a6 Tests: Merge QtAutogen.MocIncludeStrict and MocIncludeRelaxed
d018d27c10 Autogen: Add moc path prefix generation (AUTOMOC_PATH_PREFIX)
77983c8147 Autogen: Add IsHeader flag to SourceFileT class
f9e5441eb4 Autogen: Abbreviate file paths in messages
51676cf655 Autogen: Split JobEvalCacheT job into separate moc and uic jobs
...
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3818
The precompile header file will be added to the list of files,
and be part of the newly "Precompile Header File" source group.
Also make sure the sources have the header as dependency.
Evaluate and expand generator expressions in byproducts of custom commands.
Note that it is still not possible to use generator expressions in byproducts
of the commands `add_custom_command` and `add_custom_target`. These commands
still reject the input. This is a preparation step for OUTPUT generator
expression support.
Issue: #12877
Refactored internals of cmCustomCommandGenerator to make processing of path
lists (evaluation of generator expressions and expansion into a list) available
as AppendPaths utility function to be used for byproduct generator expression
support.
Custom command functions consist of two parts: setup and commit. Only the
commit part will be delayed to generate time. This change puts the commit part
of AddCustomCommandOldStyle into a lambda. When delayed, it will not be
possible to break the loop over the outputs if an error occurs which seems
reasonable.
3b409643bd Byproducts: Add test for collapsing of full paths in byproducts
445ff5ccdf Byproducts: collapse full paths of custom target byproducts
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3804
The new `AUTOMOC_PATH_PREFIX` boolean target property enables automatic
generation of the path prefix `-p` option for `moc`.
`AUTOMOC_PATH_PREFIX` is initialized from the variable
`CMAKE_AUTOMOC_PATH_PREFIX`, which is ON by default.
When `AUTOMOC_PATH_PREFIX` is enabled, CMake tests if a `moc`ed header file is
in one of the include directories. If so, then the `-p` option, with the
relative path of the header parent directory to the respective include
directory, is added to the `moc` command. If the header file is not in an
include directory, the `-p` option is omitted.
Closes: #18815 "AUTOMOC: generated files include full relative path,
breaking certain reproducible builds"
This introduces the `cmQtAutoGenerator::MessagePath` method, that abbreviates
paths by placing a
- "SRC:" prefix in place of the project source directory
- "BIN:" prefix in place of the project binary directory
The method is used in `AUTO{MOC,UIC,RCC}` when paths are displayed in
messages. This makes the messages generated by `AUTO{MOC,UIC,RCC}` shorter
and improves their readability.
This splits the `JobEvalCacheT` job into separate `JobEvalCacheMocT` and
`JobEvalCacheUicT` classes, that run concurrently.
The `JobEvalCache*T::FindIncluded*` methods are overhauled to store probed
directoriy names only if probing fails. Warning messages are refactored
to show the file name and the probed directories instead of all probed file
paths. This is easier to read.
By splitting `JobProbeDepsT` into two independent `JobProbeDepsMocT`,
`JobProbeDepsUicT`, the moc and uic job generation will happen concurrently.
This should improve the execution speed, when both AUTOMOC and AUTOUIC are
enabled.
Parent directory names for moc and uic output files are are collected in
a `std::unordered_set<std::string>` and get created in a batch.
Beforehand we tried to create the parent directory for each output file.
This led to duplications of `MakeDirectory` calls when there were multiple
output files in the same directory (which is the case usually).