From 35139d45ce7fee0e1c9c0409d31b710ef35c3970 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 15 Aug 2013 16:51:46 +0200 Subject: [PATCH] make TR_EXCLUDE work for #include statements as well Change-Id: I299043c63c6e8b2f24eeee7d3f03a514b96bca5f Reviewed-by: hjk Reviewed-by: Oswald Buddenhagen --- src/linguist/lupdate/cpp.cpp | 6 ++++++ src/linguist/lupdate/main.cpp | 24 ++++++++++++++-------- src/linguist/shared/translator.h | 1 + .../lupdate/testdata/good/parsecpp/main.cpp | 3 +++ .../lupdate/testdata/good/parsecpp/project.pro | 2 +- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/linguist/lupdate/cpp.cpp b/src/linguist/lupdate/cpp.cpp index 65176ec..8213851 100644 --- a/src/linguist/lupdate/cpp.cpp +++ b/src/linguist/lupdate/cpp.cpp @@ -1382,6 +1382,12 @@ void CppParser::processInclude(const QString &file, ConversionData &cd, const QS { QString cleanFile = QDir::cleanPath(file); + foreach (const QString &ex, cd.m_excludes) { + QRegExp rx(ex, Qt::CaseSensitive, QRegExp::Wildcard); + if (rx.exactMatch(cleanFile)) + return; + } + const int index = includeStack.indexOf(cleanFile); if (index != -1) { CppFiles::addIncludeCycle(includeStack.mid(index).toSet()); diff --git a/src/linguist/lupdate/main.cpp b/src/linguist/lupdate/main.cpp index 70402e5..ec2be57 100644 --- a/src/linguist/lupdate/main.cpp +++ b/src/linguist/lupdate/main.cpp @@ -271,7 +271,8 @@ static QStringList getSources(const char *var, const char *vvar, const QStringLi return visitor.absoluteFileValues(QLatin1String(var), projectDir, vPaths, 0); } -static QStringList getSources(const ProFileEvaluator &visitor, const QString &projectDir) +static QStringList getSources(const ProFileEvaluator &visitor, const QString &projectDir, + const QStringList &excludes) { QStringList baseVPaths; baseVPaths += visitor.absolutePathValues(QLatin1String("VPATH"), projectDir); @@ -294,12 +295,6 @@ static QStringList getSources(const ProFileEvaluator &visitor, const QString &pr sourceFiles.removeDuplicates(); sourceFiles.sort(); - QStringList excludes; - foreach (QString ex, visitor.values(QLatin1String("TR_EXCLUDE"))) { - if (!QFileInfo(ex).isAbsolute()) - ex = QDir(projectDir).absoluteFilePath(ex); - excludes << QDir::cleanPath(ex); - } foreach (const QString &ex, excludes) { // TODO: take advantage of the file list being sorted QRegExp rx(ex, Qt::CaseSensitive, QRegExp::Wildcard); @@ -314,6 +309,18 @@ static QStringList getSources(const ProFileEvaluator &visitor, const QString &pr return sourceFiles; } +QStringList getExcludes(const ProFileEvaluator &visitor, const QString &projectDir) +{ + QStringList excludes; + foreach (QString ex, visitor.values(QLatin1String("TR_EXCLUDE"))) { + if (!QFileInfo(ex).isAbsolute()) + ex = QDir(projectDir).absoluteFilePath(ex); + excludes << QDir::cleanPath(ex); + } + + return excludes; +} + static void excludeProjects(const ProFileEvaluator &visitor, QStringList *subProjects) { foreach (const QString &ex, visitor.values(QLatin1String("TR_EXCLUDE"))) { @@ -421,7 +428,8 @@ static void processProject( cd.m_noUiLines = options & NoUiLines; cd.m_sourceIsUtf16 = options & SourceIsUtf16; cd.m_includePath = visitor.values(QLatin1String("INCLUDEPATH")); - QStringList sourceFiles = getSources(visitor, proPath); + cd.m_excludes = getExcludes(visitor, proPath); + QStringList sourceFiles = getSources(visitor, proPath, cd.m_excludes); QSet sourceDirs; sourceDirs.insert(proPath + QLatin1Char('/')); foreach (const QString &sf, sourceFiles) diff --git a/src/linguist/shared/translator.h b/src/linguist/shared/translator.h index 3d521ac..6ee62b4 100644 --- a/src/linguist/shared/translator.h +++ b/src/linguist/shared/translator.h @@ -93,6 +93,7 @@ public: QString m_unTrPrefix; // QM specific QString m_sourceFileName; QString m_targetFileName; + QStringList m_excludes; QDir m_sourceDir; QDir m_targetDir; // FIXME: TS specific QSet m_projectRoots; diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp index 54781ba..b09a47f 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp +++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp @@ -399,3 +399,6 @@ Class42::hello(int something /*= 17 */, QString str = Class42::tr("eyo")) // QTBUG-27974: strings from included sources are not collected #include "included.cpp" + +// test TR_EXCLUDE +#include "notincluded.cpp" diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro index ac5c284..0fd8a96 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro +++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro @@ -2,6 +2,6 @@ SOURCES += main.cpp SOURCES += finddialog.cpp SOURCES += excluded.cpp -TR_EXCLUDE = $$PWD/excluded.* +TR_EXCLUDE = $$PWD/excluded.* $$PWD/notincluded.cpp TRANSLATIONS = project.ts -- 2.7.4