; RUN: rm -rf %t
; RUN: split-file %s %t
; RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json
; RUN: yaml2obj %t/Availability.yaml -o %t/System/Library/Frameworks/Availability.framework/Availability
; RUN: clang-installapi \
; RUN: --target=x86_64-apple-macos13 \
; RUN: -install_name /System/Library/Frameworks/Availability.framework/Versions/A/Availability \
; RUN: -current_version 1 -compatibility_version 1 \
; RUN: -F %t/System/Library/Frameworks \
; RUN: %t/inputs.json -o %t/output.tbd \
; RUN: --verify-against=%t/System/Library/Frameworks/Availability.framework/Availability \
; RUN: --verify-mode=ErrorsOnly --filetype=tbd-v5 2> %t/errors.log
; RUN: FileCheck -allow-empty -check-prefix=ERRORSONLY -input-file %t/errors.log %s
; RUN: clang-installapi \
; RUN: --target=x86_64-apple-macos13 \
; RUN: -install_name /System/Library/Frameworks/Availability.framework/Versions/A/Availability \
; RUN: -current_version 1 -compatibility_version 1 \
; RUN: -F %t/System/Library/Frameworks \
; RUN: %t/inputs.json -o %t/output-warnings.tbd \
; RUN: --verify-against=%t/System/Library/Frameworks/Availability.framework/Availability \
; RUN: --verify-mode=ErrorsAndWarnings 2> %t/errors.log
; RUN: FileCheck -check-prefixes=VIOLATIONS,ERRORSANDWARNINGS -input-file %t/errors.log %s
; RUN: not clang-installapi \
; RUN: --target=x86_64-apple-macos13 \
; RUN: -install_name /System/Library/Frameworks/Availability.framework/Versions/A/Availability \
; RUN: -current_version 1 -compatibility_version 1 \
; RUN: -F %t/System/Library/Frameworks \
; RUN: %t/inputs.json -o %t/output-pedantic.tbd \
; RUN: --verify-against=%t/System/Library/Frameworks/Availability.framework/Availability \
; RUN: --verify-mode=Pedantic 2> %t/errors.log
; RUN: FileCheck -check-prefixes=VIOLATIONS,PEDANTIC -input-file %t/errors.log %s
; ERRORSONLY-NOT: error
; ERRORSONLY-NOT: warning
; ERRORSANDWARNINGS-NOT: error
; VIOLATIONS: warning: violations found for x86_64-apple-macos
; VIOLATIONS: declaration 'publicGlobalVariable' is marked unavailable, but symbol is exported in dynamic library
; VIOLATIONS-NEXT: extern int publicGlobalVariable NS_AVAILABLE
; VIOLATIONS: declaration 'Foo' is marked unavailable, but symbol is exported in dynamic library
; VIOLATIONS-NEXT: @interface Foo : NSObject
; VIOLATIONS: declaration 'publicGlobalVariable3' is marked unavailable, but symbol is exported in dynamic library
; VIOLATIONS-NEXT: extern int publicGlobalVariable3 __attribute__((unavailable))
; VIOLATIONS: declaration 'privateGlobalVariable' is marked unavailable, but symbol is exported in dynamic library
; VIOLATIONS-NEXT: extern int privateGlobalVariable;
; ERRORSANDWARNINGS-NOT: warning
; PEDANTIC-NOT: error
;--- inputs.json.in
{
"headers": [ {
"path" : "DSTROOT/System/Library/Frameworks/Availability.framework/Headers/Availability.h",
"type" : "public"
},
{
"path" : "DSTROOT/System/Library/Frameworks/Availability.framework/PrivateHeaders/AvailabilityPrivate.h",
"type" : "private"
}
],
"version": "3"
}
;--- System/Library/Frameworks/Availability.framework/Headers/AV_Defines.h
#ifndef AV_DEFINES
#define AV_DEFINES
#define NS_AVAILABLE __attribute__((availability(macosx,introduced=NA)))
@interface NSObject
@end
#endif //AV_DEFINES
;--- System/Library/Frameworks/Availability.framework/PrivateHeaders/AvailabilityPrivate.h
#import <Availability/AV_Defines.h>
// Test private global variable.
NS_AVAILABLE
extern int privateGlobalVariable;
;--- System/Library/Frameworks/Availability.framework/Headers/Availability.h
#import <Availability/AV_Defines.h>
extern int publicGlobalVariable NS_AVAILABLE;
// Test public ObjC class
NS_AVAILABLE
@interface Foo : NSObject
@end
// Test unavailable attribute.
#ifdef __i386__
#define UNAVAILABLE_I386 __attribute__((unavailable))
#else
#define UNAVAILABLE_I386
#endif
extern int publicGlobalVariable2 UNAVAILABLE_I386;
extern int publicGlobalVariable3 __attribute__((unavailable))
__attribute__((availability(macosx, introduced = 10.9)));
// Test obsoleted with exported variable.
extern int publicGlobalVariable4 __attribute__((availability(
macosx, introduced = 10.9, deprecated = 10.10, obsoleted = 10.11)));
// Test obsoleted with non-existent variable.
extern int publicGlobalVariable5 __attribute__((availability(
macosx, introduced = 10.9, deprecated = 10.10, obsoleted = 10.11)));
#ifdef __i386__
#define OBSOLETE_I386 __attribute__((availability(macosx, obsoleted = 10.11)))
#else
#define OBSOLETE_I386
#endif
extern int publicGlobalVariable6 OBSOLETE_I386;
/// Created from:
// int publicGlobalVariable; int privateGlobalVariable;
//
// @implementation Foo
// @end
//
// #ifndef __i386__
// int publicGlobalVariable2;
// #endif
//
// int publicGlobalVariable3;
// int publicGlobalVariable4;
//
// #ifndef __i386__
// int publicGlobalVariable6;
// #endif
;--- Availability.yaml
--- !mach-o
FileHeader:
magic: 0xFEEDFACF
cputype: 0x1000007
cpusubtype: 0x3
filetype: 0x6
ncmds: 14
sizeofcmds: 1312
flags: 0x100085
reserved: 0x0
LoadCommands:
- cmd: LC_SEGMENT_64
cmdsize: 232
segname: __TEXT
vmaddr: 0
vmsize: 8192
fileoff: 0
filesize: 8192
maxprot: 5
initprot: 5
nsects: 2
flags: 0
Sections:
- sectname: __text
segname: __TEXT
addr: 0x1140
size: 0
offset: 0x1140
align: 0
reloff: 0x0
nreloc: 0
flags: 0x80000000
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
content: ''
- sectname: __cstring
segname: __TEXT
addr: 0x1140
size: 4
offset: 0x1140
align: 0
reloff: 0x0
nreloc: 0
flags: 0x2
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
content: 466F6F00
- cmd: LC_SEGMENT_64
cmdsize: 232
segname: __DATA_CONST
vmaddr: 8192
vmsize: 4096
fileoff: 8192
filesize: 4096
maxprot: 3
initprot: 3
nsects: 2
flags: 16
Sections:
- sectname: __objc_classlist
segname: __DATA_CONST
addr: 0x2000
size: 8
offset: 0x2000
align: 3
reloff: 0x0
nreloc: 0
flags: 0x10000000
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
content: B830000000000000
- sectname: __objc_imageinfo
segname: __DATA_CONST
addr: 0x2008
size: 8
offset: 0x2008
align: 0
reloff: 0x0
nreloc: 0
flags: 0x0
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
content: '0000000040000000'
- cmd: LC_SEGMENT_64
cmdsize: 312
segname: __DATA
vmaddr: 12288
vmsize: 4096
fileoff: 12288
filesize: 4096
maxprot: 3
initprot: 3
nsects: 3
flags: 0
Sections:
- sectname: __objc_const
segname: __DATA
addr: 0x3000
size: 144
offset: 0x3000
align: 3
reloff: 0x0
nreloc: 0
flags: 0x0
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
content: '010000002800000028000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000401100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
- sectname: __objc_data
segname: __DATA
addr: 0x3090
size: 80
offset: 0x3090
align: 3
reloff: 0x0
nreloc: 0
flags: 0x0
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
content: '0000000000000000000000000000000000000000000000000000000000000000003000000000000090300000000000000000000000000000000000000000000000000000000000004830000000000000'
- sectname: __common
segname: __DATA
addr: 0x30E0
size: 24
offset: 0x0
align: 2
reloff: 0x0
nreloc: 0
flags: 0x1
reserved1: 0x0
reserved2: 0x0
reserved3: 0x0
- cmd: LC_SEGMENT_64
cmdsize: 72
segname: __LINKEDIT
vmaddr: 16384
vmsize: 824
fileoff: 16384
filesize: 824
maxprot: 1
initprot: 1
nsects: 0
flags: 0
- cmd: LC_DYLD_INFO_ONLY
cmdsize: 48
rebase_off: 16384
rebase_size: 16
bind_off: 16400
bind_size: 104
weak_bind_off: 0
weak_bind_size: 0
lazy_bind_off: 0
lazy_bind_size: 0
export_off: 16504
export_size: 152
- cmd: LC_SYMTAB
cmdsize: 24
symoff: 16664
nsyms: 14
stroff: 16888
strsize: 320
- cmd: LC_DYSYMTAB
cmdsize: 80
ilocalsym: 0
nlocalsym: 2
iextdefsym: 2
nextdefsym: 8
iundefsym: 10
nundefsym: 4
tocoff: 0
ntoc: 0
modtaboff: 0
nmodtab: 0
extrefsymoff: 0
nextrefsyms: 0
indirectsymoff: 0
nindirectsyms: 0
extreloff: 0
nextrel: 0
locreloff: 0
nlocrel: 0
- cmd: LC_ID_DYLIB
cmdsize: 112
dylib:
name: 24
timestamp: 0
current_version: 65536
compatibility_version: 65536
Content: '/System/Library/Frameworks/Availability.framework/Versions/A/Availability'
ZeroPadBytes: 7
- cmd: LC_UUID
cmdsize: 24
uuid: 4C4C4470-5555-3144-A142-4EE44DA08D2F
- cmd: LC_BUILD_VERSION
cmdsize: 32
platform: 1
minos: 851968
sdk: 983040
ntools: 1
Tools:
- tool: 4
version: 1245184
- cmd: LC_LOAD_DYLIB
cmdsize: 56
dylib:
name: 24
timestamp: 0
current_version: 14942208
compatibility_version: 65536
Content: '/usr/lib/libobjc.A.dylib'
ZeroPadBytes: 8
- cmd: LC_LOAD_DYLIB
cmdsize: 56
dylib:
name: 24
timestamp: 0
current_version: 88473600
compatibility_version: 65536
Content: '/usr/lib/libSystem.B.dylib'
ZeroPadBytes: 6
- cmd: LC_FUNCTION_STARTS
cmdsize: 16
dataoff: 16656
datasize: 8
- cmd: LC_DATA_IN_CODE
cmdsize: 16
dataoff: 16664
datasize: 0
LinkEditData:
RebaseOpcodes:
- Opcode: REBASE_OPCODE_SET_TYPE_IMM
Imm: 1
- Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
Imm: 1
ExtraData: [ 0x0 ]
- Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
Imm: 1
- Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
Imm: 2
ExtraData: [ 0x18 ]
- Opcode: REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB
Imm: 0
ExtraData: [ 0x2, 0x40 ]
- Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
Imm: 1
- Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
Imm: 2
- Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED
Imm: 3
- Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES
Imm: 1
- Opcode: REBASE_OPCODE_DONE
Imm: 0
BindOpcodes:
- Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
Imm: 0
Symbol: '_OBJC_METACLASS_$_NSObject'
- Opcode: BIND_OPCODE_SET_TYPE_IMM
Imm: 1
Symbol: ''
- Opcode: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
Imm: 1
Symbol: ''
- Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
Imm: 2
ULEBExtraData: [ 0x90 ]
Symbol: ''
- Opcode: BIND_OPCODE_DO_BIND
Imm: 0
Symbol: ''
- Opcode: BIND_OPCODE_DO_BIND
Imm: 0
Symbol: ''
- Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
Imm: 0
Symbol: __objc_empty_cache
- Opcode: BIND_OPCODE_SET_TYPE_IMM
Imm: 1
Symbol: ''
- Opcode: BIND_OPCODE_DO_BIND
Imm: 0
Symbol: ''
- Opcode: BIND_OPCODE_ADD_ADDR_ULEB
Imm: 0
ULEBExtraData: [ 0x20 ]
Symbol: ''
- Opcode: BIND_OPCODE_DO_BIND
Imm: 0
Symbol: ''
- Opcode: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
Imm: 0
Symbol: '_OBJC_CLASS_$_NSObject'
- Opcode: BIND_OPCODE_SET_TYPE_IMM
Imm: 1
Symbol: ''
- Opcode: BIND_OPCODE_ADD_ADDR_ULEB
Imm: 0
ULEBExtraData: [ 0xFFFFFFFFFFFFFFF0 ]
Symbol: ''
- Opcode: BIND_OPCODE_DO_BIND
Imm: 0
Symbol: ''
- Opcode: BIND_OPCODE_DONE
Imm: 0
Symbol: ''
ExportTrie:
TerminalSize: 0
NodeOffset: 0
Name: ''
Flags: 0x0
Address: 0x0
Other: 0x0
ImportName: ''
Children:
- TerminalSize: 0
NodeOffset: 5
Name: _
Flags: 0x0
Address: 0x0
Other: 0x0
ImportName: ''
Children:
- TerminalSize: 0
NodeOffset: 17
Name: OBJC_
Flags: 0x0
Address: 0x0
Other: 0x0
ImportName: ''
Children:
- TerminalSize: 3
NodeOffset: 49
Name: 'METACLASS_$_Foo'
Flags: 0x0
Address: 0x3090
Other: 0x0
ImportName: ''
- TerminalSize: 3
NodeOffset: 54
Name: 'CLASS_$_Foo'
Flags: 0x0
Address: 0x30B8
Other: 0x0
ImportName: ''
- TerminalSize: 0
NodeOffset: 59
Name: p
Flags: 0x0
Address: 0x0
Other: 0x0
ImportName: ''
Children:
- TerminalSize: 3
NodeOffset: 104
Name: rivateGlobalVariable
Flags: 0x0
Address: 0x30E0
Other: 0x0
ImportName: ''
- TerminalSize: 3
NodeOffset: 109
Name: ublicGlobalVariable
Flags: 0x0
Address: 0x30E4
Other: 0x0
ImportName: ''
Children:
- TerminalSize: 3
NodeOffset: 130
Name: '4'
Flags: 0x0
Address: 0x30F0
Other: 0x0
ImportName: ''
- TerminalSize: 3
NodeOffset: 135
Name: '3'
Flags: 0x0
Address: 0x30EC
Other: 0x0
ImportName: ''
- TerminalSize: 3
NodeOffset: 140
Name: '2'
Flags: 0x0
Address: 0x30E8
Other: 0x0
ImportName: ''
- TerminalSize: 3
NodeOffset: 145
Name: '6'
Flags: 0x0
Address: 0x30F4
Other: 0x0
ImportName: ''
NameList:
- n_strx: 2
n_type: 0xE
n_sect: 5
n_desc: 0
n_value: 12288
- n_strx: 28
n_type: 0xE
n_sect: 5
n_desc: 0
n_value: 12360
- n_strx: 50
n_type: 0xF
n_sect: 7
n_desc: 0
n_value: 12512
- n_strx: 73
n_type: 0xF
n_sect: 7
n_desc: 0
n_value: 12516
- n_strx: 95
n_type: 0xF
n_sect: 7
n_desc: 0
n_value: 12520
- n_strx: 118
n_type: 0xF
n_sect: 7
n_desc: 0
n_value: 12524
- n_strx: 141
n_type: 0xF
n_sect: 7
n_desc: 0
n_value: 12528
- n_strx: 164
n_type: 0xF
n_sect: 7
n_desc: 0
n_value: 12532
- n_strx: 187
n_type: 0xF
n_sect: 6
n_desc: 0
n_value: 12432
- n_strx: 209
n_type: 0xF
n_sect: 6
n_desc: 0
n_value: 12472
- n_strx: 227
n_type: 0x1
n_sect: 0
n_desc: 256
n_value: 0
- n_strx: 250
n_type: 0x1
n_sect: 0
n_desc: 256
n_value: 0
- n_strx: 277
n_type: 0x1
n_sect: 0
n_desc: 256
n_value: 0
- n_strx: 296
n_type: 0x1
n_sect: 0
n_desc: 512
n_value: 0
StringTable:
- ' '
- '__OBJC_METACLASS_RO_$_Foo'
- '__OBJC_CLASS_RO_$_Foo'
- _privateGlobalVariable
- _publicGlobalVariable
- _publicGlobalVariable2
- _publicGlobalVariable3
- _publicGlobalVariable4
- _publicGlobalVariable6
- '_OBJC_METACLASS_$_Foo'
- '_OBJC_CLASS_$_Foo'
- '_OBJC_CLASS_$_NSObject'
- '_OBJC_METACLASS_$_NSObject'
- __objc_empty_cache
- dyld_stub_binder
- ''
- ''
- ''
- ''
- ''
- ''
- ''
...