[clang] [clang-scan-deps] [P1689] Keep consistent behavior for make dependencies with clang (PR #69551)
Chuanqi Xu via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 29 22:40:51 PDT 2023
https://github.com/ChuanqiXu9 updated https://github.com/llvm/llvm-project/pull/69551
>From c91007b51e164d22c8f73a864105494ebc10a004 Mon Sep 17 00:00:00 2001
From: Chuanqi Xu <yedeng.yd at linux.alibaba.com>
Date: Mon, 30 Oct 2023 11:51:04 +0800
Subject: [PATCH] [clang-scan-deps] [P1689] Keep consistent behavior for make
dependencies with clang
Close #69439.
This patch tries to reuse the codes to generate make style dependencies
information with P1689 format directly.
---
.../DependencyScanning/ModuleDepCollector.cpp | 14 ++++++++++----
clang/test/ClangScanDeps/P1689.cppm | 10 ++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index 40115b7b5ae25b3..3764ccb0b4749b1 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -666,13 +666,19 @@ static StringRef makeAbsoluteAndPreferred(CompilerInstance &CI, StringRef Path,
}
void ModuleDepCollector::addFileDep(StringRef Path) {
- llvm::SmallString<256> Storage;
- Path = makeAbsoluteAndPreferred(ScanInstance, Path, Storage);
+ // Within P1689 format, we don't want all the paths to be absolute path
+ // since it may violate the tranditional make style dependencies info.
+ if (!IsStdModuleP1689Format) {
+ llvm::SmallString<256> Storage;
+ Path = makeAbsoluteAndPreferred(ScanInstance, Path, Storage);
+ }
FileDeps.push_back(std::string(Path));
}
void ModuleDepCollector::addFileDep(ModuleDeps &MD, StringRef Path) {
- llvm::SmallString<256> Storage;
- Path = makeAbsoluteAndPreferred(ScanInstance, Path, Storage);
+ if (!IsStdModuleP1689Format) {
+ llvm::SmallString<256> Storage;
+ Path = makeAbsoluteAndPreferred(ScanInstance, Path, Storage);
+ }
MD.FileDeps.insert(Path);
}
diff --git a/clang/test/ClangScanDeps/P1689.cppm b/clang/test/ClangScanDeps/P1689.cppm
index dffb16974a3e4e4..24632e25cf7f3bd 100644
--- a/clang/test/ClangScanDeps/P1689.cppm
+++ b/clang/test/ClangScanDeps/P1689.cppm
@@ -42,6 +42,14 @@
// RUN: clang-scan-deps -format=p1689 \
// RUN: -- %clang++ -std=c++20 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/cache -c %t/impl_part.cppm -o %t/impl_part.o \
// RUN: | FileCheck %t/impl_part.cppm -DPREFIX=%/t
+//
+// Check the path in the make style dependencies are generated in relative path form
+// RUN: cd %t
+// RUN: clang-scan-deps -format=p1689 \
+// RUN: -- %clang++ -std=c++20 -c -fprebuilt-module-path=%t impl_part.cppm -o impl_part.o \
+// RUN: -MT impl_part.o.ddi -MD -MF impl_part.dep
+// RUN: cat impl_part.dep | FileCheck impl_part.cppm -DPREFIX=%/t --check-prefix=CHECK-MAKE-RELATIVE
+
//--- P1689.json.in
[
@@ -168,6 +176,8 @@ void World() {
// CHECK-MAKE: [[PREFIX]]/impl_part.cppm
// CHECK-MAKE: [[PREFIX]]/header.mock
+// CHECK-MAKE-RELATIVE: impl_part.o.ddi: impl_part.cppm header.mock
+
//--- interface_part.cppm
export module M:interface_part;
export void World();
More information about the cfe-commits
mailing list