diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2020-06-05 18:59:01 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2020-07-06 13:41:37 +0000 |
commit | 4c20a35cd93315dfefc06d87dbd74e9c0c0c5eff (patch) | |
tree | d28b08592be42e863d03ca1b0f68644eaf34c3d9 /qmake/generators | |
parent | 1f0299b029eadc988872dc6b0bc27e78a625c871 (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.cpp | 7 | ||||
-rw-r--r-- | qmake/generators/makefile.h | 5 | ||||
-rw-r--r-- | qmake/generators/win32/mingw_make.cpp | 23 |
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; } |