diff options
author | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-08-17 19:33:52 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-10-02 14:00:56 +0000 |
commit | 2677cc47fc9e5bfa1d3daf69e464521041a8144c (patch) | |
tree | 16b430c2dbb078e617d2daf6b13a7414c5b1b39c /qmake/generators/win32 | |
parent | d49169ae890bcf4f341b7c2f36b875668f063de6 (diff) |
merge processPrlFiles() into findLibraries()
seems pointless to tear apart the functions, on the way duplicating some
boilerplate.
Change-Id: Ide3697ca1c931e8de607ac48c21cecce4781fe13
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'qmake/generators/win32')
-rw-r--r-- | qmake/generators/win32/mingw_make.cpp | 40 | ||||
-rw-r--r-- | qmake/generators/win32/mingw_make.h | 2 | ||||
-rw-r--r-- | qmake/generators/win32/winmakefile.cpp | 81 | ||||
-rw-r--r-- | qmake/generators/win32/winmakefile.h | 3 |
4 files changed, 63 insertions, 63 deletions
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 506aff5c6f..f8b19b3785 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -33,7 +33,6 @@ #include "mingw_make.h" #include "option.h" -#include "meta.h" #include <proitems.h> @@ -68,7 +67,7 @@ ProString MingwMakefileGenerator::fixLibFlag(const ProString &lib) return escapeFilePath(lib); } -bool MingwMakefileGenerator::findLibraries() +bool MingwMakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags) { QList<QMakeLocalFileName> dirs; static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; @@ -78,15 +77,16 @@ bool MingwMakefileGenerator::findLibraries() while (it != l.end()) { if ((*it).startsWith("-l")) { QString steam = (*it).mid(2).toQString(); - ProString out; + QString out; for (QList<QMakeLocalFileName>::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) { QString extension; int ver = findHighestVersion((*dir_it).local(), steam); if (ver > 0) extension += QString::number(ver); - if (QMakeMetaInfo::libExists((*dir_it).local() + '/' + steam) - || exists((*dir_it).local() + '/' + steam + extension + ".a") - || exists((*dir_it).local() + '/' + steam + extension + ".dll.a")) { + QString libBase = (*dir_it).local() + '/' + steam; + if ((linkPrl && processPrlFile(libBase)) + || exists(libBase + extension + ".a") + || exists(libBase + extension + ".dll.a")) { out = *it + extension; break; } @@ -97,10 +97,38 @@ bool MingwMakefileGenerator::findLibraries() QMakeLocalFileName f((*it).mid(2).toQString()); dirs.append(f); *it = "-L" + f.real(); + } else if (linkPrl && !(*it).startsWith('-')) { + QString prl = (*it).toQString(); + if (!processPrlFile(prl) && QDir::isRelativePath(prl)) { + for (QList<QMakeLocalFileName>::Iterator dir_it = dirs.begin(); dir_it != dirs.end(); ++dir_it) { + prl = (*dir_it).local() + '/' + *it; + if (processPrlFile(prl)) + break; + } + } } + ProStringList &prl_libs = project->values("QMAKE_CURRENT_PRL_LIBS"); + for (int prl = 0; prl < prl_libs.size(); ++prl) + it = l.insert(++it, prl_libs.at(prl)); + prl_libs.clear(); ++it; } + if (mergeLflags) { + ProStringList lopts; + for (int lit = 0; lit < l.size(); ++lit) { + ProString opt = l.at(lit); + if (opt.startsWith("-L")) { + if (!lopts.contains(opt)) + lopts.append(opt); + } else { + // Make sure we keep the dependency order of libraries + lopts.removeAll(opt); + lopts.append(opt); + } + } + l = lopts; + } } return true; } diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h index 73018319bc..9a30bc8ea6 100644 --- a/qmake/generators/win32/mingw_make.h +++ b/qmake/generators/win32/mingw_make.h @@ -62,7 +62,7 @@ private: QString preCompHeaderOut; - virtual bool findLibraries(); + virtual bool findLibraries(bool linkPrl, bool mergeLflags); QString objectsLinkLine; }; diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index 3d511ea7e8..e5eee2ed90 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -87,7 +87,7 @@ ProString Win32MakefileGenerator::fixLibFlag(const ProString &lib) } bool -Win32MakefileGenerator::findLibraries() +Win32MakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags) { QList<QMakeLocalFileName> dirs; static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; @@ -123,8 +123,9 @@ Win32MakefileGenerator::findLibraries() if(ver > 0) extension += QString::number(ver); extension += ".lib"; - if (QMakeMetaInfo::libExists((*it).local() + '/' + lib) - || exists((*it).local() + '/' + lib + extension)) { + QString libBase = (*it).local() + '/' + lib; + if ((linkPrl && processPrlFile(libBase)) + || exists(libBase + extension)) { out = (*it).real() + Option::dir_sep + lib + extension; break; } @@ -133,67 +134,39 @@ Win32MakefileGenerator::findLibraries() if(out.isEmpty()) out = lib + ".lib"; (*it) = out; + } else if (linkPrl && !processPrlFile(opt) && QDir::isRelativePath(opt)) { + for (QList<QMakeLocalFileName>::Iterator it = dirs.begin(); it != dirs.end(); ++it) { + QString prl = (*it).local() + '/' + opt; + if (processPrlFile(prl)) + break; + } } + + ProStringList &prl_libs = project->values("QMAKE_CURRENT_PRL_LIBS"); + for (int prl = 0; prl < prl_libs.size(); ++prl) + it = l.insert(++it, prl_libs.at(prl)); + prl_libs.clear(); ++it; } - } - return true; -} - -void -Win32MakefileGenerator::processPrlFiles() -{ - const QString libArg = project->first("QMAKE_L_FLAG").toQString(); - QList<QMakeLocalFileName> libdirs; - static const char * const lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", 0 }; - for (int i = 0; lflags[i]; i++) { - ProStringList &l = project->values(lflags[i]); + if (mergeLflags) { + ProStringList lopts; for (int lit = 0; lit < l.size(); ++lit) { - QString opt = l.at(lit).toQString(); - if (opt.startsWith(libArg)) { - QMakeLocalFileName l(opt.mid(libArg.length())); - if (!libdirs.contains(l)) - libdirs.append(l); + ProString opt = l.at(lit); + if (opt.startsWith("/LIBPATH:")) { + if (!lopts.contains(opt)) + lopts.append(opt); } else { - if (!processPrlFile(opt) && (QDir::isRelativePath(opt) || opt.startsWith("-l"))) { - QString tmp; - if (opt.startsWith("-l")) - tmp = opt.mid(2); - else - tmp = opt; - for(QList<QMakeLocalFileName>::Iterator it = libdirs.begin(); it != libdirs.end(); ++it) { - QString prl = (*it).local() + '/' + tmp; - if (processPrlFile(prl)) - break; - } - } - } - ProStringList &prl_libs = project->values("QMAKE_CURRENT_PRL_LIBS"); - for (int prl = 0; prl < prl_libs.size(); ++prl) - l.insert(++lit, prl_libs.at(prl)); - prl_libs.clear(); - } - - // Merge them into a logical order - if (!project->isActiveConfig("no_smart_library_merge") && !project->isActiveConfig("no_lflags_merge")) { - ProStringList lflags; - for (int lit = 0; lit < l.size(); ++lit) { - ProString opt = l.at(lit); - if (opt.startsWith(libArg)) { - if (!lflags.contains(opt)) - lflags.append(opt); - } else { - // Make sure we keep the dependency-order of libraries - lflags.removeAll(opt); - lflags.append(opt); - } + // Make sure we keep the dependency order of libraries + lopts.removeAll(opt); + lopts.append(opt); } - l = lflags; } + l = lopts; } + } + return true; } - void Win32MakefileGenerator::processVars() { project->values("QMAKE_ORIG_TARGET") = project->values("TARGET"); diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index 25b555ec86..7698f13285 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -58,11 +58,10 @@ protected: virtual void writeRcFilePart(QTextStream &t); int findHighestVersion(const QString &dir, const QString &stem); - virtual bool findLibraries(); + virtual bool findLibraries(bool linkPrl, bool mergeLflags); virtual ProString fixLibFlag(const ProString &lib); - virtual void processPrlFiles(); void processVars(); void fixTargetExt(); void processRcFileVar(); |