Qmake: Use target-specific extension for deployment

Add file extensions to execatables about to be deployed based on the
OS found in the toolchain's targetAbi instead of using the hostOs().

This should fix deployment from windows to non-windows machines.

Task-number: QTCREATORBUG-21608
Change-Id: I83678bda1d56ff24848b7b498b95081d00b5a5f0
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
(cherry picked from commit 383f0b9fcc)
This commit is contained in:
Tobias Hunger
2018-11-30 11:10:02 +01:00
committed by Eike Ziller
parent 185f8985c6
commit f0226d9644
3 changed files with 26 additions and 1 deletions

View File

@@ -547,6 +547,27 @@ Abi Abi::abiFromTargetTriplet(const QString &triple)
return Abi(arch, os, flavor, format, width); return Abi(arch, os, flavor, format, width);
} }
Utils::OsType Abi::abiOsToOsType(const Abi::OS os)
{
switch (os) {
case ProjectExplorer::Abi::LinuxOS:
return Utils::OsType::OsTypeLinux;
case ProjectExplorer::Abi::DarwinOS:
return Utils::OsType::OsTypeMac;
case ProjectExplorer::Abi::BsdOS:
case ProjectExplorer::Abi::UnixOS:
return Utils::OsType::OsTypeOtherUnix;
case ProjectExplorer::Abi::WindowsOS:
return Utils::OsType::OsTypeWindows;
case ProjectExplorer::Abi::VxWorks:
case ProjectExplorer::Abi::QnxOS:
case ProjectExplorer::Abi::BareMetalOS:
case ProjectExplorer::Abi::UnknownOS:
return Utils::OsType::OsTypeOther;
}
return Utils::OsType::OsTypeOther;
}
QString Abi::toString() const QString Abi::toString() const
{ {
const QStringList dn = {toString(m_architecture), toString(m_os), toString(m_osFlavor), const QStringList dn = {toString(m_architecture), toString(m_os), toString(m_osFlavor),

View File

@@ -27,6 +27,8 @@
#include "projectexplorer_export.h" #include "projectexplorer_export.h"
#include <utils/osspecificaspects.h>
#include <QList> #include <QList>
#include <QHash> #include <QHash>
@@ -112,6 +114,8 @@ public:
static Abi abiFromTargetTriplet(const QString &machineTriple); static Abi abiFromTargetTriplet(const QString &machineTriple);
static Utils::OsType abiOsToOsType(const OS os);
bool operator != (const Abi &other) const; bool operator != (const Abi &other) const;
bool operator == (const Abi &other) const; bool operator == (const Abi &other) const;
bool isCompatibleWith(const Abi &other) const; bool isCompatibleWith(const Abi &other) const;

View File

@@ -1347,7 +1347,7 @@ QString QmakeProject::executableFor(const QmakeProFile *file)
} else { } else {
const QString extension = file->singleVariableValue(Variable::TargetExt); const QString extension = file->singleVariableValue(Variable::TargetExt);
if (extension.isEmpty()) if (extension.isEmpty())
target = HostOsInfo::withExecutableSuffix(ti.target); target = OsSpecificAspects::withExecutableSuffix(Abi::abiOsToOsType(tc->targetAbi().os()), ti.target);
else else
target = ti.target + extension; target = ti.target + extension;
} }