blob: 7981c07264d73e39e4417766df1187b100b11af9 [file] [edit]
// UNSUPPORTED: system-windows
// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: clang-scan-deps -format=p1689 -- \
// RUN: %clang++ -std=c++20 -c %t/include-only.cpp -o %t/include-only.o \
// RUN: -fmodule-map-file=%t/module.modulemap \
// RUN: | FileCheck %s -DPREFIX=%/t --check-prefix=INCLUDE-ONLY
// RUN: clang-scan-deps --mode=preprocess-dependency-directives -format=p1689 -- \
// RUN: %clang++ -std=c++20 -c %t/include-only.cpp -o %t/include-only.o \
// RUN: -fmodule-map-file=%t/module.modulemap \
// RUN: | FileCheck %s -DPREFIX=%/t --check-prefix=INCLUDE-ONLY
// RUN: clang-scan-deps -format=p1689 -- \
// RUN: %clang++ -std=c++20 -c %t/mixed.cpp -o %t/mixed.o \
// RUN: -fmodule-map-file=%t/module.modulemap \
// RUN: | FileCheck %s -DPREFIX=%/t --check-prefix=MIXED
// RUN: sed "s|DIR|%/t|g" %t/compile_commands.json.in > %t/compile_commands.json
// RUN: clang-scan-deps -format=p1689 \
// RUN: -compilation-database %t/compile_commands.json \
// RUN: | FileCheck %s -DPREFIX=%/t --check-prefix=INCLUDE-ONLY
// Check that this does not enable single-module parse mode, which would skip
// all branches of a conditional whose controlling macro is undefined.
// RUN: clang-scan-deps -format=p1689 -- \
// RUN: %clang++ -std=c++20 -c %t/conditional.cpp -o %t/conditional.o \
// RUN: -MD -MT %t/conditional.o -MF %t/conditional.dep > /dev/null
// RUN: cat %t/conditional.dep \
// RUN: | FileCheck %s -DPREFIX=%/t --check-prefix=CONDITIONAL
// CONDITIONAL-NOT: false.h
// CONDITIONAL: [[PREFIX]]/true.h
// INCLUDE-ONLY: {
// INCLUDE-ONLY-NEXT: "revision": 0,
// INCLUDE-ONLY-NEXT: "rules": [
// INCLUDE-ONLY-NEXT: {
// INCLUDE-ONLY-NEXT: "primary-output": "[[PREFIX]]/include-only.o",
// INCLUDE-ONLY-NEXT: "requires": [
// INCLUDE-ONLY-NEXT: {
// INCLUDE-ONLY-NEXT: "logical-name": "alpha"
// INCLUDE-ONLY-NEXT: },
// INCLUDE-ONLY-NEXT: {
// INCLUDE-ONLY-NEXT: "logical-name": "beta.gamma"
// INCLUDE-ONLY-NEXT: }
// INCLUDE-ONLY-NEXT: ]
// INCLUDE-ONLY-NEXT: }
// INCLUDE-ONLY-NEXT: ],
// INCLUDE-ONLY-NEXT: "version": 1
// INCLUDE-ONLY-NEXT: }
// MIXED: {
// MIXED-NEXT: "revision": 0,
// MIXED-NEXT: "rules": [
// MIXED-NEXT: {
// MIXED-NEXT: "primary-output": "[[PREFIX]]/mixed.o",
// MIXED-NEXT: "requires": [
// MIXED-NEXT: {
// MIXED-NEXT: "logical-name": "alpha"
// MIXED-NEXT: }
// MIXED-NEXT: ]
// MIXED-NEXT: }
// MIXED-NEXT: ],
// MIXED-NEXT: "version": 1
// MIXED-NEXT: }
//--- module.modulemap
module alpha {
header "alpha-1.h"
header "alpha-2.h"
}
module beta {
module gamma {
header "beta.h"
}
}
module unused {
header "unused.h"
}
//--- alpha-1.h
#pragma once
#error mapped headers must not be textually included
//--- alpha-2.h
#pragma once
#error mapped headers must not be textually included
//--- beta.h
#pragma once
#error mapped headers must not be textually included
//--- unused.h
#pragma once
//--- unmapped.h
#pragma once
//--- false.h
#pragma once
//--- true.h
#pragma once
//--- include-only.cpp
#include "alpha-1.h"
#include "alpha-2.h"
#include "beta.h"
#include "unmapped.h"
//--- mixed.cpp
#include "alpha-1.h"
import alpha;
//--- conditional.cpp
#if UNDEFINED
#include "false.h"
#else
#include "true.h"
#endif
//--- compile_commands.json.in
[
{
"directory": "DIR",
"command": "clang++ -std=c++20 -c DIR/include-only.cpp -o DIR/include-only.o -fmodule-map-file=DIR/module.modulemap",
"file": "DIR/include-only.cpp",
"output": "DIR/include-only.o"
}
]