From 90779d96adfa51a3fc00b6c0d93168b4bbfcf983 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 16 Sep 2019 13:18:23 +0200 Subject: [PATCH] Ignore non-existent .ui file dependencies Commit 80dea664 broke .ui files with global includes that are not part of the project, because we blindly added every file path that falls out of 'uic -d' as dependency. Introduce the extra compiler CONFIG flag dep_existing_only to bring back the old behavior that ignores non-existent dependencies and set it for uic. Change-Id: I6eaa82817c932a98ebac6d08115a9815d4b9dd21 Fixes: QTBUG-78144 Reviewed-by: Kai Koehne --- mkspecs/features/uic.prf | 2 +- qmake/doc/src/qmake-manual.qdoc | 5 +++++ qmake/generators/makefile.cpp | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mkspecs/features/uic.prf b/mkspecs/features/uic.prf index 1cedce5ae7a..a5df0c7e8d4 100644 --- a/mkspecs/features/uic.prf +++ b/mkspecs/features/uic.prf @@ -9,7 +9,7 @@ uic.depend_command = $$QMAKE_UIC_DEP -d ${QMAKE_FILE_IN} uic.output = $$UI_DIR/$${QMAKE_MOD_UIC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} uic.input = FORMS uic.variable_out = GENERATED_FILES -uic.CONFIG += no_link target_predeps dep_lines +uic.CONFIG += no_link target_predeps dep_lines dep_existing_only uic.name = UIC ${QMAKE_FILE_IN} silent:uic.commands = @echo uic ${QMAKE_FILE_IN} && $$uic.commands QMAKE_EXTRA_COMPILERS += uic diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc index a388b894774..b1780846903 100644 --- a/qmake/doc/src/qmake-manual.qdoc +++ b/qmake/doc/src/qmake-manual.qdoc @@ -4815,6 +4815,11 @@ \li explicit_dependencies \li The dependencies for the output only get generated from the depends member and from nowhere else. + \row + \li dep_existing_only + \li Every dependency that is a result of .depend_command is checked for + existence. Non-existing dependencies are ignored. + This value was introduced in Qt 5.13.2. \row \li dep_lines \li The output from the .depend_command is interpreted to be one file diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index a45b676d5fc..22ac7bf5341 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -1992,6 +1992,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) } t << endl; } + const bool existingDepsOnly = config.contains("dep_existing_only"); QStringList tmp_dep = project->values(ProKey(*it + ".depends")).toQStringList(); if (config.indexOf("combine") != -1) { if (tmp_out.contains(QRegExp("(^|[^$])\\$\\{QMAKE_(?!VAR_)"))) { @@ -2033,6 +2034,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) warn_msg(WarnDeprecated, ".depend_command for extra compiler %s" " prints paths relative to source directory", (*it).toLatin1().constData()); + else if (existingDepsOnly) + file.clear(); else file = absFile; // fallback for generated resources } else { @@ -2118,6 +2121,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t) warn_msg(WarnDeprecated, ".depend_command for extra compiler %s" " prints paths relative to source directory", (*it).toLatin1().constData()); + else if (existingDepsOnly) + file.clear(); else file = absFile; // fallback for generated resources } else {