diff options
author | Michal Klocek <michal.klocek@qt.io> | 2020-09-18 10:44:21 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2020-11-09 19:13:48 +0200 |
commit | 632da28e9ca1d67639f60e4c20ca54b38ae10dcd (patch) | |
tree | 3927e1ab212ef28c37df25d5b5f75b0478d6a6e4 /qmake | |
parent | ff170962d460aafea93373f8c2391716d199adb9 (diff) |
Add new way to mess up projects with QMAKE_INSTALL_REPLACE
Qmake supports currently:
* QMAKE_PRL_INSTALL_REPLACE,
* QMAKE_LIBTOOL_INSTALL_REPLACE
* QMAKE_PKGCCONFIG_INSTALL_REPLACE
Introduce QMAKE_INSTALL_REPLACE, where more sed magic
can be put in action in more generic manner.
replace_foo.filename = foo.h
replace_foo.matches = /bad/looking/path/to/foo
replace_foo.replace = /awesome/looking/path/to/foo
QMAKE_INSTALL_REPLACE += replace_foo
Pick-to: 5.15
Task-number: QTBUG-87154
Change-Id: Ie43d0ab4f1d4575bbf6279eb36383f38047484d9
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'qmake')
-rw-r--r-- | qmake/generators/makefile.cpp | 17 | ||||
-rw-r--r-- | qmake/generators/makefile.h | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index d6b1c6b88b..da6d42c88e 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -1286,7 +1286,14 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild) else cmd = QLatin1String("$(QINSTALL)"); cmd += " " + escapeFilePath(wild) + " " + escapeFilePath(dst_file); - inst << cmd; + + QString sedArgs = createSedArgs(ProKey("QMAKE_INSTALL_REPLACE"), fi.fileName()); + if (!sedArgs.isEmpty()) + inst << "$(SED) " + sedArgs + ' ' + escapeFilePath(wild) + " > " + + escapeFilePath(dst_file); + else + inst << cmd; + if (!noStrip && !project->isActiveConfig("debug_info") && !project->isActiveConfig("nostrip") && !fi.isDir() && fi.isExecutable() && !project->isEmpty("QMAKE_STRIP")) inst << QString("-") + var("QMAKE_STRIP") + " " + @@ -3413,15 +3420,17 @@ static QString windowsifyPath(const QString &str) return QString(str).replace('/', QLatin1String("\\\\\\\\")); } -QString MakefileGenerator::createSedArgs(const ProKey &replace_rule) const +QString MakefileGenerator::createSedArgs(const ProKey &replace_rule, const QString &file_name) const { QString sedargs; if (!project->isEmpty(replace_rule) && !project->isActiveConfig("no_sed_meta_install")) { const ProStringList &replace_rules = project->values(replace_rule); 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*/) { + replace = project->first(ProKey(replace_rules.at(r) + ".replace")), + filename = project->first(ProKey(replace_rules.at(r) + ".filename")); + if (!match.isEmpty() /*&& match != replace*/ + && (filename.isEmpty() || filename == file_name)) { sedargs += " -e " + shellQuote("s," + match + "," + replace + ",g"); if (isWindowsShell() && project->first(ProKey(replace_rules.at(r) + ".CONFIG")).contains("path")) diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h index b8bd489e4f..b9f80f5a69 100644 --- a/qmake/generators/makefile.h +++ b/qmake/generators/makefile.h @@ -258,7 +258,7 @@ public: protected: QString fileFixify(const QString &file, FileFixifyTypes fix = FileFixifyDefault, bool canon = true) const; QStringList fileFixify(const QStringList &files, FileFixifyTypes fix = FileFixifyDefault, bool canon = true) const; - QString createSedArgs(const ProKey &replace_rule) const; + QString createSedArgs(const ProKey &replace_rule, const QString &file_type = QString()) const; QString installMetaFile(const ProKey &replace_rule, const QString &src, const QString &dst) const; |