summaryrefslogtreecommitdiffstats
path: root/qmake/generators
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-05-12 07:31:50 +0200
committerLiang Qi <liang.qi@qt.io>2016-05-12 08:33:08 +0200
commit990969655c5fb4d03682e96df9b12101f5ee9815 (patch)
treeb8fb5c50285105c8bc5a938fb50f93ff9f24889d /qmake/generators
parenta213011a53f12f101d08a04afc8fdacd2d54a232 (diff)
parente64b2234e829cc47872225debcf80d6c06db18f0 (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: config_help.txt configure src/corelib/io/qprocess_wince.cpp src/plugins/platforms/windows/qwindowstheme.cpp src/plugins/platforms/xcb/qxcbbackingstore.cpp tests/auto/corelib/tools/qtimezone/BLACKLIST tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp Change-Id: I26644d1cb3b78412c8ff285e2a55bea1bd641c01
Diffstat (limited to 'qmake/generators')
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp12
-rw-r--r--qmake/generators/makefile.cpp14
-rw-r--r--qmake/generators/makefiledeps.cpp79
-rw-r--r--qmake/generators/metamakefile.cpp6
4 files changed, 67 insertions, 44 deletions
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index 35df36cb55..147c03a92d 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -266,7 +266,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n"
- << "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
+ << "\t\t\t" << writeSettings("sourceTree", "<group>") << ";\n"
<< "\t\t};\n";
}
@@ -694,7 +694,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n"
- << "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
+ << "\t\t\t" << writeSettings("sourceTree", "<group>") << ";\n"
<< "\t\t};\n";
}
@@ -1032,7 +1032,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_LIBRARIES"), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("name", grp) << ";\n"
- << "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
+ << "\t\t\t" << writeSettings("sourceTree", "<group>") << ";\n"
<< "\t\t};\n";
}
}
@@ -1146,7 +1146,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("children", bundle_file_refs, SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("name", "Bundle Data") << ";\n"
- << "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
+ << "\t\t\t" << writeSettings("sourceTree", "<group>") << ";\n"
<< "\t\t};\n";
}
@@ -1231,7 +1231,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_PRODUCTS"), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("name", "Products") << ";\n"
- << "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
+ << "\t\t\t" << writeSettings("sourceTree", "<group>") << ";\n"
<< "\t\t};\n";
}
@@ -1241,7 +1241,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_GROUPS"), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n"
- << "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
+ << "\t\t\t" << writeSettings("sourceTree", "<group>") << ";\n"
<< "\t\t};\n";
{
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index dffc3d6acb..12004c62c3 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1612,7 +1612,7 @@ MakefileGenerator::replaceExtraCompilerVariables(
const ProKey funcname = var.mid(19).toKey();
val += project->expand(funcname, QList<ProStringList>() << ProStringList(in));
} else if(var == QLatin1String("QMAKE_FILE_BASE") || var == QLatin1String("QMAKE_FILE_IN_BASE")) {
- //filePath = true;
+ filePath = true;
for(int i = 0; i < in.size(); ++i) {
QFileInfo fi(fileInfo(Option::normalizePath(in.at(i))));
QString base = fi.completeBaseName();
@@ -1620,7 +1620,7 @@ MakefileGenerator::replaceExtraCompilerVariables(
base = fi.fileName();
val += base;
}
- } else if(var == QLatin1String("QMAKE_FILE_EXT")) {
+ } else if (var == QLatin1String("QMAKE_FILE_EXT") || var == QLatin1String("QMAKE_FILE_IN_EXT")) {
filePath = true;
for(int i = 0; i < in.size(); ++i) {
QFileInfo fi(fileInfo(Option::normalizePath(in.at(i))));
@@ -1633,6 +1633,10 @@ MakefileGenerator::replaceExtraCompilerVariables(
ext = fi.fileName().remove(0, baseLen);
val += ext;
}
+ } else if (var == QLatin1String("QMAKE_FILE_IN_NAME")) {
+ filePath = true;
+ for (int i = 0; i < in.size(); ++i)
+ val += fileInfo(Option::normalizePath(in.at(i))).fileName();
} else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) {
filePath = true;
for(int i = 0; i < in.size(); ++i)
@@ -1649,12 +1653,16 @@ MakefileGenerator::replaceExtraCompilerVariables(
filePath = true;
const ProKey funcname = var.mid(20).toKey();
val += project->expand(funcname, QList<ProStringList>() << ProStringList(out));
+ } else if (var == QLatin1String("QMAKE_FILE_OUT_PATH")) {
+ filePath = true;
+ for (int i = 0; i < out.size(); ++i)
+ val += fileInfo(Option::normalizePath(out.at(i))).path();
} else if(var == QLatin1String("QMAKE_FILE_OUT")) {
filePath = true;
for(int i = 0; i < out.size(); ++i)
val += fileInfo(Option::normalizePath(out.at(i))).filePath();
} else if(var == QLatin1String("QMAKE_FILE_OUT_BASE")) {
- //filePath = true;
+ filePath = true;
for(int i = 0; i < out.size(); ++i) {
QFileInfo fi(fileInfo(Option::normalizePath(out.at(i))));
QString base = fi.completeBaseName();
diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp
index 82110f24cf..57cb0ea854 100644
--- a/qmake/generators/makefiledeps.cpp
+++ b/qmake/generators/makefiledeps.cpp
@@ -405,9 +405,9 @@ static bool matchWhileUnsplitting(const char *buffer, int buffer_len, int start,
int *matchlen, int *lines)
{
int x = start;
- for (int n = 0; n < needle_len && x < buffer_len;
+ for (int n = 0; n < needle_len;
n++, x = skipEscapedLineEnds(buffer, buffer_len, x + 1, lines)) {
- if (buffer[x] != needle[n])
+ if (x >= buffer_len || buffer[x] != needle[n])
return false;
}
// That also skipped any remaining BSNLs immediately after the match.
@@ -550,7 +550,14 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
InCode // after directive, parsing non-#include directive or in actual code
} cpp_state = AtStart;
- for(int x = 0; x < buffer_len; ++x) {
+ int x = 0;
+ if (buffer_len >= 3) {
+ const unsigned char *p = (unsigned char *)buffer;
+ // skip UTF-8 BOM, if present
+ if (p[0] == 0xEF && p[1] == 0xBB && p[2] == 0xBF)
+ x += 3;
+ }
+ for (; x < buffer_len; ++x) {
bool try_local = true;
char *inc = 0;
if(file->type == QMakeSourceFileInfo::TYPE_UI) {
@@ -561,24 +568,29 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
++x;
if (buffer_len >= x + 12 && !strncmp(buffer + x, "includehint", 11) &&
(buffer[x + 11] == ' ' || buffer[x + 11] == '>')) {
- for (x += 11; buffer[x] != '>'; ++x) {} // skip
+ for (x += 11; x < buffer_len && buffer[x] != '>'; ++x) {} // skip
int inc_len = 0;
- for (x += 1 ; buffer[x + inc_len] != '<'; ++inc_len) {} // skip
- buffer[x + inc_len] = '\0';
- inc = buffer + x;
+ for (++x; x + inc_len < buffer_len && buffer[x + inc_len] != '<'; ++inc_len) {} // skip
+ if (x + inc_len < buffer_len) {
+ buffer[x + inc_len] = '\0';
+ inc = buffer + x;
+ }
} else if (buffer_len >= x + 13 && !strncmp(buffer + x, "customwidget", 12) &&
(buffer[x + 12] == ' ' || buffer[x + 12] == '>')) {
- for (x += 13; buffer[x] != '>'; ++x) {} // skip up to >
+ for (x += 13; x < buffer_len && buffer[x] != '>'; ++x) {} // skip up to >
while(x < buffer_len) {
- for (x++; buffer[x] != '<'; ++x) {} // skip up to <
+ while (++x < buffer_len && buffer[x] != '<') {} // skip up to <
x++;
if(buffer_len >= x + 7 && !strncmp(buffer+x, "header", 6) &&
(buffer[x + 6] == ' ' || buffer[x + 6] == '>')) {
- for (x += 7; buffer[x] != '>'; ++x) {} // skip up to >
+ for (x += 7; x < buffer_len && buffer[x] != '>'; ++x) {} // skip up to >
int inc_len = 0;
- for (x += 1 ; buffer[x + inc_len] != '<'; ++inc_len) {} // skip
- buffer[x + inc_len] = '\0';
- inc = buffer + x;
+ for (++x; x + inc_len < buffer_len && buffer[x + inc_len] != '<';
+ ++inc_len) {} // skip
+ if (x + inc_len < buffer_len) {
+ buffer[x + inc_len] = '\0';
+ inc = buffer + x;
+ }
break;
} else if(buffer_len >= x + 14 && !strncmp(buffer+x, "/customwidget", 13) &&
(buffer[x + 13] == ' ' || buffer[x + 13] == '>')) {
@@ -588,20 +600,18 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
}
} else if(buffer_len >= x + 8 && !strncmp(buffer + x, "include", 7) &&
(buffer[x + 7] == ' ' || buffer[x + 7] == '>')) {
- for (x += 8; buffer[x] != '>'; ++x) {
+ for (x += 8; x < buffer_len && buffer[x] != '>'; ++x) {
if (buffer_len >= x + 9 && buffer[x] == 'i' &&
!strncmp(buffer + x, "impldecl", 8)) {
- for (x += 8; buffer[x] != '='; ++x) {} // skip
- if (buffer[x] != '=')
- continue;
- for (++x; buffer[x] == '\t' || buffer[x] == ' '; ++x) {} // skip
+ for (x += 8; x < buffer_len && buffer[x] != '='; ++x) {} // skip
+ while (++x < buffer_len && (buffer[x] == '\t' || buffer[x] == ' ')) {} // skip
char quote = 0;
- if (buffer[x] == '\'' || buffer[x] == '"') {
+ if (x < buffer_len && (buffer[x] == '\'' || buffer[x] == '"')) {
quote = buffer[x];
++x;
}
int val_len;
- for(val_len = 0; true; ++val_len) {
+ for (val_len = 0; x + val_len < buffer_len; ++val_len) {
if(quote) {
if (buffer[x + val_len] == quote)
break;
@@ -611,16 +621,22 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
}
}
//? char saved = buffer[x + val_len];
- buffer[x + val_len] = '\0';
- if(!strcmp(buffer+x, "in implementation")) {
- //### do this
+ if (x + val_len < buffer_len) {
+ buffer[x + val_len] = '\0';
+ if (!strcmp(buffer + x, "in implementation")) {
+ //### do this
+ }
}
}
}
int inc_len = 0;
- for (x += 1 ; buffer[x + inc_len] != '<'; ++inc_len) {} // skip
- buffer[x + inc_len] = '\0';
- inc = buffer + x;
+ for (++x; x + inc_len < buffer_len && buffer[x + inc_len] != '<';
+ ++inc_len) {} // skip
+
+ if (x + inc_len < buffer_len) {
+ buffer[x + inc_len] = '\0';
+ inc = buffer + x;
+ }
}
}
//read past new line now..
@@ -634,14 +650,16 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
#define SKIP_BSNL(pos) skipEscapedLineEnds(buffer, buffer_len, (pos), &line_count)
// Seek code or directive, skipping comments and space:
- for(; x < buffer_len; ++x) {
- x = SKIP_BSNL(x);
+ for (; (x = SKIP_BSNL(x)) < buffer_len; ++x) {
if (buffer[x] == ' ' || buffer[x] == '\t') {
// keep going
} else if (buffer[x] == '/') {
int extralines = 0;
int y = skipEscapedLineEnds(buffer, buffer_len, x + 1, &extralines);
- if (buffer[y] == '/') { // C++-style comment
+ if (y >= buffer_len) {
+ x = y;
+ break;
+ } else if (buffer[y] == '/') { // C++-style comment
line_count += extralines;
x = SKIP_BSNL(y + 1);
while (x < buffer_len && !qmake_endOfLine(buffer[x]))
@@ -652,8 +670,7 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file)
} else if (buffer[y] == '*') { // C-style comment
line_count += extralines;
x = y;
- while (++x < buffer_len) {
- x = SKIP_BSNL(x);
+ while ((x = SKIP_BSNL(++x)) < buffer_len) {
if (buffer[x] == '*') {
extralines = 0;
y = skipEscapedLineEnds(buffer, buffer_len,
diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp
index b816fc21f8..874b4286bc 100644
--- a/qmake/generators/metamakefile.cpp
+++ b/qmake/generators/metamakefile.cpp
@@ -225,10 +225,8 @@ MakefileGenerator
build_proj->setExtraVars(basevars);
build_proj->setExtraConfigs(basecfgs);
- build_proj->read(project->projectFile());
-
- //done
- return createMakefileGenerator(build_proj);
+ if (build_proj->read(project->projectFile()))
+ return createMakefileGenerator(build_proj);
}
return 0;
}