summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-08-15 16:51:46 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-19 18:46:48 +0200
commit35139d45ce7fee0e1c9c0409d31b710ef35c3970 (patch)
tree7e765159f22fdb0f647835cc2355715be73c6b26
parent08bae158320f6d73bf44fcf43f45f51a01334544 (diff)
downloadqttools-35139d45ce7fee0e1c9c0409d31b710ef35c3970.tar.gz
make TR_EXCLUDE work for #include statements as well
Change-Id: I299043c63c6e8b2f24eeee7d3f03a514b96bca5f Reviewed-by: hjk <hjk121@nokiamail.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
-rw-r--r--src/linguist/lupdate/cpp.cpp6
-rw-r--r--src/linguist/lupdate/main.cpp24
-rw-r--r--src/linguist/shared/translator.h1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro2
5 files changed, 27 insertions, 9 deletions
diff --git a/src/linguist/lupdate/cpp.cpp b/src/linguist/lupdate/cpp.cpp
index 65176ec6d..82138513d 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 70402e5bc..ec2be5747 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<QString> 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 3d521ac83..6ee62b446 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<QString> 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 54781ba9f..b09a47f6e 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 ac5c2846e..0fd8a9627 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