summaryrefslogtreecommitdiffstats
path: root/qmake/generators/makefile.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-11-20 15:14:52 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-04 17:18:46 +0100
commit53f48a4ba2a527735fd67968a211052a8eda00dc (patch)
treef7d8dbe18e03204bb698e11b9b4469acd8fa1024 /qmake/generators/makefile.cpp
parent39baff5847e23cbfdc86055b98dcced55342908a (diff)
properly replace windows paths in installed meta files
it's bogus in the first place that the meta files contain windows paths, but straightening that out is a prohibitive effort. so instead generate additional s/// commands which take care of these paths. fwiw, the generated s///i command is a gnu extension. but as we are doing this on windows only where we are using our built-in sed command anyway, this should be fine. Task-number: QTBUG-33794 Change-Id: I46fcc598db12816ee56b5371ab184f6277eb3a22 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'qmake/generators/makefile.cpp')
-rw-r--r--qmake/generators/makefile.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index d88c6e447a..d40c065ed4 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -3336,6 +3336,13 @@ MakefileGenerator::writePkgConfigFile()
t << endl;
}
+static QString windowsifyPath(const QString &str)
+{
+ // The paths are escaped in prl files, so every slash needs to turn into two backslashes.
+ // Then each backslash needs to be escaped for sed. And another level for C quoting here.
+ return QString(str).replace('/', "\\\\\\\\");
+}
+
QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QString &src, const QString &dst)
{
QString ret;
@@ -3348,8 +3355,12 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt
for (int r = 0; r < replace_rules.size(); ++r) {
const ProString match = project->first(ProKey(replace_rules.at(r) + ".match")),
replace = project->first(ProKey(replace_rules.at(r) + ".replace"));
- if (!match.isEmpty() /*&& match != replace*/)
+ if (!match.isEmpty() /*&& match != replace*/) {
ret += " -e " + shellQuote("s," + match + "," + replace + ",g");
+ if (isWindowsShell() && project->first(ProKey(replace_rules.at(r) + ".CONFIG")).contains("path"))
+ ret += " -e " + shellQuote("s," + windowsifyPath(match.toQString())
+ + "," + windowsifyPath(replace.toQString()) + ",gi");
+ }
}
ret += " \"" + src + "\" >\"" + dst + "\"";
}