Skip to content

Commit

Permalink
move finding the makespec to Option
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Marius Storm-Olsen <[email protected]>
  • Loading branch information
ossilator authored and Qt by Nokia committed Mar 2, 2012
1 parent 123eb80 commit 74a6669
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 45 deletions.
44 changes: 44 additions & 0 deletions qmake/option.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -630,6 +671,9 @@ bool Option::prepareProject(const QString &pfile)
mkfile::project_root.clear();
}

if (!resolveSpec(&Option::mkfile::qmakespec))
return false;

return true;
}

Expand Down
2 changes: 2 additions & 0 deletions qmake/option.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *);

Expand Down Expand Up @@ -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); }
Expand Down
43 changes: 1 addition & 42 deletions qmake/project.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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");
Expand Down
4 changes: 1 addition & 3 deletions qmake/property.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@

QT_BEGIN_NAMESPACE

QStringList qmake_mkspec_paths(); //project.cpp

QMakeProperty::QMakeProperty() : settings(0)
{
}
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 74a6669

Please sign in to comment.