12using namespace QMakeInternal;
19 QMakeEvaluator::initStatics();
40 const QStringList &vals = values(variable);
51 ret.reserve(values.size());
52 for (
const ProString &str : values)
53 ret << d->m_option->expandEnvVars(str.toQString());
62 ret.reserve(values.size());
63 for (
const ProString &str : values)
64 if (str.sourceFile() == pro->id())
65 ret << d->m_option->expandEnvVars(str.toQString());
69QString
ProFileEvaluator::sysrootify(
const QString &path,
const QString &baseDir)
const
73 Qt::CaseSensitivity cs = Qt::CaseInsensitive;
75 Qt::CaseSensitivity cs = Qt::CaseSensitive;
77 const bool isHostSystemPath =
78 option->sysroot.isEmpty() || path.startsWith(option->sysroot, cs)
79 || path.startsWith(baseDir, cs) || path.startsWith(d->m_outputDir, cs);
81 return isHostSystemPath ? path : option->sysroot + path;
85 const QString &variable,
const QString &baseDirectory)
const
88 for (
const QString &el : values(variable)) {
89 QString absEl = IoUtils::isAbsolutePath(el)
90 ? sysrootify(el, baseDirectory) : IoUtils::resolvePath(baseDirectory, el);
91 if (IoUtils::fileType(absEl) == IoUtils::FileIsDir)
92 result << QDir::cleanPath(absEl);
98 const QString &variable,
const QString &baseDirectory,
const QStringList &searchDirs,
102 const auto vals = pro ? values(variable, pro) : values(variable);
103 for (
const QString &el : vals) {
105 if (IoUtils::isAbsolutePath(el)) {
106 const QString elWithSysroot = QDir::cleanPath(sysrootify(el, baseDirectory));
107 if (d->m_vfs->exists(elWithSysroot, QMakeVfs::VfsCumulative)) {
108 result << elWithSysroot;
111 absEl = elWithSysroot;
113 for (
const QString &dir : searchDirs) {
114 QString fn = QDir::cleanPath(dir + u'/' + el);
115 if (d->m_vfs->exists(fn, QMakeVfs::VfsCumulative)) {
120 if (baseDirectory.isEmpty())
122 absEl = QDir::cleanPath(baseDirectory + u'/' + el);
125 int nameOff = absEl.lastIndexOf(u'/');
126 QString absDir = d->m_tmp1.setRawData(absEl.constData(), nameOff);
129 if (IoUtils::fileType(absDir) == IoUtils::FileIsDir) {
130 QString wildcard = d->m_tmp2.setRawData(absEl.constData() + nameOff + 1,
131 absEl.size() - nameOff - 1);
132 if (wildcard.contains(u'*') || wildcard.contains(u'?')) {
134 for (
const QString &fn : theDir.entryList(QStringList(wildcard)))
135 if (fn !=
"."_L1 && fn !=
".."_L1)
136 result << absDir + u'/' + fn;
148 if (templ.size() >= 1) {
149 const QString &t = templ.at(0).toQString();
150 if (!t.compare(
"app"_L1, Qt::CaseInsensitive))
152 if (!t.compare(
"lib"_L1, Qt::CaseInsensitive))
154 if (!t.compare(
"script"_L1, Qt::CaseInsensitive))
156 if (!t.compare(
"aux"_L1, Qt::CaseInsensitive))
158 if (!t.compare(
"subdirs"_L1, Qt::CaseInsensitive))
166 d->m_qmakespec = specDir;
185 return d->m_qmakespec;
188#ifdef PROEVALUATOR_CUMULATIVE
189void ProFileEvaluator::setCumulative(
bool on)
191 d->m_cumulative = on;
198 for (
auto it = extraVars.cbegin(), end = extraVars.cend() ; it != end; ++it)
210 d->m_outputDir = dir;
ProFileEvaluator::TemplateType templateType() const
ProFileEvaluator(ProFileGlobals *option, QMakeParser *parser, QMakeVfs *vfs, QMakeHandler *handler)
void setExtraConfigs(const QStringList &extraConfigs)
void setExtraVars(const QHash< QString, QStringList > &extraVars)
QStringList values(const QString &variableName, const ProFile *pro) const
QString value(const QString &variableName) const
bool contains(const QString &variableName) const
QString resolvedMkSpec() const
bool accept(ProFile *pro, QMakeEvaluator::LoadFlags flags=QMakeEvaluator::LoadAll)
QStringList absoluteFileValues(const QString &variable, const QString &baseDirectory, const QStringList &searchDirs, const ProFile *pro) const
void setOutputDir(const QString &dir)
QStringList absolutePathValues(const QString &variable, const QString &baseDirectory) const
QStringList values(const QString &variableName) const
QString propertyValue(const QString &val) const
bool loadNamedSpec(const QString &specDir, bool hostSpec)
ProKey(const QString &str)
PROITEM_EXPLICIT ProKey(const char *str)
QString toQString() const
void setExtraConfigs(const ProStringList &extraConfigs)
ProStringList values(const ProKey &variableName) const
void setExtraVars(const ProValueMap &extraVars)
ProValueMapStack m_valuemapStack
ProString propertyValue(const ProKey &name) const
QMap< ProKey, ProStringList > ProValueMap