xref: /llvm-project/clang/test/ClangScanDeps/modules-context-hash-module-map-path.c (revision 71e32d5cf0053090aaad62d946fcfd00f1915f26)
102871701SBen Langmuir // Ensure the path to the modulemap input is included in the module context hash
202871701SBen Langmuir // irrespective of other TU command-line arguments, as it effects the canonical
302871701SBen Langmuir // module build command. In this test we use the difference in spelling between
402871701SBen Langmuir // module.modulemap and module.map, but it also applies to situations such as
502871701SBen Langmuir // differences in case-insensitive paths if they are not canonicalized away.
602871701SBen Langmuir 
702871701SBen Langmuir // RUN: rm -rf %t
802871701SBen Langmuir // RUN: split-file %s %t
902871701SBen Langmuir // RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
1002871701SBen Langmuir 
11*71e32d5cSJan Svoboda // RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 \
1202871701SBen Langmuir // RUN:   -format experimental-full > %t/deps.json
1302871701SBen Langmuir 
1402871701SBen Langmuir // RUN: mv %t/module.modulemap %t/module.map
1502871701SBen Langmuir // RUN: echo 'AFTER_MOVE' >> %t/deps.json
1602871701SBen Langmuir 
17*71e32d5cSJan Svoboda // RUN: clang-scan-deps -compilation-database %t/cdb.json -j 1 \
1802871701SBen Langmuir // RUN:   -format experimental-full >> %t/deps.json
1902871701SBen Langmuir 
2002871701SBen Langmuir // RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s
2102871701SBen Langmuir 
2202871701SBen Langmuir // CHECK:      {
2302871701SBen Langmuir // CHECK-NEXT:   "modules": [
2402871701SBen Langmuir // CHECK:          {
2502871701SBen Langmuir // CHECK:            "command-line": [
2602871701SBen Langmuir // CHECK:              "{{.*}}module.modulemap"
2702871701SBen Langmuir // CHECK:            ]
2802871701SBen Langmuir // CHECK:            "context-hash": "[[HASH1:.*]]"
2902871701SBen Langmuir // CHECK:            "name": "Mod"
3002871701SBen Langmuir // CHECK-NEXT:     }
3102871701SBen Langmuir // CHECK-NEXT:   ]
3202871701SBen Langmuir // CHECK-NEXT:   "translation-units": [
3302871701SBen Langmuir // CHECK-NEXT:     {
3402871701SBen Langmuir // CHECK:            "clang-module-deps": [
3502871701SBen Langmuir // CHECK-NEXT:         {
3602871701SBen Langmuir // CHECK-NEXT:           "context-hash": "[[HASH1]]"
3702871701SBen Langmuir // CHECK-NEXT:            "module-name": "Mod"
3802871701SBen Langmuir // CHECK-NEXT:         }
3902871701SBen Langmuir // CHECK-NEXT:       ]
4002871701SBen Langmuir // CHECK-LABEL: AFTER_MOVE
4102871701SBen Langmuir // CHECK:      {
4202871701SBen Langmuir // CHECK-NEXT:   "modules": [
4302871701SBen Langmuir // CHECK:          {
4402871701SBen Langmuir // CHECK-NOT: [[HASH1]]
4502871701SBen Langmuir // CHECK:            "command-line": [
4602871701SBen Langmuir // CHECK:              "{{.*}}module.map"
4702871701SBen Langmuir // CHECK:            ]
4802871701SBen Langmuir // CHECK-NOT: [[HASH1]]
4902871701SBen Langmuir // CHECK:            "name": "Mod"
5002871701SBen Langmuir // CHECK-NEXT:     }
5102871701SBen Langmuir // CHECK-NEXT:   ]
5202871701SBen Langmuir // CHECK-NEXT:   "translation-units": [
5302871701SBen Langmuir // CHECK-NEXT:     {
5402871701SBen Langmuir // CHECK:            "clang-module-deps": [
5502871701SBen Langmuir // CHECK-NEXT:         {
5602871701SBen Langmuir // CHECK-NEXT:           "context-hash":
5702871701SBen Langmuir // CHECK-NOT: [[HASH1]]
5802871701SBen Langmuir // CHECK-NEXT:            "module-name": "Mod"
5902871701SBen Langmuir // CHECK-NEXT:         }
6002871701SBen Langmuir // CHECK-NEXT:       ]
6102871701SBen Langmuir 
6202871701SBen Langmuir //--- cdb.json.template
6302871701SBen Langmuir [
6402871701SBen Langmuir   {
6502871701SBen Langmuir     "directory": "DIR",
6602871701SBen Langmuir     "command": "clang -fsyntax-only DIR/tu.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache",
6702871701SBen Langmuir     "file": "DIR/tu.c"
6802871701SBen Langmuir   }
6902871701SBen Langmuir ]
7002871701SBen Langmuir 
7102871701SBen Langmuir //--- module.modulemap
7202871701SBen Langmuir module Mod { header "Mod.h" }
7302871701SBen Langmuir 
7402871701SBen Langmuir //--- Mod.h
7502871701SBen Langmuir 
7602871701SBen Langmuir //--- tu.c
7702871701SBen Langmuir #include "Mod.h"
78