From 022f8ebd1387623c5d524c7dc71ae3237ff05d81 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 16 Jul 2012 14:29:48 +0200 Subject: [PATCH] merge QMAKE_LIBDIR into QMAKE_LIBS early dealing with the directories separately doesn't buy us anything. it's easier to mix them into the libs, as that contains some paths, too, both in projects and in prl files. this brings the windows generators in line with the unix ones. Change-Id: I1f58f7edd8e21d28bfabf04384bac2e315aaf446 Reviewed-by: Friedemann Kleint Reviewed-by: Joerg Bornemann --- qmake/generators/win32/mingw_make.cpp | 26 +++-------------- qmake/generators/win32/mingw_make.h | 1 - qmake/generators/win32/msvc_nmake.cpp | 10 ++----- qmake/generators/win32/msvc_nmake.h | 1 - qmake/generators/win32/msvc_vcproj.cpp | 9 ++---- qmake/generators/win32/winmakefile.cpp | 51 ++++++++++++---------------------- qmake/generators/win32/winmakefile.h | 1 - 7 files changed, 25 insertions(+), 74 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index fd7f07a..cb83f25 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -74,13 +74,6 @@ QString MingwMakefileGenerator::getLibTarget() bool MingwMakefileGenerator::findLibraries() { QList dirs; - { - const QStringList &libpaths = project->values("QMAKE_LIBDIR"); - for (QStringList::ConstIterator libpathit = libpaths.begin(); - libpathit != libpaths.end(); ++libpathit) - dirs.append(QMakeLocalFileName((*libpathit))); - } - const QString lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", QString() }; for (int i = 0; !lflags[i].isNull(); i++) { QStringList &l = project->values(lflags[i]); @@ -259,6 +252,8 @@ void MingwMakefileGenerator::init() project->values("TARGET_PRL").append(project->first("TARGET")); + project->values("QMAKE_L_FLAG") << "-L"; + processVars(); if (!project->values("RES_FILE").isEmpty()) { @@ -341,25 +336,12 @@ void MingwMakefileGenerator::writeLibsPart(QTextStream &t) } else { t << "LINK = " << var("QMAKE_LINK") << endl; t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl; - t << "LIBS = "; - if(!project->values("QMAKE_LIBDIR").isEmpty()) - writeLibDirPart(t); - t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' ' + t << "LIBS = " + << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' ' << var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl; } } -void MingwMakefileGenerator::writeLibDirPart(QTextStream &t) -{ - QStringList libDirs = project->values("QMAKE_LIBDIR"); - for (int i = 0; i < libDirs.size(); ++i) { - libDirs[i].remove("\""); - if (libDirs[i].endsWith("\\")) - libDirs[i].chop(1); - } - t << valGlue(libDirs, "-L" + quote, quote + " -L" + quote, quote) << " "; -} - void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) { if (project->values("OBJECTS").count() < var("QMAKE_LINK_OBJECT_MAX").toInt()) { diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h index 376eacd..3d05c28 100644 --- a/qmake/generators/win32/mingw_make.h +++ b/qmake/generators/win32/mingw_make.h @@ -60,7 +60,6 @@ private: void writeMingwParts(QTextStream &); void writeIncPart(QTextStream &t); void writeLibsPart(QTextStream &t); - void writeLibDirPart(QTextStream &t); void writeObjectsPart(QTextStream &t); void writeBuildRulesPart(QTextStream &t); void writeRcFilePart(QTextStream &t); diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index 69ead08..cf4fb96 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -243,6 +243,8 @@ void NmakeMakefileGenerator::init() return; } + project->values("QMAKE_L_FLAG") << "/LIBPATH:"; + processVars(); if (!project->values("RES_FILE").isEmpty()) { @@ -294,14 +296,6 @@ void NmakeMakefileGenerator::init() } } -void NmakeMakefileGenerator::writeLibDirPart(QTextStream &t) -{ - QStringList libDirs = project->values("QMAKE_LIBDIR"); - for (int i = 0; i < libDirs.size(); ++i) - libDirs[i].remove("\""); - t << valGlue(libDirs,"/LIBPATH:\"","\" /LIBPATH:\"","\"") << " "; -} - void NmakeMakefileGenerator::writeImplicitRulesPart(QTextStream &t) { t << ".SUFFIXES:"; diff --git a/qmake/generators/win32/msvc_nmake.h b/qmake/generators/win32/msvc_nmake.h index d0e6ec7..1e32b56 100644 --- a/qmake/generators/win32/msvc_nmake.h +++ b/qmake/generators/win32/msvc_nmake.h @@ -50,7 +50,6 @@ class NmakeMakefileGenerator : public Win32MakefileGenerator { bool init_flag; void writeNmakeParts(QTextStream &); - void writeLibDirPart(QTextStream &t); bool writeMakefile(QTextStream &); void writeImplicitRulesPart(QTextStream &t); void writeBuildRulesPart(QTextStream &t); diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 7820330..7291c42 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -697,6 +697,8 @@ void VcprojGenerator::init() if (project->values("QMAKESPEC").isEmpty()) project->values("QMAKESPEC").append(qgetenv("QMAKESPEC")); + project->values("QMAKE_L_FLAG") << "/LIBPATH:"; + processVars(); if(!project->values("VERSION").isEmpty()) { @@ -1008,13 +1010,6 @@ void VcprojGenerator::initLinkerTool() VCConfiguration &conf = vcProject.Configuration; conf.linker.parseOptions(project->values("QMAKE_LFLAGS")); - foreach (const QString &libDir, project->values("QMAKE_LIBDIR")) { - if (libDir.startsWith("/LIBPATH:")) - conf.linker.AdditionalLibraryDirectories += libDir.mid(9); - else - conf.linker.AdditionalLibraryDirectories += libDir; - } - if (!project->values("DEF_FILE").isEmpty()) conf.linker.ModuleDefinitionFile = project->first("DEF_FILE"); diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index acd50c7..1756304 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -107,12 +107,6 @@ bool Win32MakefileGenerator::findLibraries() { QList dirs; - { - const QStringList &libpaths = project->values("QMAKE_LIBDIR"); - for (QStringList::ConstIterator libpathit = libpaths.begin(); - libpathit != libpaths.end(); ++libpathit) - dirs.append(QMakeLocalFileName((*libpathit))); - } const QString lflags[] = { "QMAKE_LIBS", "QMAKE_LIBS_PRIVATE", QString() }; for (int i = 0; !lflags[i].isNull(); i++) { QStringList &l = project->values(lflags[i]); @@ -222,13 +216,9 @@ Win32MakefileGenerator::findLibraries() void Win32MakefileGenerator::processPrlFiles() { + const QString libArg = project->first("QMAKE_L_FLAG"); QHash processed; QList libdirs; - { - const QStringList &libpaths = project->values("QMAKE_LIBDIR"); - for (QStringList::ConstIterator libpathit = libpaths.begin(); libpathit != libpaths.end(); ++libpathit) - libdirs.append(QMakeLocalFileName((*libpathit))); - } for(bool ret = false; true; ret = false) { //read in any prl files included.. QStringList l_out; @@ -237,13 +227,11 @@ Win32MakefileGenerator::processPrlFiles() QString opt = (*it).trimmed(); if((opt[0] == '\'' || opt[0] == '"') && opt[(int)opt.length()-1] == opt[0]) opt = opt.mid(1, opt.length()-2); - if(opt.startsWith("/")) { - if(opt.startsWith("/LIBPATH:")) { - QMakeLocalFileName l(opt.mid(9)); - if(!libdirs.contains(l)) - libdirs.append(l); - } - } else if(!processed.contains(opt)) { + if (opt.startsWith(libArg)) { + QMakeLocalFileName l(opt.mid(libArg.length())); + if (!libdirs.contains(l)) + libdirs.append(l); + } else if (!opt.startsWith("/") && !processed.contains(opt)) { if(processPrlFile(opt)) { processed.insert(opt, true); ret = true; @@ -336,13 +324,19 @@ void Win32MakefileGenerator::processVars() if(!(*incDir_it).isEmpty()) (*incDir_it) = Option::fixPathToTargetOS((*incDir_it), false, false); } + + QString libArg = project->first("QMAKE_L_FLAG"); + QStringList libs; QStringList &libDir = project->values("QMAKE_LIBDIR"); for(QStringList::Iterator libDir_it = libDir.begin(); libDir_it != libDir.end(); ++libDir_it) { - if(!(*libDir_it).isEmpty()) - (*libDir_it) = Option::fixPathToTargetOS((*libDir_it), false, false); + if (!(*libDir_it).isEmpty()) { + (*libDir_it).remove("\""); + if ((*libDir_it).endsWith("\\")) + (*libDir_it).chop(1); + libs << libArg + escapeFilePath(Option::fixPathToTargetOS((*libDir_it), false, false)); + } } - - project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS")); + project->values("QMAKE_LIBS") += libs + escapeFilePaths(project->values("LIBS")); project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE")); if (project->values("TEMPLATE").contains("app")) { @@ -768,21 +762,10 @@ void Win32MakefileGenerator::writeLibsPart(QTextStream &t) } else { t << "LINK = " << var("QMAKE_LINK") << endl; t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl; - t << "LIBS = "; - if(!project->values("QMAKE_LIBDIR").isEmpty()) - writeLibDirPart(t); - t << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl; + t << "LIBS = " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl; } } -void Win32MakefileGenerator::writeLibDirPart(QTextStream &t) -{ - QStringList libDirs = project->values("QMAKE_LIBDIR"); - for (int i = 0; i < libDirs.size(); ++i) - libDirs[i].remove("\""); - t << valGlue(libDirs,"-L\"","\" -L\"","\"") << " "; -} - void Win32MakefileGenerator::writeObjectsPart(QTextStream &t) { t << "OBJECTS = " << valList(escapeDependencyPaths(project->values("OBJECTS"))) << endl; diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index 1263328..26a7208 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -56,7 +56,6 @@ protected: virtual void writeCleanParts(QTextStream &t); virtual void writeStandardParts(QTextStream &t); virtual void writeIncPart(QTextStream &t); - virtual void writeLibDirPart(QTextStream &t); virtual void writeLibsPart(QTextStream &t); virtual void writeObjectsPart(QTextStream &t); virtual void writeImplicitRulesPart(QTextStream &t); -- 2.7.4