From 468bf8d77ee00ab1b225e6f4f6640f7ca805f880 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 23 Mar 2022 16:56:21 +0100 Subject: lrelease-pro: Take EXTRA_TRANSLATIONS into account The QMake variable EXTRA_TRANSLATIONS contains .ts files that are only to be handled by lrelease but not lupdate. Teach lrelease-pro to understand this variable, but ignore it in lupdate-pro. Fixes: QTBUG-101782 Change-Id: I79e1c669480dc35dc61ecc149fe7ba1bba28ab29 Reviewed-by: Kai Koehne (cherry picked from commit 2641698341456b8905ef1fbd58b51a80a61ef70d) Reviewed-by: Qt Cherry-pick Bot --- src/linguist/lprodump/main.cpp | 36 +++++++++++++++++++++++++++--------- src/linguist/lrelease-pro/main.cpp | 3 +++ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/linguist/lprodump/main.cpp b/src/linguist/lprodump/main.cpp index eed1e706f..afc60655a 100644 --- a/src/linguist/lprodump/main.cpp +++ b/src/linguist/lprodump/main.cpp @@ -101,6 +101,8 @@ Options: Trace processing .pro files. Specify twice for more verbosity. -out Name of the output file. + -translations-variables [,,...] + Comma-separated list of QMake variables containing .ts files. -version Display the version of lprodump and exit. )"_qs); @@ -269,11 +271,13 @@ static void excludeProjects(const ProFileEvaluator &visitor, QStringList *subPro } static QJsonArray processProjects(bool topLevel, const QStringList &proFiles, + const QStringList &translationsVariables, const QHash &outDirMap, ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser, bool *fail); -static QJsonObject processProject(const QString &proFile, ProFileGlobals *option, QMakeVfs *vfs, +static QJsonObject processProject(const QString &proFile, const QStringList &translationsVariables, + ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser, ProFileEvaluator &visitor) { QJsonObject result; @@ -301,7 +305,7 @@ static QJsonObject processProject(const QString &proFile, ProFileGlobals *option subProFiles << subPro; } } - QJsonArray subResults = processProjects(false, subProFiles, + QJsonArray subResults = processProjects(false, subProFiles, translationsVariables, QHash(), option, vfs, parser, nullptr); if (!subResults.isEmpty()) @@ -318,6 +322,7 @@ static QJsonObject processProject(const QString &proFile, ProFileGlobals *option } static QJsonArray processProjects(bool topLevel, const QStringList &proFiles, + const QStringList &translationsVariables, const QHash &outDirMap, ProFileGlobals *option, QMakeVfs *vfs, QMakeParser *parser, bool *fail) { @@ -343,16 +348,20 @@ static QJsonArray processProjects(bool topLevel, const QStringList &proFiles, continue; } - QJsonObject prj = processProject(proFile, option, vfs, parser, visitor); + QJsonObject prj = processProject(proFile, translationsVariables, option, vfs, parser, + visitor); setValue(prj, "projectFile", proFile); - if (visitor.contains(QLatin1String("TRANSLATIONS"))) { - QStringList tsFiles; + QStringList tsFiles; + for (const QString &varName : translationsVariables) { + if (!visitor.contains(varName)) + continue; QDir proDir(QFileInfo(proFile).path()); - const QStringList translations = visitor.values(QLatin1String("TRANSLATIONS")); + const QStringList translations = visitor.values(varName); for (const QString &tsFile : translations) tsFiles << proDir.filePath(tsFile); - setValue(prj, "translations", tsFiles); } + if (!tsFiles.isEmpty()) + setValue(prj, "translations", tsFiles); if (visitor.contains(QLatin1String("LUPDATE_COMPILE_COMMANDS_PATH"))) { const QStringList thepathjson = visitor.values( QLatin1String("LUPDATE_COMPILE_COMMANDS_PATH")); @@ -369,6 +378,7 @@ int main(int argc, char **argv) QCoreApplication app(argc, argv); QStringList args = app.arguments(); QStringList proFiles; + QStringList translationsVariables = { u"TRANSLATIONS"_qs }; QString outDir = QDir::currentPath(); QHash outDirMap; QString outputFilePath; @@ -411,6 +421,14 @@ int main(int argc, char **argv) return 1; } outDir = QDir::cleanPath(QFileInfo(args[i]).absoluteFilePath()); + } else if (arg == u"-translations-variables"_qs) { + ++i; + if (i == argc) { + printErr(u"The -translations-variables option must be followed by a "_qs + u"comma-separated list of variable names.\n"_qs); + return 1; + } + translationsVariables = args.at(i).split(QLatin1Char(',')); } else if (arg.startsWith(QLatin1String("-")) && arg != QLatin1String("-")) { printErr(QStringLiteral("Unrecognized option '%1'.\n").arg(arg)); return 1; @@ -450,8 +468,8 @@ int main(int argc, char **argv) QMakeVfs vfs; QMakeParser parser(0, &vfs, &evalHandler); - QJsonArray results = processProjects(true, proFiles, outDirMap, &option, &vfs, - &parser, &fail); + QJsonArray results = processProjects(true, proFiles, translationsVariables, outDirMap, &option, + &vfs, &parser, &fail); if (fail) return 1; diff --git a/src/linguist/lrelease-pro/main.cpp b/src/linguist/lrelease-pro/main.cpp index 31c660c2c..25ee854d7 100644 --- a/src/linguist/lrelease-pro/main.cpp +++ b/src/linguist/lrelease-pro/main.cpp @@ -116,6 +116,9 @@ int main(int argc, char **argv) return 1; } + lprodumpOptions << QStringLiteral("-translations-variables") + << QStringLiteral("TRANSLATIONS,EXTRA_TRANSLATIONS"); + const QStringList proFiles = extractProFiles(&inputFiles); if (proFiles.isEmpty()) { printErr(u"lrelease-pro: No .pro/.pri files given.\n"_qs); -- cgit v1.2.3