Skip to content
  • Jörg Bornemann's avatar
    Autogen: Turn off moc path prefix generation by default · 4c33b305
    Jörg Bornemann authored and Brad King's avatar Brad King committed
    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 d018d27c (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
    4c33b305