merge QMAKE_LIBDIR into QMAKE_LIBS early
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Mon, 16 Jul 2012 12:29:48 +0000 (14:29 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 27 Jul 2012 14:29:38 +0000 (16:29 +0200)
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 <Friedemann.Kleint@nokia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
qmake/generators/win32/mingw_make.cpp
qmake/generators/win32/mingw_make.h
qmake/generators/win32/msvc_nmake.cpp
qmake/generators/win32/msvc_nmake.h
qmake/generators/win32/msvc_vcproj.cpp
qmake/generators/win32/winmakefile.cpp
qmake/generators/win32/winmakefile.h

index fd7f07a..cb83f25 100644 (file)
@@ -74,13 +74,6 @@ QString MingwMakefileGenerator::getLibTarget()
 bool MingwMakefileGenerator::findLibraries()
 {
     QList<QMakeLocalFileName> 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()) {
index 376eacd..3d05c28 100644 (file)
@@ -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);
index 69ead08..cf4fb96 100644 (file)
@@ -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:";
index d0e6ec7..1e32b56 100644 (file)
@@ -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);
index 7820330..7291c42 100644 (file)
@@ -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");
 
index acd50c7..1756304 100644 (file)
@@ -107,12 +107,6 @@ bool
 Win32MakefileGenerator::findLibraries()
 {
     QList<QMakeLocalFileName> 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<QString, bool> processed;
     QList<QMakeLocalFileName> 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;
index 1263328..26a7208 100644 (file)
@@ -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);