make TR_EXCLUDE work for #include statements as well
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>
Thu, 15 Aug 2013 14:51:46 +0000 (16:51 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 19 Aug 2013 16:46:48 +0000 (18:46 +0200)
Change-Id: I299043c63c6e8b2f24eeee7d3f03a514b96bca5f
Reviewed-by: hjk <hjk121@nokiamail.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
src/linguist/lupdate/cpp.cpp
src/linguist/lupdate/main.cpp
src/linguist/shared/translator.h
tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro

index 65176ec..8213851 100644 (file)
@@ -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());
index 70402e5..ec2be57 100644 (file)
@@ -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<QString> sourceDirs;
         sourceDirs.insert(proPath + QLatin1Char('/'));
         foreach (const QString &sf, sourceFiles)
index 3d521ac..6ee62b4 100644 (file)
@@ -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<QString> m_projectRoots;
index 54781ba..b09a47f 100644 (file)
@@ -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"
index ac5c284..0fd8a96 100644 (file)
@@ -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