Author: Chuanqi Xu Date: 2023-10-31T23:59:47+08:00 New Revision: e107c9468b9c734fba016166fccc82a7e2b6527b
URL: https://github.com/llvm/llvm-project/commit/e107c9468b9c734fba016166fccc82a7e2b6527b DIFF: https://github.com/llvm/llvm-project/commit/e107c9468b9c734fba016166fccc82a7e2b6527b.diff LOG: [clang-scan-deps] [P1689] Keep consistent behavior for make dependencies with clang (#69551) Close https://github.com/llvm/llvm-project/issues/69439. This patch tries to reuse the codes to generate make style dependencies information with P1689 format directly. Added: Modified: clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp clang/test/ClangScanDeps/P1689.cppm Removed: ################################################################################ diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index 40115b7b5ae25b3..2abacc426f4c975 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -666,12 +666,24 @@ static StringRef makeAbsoluteAndPreferred(CompilerInstance &CI, StringRef Path, } void ModuleDepCollector::addFileDep(StringRef Path) { + if (IsStdModuleP1689Format) { + // Within P1689 format, we don't want all the paths to be absolute path + // since it may violate the tranditional make style dependencies info. + FileDeps.push_back(std::string(Path)); + return; + } + llvm::SmallString<256> Storage; Path = makeAbsoluteAndPreferred(ScanInstance, Path, Storage); FileDeps.push_back(std::string(Path)); } void ModuleDepCollector::addFileDep(ModuleDeps &MD, StringRef Path) { + if (IsStdModuleP1689Format) { + MD.FileDeps.insert(Path); + return; + } + 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(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits