diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2012-02-23 19:34:10 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-02 08:43:06 +0100 |
commit | 74a6669fa7c0d6e2cb7d34d56332d620d2a07755 (patch) | |
tree | 9dccf49e81b2a212822304c50b3a7976580da816 /qmake/option.cpp | |
parent | 123eb803ef1a7af36eefdf9a668f1f29d6597f1d (diff) |
move finding the makespec to Option
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>
Diffstat (limited to 'qmake/option.cpp')
-rw-r--r-- | qmake/option.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/qmake/option.cpp b/qmake/option.cpp index 16c5390348..93a0ffbd9c 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -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; } |