From 4c20a35cd93315dfefc06d87dbd74e9c0c0c5eff Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Fri, 5 Jun 2020 18:59:01 +0300 Subject: MinGW: Use a response file for long include paths Change-Id: I55ce73ad08473bca27c7ab5730f633fb77c9b8cd Reviewed-by: Joerg Bornemann --- qmake/generators/win32/mingw_make.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'qmake/generators/win32/mingw_make.cpp') 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; } -- cgit v1.2.3