summaryrefslogtreecommitdiff
path: root/src/shared/proparser/qmakeevaluator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/proparser/qmakeevaluator.cpp')
-rw-r--r--src/shared/proparser/qmakeevaluator.cpp47
1 files changed, 28 insertions, 19 deletions
diff --git a/src/shared/proparser/qmakeevaluator.cpp b/src/shared/proparser/qmakeevaluator.cpp
index dca187944d..ced40f106d 100644
--- a/src/shared/proparser/qmakeevaluator.cpp
+++ b/src/shared/proparser/qmakeevaluator.cpp
@@ -923,7 +923,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProVariable(
else if (varName == statics.strQMAKESPEC) {
if (!values(varName).isEmpty()) {
QString spec = values(varName).constFirst().toQString();
- if (IoUtils::isAbsolutePath(spec)) {
+ if (IoUtils::isAbsolutePath(deviceRoot(), spec)) {
m_qmakespec = spec;
m_qmakespecName = IoUtils::fileName(m_qmakespec).toString();
m_featureRoots = 0;
@@ -1084,6 +1084,7 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
{
QMakeVfs::VfsFlags flags = (m_cumulative ? QMakeVfs::VfsCumulative : QMakeVfs::VfsExact);
QString superdir;
+ const QString device = deviceRoot();
if (m_option->do_cache) {
QString conffile;
QString cachefile = m_option->cachefile;
@@ -1093,7 +1094,7 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
superdir = m_outputDir;
forever {
QString superfile = superdir + QLatin1String("/.qmake.super");
- if (m_vfs->exists(superfile, flags)) {
+ if (m_vfs->exists(device, superfile, flags)) {
m_superfile = QDir::cleanPath(superfile);
break;
}
@@ -1108,10 +1109,10 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
QString dir = m_outputDir;
forever {
conffile = sdir + QLatin1String("/.qmake.conf");
- if (!m_vfs->exists(conffile, flags))
+ if (!m_vfs->exists(device, conffile, flags))
conffile.clear();
cachefile = dir + QLatin1String("/.qmake.cache");
- if (!m_vfs->exists(cachefile, flags))
+ if (!m_vfs->exists(device, cachefile, flags))
cachefile.clear();
if (!conffile.isEmpty() || !cachefile.isEmpty()) {
if (dir != sdir)
@@ -1139,7 +1140,7 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
QString dir = m_outputDir;
forever {
QString stashfile = dir + QLatin1String("/.qmake.stash");
- if (dir == (!superdir.isEmpty() ? superdir : m_buildRoot) || m_vfs->exists(stashfile, flags)) {
+ if (dir == (!superdir.isEmpty() ? superdir : m_buildRoot) || m_vfs->exists(deviceRoot(), stashfile, flags)) {
m_stashfile = QDir::cleanPath(stashfile);
break;
}
@@ -1177,7 +1178,7 @@ bool QMakeEvaluator::loadSpecInternal()
const ProString &orig_spec = first(ProKey("QMAKESPEC_ORIGINAL"));
if (!orig_spec.isEmpty()) {
QString spec = orig_spec.toQString();
- if (IoUtils::isAbsolutePath(spec))
+ if (IoUtils::isAbsolutePath(deviceRoot(), spec))
m_qmakespec = spec;
}
# endif
@@ -1230,10 +1231,10 @@ bool QMakeEvaluator::loadSpec()
if (qmakespec.isEmpty())
qmakespec = m_hostBuild ? QLatin1String("default-host") : QLatin1String("default");
#endif
- if (IoUtils::isRelativePath(qmakespec)) {
+ if (IoUtils::isRelativePath(deviceRoot(), qmakespec)) {
for (const QString &root : std::as_const(m_mkspecPaths)) {
QString mkspec = root + QLatin1Char('/') + qmakespec;
- if (IoUtils::exists(mkspec)) {
+ if (IoUtils::exists(deviceRoot(), mkspec)) {
qmakespec = mkspec;
goto cool;
}
@@ -1265,7 +1266,7 @@ bool QMakeEvaluator::loadSpec()
return false;
}
QMakeVfs::VfsFlags flags = (m_cumulative ? QMakeVfs::VfsCumulative : QMakeVfs::VfsExact);
- if (!m_stashfile.isEmpty() && m_vfs->exists(m_stashfile, flags)) {
+ if (!m_stashfile.isEmpty() && m_vfs->exists(deviceRoot(), m_stashfile, flags)) {
valuesRef(ProKey("_QMAKE_STASH_")) << ProString(m_stashfile);
if (evaluateFile(
m_stashfile, QMakeHandler::EvalConfigFile, LoadProOnly) != ReturnTrue)
@@ -1288,7 +1289,7 @@ void QMakeEvaluator::setupProject()
void QMakeEvaluator::evaluateCommand(const QString &cmds, const QString &where)
{
if (!cmds.isEmpty()) {
- ProFile *pro = m_parser->parsedProBlock(QStringView(cmds), 0, where, -1);
+ ProFile *pro = m_parser->parsedProBlock(deviceRoot(), QStringView(cmds), 0, where, -1);
if (pro->isOk()) {
m_locationStack.push(m_current);
visitProBlock(pro, pro->tokPtr());
@@ -1462,13 +1463,17 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
return vr;
}
+const QString &QMakeEvaluator::deviceRoot() const
+{
+ return m_option->device_root;
+}
void QMakeEvaluator::updateMkspecPaths()
{
QStringList ret;
const QString concat = QLatin1String("/mkspecs");
- const auto paths = m_option->getPathListEnv(QLatin1String("QMAKEPATH"));
+ const QStringList paths = m_option->getPathListEnv(QLatin1String("QMAKEPATH"));
for (const QString &it : paths)
ret << it + concat;
@@ -1480,9 +1485,8 @@ void QMakeEvaluator::updateMkspecPaths()
if (!m_sourceRoot.isEmpty())
ret << m_sourceRoot + concat;
- const QString root = m_option->deviceRoot();
- ret << root + m_option->propertyValue(ProKey("QT_HOST_DATA/get")) + concat;
- ret << root + m_option->propertyValue(ProKey("QT_HOST_DATA/src")) + concat;
+ ret << m_option->propertyValue(ProKey("QT_HOST_DATA/get")) + concat;
+ ret << m_option->propertyValue(ProKey("QT_HOST_DATA/src")) + concat;
ret.removeDuplicates();
m_mkspecPaths = ret;
@@ -1526,7 +1530,7 @@ void QMakeEvaluator::updateFeaturePaths()
while (!specdir.isRoot() && specdir.cdUp()) {
const QString specpath = specdir.path();
if (specpath.endsWith(mkspecs_concat)) {
- if (IoUtils::exists(specpath + features_concat))
+ if (IoUtils::exists(deviceRoot(), specpath + features_concat))
feature_bases << specpath;
break;
}
@@ -1551,7 +1555,7 @@ void QMakeEvaluator::updateFeaturePaths()
QStringList ret;
for (const QString &root : std::as_const(feature_roots))
- if (IoUtils::exists(root))
+ if (IoUtils::exists(deviceRoot(), root))
ret << root;
m_featureRoots = new QMakeFeatureRoots(ret);
}
@@ -1581,6 +1585,11 @@ int QMakeEvaluator::currentFileId() const
return 0;
}
+QString QMakeEvaluator::resolvePath(const QString &fileName) const
+{
+ return QMakeInternal::IoUtils::resolvePath(deviceRoot(), currentDirectory(), fileName);
+}
+
QString QMakeEvaluator::currentFileName() const
{
ProFile *pro = currentProFile();
@@ -1794,7 +1803,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConditional(
QStringView cond, const QString &where, int line)
{
VisitReturn ret = ReturnFalse;
- ProFile *pro = m_parser->parsedProBlock(cond, 0, where, line, QMakeParser::TestGrammar);
+ ProFile *pro = m_parser->parsedProBlock(deviceRoot(), cond, 0, where, line, QMakeParser::TestGrammar);
if (pro->isOk()) {
m_locationStack.push(m_current);
ret = visitProBlock(pro, pro->tokPtr());
@@ -1910,7 +1919,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFile(
QMakeParser::ParseFlags pflags = QMakeParser::ParseUseCache;
if (!(flags & LoadSilent))
pflags |= QMakeParser::ParseReportMissing;
- if (ProFile *pro = m_parser->parsedProFile(fileName, pflags)) {
+ if (ProFile *pro = m_parser->parsedProFile(deviceRoot(), fileName, pflags)) {
m_locationStack.push(m_current);
VisitReturn ok = visitProFile(pro, type, flags);
m_current = m_locationStack.pop();
@@ -1984,7 +1993,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFeatureFile(
}
for (int root = start_root; root < paths.size(); ++root) {
QString fname = paths.at(root) + fn;
- if (IoUtils::exists(fname)) {
+ if (IoUtils::exists(deviceRoot(), fname)) {
fn = fname;
goto cool;
}