From f33c6f37a8226c67a199181a8721f09983089448 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Thu, 14 Jan 2016 13:01:39 +0100 Subject: Work around MinGW-make's magic prefixing of paths. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When building QNX on MS-Windows, make magically adds the Msys root as prefix to variables whose values look like paths; this applies to both environment variables and variables given values on the command-line. When we don't actually want to install under the Msys root, this is unwelcome "help". So (for MinGW's make) support a magic prefix of our own, @msyshack@, that'll make a path value for INSTALL_ROOT not look like a path to make; we can then strip it off when we come to use it. Change-Id: I951ad3c8fe3e5cfb49e6e361d7fff779f3a9d716 Reviewed-by: Jędrzej Nowacki Reviewed-by: Oswald Buddenhagen Reviewed-by: Frederik Gladhorn --- qmake/generators/unix/unixmake.cpp | 16 +++++++++++++++- qmake/generators/unix/unixmake.h | 3 +++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'qmake/generators/unix') diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp index 57c0a97228..12b9f09edd 100644 --- a/qmake/generators/unix/unixmake.cpp +++ b/qmake/generators/unix/unixmake.cpp @@ -514,6 +514,20 @@ UnixMakefileGenerator::findLibraries(bool linkPrl, bool mergeLflags) return false; } +#ifdef Q_OS_WIN // MinGW x-compiling for QNX +QString UnixMakefileGenerator::installRoot() const +{ + /* + We include a magic prefix on the path to bypass mingw-make's "helpful" + intervention in the environment, recognising variables that look like + paths and adding the msys system root as prefix, which we don't want. + Once this hack has smuggled INSTALL_ROOT into make's variable space, we + can trivially strip the magic prefix back off to get the path we meant. + */ + return QStringLiteral("$(INSTALL_ROOT:@msyshack@%=%)"); +} +#endif + QString UnixMakefileGenerator::defaultInstall(const QString &t) { @@ -522,7 +536,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t) enum { NoBundle, SolidBundle, SlicedBundle } bundle = NoBundle; bool isAux = (project->first("TEMPLATE") == "aux"); - const QString root = "$(INSTALL_ROOT)"; + const QString root = installRoot(); ProStringList &uninst = project->values(ProKey(t + ".uninstall")); QString ret, destdir = project->first("DESTDIR").toQString(); if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep) diff --git a/qmake/generators/unix/unixmake.h b/qmake/generators/unix/unixmake.h index db3f59f517..17270ffce9 100644 --- a/qmake/generators/unix/unixmake.h +++ b/qmake/generators/unix/unixmake.h @@ -52,6 +52,9 @@ public: protected: virtual bool doPrecompiledHeaders() const { return project->isActiveConfig("precompile_header"); } virtual bool doDepends() const { return !Option::mkfile::do_stub_makefile && MakefileGenerator::doDepends(); } +#ifdef Q_OS_WIN // MinGW x-compiling for QNX + virtual QString installRoot() const; +#endif virtual QString defaultInstall(const QString &); virtual ProString fixLibFlag(const ProString &lib); -- cgit v1.2.3