Implement QMAKE_SUBSTITUTES.config = verbatim.
Change-Id: Ie0b333fa7fae2283e99e42f9cd7bab4e84991f40 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
This commit is contained in:
parent
8b7a9b4898
commit
7a7d82ffd9
@ -498,62 +498,74 @@ MakefileGenerator::init()
|
||||
}
|
||||
outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir);
|
||||
}
|
||||
|
||||
QString confign = subs.at(i) + ".config";
|
||||
bool verbatim = false;
|
||||
if (v.contains(confign))
|
||||
verbatim = v[confign].contains(QLatin1String("verbatim"));
|
||||
|
||||
QFile in(inn);
|
||||
if(in.open(QFile::ReadOnly)) {
|
||||
QString contents;
|
||||
QStack<int> state;
|
||||
enum { IN_CONDITION, MET_CONDITION, PENDING_CONDITION };
|
||||
for(int count = 1; !in.atEnd(); ++count) {
|
||||
QString line = QString::fromUtf8(in.readLine());
|
||||
if(line.startsWith("!!IF ")) {
|
||||
if(state.isEmpty() || state.top() == IN_CONDITION) {
|
||||
QString test = line.mid(5, line.length()-(5+1));
|
||||
if(project->test(test))
|
||||
state.push(IN_CONDITION);
|
||||
else
|
||||
state.push(PENDING_CONDITION);
|
||||
} else {
|
||||
state.push(MET_CONDITION);
|
||||
}
|
||||
} else if(line.startsWith("!!ELIF ")) {
|
||||
if(state.isEmpty()) {
|
||||
warn_msg(WarnLogic, "(%s:%d): Unexpected else condition",
|
||||
in.fileName().toLatin1().constData(), count);
|
||||
} else if(state.top() == PENDING_CONDITION) {
|
||||
QString test = line.mid(7, line.length()-(7+1));
|
||||
if(project->test(test)) {
|
||||
if (in.open(QFile::ReadOnly)) {
|
||||
QByteArray contentBytes;
|
||||
if (verbatim) {
|
||||
contentBytes = in.readAll();
|
||||
} else {
|
||||
QString contents;
|
||||
QStack<int> state;
|
||||
enum { IN_CONDITION, MET_CONDITION, PENDING_CONDITION };
|
||||
for (int count = 1; !in.atEnd(); ++count) {
|
||||
QString line = QString::fromUtf8(in.readLine());
|
||||
if (line.startsWith("!!IF ")) {
|
||||
if (state.isEmpty() || state.top() == IN_CONDITION) {
|
||||
QString test = line.mid(5, line.length()-(5+1));
|
||||
if (project->test(test))
|
||||
state.push(IN_CONDITION);
|
||||
else
|
||||
state.push(PENDING_CONDITION);
|
||||
} else {
|
||||
state.push(MET_CONDITION);
|
||||
}
|
||||
} else if (line.startsWith("!!ELIF ")) {
|
||||
if (state.isEmpty()) {
|
||||
warn_msg(WarnLogic, "(%s:%d): Unexpected else condition",
|
||||
in.fileName().toLatin1().constData(), count);
|
||||
} else if (state.top() == PENDING_CONDITION) {
|
||||
QString test = line.mid(7, line.length()-(7+1));
|
||||
if (project->test(test)) {
|
||||
state.pop();
|
||||
state.push(IN_CONDITION);
|
||||
}
|
||||
} else if (state.top() == IN_CONDITION) {
|
||||
state.pop();
|
||||
state.push(MET_CONDITION);
|
||||
}
|
||||
} else if (line.startsWith("!!ELSE")) {
|
||||
if (state.isEmpty()) {
|
||||
warn_msg(WarnLogic, "(%s:%d): Unexpected else condition",
|
||||
in.fileName().toLatin1().constData(), count);
|
||||
} else if (state.top() == PENDING_CONDITION) {
|
||||
state.pop();
|
||||
state.push(IN_CONDITION);
|
||||
} else if (state.top() == IN_CONDITION) {
|
||||
state.pop();
|
||||
state.push(MET_CONDITION);
|
||||
}
|
||||
} else if(state.top() == IN_CONDITION) {
|
||||
state.pop();
|
||||
state.push(MET_CONDITION);
|
||||
} else if (line.startsWith("!!ENDIF")) {
|
||||
if (state.isEmpty())
|
||||
warn_msg(WarnLogic, "(%s:%d): Unexpected endif",
|
||||
in.fileName().toLatin1().constData(), count);
|
||||
else
|
||||
state.pop();
|
||||
} else if (state.isEmpty() || state.top() == IN_CONDITION) {
|
||||
contents += project->expand(line, in.fileName(), count);
|
||||
}
|
||||
} else if(line.startsWith("!!ELSE")) {
|
||||
if(state.isEmpty()) {
|
||||
warn_msg(WarnLogic, "(%s:%d): Unexpected else condition",
|
||||
in.fileName().toLatin1().constData(), count);
|
||||
} else if(state.top() == PENDING_CONDITION) {
|
||||
state.pop();
|
||||
state.push(IN_CONDITION);
|
||||
} else if(state.top() == IN_CONDITION) {
|
||||
state.pop();
|
||||
state.push(MET_CONDITION);
|
||||
}
|
||||
} else if(line.startsWith("!!ENDIF")) {
|
||||
if(state.isEmpty())
|
||||
warn_msg(WarnLogic, "(%s:%d): Unexpected endif",
|
||||
in.fileName().toLatin1().constData(), count);
|
||||
else
|
||||
state.pop();
|
||||
} else if(state.isEmpty() || state.top() == IN_CONDITION) {
|
||||
contents += project->expand(line, in.fileName(), count);
|
||||
}
|
||||
contentBytes = contents.toUtf8();
|
||||
}
|
||||
QFile out(outn);
|
||||
if(out.exists() && out.open(QFile::ReadOnly)) {
|
||||
QString old = QString::fromUtf8(out.readAll());
|
||||
if(contents == old) {
|
||||
if (out.exists() && out.open(QFile::ReadOnly)) {
|
||||
QByteArray old = out.readAll();
|
||||
if (contentBytes == old) {
|
||||
v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName());
|
||||
continue;
|
||||
}
|
||||
@ -567,7 +579,7 @@ MakefileGenerator::init()
|
||||
mkdir(QFileInfo(out).absolutePath());
|
||||
if(out.open(QFile::WriteOnly)) {
|
||||
v["QMAKE_INTERNAL_INCLUDED_FILES"].append(in.fileName());
|
||||
out.write(contents.toUtf8());
|
||||
out.write(contentBytes);
|
||||
} else {
|
||||
warn_msg(WarnLogic, "Cannot open substitute for output '%s'",
|
||||
out.fileName().toLatin1().constData());
|
||||
|
3
tests/auto/tools/qmake/testdata/substitutes/copy.txt
vendored
Normal file
3
tests/auto/tools/qmake/testdata/substitutes/copy.txt
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
This file is $processed verbatim. It's not going to "warn about
|
||||
|
||||
anything that is usually substituted in qmake such as $${PWD}.
|
@ -1,5 +1,8 @@
|
||||
QMAKE_SUBSTITUTES += test.in sub/test2.in indirect
|
||||
QMAKE_SUBSTITUTES += test.in sub/test2.in indirect copy
|
||||
|
||||
indirect.input = $$PWD/test3.txt
|
||||
indirect.output = $$OUT_PWD/sub/indirect_test.txt
|
||||
|
||||
copy.input = $$PWD/copy.txt
|
||||
copy.output = $$OUT_PWD/copy_test.txt
|
||||
copy.config = verbatim
|
||||
|
@ -510,6 +510,14 @@ void tst_qmake::substitutes()
|
||||
QVERIFY( test_compiler.exists( buildDir, "test", Plain, "" ));
|
||||
QVERIFY( test_compiler.exists( buildDir, "sub/test2", Plain, "" ));
|
||||
QVERIFY( test_compiler.exists( buildDir, "sub/indirect_test.txt", Plain, "" ));
|
||||
|
||||
QFile copySource(workDir + "/copy.txt");
|
||||
QFile copyDestination(buildDir + "/copy_test.txt");
|
||||
|
||||
QVERIFY(copySource.open(QFile::ReadOnly));
|
||||
QVERIFY(copyDestination.open(QFile::ReadOnly));
|
||||
QCOMPARE(copySource.readAll(), copyDestination.readAll());
|
||||
|
||||
QVERIFY( test_compiler.makeDistClean( buildDir ));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user