1// RUN: rm -rf %t
2// RUN: split-file %s %t
3
4// Setup framework root
5// RUN: mkdir -p %t/Frameworks/MyFramework.framework/Headers
6// RUN: cp %t/MyFramework.h %t/Frameworks/MyFramework.framework/Headers/
7// RUN: cp %t/MyHeader.h %t/Frameworks/MyFramework.framework/Headers/
8
9// RUN: sed -e "s@SRCROOT@%{/t:regex_replacement}@g" \
10// RUN: %t/reference.output.json.in >> %t/reference.output.json
11
12// Headermap maps headers to the source root SRCROOT
13// RUN: sed -e "s@SRCROOT@%{/t:regex_replacement}@g" \
14// RUN: %t/headermap.hmap.json.in >> %t/headermap.hmap.json
15// RUN: %hmaptool write %t/headermap.hmap.json %t/headermap.hmap
16
17// Input headers use paths to the framework root/DSTROOT
18// RUN: %clang_cc1 -extract-api -v --product-name=MyFramework \
19// RUN: -triple arm64-apple-macosx \
20// RUN: -iquote%t -I%t/headermap.hmap -F%t/Frameworks \
21// RUN: -x objective-c-header \
22// RUN: %t/Frameworks/MyFramework.framework/Headers/MyFramework.h \
23// RUN: %t/Frameworks/MyFramework.framework/Headers/MyHeader.h \
24// RUN: %t/QuotedHeader.h \
25// RUN: -o %t/output.json 2>&1 -verify | FileCheck -allow-empty %s
26
27// Generator version is not consistent across test runs, normalize it.
28// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
29// RUN: %t/output.json >> %t/output-normalized.json
30// RUN: diff %t/reference.output.json %t/output-normalized.json
31
32// CHECK:      <extract-api-includes>:
33// CHECK-NEXT: #import <MyFramework/MyFramework.h>
34// CHECK-NEXT: #import <MyFramework/MyHeader.h>
35// CHECK-NEXT: #import "QuotedHeader.h"
36
37//--- headermap.hmap.json.in
38{
39  "mappings" :
40    {
41     "MyFramework/MyHeader.h" : "SRCROOT/MyHeader.h"
42    }
43}
44
45//--- MyFramework.h
46// Umbrella for MyFramework
47#import <MyFramework/MyHeader.h>
48// expected-no-diagnostics
49
50//--- MyHeader.h
51#import <OtherFramework/OtherHeader.h>
52int MyInt;
53// expected-no-diagnostics
54
55//--- QuotedHeader.h
56char MyChar;
57// expected-no-diagnostics
58
59//--- Frameworks/OtherFramework.framework/Headers/OtherHeader.h
60int OtherInt;
61// expected-no-diagnostics
62
63//--- reference.output.json.in
64{
65  "metadata": {
66    "formatVersion": {
67      "major": 0,
68      "minor": 5,
69      "patch": 3
70    },
71    "generator": "?"
72  },
73  "module": {
74    "name": "MyFramework",
75    "platform": {
76      "architecture": "arm64",
77      "operatingSystem": {
78        "minimumVersion": {
79          "major": 11,
80          "minor": 0,
81          "patch": 0
82        },
83        "name": "macosx"
84      },
85      "vendor": "apple"
86    }
87  },
88  "relationships": [],
89  "symbols": [
90    {
91      "accessLevel": "public",
92      "declarationFragments": [
93        {
94          "kind": "typeIdentifier",
95          "preciseIdentifier": "c:I",
96          "spelling": "int"
97        },
98        {
99          "kind": "text",
100          "spelling": " "
101        },
102        {
103          "kind": "identifier",
104          "spelling": "MyInt"
105        }
106      ],
107      "identifier": {
108        "interfaceLanguage": "objective-c",
109        "precise": "c:@MyInt"
110      },
111      "kind": {
112        "displayName": "Global Variable",
113        "identifier": "objective-c.var"
114      },
115      "location": {
116        "position": {
117          "character": 5,
118          "line": 2
119        },
120        "uri": "file://SRCROOT/MyHeader.h"
121      },
122      "names": {
123        "navigator": [
124          {
125            "kind": "identifier",
126            "spelling": "MyInt"
127          }
128        ],
129        "subHeading": [
130          {
131            "kind": "identifier",
132            "spelling": "MyInt"
133          }
134        ],
135        "title": "MyInt"
136      },
137      "pathComponents": [
138        "MyInt"
139      ]
140    },
141    {
142      "accessLevel": "public",
143      "declarationFragments": [
144        {
145          "kind": "typeIdentifier",
146          "preciseIdentifier": "c:C",
147          "spelling": "char"
148        },
149        {
150          "kind": "text",
151          "spelling": " "
152        },
153        {
154          "kind": "identifier",
155          "spelling": "MyChar"
156        }
157      ],
158      "identifier": {
159        "interfaceLanguage": "objective-c",
160        "precise": "c:@MyChar"
161      },
162      "kind": {
163        "displayName": "Global Variable",
164        "identifier": "objective-c.var"
165      },
166      "location": {
167        "position": {
168          "character": 6,
169          "line": 1
170        },
171        "uri": "file://SRCROOT/QuotedHeader.h"
172      },
173      "names": {
174        "navigator": [
175          {
176            "kind": "identifier",
177            "spelling": "MyChar"
178          }
179        ],
180        "subHeading": [
181          {
182            "kind": "identifier",
183            "spelling": "MyChar"
184          }
185        ],
186        "title": "MyChar"
187      },
188      "pathComponents": [
189        "MyChar"
190      ]
191    }
192  ]
193}
194