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>
This commit is contained in:
parent
ff170962d4
commit
632da28e9c
@ -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"))
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user