From f3418d86612eaa1c1963b3f9159c5da13f211bdc Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 6 Sep 2021 09:31:48 +0200 Subject: [PATCH] QMake: Fix that qmake was run on every build on macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The commit a71d725e46cf694867400be2bd079b699e62301a which fixed issues on ARM Macs also removed logic for CONFIG+= arguments to qmake, which was removed from qmake in Qt 5.6 (since PPC and 32bit Macs are no longer supported or relevant, qbase f58e95f098c8d78a5f2db7729606126fe093cbdf). The commit only removed part of the logic though, leading to the Makefile parser and the qmake step disagreeing on the architecture of the last qmake run, leading to the qmake step being executed again. Remove the whole architecture detection and matching logic from everywhere, which only did anything meaningful on macOS, and is not needed there anymore either. Fixes: QTCREATORBUG-26212 Change-Id: Ib60ebca1143296194454a63992ab90a97fdb56b6 Reviewed-by: Tor Arne Vestbø Reviewed-by: Christian Kandeler --- .../qmakeprojectmanager/makefileparse.cpp | 22 ------------ .../qmakeprojectimporter.cpp | 36 +++---------------- .../qmakeprojectimporter.h | 1 - src/plugins/qmakeprojectmanager/qmakestep.cpp | 21 ++--------- src/plugins/qmakeprojectmanager/qmakestep.h | 14 ++++---- 5 files changed, 14 insertions(+), 80 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/makefileparse.cpp b/src/plugins/qmakeprojectmanager/makefileparse.cpp index 04048801b21..1343b5fde58 100644 --- a/src/plugins/qmakeprojectmanager/makefileparse.cpp +++ b/src/plugins/qmakeprojectmanager/makefileparse.cpp @@ -160,26 +160,6 @@ QList MakeFileParse::parseAssignments(const QList(archConfig)); QCOMPARE(qmsc.osType, static_cast(osType)); QCOMPARE(qmsc.linkQmlDebuggingQQ2 == TriState::Enabled, linkQmlDebuggingQQ2); QCOMPARE(qmsc.useQtQuickCompiler == TriState::Enabled, useQtQuickCompiler); diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp index bbeeb4bea60..5c056ce0510 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.cpp @@ -71,7 +71,6 @@ struct DirectoryData BaseQtVersion::QmakeBuildConfigs buildConfig; QString additionalArguments; QMakeStepConfig config; - QMakeStepConfig::TargetArchConfig archConfig; QMakeStepConfig::OsType osType; }; @@ -155,10 +154,8 @@ QList QmakeProjectImporter::examineDirectory(const FilePath &importPath, qCDebug(logs) << " qt version:" << version->displayName() << " temporary:" << isTemporaryVersion; - data->archConfig = parse.config().archConfig; data->osType = parse.config().osType; - qCDebug(logs) << " archConfig:" << data->archConfig; qCDebug(logs) << " osType: " << data->osType; if (version->type() == QLatin1String(IOSQT) && data->osType == QMakeStepConfig::NoOsType) { @@ -166,20 +163,6 @@ QList QmakeProjectImporter::examineDirectory(const FilePath &importPath, qCDebug(logs) << " IOS found without osType, adjusting osType" << data->osType; } - if (version->type() == QtSupport::Constants::DESKTOPQT) { - const ProjectExplorer::Abis abis = version->qtAbis(); - if (!abis.isEmpty()) { - ProjectExplorer::Abi abi = abis.first(); - if (abi.os() == ProjectExplorer::Abi::DarwinOS) { - if (abi.wordWidth() == 64) - data->archConfig = QMakeStepConfig::X86_64; - else - data->archConfig = QMakeStepConfig::X86; - qCDebug(logs) << " OS X found without targetarch, adjusting archType" << data->archConfig; - } - } - } - // find qmake arguments and mkspec data->additionalArguments = parse.unparsedArguments(); qCDebug(logs) << " Unparsed arguments:" << data->additionalArguments; @@ -211,27 +194,23 @@ bool QmakeProjectImporter::matchKit(void *directoryData, const Kit *k) const ToolChain *tc = ToolChainKitAspect::cxxToolChain(k); if (kitSpec.isEmpty() && kitVersion) kitSpec = kitVersion->mkspecFor(tc); - QMakeStepConfig::TargetArchConfig kitTargetArch = QMakeStepConfig::NoArch; QMakeStepConfig::OsType kitOsType = QMakeStepConfig::NoOsType; if (tc) { - kitTargetArch = QMakeStepConfig::targetArchFor(tc->targetAbi(), kitVersion); kitOsType = QMakeStepConfig::osTypeFor(tc->targetAbi(), kitVersion); } qCDebug(logs) << k->displayName() << "version:" << (kitVersion == data->qtVersionData.qt) << "spec:" << (kitSpec == data->parsedSpec) - << "targetarch:" << (kitTargetArch == data->archConfig) << "ostype:" << (kitOsType == data->osType); return kitVersion == data->qtVersionData.qt && kitSpec == data->parsedSpec - && kitTargetArch == data->archConfig && kitOsType == data->osType; } Kit *QmakeProjectImporter::createKit(void *directoryData) const { auto *data = static_cast(directoryData); - return createTemporaryKit(data->qtVersionData, data->parsedSpec, data->archConfig, data->osType); + return createTemporaryKit(data->qtVersionData, data->parsedSpec, data->osType); } const QList QmakeProjectImporter::buildInfoList(void *directoryData) const @@ -263,17 +242,14 @@ void QmakeProjectImporter::deleteDirectoryData(void *directoryData) const delete static_cast(directoryData); } -static const QList preferredToolChains(BaseQtVersion *qtVersion, const QString &ms, - const QMakeStepConfig::TargetArchConfig &archConfig) +static const QList preferredToolChains(BaseQtVersion *qtVersion, const QString &ms) { const QString spec = ms.isEmpty() ? qtVersion->mkspec() : ms; const QList toolchains = ToolChainManager::toolChains(); const Abis qtAbis = qtVersion->qtAbis(); const auto matcher = [&](const ToolChain *tc) { - return qtAbis.contains(tc->targetAbi()) - && tc->suggestedMkspecList().contains(spec) - && QMakeStepConfig::targetArchFor(tc->targetAbi(), qtVersion) == archConfig; + return qtAbis.contains(tc->targetAbi()) && tc->suggestedMkspecList().contains(spec); }; ToolChain * const cxxToolchain = findOrDefault(toolchains, [matcher](const ToolChain *tc) { return tc->language() == ProjectExplorer::Constants::CXX_LANGUAGE_ID && matcher(tc); @@ -291,13 +267,11 @@ static const QList preferredToolChains(BaseQtVersion *qtVersion, co Kit *QmakeProjectImporter::createTemporaryKit(const QtProjectImporter::QtVersionData &data, const QString &parsedSpec, - const QMakeStepConfig::TargetArchConfig &archConfig, const QMakeStepConfig::OsType &osType) const { Q_UNUSED(osType) // TODO use this to select the right toolchain? - return QtProjectImporter::createTemporaryKit(data, - [&data, parsedSpec, archConfig](Kit *k) -> void { - for (ToolChain * const tc : preferredToolChains(data.qt, parsedSpec, archConfig)) + return QtProjectImporter::createTemporaryKit(data, [&data, parsedSpec](Kit *k) -> void { + for (ToolChain *const tc : preferredToolChains(data.qt, parsedSpec)) ToolChainKitAspect::setToolChain(k, tc); if (parsedSpec != data.qt->mkspec()) QmakeKitAspect::setMkspec(k, parsedSpec, QmakeKitAspect::MkspecSource::Code); diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h index 0d97f09b1f2..42097164ad6 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h +++ b/src/plugins/qmakeprojectmanager/qmakeprojectimporter.h @@ -50,7 +50,6 @@ private: ProjectExplorer::Kit *createTemporaryKit(const QtProjectImporter::QtVersionData &data, const QString &parsedSpec, - const QmakeProjectManager::QMakeStepConfig::TargetArchConfig &archConfig, const QMakeStepConfig::OsType &osType) const; }; diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 94adb3279df..de44f52365a 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -185,7 +185,6 @@ QMakeStepConfig QMakeStep::deducedArguments() const BaseQtVersion *version = QtKitAspect::qtVersion(kit); - config.archConfig = QMakeStepConfig::targetArchFor(targetAbi, version); config.osType = QMakeStepConfig::osTypeFor(targetAbi, version); config.separateDebugInfo = qmakeBuildConfiguration()->separateDebugInfo(); config.linkQmlDebuggingQQ2 = qmakeBuildConfiguration()->qmlDebugging(); @@ -776,25 +775,9 @@ QMakeStepFactory::QMakeStepFactory() setFlags(BuildStepInfo::UniqueStep); } -QMakeStepConfig::TargetArchConfig QMakeStepConfig::targetArchFor(const Abi &targetAbi, const BaseQtVersion *version) +QMakeStepConfig::TargetArchConfig QMakeStepConfig::targetArchFor(const Abi &, const BaseQtVersion *) { - TargetArchConfig arch = NoArch; - if (!version || version->type() != QtSupport::Constants::DESKTOPQT) - return arch; - if (targetAbi.os() == Abi::DarwinOS && targetAbi.binaryFormat() == Abi::MachOFormat) { - if (targetAbi.architecture() == Abi::X86Architecture) { - if (targetAbi.wordWidth() == 32) - arch = X86; - else if (targetAbi.wordWidth() == 64) - arch = X86_64; - } else if (targetAbi.architecture() == Abi::PowerPCArchitecture) { - if (targetAbi.wordWidth() == 32) - arch = PowerPC; - else if (targetAbi.wordWidth() == 64) - arch = PowerPC64; - } - } - return arch; + return NoArch; } QMakeStepConfig::OsType QMakeStepConfig::osTypeFor(const Abi &targetAbi, const BaseQtVersion *version) diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h index aecaaef04bd..17e1fe2f13c 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.h +++ b/src/plugins/qmakeprojectmanager/qmakestep.h @@ -66,15 +66,14 @@ public: class QMAKEPROJECTMANAGER_EXPORT QMakeStepConfig { public: - enum TargetArchConfig { - NoArch, X86, X86_64, PowerPC, PowerPC64 - }; + // TODO remove, does nothing + enum TargetArchConfig { NoArch, X86, X86_64, PowerPC, PowerPC64 }; - enum OsType { - NoOsType, IphoneSimulator, IphoneOS - }; + enum OsType { NoOsType, IphoneSimulator, IphoneOS }; - static TargetArchConfig targetArchFor(const ProjectExplorer::Abi &targetAbi, const QtSupport::BaseQtVersion *version); + // TODO remove, does nothing + static TargetArchConfig targetArchFor(const ProjectExplorer::Abi &targetAbi, + const QtSupport::BaseQtVersion *version); static OsType osTypeFor(const ProjectExplorer::Abi &targetAbi, const QtSupport::BaseQtVersion *version); QStringList toArguments() const; @@ -82,6 +81,7 @@ public: // Actual data QString sysRoot; QString targetTriple; + // TODO remove, does nothing TargetArchConfig archConfig = NoArch; OsType osType = NoOsType; Utils::TriState separateDebugInfo;