From d4260dab855d8d52fbd04f5be400fe30bd302415 Mon Sep 17 00:00:00 2001 From: Alexis Jeandet Date: Mon, 10 Jul 2023 13:05:52 +0200 Subject: [PATCH] Ensure that target name is relative to build dir and without leading '/' Fixes: QTCREATORBUG-29349 Change-Id: I7471242cd422a68a2652ff23741d0615380e2e8d Reviewed-by: hjk Reviewed-by: Eike Ziller --- .../mesonprojectmanager/mesonprojectparser.cpp | 6 +++--- src/plugins/mesonprojectmanager/target.h | 14 ++++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp index c84b5e4b3d6..528865f3d37 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp +++ b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp @@ -183,7 +183,7 @@ QList MesonProjectParser::appsTargets() const if (target.type == Target::Type::executable) { ProjectExplorer::BuildTargetInfo bti; bti.displayName = target.name; - bti.buildKey = Target::fullName(m_srcDir, target); + bti.buildKey = Target::fullName(m_buildDir, target); bti.displayNameUniquifier = bti.buildKey; bti.targetFilePath = Utils::FilePath::fromString(target.fileName.first()); bti.workingDirectory = Utils::FilePath::fromString(target.fileName.first()).absolutePath(); @@ -237,7 +237,7 @@ void MesonProjectParser::update(const QFuture m_rootNode = std::move(parserData->rootNode); m_targetsNames.clear(); for (const Target &target : m_parserResult.targets) { - m_targetsNames.push_back(Target::fullName(m_srcDir, target)); + m_targetsNames.push_back(Target::fullName(m_buildDir, target)); } addMissingTargets(m_targetsNames); m_targetsNames.sort(); @@ -253,7 +253,7 @@ ProjectExplorer::RawProjectPart MesonProjectParser::buildRawPart( { ProjectExplorer::RawProjectPart part; part.setDisplayName(target.name); - part.setBuildSystemTarget(Target::fullName(m_srcDir, target)); + part.setBuildSystemTarget(Target::fullName(m_buildDir, target)); part.setFiles(sources.sources + sources.generatedSources); auto flags = splitArgs(sources.parameters); part.setMacros(flags.macros); diff --git a/src/plugins/mesonprojectmanager/target.h b/src/plugins/mesonprojectmanager/target.h index 1efa3669490..b48c79e7c70 100644 --- a/src/plugins/mesonprojectmanager/target.h +++ b/src/plugins/mesonprojectmanager/target.h @@ -60,15 +60,17 @@ struct Target const std::optional subproject; const SourceGroupList sources; - static inline QString fullName(const Utils::FilePath &srcDir, const Target &target) + static inline QString fullName(const Utils::FilePath &buildDir, const Target &target) { using namespace Utils; - if (FilePath::fromString((target.fileName.first())).isAbsolutePath()) { - const auto fname = target.fileName.first().split('/').last(); - QString definedIn = FilePath::fromString(target.definedIn).absolutePath().toString(); - return definedIn.remove(srcDir.toString()) + '/' + fname; + auto fname = target.fileName.first(); + if (FilePath::fromString(fname).isAbsolutePath()) { + fname.remove(buildDir.toString()); + if (fname.startsWith('/')) + fname.removeFirst(); + return fname; } else { - return target.fileName.first(); + return fname; } }