move finding the makespec to Option
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Thu, 23 Feb 2012 18:34:10 +0000 (19:34 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 2 Mar 2012 07:43:06 +0000 (08:43 +0100)
this is a one-time operation which depends only on the invocation, so
this new home is much more appropriate.

Change-Id: I07c66d95a9ae01a664cec17564995311fb78ec9b
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
qmake/option.cpp
qmake/option.h
qmake/project.cpp
qmake/property.cpp

index 16c5390..93a0ffb 100644 (file)
@@ -577,6 +577,47 @@ void Option::applyHostMode()
    }
 }
 
+QStringList Option::mkspecPaths()
+{
+    QStringList ret;
+    const QString concat = QLatin1String("/mkspecs");
+
+    QByteArray qmakepath = qgetenv("QMAKEPATH");
+    if (!qmakepath.isEmpty()) {
+        const QStringList lst = splitPathList(QString::fromLocal8Bit(qmakepath));
+        for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it)
+            ret << ((*it) + concat);
+    }
+    ret << Option::mkfile::project_build_root + concat;
+    if (!Option::mkfile::project_root.isEmpty())
+        ret << Option::mkfile::project_root + concat;
+    ret << QLibraryInfo::location(QLibraryInfo::DataPath) + concat;
+    return ret;
+}
+
+bool Option::resolveSpec(QString *spec)
+{
+    QString qmakespec = fixEnvVariables(*spec);
+    if (qmakespec.isEmpty())
+        qmakespec = "default";
+    if (QDir::isRelativePath(qmakespec)) {
+        QStringList mkspec_roots = mkspecPaths();
+        debug_msg(2, "Looking for mkspec %s in (%s)", qmakespec.toLatin1().constData(),
+                  mkspec_roots.join("::").toLatin1().constData());
+        for (QStringList::ConstIterator it = mkspec_roots.begin(); it != mkspec_roots.end(); ++it) {
+            QString mkspec = (*it) + QLatin1Char('/') + qmakespec;
+            if (QFile::exists(mkspec)) {
+                *spec = mkspec;
+                return true;
+            }
+        }
+        fprintf(stderr, "Could not find mkspecs for your QMAKESPEC(%s) after trying:\n\t%s\n",
+                qmakespec.toLatin1().constData(), mkspec_roots.join("\n\t").toLatin1().constData());
+            return false;
+    }
+    return true;
+}
+
 bool Option::prepareProject(const QString &pfile)
 {
     mkfile::project_build_root.clear();
@@ -630,6 +671,9 @@ bool Option::prepareProject(const QString &pfile)
         mkfile::project_root.clear();
     }
 
+    if (!resolveSpec(&Option::mkfile::qmakespec))
+        return false;
+
     return true;
 }
 
index a4d8ccc..96549bb 100644 (file)
@@ -108,6 +108,7 @@ struct Option
     //both of these must be called..
     static int init(int argc=0, char **argv=0); //parse cmdline
     static void applyHostMode();
+    static QStringList mkspecPaths();
     static bool prepareProject(const QString &pfile);
     static bool postProcessProject(QMakeProject *);
 
@@ -212,6 +213,7 @@ struct Option
 
 private:
     static int parseCommandLine(int, char **, int=0);
+    static bool resolveSpec(QString *spec);
 };
 
 inline QString fixEnvVariables(const QString &x) { return Option::fixString(x, Option::FixEnvVars); }
index 2d339cc..0533ab3 100644 (file)
@@ -596,24 +596,6 @@ QStringList qmake_feature_paths(QMakeProperty *prop=0)
     return feature_roots;
 }
 
-QStringList qmake_mkspec_paths()
-{
-    QStringList ret;
-    const QString concat = QLatin1String("/mkspecs");
-    QByteArray qmakepath = qgetenv("QMAKEPATH");
-    if (!qmakepath.isEmpty()) {
-        const QStringList lst = splitPathList(QString::fromLocal8Bit(qmakepath));
-        for(QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it)
-            ret << ((*it) + concat);
-    }
-    ret << Option::mkfile::project_build_root + concat;
-    if (!Option::mkfile::project_root.isEmpty())
-        ret << Option::mkfile::project_root + concat;
-    ret << QLibraryInfo::location(QLibraryInfo::DataPath) + concat;
-
-    return ret;
-}
-
 QMakeProject::~QMakeProject()
 {
     if(own_prop)
@@ -1290,30 +1272,7 @@ QMakeProject::read(uchar cmd)
                         Option::output_dir.mid(Option::mkfile::project_build_root.length()).count('/');
         }
         if (cmd & ReadSetup) {             // parse mkspec
-            QString qmakespec = fixEnvVariables(Option::mkfile::qmakespec);
-            if (qmakespec.isEmpty())
-                qmakespec = "default";
-            if(QDir::isRelativePath(qmakespec)) {
-                    QStringList mkspec_roots = qmake_mkspec_paths();
-                    debug_msg(2, "Looking for mkspec %s in (%s)", qmakespec.toLatin1().constData(),
-                              mkspec_roots.join("::").toLatin1().constData());
-                    bool found_mkspec = false;
-                    for(QStringList::ConstIterator it = mkspec_roots.begin(); it != mkspec_roots.end(); ++it) {
-                        QString mkspec = (*it) + QLatin1Char('/') + qmakespec;
-                        if(QFile::exists(mkspec)) {
-                            found_mkspec = true;
-                            Option::mkfile::qmakespec = qmakespec = mkspec;
-                            break;
-                        }
-                    }
-                    if(!found_mkspec) {
-                        fprintf(stderr, "Could not find mkspecs for your QMAKESPEC(%s) after trying:\n\t%s\n",
-                                qmakespec.toLatin1().constData(), mkspec_roots.join("\n\t").toLatin1().constData());
-                        return false;
-                    }
-            }
-
-            // parse qmake configuration
+            QString qmakespec = Option::mkfile::qmakespec;
             while(qmakespec.endsWith(QLatin1Char('/')))
                 qmakespec.truncate(qmakespec.length()-1);
             QString spec = qmakespec + QLatin1String("/qmake.conf");
index 4221605..064c8f6 100644 (file)
@@ -49,8 +49,6 @@
 
 QT_BEGIN_NAMESPACE
 
-QStringList qmake_mkspec_paths(); //project.cpp
-
 QMakeProperty::QMakeProperty() : settings(0)
 {
 }
@@ -107,7 +105,7 @@ QMakeProperty::value(QString v, bool just_check)
     else if(v == "QT_INSTALL_DEMOS")
         return QLibraryInfo::location(QLibraryInfo::ExamplesPath);
     else if(v == "QMAKE_MKSPECS")
-        return qmake_mkspec_paths().join(Option::dirlist_sep);
+        return Option::mkspecPaths().join(Option::dirlist_sep);
     else if(v == "QMAKE_VERSION")
         return qmake_version();
 #ifdef QT_VERSION_STR