find qt.conf more reliably
a qmake invoked with a relative path would not find qt.conf, because it already changed CWD, which would confuse our copy of QCoreApplication::applicationFilePath() (see also QTBUG-21381). we already have the absolute path to the qmake executable in Option::qmake_abslocation, so just use it. (cherry picked from commit c378e16e57e8ce2255116e7fdb5436524cccb8c7) Change-Id: Icfe4254722e0855f6755b639f4c86f15bc7323ba Reviewed-on: http://codereview.qt-project.org/4565 Reviewed-by: Harald Fernengel <harald.fernengel@nokia.com>
This commit is contained in:
parent
6f87278e0a
commit
0192bf919f
@ -750,64 +750,11 @@ qmakeAddCacheClear(qmakeCacheClearFunc func, void **data)
|
|||||||
cache_items.append(new QMakeCacheClearItem(func, data));
|
cache_items.append(new QMakeCacheClearItem(func, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
# include <windows.h>
|
|
||||||
|
|
||||||
QT_USE_NAMESPACE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QString qmake_libraryInfoFile()
|
QString qmake_libraryInfoFile()
|
||||||
{
|
{
|
||||||
QString ret;
|
if(!Option::qmake_abslocation.isEmpty())
|
||||||
#if defined( Q_OS_WIN )
|
return QDir(QFileInfo(Option::qmake_abslocation).absolutePath()).filePath("qt.conf");
|
||||||
wchar_t module_name[MAX_PATH];
|
return QString();
|
||||||
GetModuleFileName(0, module_name, MAX_PATH);
|
|
||||||
QFileInfo filePath = QString::fromWCharArray(module_name);
|
|
||||||
ret = filePath.filePath();
|
|
||||||
#else
|
|
||||||
QString argv0 = QFile::decodeName(QByteArray(Option::application_argv0));
|
|
||||||
QString absPath;
|
|
||||||
|
|
||||||
if (!argv0.isEmpty() && argv0.at(0) == QLatin1Char('/')) {
|
|
||||||
/*
|
|
||||||
If argv0 starts with a slash, it is already an absolute
|
|
||||||
file path.
|
|
||||||
*/
|
|
||||||
absPath = argv0;
|
|
||||||
} else if (argv0.contains(QLatin1Char('/'))) {
|
|
||||||
/*
|
|
||||||
If argv0 contains one or more slashes, it is a file path
|
|
||||||
relative to the current directory.
|
|
||||||
*/
|
|
||||||
absPath = QDir::current().absoluteFilePath(argv0);
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
Otherwise, the file path has to be determined using the
|
|
||||||
PATH environment variable.
|
|
||||||
*/
|
|
||||||
QByteArray pEnv = qgetenv("PATH");
|
|
||||||
QDir currentDir = QDir::current();
|
|
||||||
QStringList paths = QString::fromLocal8Bit(pEnv.constData()).split(QLatin1String(":"));
|
|
||||||
for (QStringList::const_iterator p = paths.constBegin(); p != paths.constEnd(); ++p) {
|
|
||||||
if ((*p).isEmpty())
|
|
||||||
continue;
|
|
||||||
QString candidate = currentDir.absoluteFilePath(*p + QLatin1Char('/') + argv0);
|
|
||||||
QFileInfo candidate_fi(candidate);
|
|
||||||
if (candidate_fi.exists() && !candidate_fi.isDir()) {
|
|
||||||
absPath = candidate;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
absPath = QDir::cleanPath(absPath);
|
|
||||||
|
|
||||||
QFileInfo fi(absPath);
|
|
||||||
ret = fi.exists() ? fi.canonicalFilePath() : QString();
|
|
||||||
#endif
|
|
||||||
if(!ret.isEmpty())
|
|
||||||
ret = QDir(QFileInfo(ret).absolutePath()).filePath("qt.conf");
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user