diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-08-06 06:20:16 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-08-10 14:36:17 (GMT) |
commit | 4c33b305a0c0bc504fa70bf47171a9447a7840c3 (patch) | |
tree | 98e7e8229223839642d104258091b3f8b1bf4734 /Modules | |
parent | 39c6ac5112382093f99d2ee375162cdec57e4aec (diff) | |
download | CMake-4c33b305a0c0bc504fa70bf47171a9447a7840c3.zip CMake-4c33b305a0c0bc504fa70bf47171a9447a7840c3.tar.gz CMake-4c33b305a0c0bc504fa70bf47171a9447a7840c3.tar.bz2 |
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
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/CMakeGenericSystem.cmake | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake index 77d8cfd..4b9e80d 100644 --- a/Modules/CMakeGenericSystem.cmake +++ b/Modules/CMakeGenericSystem.cmake @@ -26,7 +26,9 @@ set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a") set(CMAKE_AUTOGEN_ORIGIN_DEPENDS ON) set(CMAKE_AUTOMOC_COMPILER_PREDEFINES ON) -set(CMAKE_AUTOMOC_PATH_PREFIX ON) +if(NOT DEFINED CMAKE_AUTOMOC_PATH_PREFIX) + set(CMAKE_AUTOMOC_PATH_PREFIX OFF) +endif() set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_NAMESPACE") # basically all general purpose OSs support shared libs |