summaryrefslogtreecommitdiffstats
path: root/qmake/generators
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2020-06-05 18:59:01 +0300
committerOrgad Shaneh <orgads@gmail.com>2020-07-06 13:41:37 +0000
commit4c20a35cd93315dfefc06d87dbd74e9c0c0c5eff (patch)
treed28b08592be42e863d03ca1b0f68644eaf34c3d9 /qmake/generators
parent1f0299b029eadc988872dc6b0bc27e78a625c871 (diff)
MinGW: Use a response file for long include paths
Change-Id: I55ce73ad08473bca27c7ab5730f633fb77c9b8cd Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'qmake/generators')
-rw-r--r--qmake/generators/makefile.cpp7
-rw-r--r--qmake/generators/makefile.h5
-rw-r--r--qmake/generators/win32/mingw_make.cpp23
3 files changed, 28 insertions, 7 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index f6f4edef9d..dfe9a1c0b9 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -3456,7 +3456,10 @@ ProKey MakefileGenerator::fullTargetVariable() const
return "TARGET";
}
-QString MakefileGenerator::createResponseFile(const QString &baseName, const ProStringList &objList)
+QString MakefileGenerator::createResponseFile(
+ const QString &baseName,
+ const ProStringList &objList,
+ const QString &prefix)
{
QString fileName = baseName + '.' + fileVar("QMAKE_ORIG_TARGET");
if (!var("BUILD_NAME").isEmpty())
@@ -3479,7 +3482,7 @@ QString MakefileGenerator::createResponseFile(const QString &baseName, const Pro
.replace(QLatin1Char('\t'), QLatin1String("\\\t"))
.replace(QLatin1Char('"'), QLatin1String("\\\""))
.replace(QLatin1Char('\''), QLatin1String("\\'"));
- t << path << Qt::endl;
+ t << prefix << path << Qt::endl;
}
t.flush();
file.close();
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 2fd7df1e6a..6bd2d649fb 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -36,6 +36,7 @@
#include <qlist.h>
#include <qhash.h>
#include <qfileinfo.h>
+#include <functional>
QT_BEGIN_NAMESPACE
@@ -264,7 +265,9 @@ protected:
QStringView fixedBase, int slashOff);
bool processPrlFileCore(QString &origFile, QStringView origName,
const QString &fixedFile);
- QString createResponseFile(const QString &baseName, const ProStringList &objList);
+ QString createResponseFile(const QString &baseName,
+ const ProStringList &objList,
+ const QString &prefix = QString());
public:
QMakeProject *projectFile() const;
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index eb100764ae..823b799eb2 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -201,11 +201,26 @@ void MingwMakefileGenerator::writeIncPart(QTextStream &t)
t << "INCPATH = ";
const ProStringList &incs = project->values("INCLUDEPATH");
- for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) {
- QString inc = (*incit).toQString();
+ QFile responseFile;
+ QTextStream responseStream;
+ QChar sep(' ');
+ int totalLength = std::accumulate(incs.constBegin(), incs.constEnd(), 0,
+ [](int total, const ProString &inc) {
+ return total + inc.size() + 2;
+ });
+ if (totalLength > project->intValue("QMAKE_RESPONSEFILE_THRESHOLD", 8000)) {
+ const QString fileName = createResponseFile("incpath", incs, "-I");
+ if (!fileName.isEmpty()) {
+ t << '@' + fileName;
+ t << Qt::endl;
+ return;
+ }
+ }
+ for (const ProString &incit: qAsConst(incs)) {
+ QString inc = incit.toQString();
inc.replace(QRegularExpression("\\\\$"), "");
-
- t << "-I" << escapeFilePath(inc) << ' ';
+ inc.replace('\\', '/');
+ t << "-I" << escapeFilePath(inc) << sep;
}
t << Qt::endl;
}