Prevent static plugin triggering autogen dependency on reconfigure
A call to file(WRITE) will unconditionally update the file's timestamp even if the file's contents don't change. The *Plugin.cpp file was being written using configure_file() which avoids that, but the .cpp.in file it was configuring from was being written out using file(WRITE) every time CMake ran. Autogen saw that file as a dependency and then regenerated the mocs_compilation.cpp file, which in turn results in unnecessary rebuilds and relinking when nothing is actually changing. The file(WRITE) - configure_file() dance is no longer needed anyway, since the generated *Plugin.cpp file is very simple with no substitutions required. Therefore, we can simplify that file's generation with a single file(WRITE) that only executes if the file contents will change or the file is missing. Pick-to: 6.1 6.0 Change-Id: I2b7d1ff678b85ea7811969d656555592c9b6865f Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
This commit is contained in:
parent
2409e9b2c7
commit
63a0d263cf
@ -139,15 +139,23 @@ function(__qt_internal_add_static_plugins_once)
|
||||
|
||||
set(_generated_qt_plugin_file_name
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/qt_@QT_MODULE@_${target}.cpp")
|
||||
set(_generated_qt_plugin_file_name_template "${_generated_qt_plugin_file_name}.in")
|
||||
set(_generated_qt_plugin_file_content "#include <QtPlugin>\nQ_IMPORT_PLUGIN(${_classname})")
|
||||
|
||||
# Generate a source file to import that plug-in. Has to be done with configure_file,
|
||||
# because file(GENERATE) and target_sources has issues with scopes.
|
||||
file(WRITE "${_generated_qt_plugin_file_name_template}"
|
||||
# Generate a source file to import that plug-in. Be careful not to
|
||||
# update the timestamp of the generated file if we are not going to
|
||||
# change anything. Otherwise we will trigger CMake's autogen to re-run
|
||||
# and executables will then need to at least relink.
|
||||
set(need_write TRUE)
|
||||
if(EXISTS ${_generated_qt_plugin_file_name})
|
||||
file(READ ${_generated_qt_plugin_file_name} old_contents)
|
||||
if(old_contents STREQUAL "${_generated_qt_plugin_file_content}")
|
||||
set(need_write FALSE)
|
||||
endif()
|
||||
endif()
|
||||
if(need_write)
|
||||
file(WRITE "${_generated_qt_plugin_file_name}"
|
||||
"${_generated_qt_plugin_file_content}")
|
||||
configure_file("${_generated_qt_plugin_file_name_template}"
|
||||
"${_generated_qt_plugin_file_name}")
|
||||
endif()
|
||||
|
||||
target_sources(${_module_target} INTERFACE
|
||||
"$<${_plugin_condition}:${_generated_qt_plugin_file_name}>")
|
||||
|
Loading…
Reference in New Issue
Block a user