make evaluation of spec+cache independent of build pass context
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Tue, 21 Feb 2012 11:56:47 +0000 (12:56 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 2 Mar 2012 20:33:08 +0000 (21:33 +0100)
don't inject the build pass specific variables into the project even
before evaluating the .spec file and the .qmake.cache. they are not
supposed to base configuration on that - feature files should do that
later.

the immediate advantage of this is that base_vars is never manipulated
upfront any more, which allows for cleaner setup paths. also, we can do
more caching of the spec+cache contents.

Change-Id: I19d7f8bec1fb7c3b54121e26794340b287055ebf
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
dist/changes-5.0.0
qmake/generators/metamakefile.cpp
qmake/project.cpp
qmake/project.h

index 5a9ce7e..ef1bd6d 100644 (file)
@@ -200,7 +200,8 @@ information about a particular change.
 
 - qmake
   * Projects which explicitly set an empty TARGET are considered broken now.
-  * several functions and built-in variables were modified to return normalized paths.
+  * The makespec and .qmake.cache do not see build pass specific variables any more.
+  * Several functions and built-in variables were modified to return normalized paths.
 
 - QTextCodecPlugin has been removed since it is no longer used. All text codecs
   are now built into QtCore.
index 55ab0a5..39dd4ab 100644 (file)
@@ -243,13 +243,13 @@ MakefileGenerator
             basecfgs = project->values(build + ".CONFIG");
         basecfgs += build;
         basecfgs += "build_pass";
-        basevars["CONFIG"] = basecfgs;
         basevars["BUILD_PASS"] = QStringList(build);
         QStringList buildname = project->values(build + ".name");
         basevars["BUILD_NAME"] = (buildname.isEmpty() ? QStringList(build) : buildname);
 
         //create project
-        QMakeProject *build_proj = new QMakeProject(project->properties(), basevars);
+        QMakeProject *build_proj = new QMakeProject(project->properties());
+        build_proj->setExtraVars(basevars);
         build_proj->setExtraConfigs(basecfgs);
 
         build_proj->read(project->projectFile());
index 8aa3ed2..208d5b7 100644 (file)
@@ -1292,6 +1292,10 @@ QMakeProject::read(uchar cmd)
 
     vars = base_vars; // start with the base
 
+    for (QHash<QString, QStringList>::ConstIterator it = extra_vars.constBegin();
+         it != extra_vars.constEnd(); ++it)
+        vars.insert(it.key(), it.value());
+
     if(cmd & ReadFeatures) {
         debug_msg(1, "Processing default_pre: %s", vars["CONFIG"].join("::").toLatin1().constData());
         doProjectInclude("default_pre", IncludeFlagFeature, vars);
index 43623a3..4c99825 100644 (file)
@@ -85,7 +85,7 @@ class QMakeProject
     QMakeProperty *prop;
     void reset();
     QStringList extra_configs;
-    QHash<QString, QStringList> vars, base_vars;
+    QHash<QString, QStringList> vars, base_vars, extra_vars;
     bool parse(const QString &text, QHash<QString, QStringList> &place, int line_count=1);
 
     enum IncludeStatus {
@@ -119,6 +119,7 @@ public:
     QMakeProject(QMakeProperty *p, const QHash<QString, QStringList> &nvars) { init(p, &nvars); }
     ~QMakeProject();
 
+    void setExtraVars(const QHash<QString, QStringList> &_vars) { extra_vars = _vars; }
     void setExtraConfigs(const QStringList &_cfgs) { extra_configs = _cfgs; }
 
     enum { ReadProFile=0x01, ReadSetup=0x02, ReadFeatures=0x04, ReadAll=0xFF };