Commit Graph

167 Commits

Author SHA1 Message Date
Brad King 1c3d2d0951 Tests: Skip Qt*Autogen.MocSkipSource case for Xcode "new build system"
This test case enables AUTOMOC on the same sources in two separate targets.
This causes the `moc_*.cpp` generation custom commands to be added to multiple
`_autogen` targets, which is not allowed by the Xcode "new build system".
Skip the part of the test that triggers this problem for now.

Issue: #21205
2020-09-18 13:46:39 -04:00
Brad King 5a15fcf597 Tests: Avoid duplicate custom commands in QtAutogen.AutogenOriginDependsOff 2020-09-18 12:49:09 -04:00
Joerg Bornemann 9ac3503d30 AutoMoc: Re-run moc if a dependency is missing
AutoMoc uses the moc-emitted dependency file of Qt 5.15 to track
dependencies. Such a dependency may well live outside the project and
can vanish, for example when installing a new compiler version.

This situation was detected before, but merely a warning was issued.
Now, we're considering a generated file as out of date if a dependency
is missing and re-generate it.

We also have to remove the missing dependency from the ParseCache.
Otherwise the AUTOMOC target for all generators other than Ninja will
always be out of date.

The ParseCacheChanged flag had to be made atomic, because we're
potentially accessing it from multiple threads. The dependencies vector
itself is not vulnerable in this regard, because there's one vector per
file, and we're accessing exactly one ParseCacheT::FileHandleT per thread.

Fixes: #21136
2020-09-09 12:51:28 +02:00
Brad King 776059ef0f Merge branch 'backport-3.17-automoc-depend-project-file' 2020-08-31 13:10:31 -04:00
Joerg Bornemann 6b20bbd2dd AutoMoc: Restore support for re-running after project file changes
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
2020-08-31 13:07:23 -04:00
Brad King db659e18bc Merge branch 'backport-3.17-automoc-path-prefix-off' 2020-08-10 10:49:18 -04:00
Brad King e503fbe38a Merge branch 'backport-3.16-automoc-path-prefix-off' 2020-08-10 10:41:06 -04:00
Joerg Bornemann 4c33b305a0 Autogen: Turn off moc path prefix generation by default
Change the default value of `CMAKE_AUTOMOC_PATH_PREFIX` to `OFF` to
restore compatibility with behavior of CMake 3.15 and below.

C++ source files that are generated by Qt's meta object compiler (moc)
include the header file that was passed as input argument to moc. This
is usually a path relative to the source directory, for example

    #include "../../source/dir/myobject.h"

That is problematic for reproducible builds as described in #18815.
To cope with that, the target property AUTOMOC_PATH_PREFIX was
introduced in CMake 3.16 by commit d018d27c10 (Autogen: Add moc path
prefix generation (AUTOMOC_PATH_PREFIX), 2019-09-13, v3.16.0-rc1~94^2~4).
The property is default-initialized from the variable
`CMAKE_AUTOMOC_PATH_PREFIX`, which defaults to `ON`.

If this property is ON, and myobject.h is located in an include
directory of the target, moc-generated C++ files include the file
without the "path prefix":

    #include "myobject.h"

This behavior, however, can break projects that have equally named
header files in different include directories.  As "not breaking
existing projects" trumps "have reproducible builds by default" we
change the default of `CMAKE_AUTOMOC_PATH_PREFIX` to `OFF`.

Also, it is now possible to pass `-DCMAKE_AUTOMOC_PATH_PREFIX=ON` on the
CMake command line.  Before, it was overridden in `CMakeGenericSystem`.

Fixes: #20598
Issue: #18815
2020-08-10 10:36:17 -04:00
Cristian Adam 7051250a6c Unity Builds: Do not set SKIP_AUTOGEN to source files
Fixes: #21028
2020-07-29 17:57:50 +02:00
Brad King eb705b9531 Update links to gitlab.kitware.com repos to add -/
GitLab now uses a `/-/` component between the `group/project` part of
the URL and the `{issues,merge_requests,tree}` part so that it can
support `group/subgroup/project` with arbitrary depth.
2020-05-26 11:38:01 -04:00
Robert Maynard cd9c3c000f Tests: Update QtAutogen codeeditor test only include headers needed 2020-05-21 11:32:01 -04:00
Joerg Bornemann f765fdea03 AutoGen: Use moc's feature to output dependencies
In Qt version 5.15.0 moc learned to output the dependencies
of the generated file.

This commit enhances JobCompileMocT to read the dependency file
written by moc. The dependencies are stored in the same cache that's
used for the dependencies determined by dependency filters.

The dependency filter functionality is turned off if moc's dependency
output feature is used.

Fixes: #17750
Fixes: #19058
2020-01-28 11:16:11 -05:00
Sebastian Holtermann 9eab3cad6a Tests: Add AUTOGEN policy CMP0100 test
Add a test for policy CMP0100 that configures whether or not
AUTOMOC and AUTOUIC should process .hh header files.
2020-01-04 11:33:05 +01:00
Sebastian Holtermann 8c2be3ae94 Tests: Restore Autogen/SameName .hh header test
In commit 7fa7f55230, the Autogen/SameName test
was changed to not test .hh header file processing in AUTOGEN anymore,
because we had to revert that feature.  Since we now support .hh header file
processing in AUTOMOC again, we can restore the Autogen/SameName test for
that.
2020-01-04 11:33:04 +01:00
Brad King 7fa7f55230 Autogen: Revert processing of .hh files for compatibility
Since commit 4a9154537c (Autogen: Use cmake::IsHeader/SourceExtension
for file type detection, 2019-07-02, v3.16.0-rc1~470^2~4) we process
`.hh` files with `AUTOMOC`.  However, this change can break existing
projects that do not expect the behavior.  Revert it for now.  It can
be restored later via a policy.

Fixes: #20101
2019-12-18 05:34:27 -05:00
Kitware Robot ed98209ddc Revise include order using clang-format-6.0
Run the `clang-format.bash` script to update our C and C++ code to a new
include order `.clang-format`.  Use `clang-format` version 6.0.
2019-10-01 12:26:36 -04:00
Sebastian Holtermann 1933ade9f1 Tests: At QtAutogen.MocIncludeSymlink test 2019-09-18 11:48:23 -04:00
Sebastian Holtermann 706d9738a6 Tests: Merge QtAutogen.MocIncludeStrict and MocIncludeRelaxed 2019-09-18 11:48:10 -04:00
Sebastian Holtermann 8214ad442f Tests: Autogen: Extend SameName test with additional header extensions
This adds additional headers with suffixes ".hh" and uppercase ".H" to the
QtAutogen/SameName test.
2019-07-04 12:30:40 +02:00
Sebastian Holtermann 1a2d6bdefc Tests: Autogen: Use valid rcc compression levels
Avoid the invalid compression level 0 when invoking rcc.
It let's rcc fail with an error since Qt 5.13.
2019-07-01 09:18:24 -04:00
Sebastian Holtermann 58f04b6ecf Autogen: Add ManySources test
The QtAutogen/ManySources test generates a number of source, header, .ui and
.qrc files that get AUTOMOC, AUTOUIC and AUTORCC processed.  This stresses the
concurrency framework in `cmQtAutoMocUic` and should reveal any issues
with that.
2019-04-15 16:07:14 +02:00
Brad King 06dab0f0e5 Tests: Fix Qt*Autogen.GlobalAutogenTarget to use matching generator
Build the GAT project with the same generator as the rest of the test.
This was accidentally left out of commit 8c8731b422 (Autogen: Add test
for CMAKE_GLOBAL_AUTOGEN/RCC_TARGET, 2018-11-11, v3.14.0-rc1~396^2~2).
2019-04-10 10:01:19 -04:00
Sebastian Holtermann 91344e7a46 Autogen: Fix RerunMocPlugin test for Ninja generator 2019-02-15 10:56:55 +01:00
Sebastian Holtermann a40864ae53 Autogen: Refactor RerunRccDepends test with fixed timestamp comparison
This refactors and simplifies the QtAutogen.RerunRccDepends test.
Repetitive task are packed into macros.
By using version strings to store file timestamps, timestamp comparison
becomes more reliable.  Test status and error messages are improved.
2019-02-13 23:01:46 +01:00
Sebastian Holtermann 724359489e Autogen: Refactor RerunRccConfigChange test
This refactors and simplifies the QtAutogen.RerunRccConfigChange test.
Repetitive task are packed into macros.
Test status and error messages are improved.
2019-02-13 22:54:32 +01:00
Sebastian Holtermann 6ed4ae4bad Autogen: Refactor RerunMocBasic test with fixed timestamp comparison
This refactors and simplifies the QtAutogen.RerunMocBasic test.
Repetitive task are packed into macros.
By using version strings to store file timestamps, timestamp comparison
becomes more reliable.  Test status and error messages are improved.
2019-02-13 22:54:32 +01:00
Sebastian Holtermann fedbd16f35 Autogen: Refactor RerunMocPlugin test with fixed timestamp comparison
This refactors and simplifies the QtAutogen.RerunMocPlugin test.
Repetitive task are packed into macros.
By using version strings to store file timestamps, timestamp comparison
becomes more reliable.  Test status and error messages are improved.
2019-02-13 22:49:20 +01:00
Sebastian Holtermann 1f802295f2 Autogen: Extend the SameName test with same name but different extension files 2019-02-05 15:51:53 +01:00
Sebastian Holtermann 03dbb62d31 Autogen: Reenable passing compiler implicit include directories to moc
Since commit 5990ecb741 (Compute implicit include directories from
compiler output, 2018-12-07) we now have compiler implicit include
directory computation for gcc and clang.  It should be safe now to pass
these to `moc`.  This patch re-enables passing the compiler implicit
include directories to `moc`, which was disabled due to issue #18669.

Fixes: #18041
Issue: #18669
2019-01-28 08:41:37 -05:00
Sebastian Holtermann 4be7f38d57 Autogen: Revert passing compiler implicit includes to moc
Passing an incomplete list of compiler include directories causes
a regression in the KIO project (and probably others). We need to
disable it until the complete list is available (see #16291).

Fixes: #18669
Issue: #18041
2018-12-07 08:01:02 -05:00
Sebastian Holtermann 0814d74548 Autogen: Add QtAutogen.UicNoGui test
Adds a Qt core only test that has ``AUTOUIC`` enabled
targets that don't link against QtXWidgets or Qt at all.
2018-11-28 13:06:05 +01:00
Sebastian Holtermann 2ef640819f Autogen: Tests: Differentiate between Qt core and Qt gui tests
Some AUTOGEN tests require the Qt core libraries only and
some require the Qt gui libraries to function.
This replaces the AutogenTest.cmake script with two specific
AutogenCoreTest.cmake and AutogenGuiTest.cmake scripts that
are included on demand.
2018-11-28 12:51:19 +01:00
Sebastian Holtermann e0c26406aa Autogen: Sort tests 2018-11-14 19:21:03 +01:00
Sebastian Holtermann 83bbfb1d53 Autogen: Add a definitions test to the MocOnly test 2018-11-14 19:21:03 +01:00
Sebastian Holtermann 8c8731b422 Autogen: Add test for CMAKE_GLOBAL_AUTOGEN/RCC_TARGET 2018-11-11 14:29:38 +01:00
Sebastian Holtermann 336893d9eb Autogen: Separate AUTOGEN_TARGET_DEPENDS tests into own tests suite
The tests for AUTOGEN_TARGET_DEPENDS were part of the
AutogenOriginDependsOn tests suite.  This separates them
into an own AutogenTargetDepends tests suite.
2018-11-05 14:03:01 +01:00
Sebastian Holtermann 846043dd35 Autogen: Rename MocDepends test to AutogenOriginDependsOn 2018-11-03 12:14:40 +01:00
Sebastian Holtermann b71a9598a4 Autogen: Add test for AUTOGEN_ORIGIN_DEPENDS=OFF 2018-11-03 12:14:40 +01:00
luz.paz 6b4c5a0365 Fix misc. typos
Found via `codespell -q 3 -I ../cmake-whitelist.txt --skip="./Utilities"`
where the whitelist consists of

```
aci
ans
behaviour
buil
convertor
dum
earch
ect
emmited
emmitted
helpfull
iff
isnt
ith
lowercased
mose
nd
nknown
nto
objext
ot
pathes
pevents
splitted
substract
superceded
supercedes
te
tim
todays
uint
upto
whitespaces
```
2018-10-03 15:32:46 -04:00
Sebastian Holtermann 52676e3794 Autogen: Tests: Use non inverting Qt version tests 2018-08-09 15:44:11 +02:00
Sebastian Holtermann e7fb85d00d Autogen: Check if we can run the MocOsMacros test
The MocOsMacros test requires moc to support moc_predefs.h
on some platforms (e.g. Mac). moc supports moc_predefs.h
inclusion since Qt 5.8, therefore run the MocOsMacros only if
Qt >= 5.8 and if CMAKE_CXX_COMPILER_PREDEFINES_COMMAND is
defined.

Fixes #18245
2018-08-07 16:33:27 +02:00
Sebastian Holtermann 7bb70054e4 Autogen: Add test for Q_OS_ macros 2018-07-30 09:46:03 +02:00
Sebastian Holtermann aa7d8a092c Autogen: Enable CMAKE_AUTOGEN_VERBOSE in all tests 2018-06-21 19:16:40 +02:00
Kitware Robot d7204e649e Revise C++ coding style using clang-format-6.0
Run the `clang-format.bash` script to update all our C and C++ code to a
new style defined by `.clang-format`.  Use `clang-format` version 6.0.

* If you reached this commit for a line in `git blame`, re-run the blame
  operation starting at the parent of this commit to see older history
  for the content.

* See the parent commit for instructions to rebase a change across this
  style transition commit.
2018-06-01 09:53:42 -04:00
Sebastian Holtermann 5852acffa4 Autogen: Add AUTORCC configuration change test 2018-05-30 17:45:01 +02:00
Sebastian Holtermann 3715d0fbcf Tests: Add QtAutogen test for a low cmake_minimum_required version 2018-05-16 09:11:45 +02:00
Craig Scott 8e841a473f Cleanup: Fix typos and grammar in docs and code
No functional changes, just docs, comments and error messages.
2018-04-23 07:48:03 +10:00
Shane Parris e78e24f68c Replaces execute_process calls to touch files with file(TOUCH) calls 2018-02-15 10:54:38 -05:00
Sebastian Holtermann b4e6911bf5 Autogen: Tests: Extend AUTOUIC include patterns test 2018-01-19 19:21:12 +01:00
Sebastian Holtermann ff91a5d54b Autogen: Tests: Extend AUTOMOC include patterns test 2018-01-18 18:38:45 +01:00