make the windows prl processing more like the unix variant
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Fri, 20 Jul 2012 13:23:01 +0000 (15:23 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 31 Jul 2012 09:17:37 +0000 (11:17 +0200)
it's more elegant, and more similar code is better.

Change-Id: I2b8b036cb70a932fd171e23cf7d3389188401924
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
qmake/generators/makefile.cpp
qmake/generators/makefile.h
qmake/generators/unix/unixmake.cpp
qmake/generators/unix/unixmake.h
qmake/generators/win32/winmakefile.cpp

index 5033bf4..497b77b 100644 (file)
@@ -944,11 +944,7 @@ void
 MakefileGenerator::processPrlVariable(const QString &var, const QStringList &l)
 {
     if(var == "QMAKE_PRL_LIBS") {
-        QStringList &out = project->values("QMAKE_LIBS");
-        for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {
-            if(out.indexOf((*it)) == -1)
-                out.append((*it));
-        }
+        project->values("QMAKE_CURRENT_PRL_LIBS") += l;
     } else if(var == "QMAKE_PRL_DEFINES") {
         QStringList &out = project->values("DEFINES");
         for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {
index 3a9bfc1..611430a 100644 (file)
@@ -213,7 +213,7 @@ protected:
     QString prlFileName(bool fixify=true);
     void writePrlFile();
     bool processPrlFile(QString &);
-    virtual void processPrlVariable(const QString &, const QStringList &);
+    void processPrlVariable(const QString &, const QStringList &);
     virtual void processPrlFiles();
     virtual void writePrlFile(QTextStream &);
 
index dc991ab..5cd3463 100644 (file)
@@ -388,15 +388,6 @@ UnixMakefileGenerator::init()
     }
 }
 
-void
-UnixMakefileGenerator::processPrlVariable(const QString &var, const QStringList &l)
-{
-    if(var == "QMAKE_PRL_LIBS") {
-        project->values("QMAKE_CURRENT_PRL_LIBS") += l;
-    } else
-        MakefileGenerator::processPrlVariable(var, l);
-}
-
 QStringList
 &UnixMakefileGenerator::findDependencies(const QString &file)
 {
index 24e8c45..8fb0052 100644 (file)
@@ -61,7 +61,6 @@ protected:
     virtual bool doPrecompiledHeaders() const { return project->isActiveConfig("precompile_header"); }
     virtual bool doDepends() const { return !Option::mkfile::do_stub_makefile && MakefileGenerator::doDepends(); }
     virtual QString defaultInstall(const QString &);
-    virtual void processPrlVariable(const QString &, const QStringList &);
     virtual void processPrlFiles();
 
     virtual bool findLibraries();
index a3c11f1..5bcd7bb 100644 (file)
@@ -217,24 +217,20 @@ void
 Win32MakefileGenerator::processPrlFiles()
 {
     const QString libArg = project->first("QMAKE_L_FLAG");
-    QHash<QString, bool> processed;
     QList<QMakeLocalFileName> libdirs;
-    for(bool ret = false; true; ret = false) {
-        //read in any prl files included..
-        QStringList l = project->values("QMAKE_LIBS");
-        for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {
-            QString opt = (*it).trimmed();
+    const QString lflags[] = { "QMAKE_LIBS", QString() };
+    for (int i = 0; !lflags[i].isNull(); i++) {
+        QStringList &l = project->values(lflags[i]);
+        for (int lit = 0; lit < l.size(); ++lit) {
+            QString opt = l.at(lit).trimmed();
             if((opt[0] == '\'' || opt[0] == '"') && opt[(int)opt.length()-1] == opt[0])
                 opt = opt.mid(1, opt.length()-2);
             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;
-                } else if(QDir::isRelativePath(opt) || opt.startsWith("-l")) {
+            } else if (!opt.startsWith("/")) {
+                if (!processPrlFile(opt) && (QDir::isRelativePath(opt) || opt.startsWith("-l"))) {
                     QString tmp;
                     if (opt.startsWith("-l"))
                         tmp = opt.mid(2);
@@ -242,21 +238,16 @@ Win32MakefileGenerator::processPrlFiles()
                         tmp = opt;
                     for(QList<QMakeLocalFileName>::Iterator it = libdirs.begin(); it != libdirs.end(); ++it) {
                         QString prl = (*it).local() + Option::dir_sep + tmp;
-                        // the original is used as the key
-                        QString orgprl = prl;
-                        if(processed.contains(prl)) {
+                        if (processPrlFile(prl))
                             break;
-                        } else if(processPrlFile(prl)) {
-                            processed.insert(orgprl, true);
-                            ret = true;
-                            break;
-                        }
                     }
                 }
             }
+            QStringList &prl_libs = project->values("QMAKE_CURRENT_PRL_LIBS");
+            for (int prl = 0; prl < prl_libs.size(); ++prl)
+                l.insert(lit + prl + 1, prl_libs.at(prl));
+            prl_libs.clear();
         }
-        if (!ret)
-            break;
     }
 }