// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json
// RUN: clang-installapi -target arm64-apple-macos13.1 \
// RUN: -F%t -install_name /System/Library/Frameworks/Foo.framework/Foo \
// RUN: %t/inputs.json -o %t/outputs.tbd -v 2>&1 | FileCheck %s --check-prefix=VERBOSE
// RUN: llvm-readtapi -compare %t/outputs.tbd %t/expected.tbd 2>&1 | FileCheck %s --allow-empty
// VERBOSE: Public Headers:
// VERBOSE-NEXT: #import <Foo/Foo.h>
// CHECK-NOT: error:
// CHECK-NOT: warning:
//--- Foo.framework/Headers/Foo.h
// Ignore forward declaration.
@class NSObject;
@interface Visible
@end
__attribute__((visibility("hidden")))
@interface Hidden
@end
__attribute__((visibility("hidden")))
@interface HiddenWithIvars {
@public
char _ivar;
}
@end
__attribute__((objc_exception))
@interface Exception
@end
@interface PublicClass : Visible {
@package
int _internal;
@protected
int _external;
@private
int private;
@public
char _public;
}
@end
//--- Foo.framework/PrivateHeaders/Foo_Private.h
#import <Foo/Foo.h>
@interface ClassWithIvars : Visible {
char _ivar1;
char _ivar2;
@private
int _privateIVar;
@protected
int _externalIVar;
@package
int _internalIVar;
}
@end
@interface Exception () {
@public
char _ivarFromExtension;
@private
int _privateIvarFromExtension;
}
@end
//--- inputs.json.in
{
"headers": [ {
"path" : "DSTROOT/Foo.framework/Headers/Foo.h",
"type" : "public"
},
{
"path" : "DSTROOT/Foo.framework/PrivateHeaders/Foo_Private.h",
"type" : "private"
}
],
"version": "3"
}
//--- expected.tbd
{
"main_library": {
"compatibility_versions": [
{
"version": "0"
}
],
"current_versions": [
{
"version": "0"
}
],
"exported_symbols": [
{
"data": {
"objc_class": [
"PublicClass",
"Exception",
"Visible",
"ClassWithIvars"
],
"objc_eh_type": [
"Exception"
],
"objc_ivar": [
"Exception._ivarFromExtension",
"ClassWithIvars._ivar2",
"PublicClass._external",
"ClassWithIvars._ivar1",
"ClassWithIvars._externalIVar",
"PublicClass._public"
]
}
}
],
"flags": [
{
"attributes": [
"not_app_extension_safe"
]
}
],
"install_names": [
{
"name": "/System/Library/Frameworks/Foo.framework/Foo"
}
],
"target_info": [
{
"min_deployment": "13.1",
"target": "arm64-macos"
}
]
},
"tapi_tbd_version": 5
}