make evaluation of spec+cache independent of build pass context

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>
This commit is contained in:
Oswald Buddenhagen 2012-02-21 12:56:47 +01:00 committed by Qt by Nokia
parent cd6e90c70a
commit dce3821b8a
4 changed files with 10 additions and 4 deletions

3
dist/changes-5.0.0 vendored
View 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.

View 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());

View 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);

View 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 };