From 78faefdbb1ccc296c967dde40e2a7a1c78e4cec2 Mon Sep 17 00:00:00 2001 From: Hib Eris Date: Wed, 8 Feb 2012 13:36:28 +0100 Subject: [PATCH] Implement missing replacements when installing .pc files for win32 This implements replacements for win32 makefile generators similar to the replacement functionality in unix makefile generators. To enable Makefile code generation for replacements in win32 makefile generators, you must set QMAKE_STREAM_EDITOR to e.g. sed. When building for win32, sed is normally only available in the mingw/msys build environment and when cross compiling on unix. In these cases QMAKE_STREAM_EDITOR is set to sed in qmake.conf. For other win32 build environments QMAKE_STREAM_EDITOR is not set in qmake.conf and the replacements Makefile code is not generated. Change-Id: Ie5de5d517eafaeaa2544f1e972aec3fe11d0a6f1 Reviewed-by: Oswald Buddenhagen --- mkspecs/unsupported/win32-g++-cross/qmake.conf | 1 + mkspecs/win32-g++/qmake.conf | 1 + qmake/generators/win32/winmakefile.cpp | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/mkspecs/unsupported/win32-g++-cross/qmake.conf b/mkspecs/unsupported/win32-g++-cross/qmake.conf index 7f41c8a..9dcff80 100644 --- a/mkspecs/unsupported/win32-g++-cross/qmake.conf +++ b/mkspecs/unsupported/win32-g++-cross/qmake.conf @@ -79,6 +79,7 @@ QMAKE_SH = bash MINGW_IN_SHELL = 1 QMAKE_DIR_SEP = / QMAKE_COPY = cp +QMAKE_STREAM_EDITOR = sed QMAKE_COPY_DIR = cp -R QMAKE_MOVE = mv QMAKE_DEL_FILE = rm -f diff --git a/mkspecs/win32-g++/qmake.conf b/mkspecs/win32-g++/qmake.conf index c1f0ac3..641e410 100644 --- a/mkspecs/win32-g++/qmake.conf +++ b/mkspecs/win32-g++/qmake.conf @@ -79,6 +79,7 @@ QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain QMAKE_DIR_SEP = / QMAKE_QMAKE ~= s,\\\\,/, QMAKE_COPY = cp + QMAKE_STREAM_EDITOR = sed QMAKE_COPY_DIR = cp -r QMAKE_MOVE = mv QMAKE_DEL_FILE = rm diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index a26be16..9d983ff 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -649,6 +649,7 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t) t << "DEF_FILE = " << varList("DEF_FILE") << endl; t << "RES_FILE = " << varList("RES_FILE") << endl; // Not on mingw, can't see why not though... t << "COPY = " << var("QMAKE_COPY") << endl; + t << "SED = " << var("QMAKE_STREAM_EDITOR") << endl; t << "COPY_FILE = " << var("QMAKE_COPY_FILE") << endl; t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl; t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; @@ -852,7 +853,22 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t) } if(!ret.isEmpty()) ret += "\n\t"; - ret += "-$(INSTALL_FILE) \"" + pkgConfigFileName(true) + "\" \"" + dst_pc + "\""; + const QString replace_rule("QMAKE_PKGCONFIG_INSTALL_REPLACE"); + if (project->isEmpty(replace_rule) + || project->isActiveConfig("no_sed_meta_install") + || project->isEmpty("QMAKE_STREAM_EDITOR")) { + ret += "-$(INSTALL_FILE) \"" + pkgConfigFileName(true) + "\" \"" + dst_pc + "\""; + } else { + ret += "-$(SED)"; + QStringList replace_rules = project->values(replace_rule); + for (int r = 0; r < replace_rules.size(); ++r) { + const QString match = project->first(replace_rules.at(r) + ".match"), + replace = project->first(replace_rules.at(r) + ".replace"); + if (!match.isEmpty() /*&& match != replace*/) + ret += " -e \"s," + match + "," + replace + ",g\""; + } + ret += " \"" + pkgConfigFileName(true) + "\" >\"" + dst_pc + "\""; + } if(!uninst.isEmpty()) uninst.append("\n\t"); uninst.append("-$(DEL_FILE) \"" + dst_pc + "\""); -- 2.7.4