summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2016-01-14 13:01:39 +0100
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2016-01-21 19:23:40 +0000
commitf33c6f37a8226c67a199181a8721f09983089448 (patch)
tree538cbb0a894aca00bc7f0b3eb559ef3f14dc8ad3
parent2bb473c19a6926a0691219776109dee37a1a276b (diff)
Work around MinGW-make's magic prefixing of paths.
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 <jedrzej.nowacki@theqtcompany.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
-rw-r--r--qmake/generators/makefile.cpp2
-rw-r--r--qmake/generators/makefile.h4
-rw-r--r--qmake/generators/unix/unixmake.cpp16
-rw-r--r--qmake/generators/unix/unixmake.h3
-rw-r--r--qmake/generators/win32/mingw_make.cpp12
-rw-r--r--qmake/generators/win32/mingw_make.h1
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp2
-rw-r--r--qmake/generators/win32/winmakefile.cpp2
8 files changed, 38 insertions, 4 deletions
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index a54083c04d..4dfe69fbde 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1212,7 +1212,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
}
bool do_default = true;
- const QString root = "$(INSTALL_ROOT)";
+ const QString root = installRoot();
QString dst;
if (installConfigValues.indexOf("no_path") == -1 &&
installConfigValues.indexOf("dummy_install") == -1) {
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 97159eaef4..19ff5d57a3 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -192,6 +192,7 @@ protected:
//for installs
virtual QString defaultInstall(const QString &);
+ virtual QString installRoot() const;
//for prl
QString prlFileName(bool fixify=true);
@@ -277,6 +278,9 @@ inline bool MakefileGenerator::noIO() const
inline QString MakefileGenerator::defaultInstall(const QString &)
{ return QString(""); }
+inline QString MakefileGenerator::installRoot() const
+{ return QStringLiteral("$(INSTALL_ROOT)"); }
+
inline bool MakefileGenerator::findLibraries(bool, bool)
{ return true; }
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);
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index 97bfef88a4..1837c6c0cf 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -112,6 +112,18 @@ bool MingwMakefileGenerator::writeMakefile(QTextStream &t)
return false;
}
+QString MingwMakefileGenerator::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@%=%)");
+}
+
void createLdObjectScriptFile(const QString &fileName, const ProStringList &objList)
{
QString filePath = Option::output_dir + QDir::separator() + fileName;
diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h
index 4e94a23ae2..1525f04955 100644
--- a/qmake/generators/win32/mingw_make.h
+++ b/qmake/generators/win32/mingw_make.h
@@ -50,6 +50,7 @@ protected:
virtual QString getManifestFileForRcFile() const;
bool writeMakefile(QTextStream &);
void init();
+ virtual QString installRoot() const;
private:
void writeMingwParts(QTextStream &);
void writeIncPart(QTextStream &t);
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index 7499d76e75..27427db68b 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -268,7 +268,7 @@ QString NmakeMakefileGenerator::defaultInstall(const QString &t)
QString ret = Win32MakefileGenerator::defaultInstall(t);
- const QString root = "$(INSTALL_ROOT)";
+ const QString root = installRoot();
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
QString targetdir = fileFixify(project->first(ProKey(t + ".path")).toQString(), FileFixifyAbsolute);
if(targetdir.right(1) != Option::dir_sep)
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index 1fba7057ab..a042cb0d4b 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -689,7 +689,7 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t)
project->first("TEMPLATE") == "subdirs" || project->first("TEMPLATE") == "aux")
return QString();
- const QString root = "$(INSTALL_ROOT)";
+ const QString root = installRoot();
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
QString ret;
QString targetdir = fileFixify(project->first(ProKey(t + ".path")).toQString(), FileFixifyAbsolute);