Commit Graph

143 Commits

Author SHA1 Message Date
Sebastian Holtermann
f86ba8ee8e Autogen: Reintroduce per-config sources support
Reintroduce per-config sources support in AUTOGEN but disable it by default.
2017-09-25 16:27:38 +02:00
Sebastian Holtermann
5d3bca6485 Autogen: Rename cmQtAutoGen::GeneratorType to cmQtAutogen::Generator 2017-09-25 12:02:35 +02:00
Sebastian Holtermann
8bee55bce1 Autogen: In VERBOSE mode print why files are (re)generated 2017-09-20 23:21:01 +02:00
Sebastian Holtermann
15346bec19 Autogen: Refactor cmQtAutoGenerators
The refactoring of cmQtAutoGenerators serializes the program flow and
makes it less jumpy in terms of function calling.
Instead of keeping and passing multiple std::vectors and std::maps in
function arguments, single lists with job descriptions are used,
one job list for MOC, UIC, RCC respectively.
Several utility functions and methods were replaced with scoped lambdas
and the remaining methods were sorted by their scope (MOC, UIC, RCC).

Error and warning messages were refactored to be more verbose
about the problem at hand.

The source parsing algorithms were rewritten in large parts.
In the process a lack of functionality of CMAKE_AUTOMOC_DEPEND_FILTERS
was discovered and fixed. CMAKE_AUTOMOC_DEPEND_FILTERS did not extract
dependency file names from headers that were not in the target sources
but were registered to AUTOMOC by a `#include "moc_<NAME>.cpp"` statement.
A test for this use case is provided in a follow up commit.
2017-09-20 23:21:01 +02:00
Sebastian Holtermann
2e4dab087e Autogen: Set CM_DISABLE_COPY in cmQtAutoGenerators 2017-09-07 18:03:14 +02:00
Sebastian Holtermann
9468e926b0 Autogen: Refactor logging 2017-09-07 18:03:13 +02:00
Sebastian Holtermann
d561c1fffc Autogen: More use of scoped lambdas 2017-09-07 18:03:13 +02:00
Sebastian Holtermann
f23a24c287 Autogen: Use list of lists functions for UIC options 2017-09-07 17:53:19 +02:00
Sebastian Holtermann
37ef18a468 Autogen: Pass RCC build names and function names in info file
- The output file name of the `rcc` command get computed once
  in the AUTOGEN initializer and is passed in the info file.

- The function name for the `-name` option of `rcc` gets computed
  once in the AUTOGEN initializer and is passed along with the
  other `rcc` options in the info file.
2017-09-07 17:53:19 +02:00
Sebastian Holtermann
84658539bc Autogen: Use single KeyRegExp filter struct 2017-09-07 17:53:19 +02:00
Sebastian Holtermann
d8d064abbc Autogen: Use the same algorithm for RCC and UIC option merging 2017-09-07 17:53:19 +02:00
Sebastian Holtermann
d1e5eb8497 Autogen: Iterate source files only once
This is a large commit that serves multiple purposes

- Iterate source files only once and store all extracted
  information in a cmQtAutogenDigest class that can be reused.
  This is brings speed improvements because several properties
  are only evaluated once. More that that it helps to avoid
  duplication of code with non trivial files property checks.
- Fix the Visual Studio generator to use PRE_BUILD when possible.
- Convert `for( ... )` loops to C++11 range base loops where possible
  (cmQtAutogen*.cxx only).
- String concatenation optimizations.
2017-09-07 17:53:18 +02:00
Daniel Pfeifer
2b4c32c95f clang-format: format all code as Cpp11 2017-08-30 11:07:05 -04:00
Daniel Pfeifer
5962db4389 Use C++11 nullptr 2017-08-24 23:39:47 +02:00
Sebastian Holtermann
93f0ba2823 Autogen: Add AUTOMOC_MACRO_NAMES support
Closes #17176
2017-08-18 12:32:04 +02:00
Sebastian Holtermann
02e6c54813 Autogen: Restore AUTOUIC lookup paths from 3.8.2
When encountering an `#include "<PATH>ui_<BASE>.h"` statement,
search for `<BASE>.ui` in
 - <SOURCE_DIR>/<BASE>.ui
 - <SOURCE_DIR>/<PATH><BASE>.ui
 - <AUTOUIC_SEARCH_PATH>/<BASE>.ui
 - <AUTOUIC_SEARCH_PATH>/<PATH><BASE>.ui

In CMake 3.8.2 the lookup list was
  - <SOURCE_DIR>/<BASE>.ui

In CMake 3.9.[01] the lookup list was
 - <SOURCE_DIR>/<PATH><BASE.ui>
 - <AUTOUIC_SEARCH_PATH>/<PATH><BASE>.ui

Closes #17168
2017-08-15 12:17:37 +02:00
Sebastian Holtermann
dbda590628 Autogen: Per-config file suffixes. New AUTOGEN_BUILD_DIR target property.
Closes #14760
Closes #14313
2017-05-26 15:27:17 +02:00
Sebastian Holtermann
0965002e57 Autogen: Pass build directory in Info file 2017-05-26 15:23:21 +02:00
Sebastian Holtermann
7c5f5f1a20 Autogen: Generate moc_predefs.h only on demand 2017-04-22 14:39:50 +02:00
Sebastian Holtermann
65290169f2 Autogen: Add FileDiffers and FileWrite methods 2017-04-22 14:01:18 +02:00
Sebastian Holtermann
344a6d8448 Autogen: MakeParentDirectory logPrefix parameter 2017-04-22 13:30:28 +02:00
Sebastian Holtermann
5965a58915 Autogen: Determine settings file name only once 2017-04-22 13:21:18 +02:00
Sebastian Holtermann
46ba6abe49 Autogen: Overhaul class variable names and sorting 2017-04-22 13:21:18 +02:00
Brad King
2b7aecba16 Merge topic 'autogen-fixes'
09035319 Autogen: Pass explicit predefines header to moc if possible

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !671
2017-04-21 08:43:43 -04:00
Aleix Pol
0903531964 Autogen: Pass explicit predefines header to moc if possible
Qt is relying on whoever calls moc to include a file with the predefined
values that will be used by the compiler, otherwise moc takes wrong
paths and weird things happen.
Instead, generate an include file and feed it to all mocs to make sure
it's generating correct code.

Co-Author: Sebastian Holtermann <sebholt@xwmw.org>
Fixes: #16640
2017-04-20 08:59:07 -04:00
Daniel Pfeifer
1d829c862c Use quotes for non-system includes
Automate with:

git grep -l '#include <cm_' -- Source \
  | xargs sed -i 's/#include <\(cm_.*\)>/#include "\1"/g'

git grep -l '#include <cmsys/' -- Source \
  | xargs sed -i 's/#include <\(cmsys\/.*\)>/#include "\1"/g'

git grep -l '#include <cm[A-Z]' -- Source \
  | xargs sed -i 's/#include <\(cm[A-Z].*\)>/#include "\1"/g'
2017-04-11 22:35:21 +02:00
Daniel Pfeifer
5afac50f68 cmConfigure: Ensure separate include block in headers
Make sure that `#include <cmConfigure.h>` is followed by an empty line
in header files.  This is necessary to make sure that changing <> to ""
does not affect the include ordering of clang-format.

Automate with:

git grep -l '#include <cmConfigure.h>' | grep -v '.cxx$' \
| xargs sed -i '/#include <cmConfigure.h>/ { N; N; s/\n\{1,2\}/\n\n/ }'
2017-04-11 22:35:20 +02:00
Sebastian Holtermann
60274e1d94 Autogen: Add RunCommand method with built in logging 2017-03-06 22:01:03 +01:00
Sebastian Holtermann
8f2ad9c4a0 Autogen: Error return when a scan file is not readable 2017-03-06 22:01:03 +01:00
Sebastian Holtermann
662ad240db Autogen: Rename and merge moc related methods 2017-03-02 09:10:02 -05:00
Sebastian Holtermann
1cdf7c1be2 Autogen: Add AUTOUIC_SEARCH_PATHS support
Closes #15227
2017-03-02 09:10:01 -05:00
Sebastian Holtermann
110c1bf475 Autogen: Add subDirPrefix function 2017-03-02 09:10:01 -05:00
Sebastian Holtermann
db431ecfe3 Autogen: Merge FindInIncludeDirectories into FindIncludeFile 2017-03-01 15:30:28 +01:00
Sebastian Holtermann
70ebf35cda Autogen: Add AUTOMOC_DEPEND_FILTERS support 2017-02-22 21:13:48 +01:00
Sebastian Holtermann
c23206b6c1 Autogen: Log simplifications
The logging methods now automatically add an end-of-line
to the message if it is missing.
2017-02-21 10:12:55 -05:00
Sebastian Holtermann
03df033bfa Autogen: Rebuild moc when Q_PLUGIN_METADATA json file changes
Closes #15419
2017-02-21 10:12:54 -05:00
Sebastian Holtermann
41fb64e719 Autogen: Search moc includes in include directories 2017-02-21 10:12:54 -05:00
Sebastian Holtermann
80a007534f Autogen: Add FindInIncludeDirectories method 2017-02-21 10:12:53 -05:00
Sebastian Holtermann
f379fdbb9e Autogen: Synchronize header/source argument names 2017-02-21 10:12:53 -05:00
Sebastian Holtermann
ddf940725e Autogen: Split moc include paths on info reading 2017-02-21 10:12:53 -05:00
Sebastian Holtermann
71c5ae253c Autogen: Loop based macro detection instead of code duplication 2017-02-21 10:12:52 -05:00
Sebastian Holtermann
4c60099fea Autogen: Acquire and store header extensions in Init() 2017-02-21 10:12:51 -05:00
Sebastian Holtermann
815a05cf12 Autogen: Overhaul FindMatchingHeader function 2017-02-21 10:12:51 -05:00
Sebastian Holtermann
25dbfbc2a9 Autogen: Rename moc related variables 2017-02-21 10:12:50 -05:00
Sebastian Holtermann
3cc42863a4 Autogen: Overhaul moc include list generation 2017-02-21 10:12:49 -05:00
Sebastian Holtermann
b2063fd70f Autogen: Move method declarations; Remove comments 2017-02-19 12:35:43 +01:00
Sebastian Holtermann
10beb4a034 Autogen: Rename SkipFoo variables/methods to FooSkip 2017-02-19 12:35:43 +01:00
Sebastian Holtermann
f37f1a647d Autogen: Split moc options info string immediately 2017-02-19 12:35:43 +01:00
Sebastian Holtermann
5bb997c24a Autogen: Split moc compile options info string immediately 2017-02-19 12:35:42 +01:00
Sebastian Holtermann
a9e3c903b6 Autogen: Rename variables read from info file 2017-02-19 12:35:42 +01:00