llvm/clang/test/InstallAPI/rpath.test

; RUN: rm -rf %t
; RUN: split-file %s %t
; RUN: yaml2obj %t/RPath.yaml -o %t/RPath

; RUN: clang-installapi --filetype=tbd-v5 \
; RUN: -target arm64-apple-macos13.0 -target x86_64-apple-macos13.0 \
; RUN: -install_name @rpath/Frameworks/RPath.framework/Versions/A/RPath \
; RUN: -current_version 1 -compatibility_version 1 \
; RUN: --extra-public-header=%t/public.h \
; RUN: -o %t/RPath_warnings.tbd \
; RUN: --verify-against=%t/RPath \
; RUN: --verify-mode=Pedantic 2>&1 | FileCheck %s --check-prefix=MISSING
; RUN: llvm-readtapi --compare %t/RPath_warnings.tbd %t/expected_no_rpaths.tbd

; MISSING-DAG: warning: runpath search paths missing from installAPI option: '@loader_path/../../../SharedFrameworks/ [ x86_64 arm64 ]'
; MISSING-DAG: warning: runpath search paths missing from installAPI option: '@loader_path/../../PrivateFrameworks/ [ x86_64 arm64 ]'

; RUN: clang-installapi --filetype=tbd-v5 \
; RUN: -target arm64-apple-macos13.0 -target x86_64-apple-macos13.0 \
; RUN: -install_name @rpath/Frameworks/RPath.framework/Versions/A/RPath \
; RUN: -current_version 1 -compatibility_version 1 \
; RUN: --extra-public-header=%t/public.h \
; RUN: -Xarch_arm64 -rpath @loader_path/../../../SharedFrameworks/ \
; RUN: -o %t/RPath_Xarch.tbd \
; RUN: --verify-against=%t/RPath \
; RUN: --verify-mode=Pedantic 2>&1 | FileCheck %s --check-prefix=XARCH
; RUN: llvm-readtapi --compare %t/RPath_Xarch.tbd %t/expected_xarch_rpaths.tbd

; XARCH: warning: runpath search paths do not match: '@loader_path/../../../SharedFrameworks/ [ arm64 ]' (provided) vs '@loader_path/../../../SharedFrameworks/ [ x86_64 arm64 ]'
; XARCH: warning: runpath search paths missing from installAPI option: '@loader_path/../../PrivateFrameworks/ [ x86_64 arm64 ]'

; RUN: clang-installapi --filetype=tbd-v5 \
; RUN: -target arm64-apple-macos13.0 -target x86_64-apple-macos13.0 \
; RUN: -install_name @rpath/Frameworks/RPath.framework/Versions/A/RPath \
; RUN: -current_version 1 -compatibility_version 1 \
; RUN: --extra-public-header=%t/public.h \
; RUN: -rpath @loader_path/../../../SharedFrameworks/ \
; RUN: -rpath @loader_path/../../PrivateFrameworks/ \
; RUN: --verify-against=%t/RPath --verify-mode=Pedantic \
; RUN: -o %t/RPath.tbd 2>&1 | FileCheck -allow-empty %s 
; RUN: llvm-readtapi --compare %t/RPath.tbd %t/expected.tbd

CHECK-NOT: error
CHECK-NOT: warning

;--- public.h
extern int publicGlobalVariable; 

;--- expected.tbd
{
  "main_library": {
    "exported_symbols": [
      {
        "data": {
          "global": [
            "_publicGlobalVariable"
          ]
        }
      }
    ],
    "flags": [
      {
        "attributes": [
          "not_app_extension_safe"
        ]
      }
    ],
    "install_names": [
      {
        "name": "@rpath/Frameworks/RPath.framework/Versions/A/RPath"
      }
    ],
    "rpaths": [
      {
        "paths": [
          "@loader_path/../../../SharedFrameworks/",
          "@loader_path/../../PrivateFrameworks/"
        ]
      }
    ],
    "target_info": [
      {
        "min_deployment": "13.0",
        "target": "x86_64-macos"
      },
      {
        "min_deployment": "13.0",
        "target": "arm64-macos"
      }
    ]
  },
  "tapi_tbd_version": 5
}

;--- expected_no_rpaths.tbd
{
  "main_library": {
    "exported_symbols": [
      {
        "data": {
          "global": [
            "_publicGlobalVariable"
          ]
        }
      }
    ],
    "flags": [
      {
        "attributes": [
          "not_app_extension_safe"
        ]
      }
    ],
    "install_names": [
      {
        "name": "@rpath/Frameworks/RPath.framework/Versions/A/RPath"
      }
    ],
    "target_info": [
      {
        "min_deployment": "13.0",
        "target": "x86_64-macos"
      },
      {
        "min_deployment": "13.0",
        "target": "arm64-macos"
      }
    ]
  },
  "tapi_tbd_version": 5
}

;--- expected_xarch_rpaths.tbd
{
  "main_library": {
    "exported_symbols": [
      {
        "data": {
          "global": [
            "_publicGlobalVariable"
          ]
        }
      }
    ],
    "flags": [
      {
        "attributes": [
          "not_app_extension_safe"
        ]
      }
    ],
    "install_names": [
      {
        "name": "@rpath/Frameworks/RPath.framework/Versions/A/RPath"
      }
    ],
    "rpaths": [
      {
        "paths": [
          "@loader_path/../../../SharedFrameworks/"
        ],
        "targets": [
          "arm64-macos"
        ]
      }
    ],
    "target_info": [
      {
        "min_deployment": "13.0",
        "target": "x86_64-macos"
      },
      {
        "min_deployment": "13.0",
        "target": "arm64-macos"
      }
    ]
  },
  "tapi_tbd_version": 5
}

;--- RPath.yaml
--- !fat-mach-o
FatHeader:
  magic:           0xCAFEBABE
  nfat_arch:       2
FatArchs:
  - cputype:         0x1000007
    cpusubtype:      0x3
    offset:          0x1000
    size:            12408
    align:           12
  - cputype:         0x100000C
    cpusubtype:      0x0
    offset:          0x8000
    size:            33312
    align:           14
Slices:
  - !mach-o
    FileHeader:
      magic:           0xFEEDFACF
      cputype:         0x1000007
      cpusubtype:      0x3
      filetype:        0x6
      ncmds:           16
      sizeofcmds:      1072
      flags:           0x100085
      reserved:        0x0
    LoadCommands:
      - cmd:             LC_SEGMENT_64
        cmdsize:         152
        segname:         __TEXT
        vmaddr:          0
        vmsize:          8192
        fileoff:         0
        filesize:        8192
        maxprot:         5
        initprot:        5
        nsects:          1
        flags:           0
        Sections:
          - sectname:        __text
            segname:         __TEXT
            addr:            0x1050
            size:            0
            offset:          0x1050
            align:           0
            reloff:          0x0
            nreloc:          0
            flags:           0x80000000
            reserved1:       0x0
            reserved2:       0x0
            reserved3:       0x0
            content:         ''
      - cmd:             LC_SEGMENT_64
        cmdsize:         152
        segname:         __DATA_CONST
        vmaddr:          8192
        vmsize:          4096
        fileoff:         8192
        filesize:        4096
        maxprot:         3
        initprot:        3
        nsects:          1
        flags:           16
        Sections:
          - sectname:        __objc_imageinfo
            segname:         __DATA_CONST
            addr:            0x2000
            size:            8
            offset:          0x2000
            align:           0
            reloff:          0x0
            nreloc:          0
            flags:           0x0
            reserved1:       0x0
            reserved2:       0x0
            reserved3:       0x0
            content:         '0000000040000000'
      - cmd:             LC_SEGMENT_64
        cmdsize:         152
        segname:         __DATA
        vmaddr:          12288
        vmsize:          4096
        fileoff:         12288
        filesize:        0
        maxprot:         3
        initprot:        3
        nsects:          1
        flags:           0
        Sections:
          - sectname:        __common
            segname:         __DATA
            addr:            0x3000
            size:            4
            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:          120
        fileoff:         12288
        filesize:        120
        maxprot:         1
        initprot:        1
        nsects:          0
        flags:           0
      - cmd:             LC_DYLD_INFO_ONLY
        cmdsize:         48
        rebase_off:      0
        rebase_size:     0
        bind_off:        0
        bind_size:       0
        weak_bind_off:   0
        weak_bind_size:  0
        lazy_bind_off:   0
        lazy_bind_size:  0
        export_off:      12288
        export_size:     32
      - cmd:             LC_SYMTAB
        cmdsize:         24
        symoff:          12328
        nsyms:           2
        stroff:          12360
        strsize:         48
      - cmd:             LC_DYSYMTAB
        cmdsize:         80
        ilocalsym:       0
        nlocalsym:       0
        iextdefsym:      0
        nextdefsym:      1
        iundefsym:       1
        nundefsym:       1
        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_RPATH
        cmdsize:         56
        path:            12
        Content:         '@loader_path/../../../SharedFrameworks/'
        ZeroPadBytes:    5
      - cmd:             LC_RPATH
        cmdsize:         56
        path:            12
        Content:         '@loader_path/../../PrivateFrameworks/'
        ZeroPadBytes:    7
      - cmd:             LC_ID_DYLIB
        cmdsize:         80
        dylib:
          name:            24
          timestamp:       0
          current_version: 65536
          compatibility_version: 65536
        Content:         '@rpath/Frameworks/RPath.framework/Versions/A/RPath'
        ZeroPadBytes:    6
      - cmd:             LC_UUID
        cmdsize:         24
        uuid:            4C4C4489-5555-3144-A1D1-28C8EA66FB24
      - 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: 88539136
          compatibility_version: 65536
        Content:         '/usr/lib/libSystem.B.dylib'
        ZeroPadBytes:    6
      - cmd:             LC_FUNCTION_STARTS
        cmdsize:         16
        dataoff:         12320
        datasize:        8
      - cmd:             LC_DATA_IN_CODE
        cmdsize:         16
        dataoff:         12328
        datasize:        0
    LinkEditData:
      ExportTrie:
        TerminalSize:    0
        NodeOffset:      0
        Name:            ''
        Flags:           0x0
        Address:         0x0
        Other:           0x0
        ImportName:      ''
        Children:
          - TerminalSize:    3
            NodeOffset:      25
            Name:            _publicGlobalVariable
            Flags:           0x0
            Address:         0x3000
            Other:           0x0
            ImportName:      ''
      NameList:
        - n_strx:          2
          n_type:          0xF
          n_sect:          3
          n_desc:          0
          n_value:         12288
        - n_strx:          24
          n_type:          0x1
          n_sect:          0
          n_desc:          512
          n_value:         0
      StringTable:
        - ' '
        - _publicGlobalVariable
        - dyld_stub_binder
        - ''
        - ''
        - ''
        - ''
        - ''
        - ''
        - ''
  - !mach-o
    FileHeader:
      magic:           0xFEEDFACF
      cputype:         0x100000C
      cpusubtype:      0x0
      filetype:        0x6
      ncmds:           17
      sizeofcmds:      1088
      flags:           0x100085
      reserved:        0x0
    LoadCommands:
      - cmd:             LC_SEGMENT_64
        cmdsize:         152
        segname:         __TEXT
        vmaddr:          0
        vmsize:          16384
        fileoff:         0
        filesize:        16384
        maxprot:         5
        initprot:        5
        nsects:          1
        flags:           0
        Sections:
          - sectname:        __text
            segname:         __TEXT
            addr:            0x1060
            size:            0
            offset:          0x1060
            align:           0
            reloff:          0x0
            nreloc:          0
            flags:           0x80000000
            reserved1:       0x0
            reserved2:       0x0
            reserved3:       0x0
            content:         ''
      - cmd:             LC_SEGMENT_64
        cmdsize:         152
        segname:         __DATA_CONST
        vmaddr:          16384
        vmsize:          16384
        fileoff:         16384
        filesize:        16384
        maxprot:         3
        initprot:        3
        nsects:          1
        flags:           16
        Sections:
          - sectname:        __objc_imageinfo
            segname:         __DATA_CONST
            addr:            0x4000
            size:            8
            offset:          0x4000
            align:           0
            reloff:          0x0
            nreloc:          0
            flags:           0x0
            reserved1:       0x0
            reserved2:       0x0
            reserved3:       0x0
            content:         '0000000040000000'
      - cmd:             LC_SEGMENT_64
        cmdsize:         152
        segname:         __DATA
        vmaddr:          32768
        vmsize:          16384
        fileoff:         32768
        filesize:        0
        maxprot:         3
        initprot:        3
        nsects:          1
        flags:           0
        Sections:
          - sectname:        __common
            segname:         __DATA
            addr:            0x8000
            size:            4
            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:          49152
        vmsize:          544
        fileoff:         32768
        filesize:        544
        maxprot:         1
        initprot:        1
        nsects:          0
        flags:           0
      - cmd:             LC_DYLD_INFO_ONLY
        cmdsize:         48
        rebase_off:      0
        rebase_size:     0
        bind_off:        0
        bind_size:       0
        weak_bind_off:   0
        weak_bind_size:  0
        lazy_bind_off:   0
        lazy_bind_size:  0
        export_off:      32768
        export_size:     32
      - cmd:             LC_SYMTAB
        cmdsize:         24
        symoff:          32808
        nsyms:           2
        stroff:          32840
        strsize:         48
      - cmd:             LC_DYSYMTAB
        cmdsize:         80
        ilocalsym:       0
        nlocalsym:       0
        iextdefsym:      0
        nextdefsym:      1
        iundefsym:       1
        nundefsym:       1
        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_RPATH
        cmdsize:         56
        path:            12
        Content:         '@loader_path/../../../SharedFrameworks/'
        ZeroPadBytes:    5
      - cmd:             LC_RPATH
        cmdsize:         56
        path:            12
        Content:         '@loader_path/../../PrivateFrameworks/'
        ZeroPadBytes:    7
      - cmd:             LC_ID_DYLIB
        cmdsize:         80
        dylib:
          name:            24
          timestamp:       0
          current_version: 65536
          compatibility_version: 65536
        Content:         '@rpath/Frameworks/RPath.framework/Versions/A/RPath'
        ZeroPadBytes:    6
      - cmd:             LC_UUID
        cmdsize:         24
        uuid:            4C4C440D-5555-3144-A18B-DB67A0A12202
      - 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: 88539136
          compatibility_version: 65536
        Content:         '/usr/lib/libSystem.B.dylib'
        ZeroPadBytes:    6
      - cmd:             LC_FUNCTION_STARTS
        cmdsize:         16
        dataoff:         32800
        datasize:        8
      - cmd:             LC_DATA_IN_CODE
        cmdsize:         16
        dataoff:         32808
        datasize:        0
      - cmd:             LC_CODE_SIGNATURE
        cmdsize:         16
        dataoff:         32896
        datasize:        416
    LinkEditData:
      ExportTrie:
        TerminalSize:    0
        NodeOffset:      0
        Name:            ''
        Flags:           0x0
        Address:         0x0
        Other:           0x0
        ImportName:      ''
        Children:
          - TerminalSize:    4
            NodeOffset:      25
            Name:            _publicGlobalVariable
            Flags:           0x0
            Address:         0x8000
            Other:           0x0
            ImportName:      ''
      NameList:
        - n_strx:          2
          n_type:          0xF
          n_sect:          3
          n_desc:          0
          n_value:         32768
        - n_strx:          24
          n_type:          0x1
          n_sect:          0
          n_desc:          512
          n_value:         0
      StringTable:
        - ' '
        - _publicGlobalVariable
        - dyld_stub_binder
        - ''
        - ''
        - ''
        - ''
        - ''
        - ''
        - ''
      FunctionStarts:  [ 0x1060 ]
...