xref: /llvm-project/clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c (revision 83902c403611af3a52453867cb8848fb3fd6a39c)
102871701SBen Langmuir // Ensure '-DFOO -fmodules-ignore-macro=FOO' and '' both produce the same
202871701SBen Langmuir // canonical module build command.
302871701SBen Langmuir 
402871701SBen Langmuir // RUN: rm -rf %t
502871701SBen Langmuir // RUN: split-file %s %t
602871701SBen Langmuir // RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
702871701SBen Langmuir 
802871701SBen Langmuir // RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 \
902871701SBen Langmuir // RUN:   -format experimental-full > %t/deps.json
1002871701SBen Langmuir // RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
1102871701SBen Langmuir 
1202871701SBen Langmuir // CHECK:      {
1302871701SBen Langmuir // CHECK-NEXT:   "modules": [
1402871701SBen Langmuir // CHECK:          {
1502871701SBen Langmuir // CHECK:            "command-line": [
1602871701SBen Langmuir // CHECK-NOT:          "FOO"
1702871701SBen Langmuir // CHECK-NOT:          "-fmodules-ignore-macro
1802871701SBen Langmuir // CHECK:            ]
1902871701SBen Langmuir // CHECK:            "context-hash": "[[HASH_NO_FOO:.*]]"
2002871701SBen Langmuir // CHECK:            "name": "Mod"
2102871701SBen Langmuir // CHECK-NEXT:     }
2202871701SBen Langmuir // CHECK-NEXT:     {
2302871701SBen Langmuir // CHECK:            "command-line": [
2402871701SBen Langmuir // CHECK:              "-D"
2502871701SBen Langmuir // CHECK-NEXT:         "FOO"
2602871701SBen Langmuir // CHECK:            ]
2702871701SBen Langmuir // CHECK:            "context-hash": "[[HASH_FOO:.*]]"
2802871701SBen Langmuir // CHECK:            "name": "Mod"
2902871701SBen Langmuir // CHECK-NEXT:     }
3002871701SBen Langmuir // CHECK-NEXT:   ]
3102871701SBen Langmuir // CHECK-NEXT:   "translation-units": [
3202871701SBen Langmuir // CHECK-NEXT:     {
3302871701SBen Langmuir // CHECK:            "clang-module-deps": [
3402871701SBen Langmuir // CHECK-NEXT:         {
3502871701SBen Langmuir // CHECK-NEXT:           "context-hash": "[[HASH_NO_FOO]]"
3602871701SBen Langmuir // CHECK-NEXT:            "module-name": "Mod"
3702871701SBen Langmuir // CHECK-NEXT:         }
3802871701SBen Langmuir // CHECK-NEXT:       ]
3902871701SBen Langmuir // CHECK-NEXT:       "command-line": [
4002871701SBen Langmuir // CHECK-NOT:          "-DFOO"
41*83902c40SBen Langmuir // CHECK-NOT:          "FOO"
4202871701SBen Langmuir // CHECK:            ]
4302871701SBen Langmuir // CHECK:            "input-file": "{{.*}}tu1.c"
4402871701SBen Langmuir // CHECK-NEXT:     }
45*83902c40SBen Langmuir // CHECK:          {
4602871701SBen Langmuir // CHECK:            "clang-module-deps": [
4702871701SBen Langmuir // CHECK-NEXT:         {
4802871701SBen Langmuir // CHECK-NEXT:           "context-hash": "[[HASH_FOO]]"
4902871701SBen Langmuir // CHECK-NEXT:            "module-name": "Mod"
5002871701SBen Langmuir // CHECK-NEXT:         }
5102871701SBen Langmuir // CHECK-NEXT:       ]
5202871701SBen Langmuir // CHECK-NEXT:       "command-line": [
53*83902c40SBen Langmuir // CHECK:              "-D"
54*83902c40SBen Langmuir // CHECK-NEXT:         "FOO"
5502871701SBen Langmuir // CHECK:            ]
5602871701SBen Langmuir // CHECK:            "input-file": "{{.*}}tu2.c"
5702871701SBen Langmuir // CHECK-NEXT:     }
58*83902c40SBen Langmuir // CHECK:          {
5902871701SBen Langmuir // CHECK:            "clang-module-deps": [
6002871701SBen Langmuir // CHECK-NEXT:         {
6102871701SBen Langmuir // CHECK-NEXT:           "context-hash": "[[HASH_NO_FOO]]"
6202871701SBen Langmuir // CHECK-NEXT:            "module-name": "Mod"
6302871701SBen Langmuir // CHECK-NEXT:         }
6402871701SBen Langmuir // CHECK-NEXT:       ]
6502871701SBen Langmuir // CHECK-NEXT:       "command-line": [
6602871701SBen Langmuir // CHECK:              "-fmodules-ignore-macro=FOO"
67*83902c40SBen Langmuir // CHECK:              "-D"
68*83902c40SBen Langmuir // CHECK-NEXT:         "FOO"
6902871701SBen Langmuir // CHECK:            ]
7002871701SBen Langmuir // CHECK:            "input-file": "{{.*}}tu3.c"
7102871701SBen Langmuir 
7202871701SBen Langmuir //--- cdb.json.template
7302871701SBen Langmuir [
7402871701SBen Langmuir   {
7502871701SBen Langmuir     "directory": "DIR",
7602871701SBen Langmuir     "command": "clang -fsyntax-only DIR/tu1.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",
7702871701SBen Langmuir     "file": "DIR/tu1.c"
7802871701SBen Langmuir   },
7902871701SBen Langmuir   {
8002871701SBen Langmuir     "directory": "DIR",
8102871701SBen Langmuir     "command": "clang -DFOO -fsyntax-only DIR/tu2.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",
8202871701SBen Langmuir     "file": "DIR/tu2.c"
8302871701SBen Langmuir   },
8402871701SBen Langmuir   {
8502871701SBen Langmuir     "directory": "DIR",
8602871701SBen Langmuir     "command": "clang -DFOO -fmodules-ignore-macro=FOO -fsyntax-only DIR/tu3.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",
8702871701SBen Langmuir     "file": "DIR/tu3.c"
8802871701SBen Langmuir   },
8902871701SBen Langmuir ]
9002871701SBen Langmuir 
9102871701SBen Langmuir //--- module.modulemap
9202871701SBen Langmuir module Mod { header "Mod.h" }
9302871701SBen Langmuir 
9402871701SBen Langmuir //--- Mod.h
9502871701SBen Langmuir 
9602871701SBen Langmuir //--- tu1.c
9702871701SBen Langmuir #include "Mod.h"
9802871701SBen Langmuir 
9902871701SBen Langmuir //--- tu2.c
10002871701SBen Langmuir #include "Mod.h"
10102871701SBen Langmuir 
10202871701SBen Langmuir //--- tu3.c
10302871701SBen Langmuir #include "Mod.h"
104