Search the include paths for json files containing plugin info

This fixes shadow builds with autogenerated .json files as
e.g. used by Qt Creator.

Change-Id: Ibb783b05d97d996100da4b0dca859fa3f310dc83
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
This commit is contained in:
Lars Knoll 2012-07-20 12:39:53 +02:00 committed by Qt by Nokia
parent be4f8393e4
commit a806c6a8b2
4 changed files with 22 additions and 8 deletions

View File

@ -394,6 +394,7 @@ int runMoc(int _argc, char **_argv)
}
moc.currentFilenames.push(filename);
moc.includes = pp.includes;
// 1. preprocess
moc.symbols = pp.preprocessed(moc.filename, in);

View File

@ -1103,6 +1103,18 @@ void Moc::parsePluginData(ClassDef *def)
next(STRING_LITERAL);
QByteArray metaDataFile = unquotedLexem();
QFileInfo fi(QFileInfo(QString::fromLocal8Bit(currentFilenames.top().constData())).dir(), QString::fromLocal8Bit(metaDataFile.constData()));
for (int j = 0; j < includes.size() && !fi.exists(); ++j) {
const IncludePath &p = includes.at(j);
if (p.isFrameworkPath)
continue;
fi.setFile(QString::fromLocal8Bit(p.path.constData()), QString::fromLocal8Bit(metaDataFile.constData()));
// try again, maybe there's a file later in the include paths with the same name
if (fi.isDir()) {
fi = QFileInfo();
continue;
}
}
if (!fi.exists()) {
QByteArray msg;
msg += "Plugin Metadata file ";

View File

@ -56,6 +56,15 @@ public:
bool displayWarnings;
bool displayNotes;
struct IncludePath
{
inline explicit IncludePath(const QByteArray &_path)
: path(_path), isFrameworkPath(false) {}
QByteArray path;
bool isFrameworkPath;
};
QList<IncludePath> includes;
QStack<QByteArray> currentFilenames;
inline bool hasNext() const { return (index < symbols.size()); }

View File

@ -69,14 +69,6 @@ class Preprocessor : public Parser
public:
Preprocessor(){}
static bool preprocessOnly;
struct IncludePath
{
inline explicit IncludePath(const QByteArray &_path)
: path(_path), isFrameworkPath(false) {}
QByteArray path;
bool isFrameworkPath;
};
QList<IncludePath> includes;
QList<QByteArray> frameworks;
QSet<QByteArray> preprocessedIncludes;
Macros macros;