import dataclasses
from typing import Optional
@dataclasses.dataclass
class Header:
path: str
textual: Optional[bool] = None
lazy: bool = False
exists: bool = True
module_name: Optional[str] = None
exports: list[str] = dataclasses.field(default_factory=lambda: ['*'])
force: bool = False
private: bool = False
class AllowedHeader(Header):
def __init__(self, path: str, exists: bool = True):
super().__init__(path, force=True, lazy=True, exists=exists)
def headers(os):
is_linux = os == 'linux'
is_android = os == 'android'
is_ios = os == 'ios'
is_mac = os == 'mac'
is_apple = os == 'mac' or os == 'ios'
is_fuchsia = os == 'fuchsia'
is_win = os == 'win'
is_chromeos = os == 'chromeos'
return [
Header('alloca.h'),
Header('android/api-level.h', exists=is_android, textual=True),
Header('android/legacy_stdlib_inlines.h', textual=True),
Header('android/ndk-version.h', exists=is_android),
Header('android/versioning.h', exists=is_android),
AllowedHeader('arpa/inet.h'),
Header('asm/fcntl.h', module_name='asm_fcntl', exists=is_android),
AllowedHeader('asm/hwcap.h'),
Header('asm/ioctl.h', lazy=True, textual=True),
AllowedHeader('asm/ptrace.h'),
Header('asm/sigcontext.h', lazy=True),
Header('asm/unistd.h'),
Header('asm/unistd_64.h'),
Header('asm-generic/errno-base.h'),
Header('asm-generic/errno.h'),
Header('asm-generic/fcntl.h',
module_name='asm_generic_fcntl',
exists=is_android),
Header('asm-generic/ioctl.h', module_name='asm_generic_ioctl', lazy=True),
Header('asm-generic/ioctls.h',
module_name='asm_generic_ioctls',
lazy=True),
Header('asm-generic/posix_types.h', textual=True, lazy=True),
Header('asm-generic/unistd.h'),
Header('assert.h', textual=True),
Header('avx512dqintrin.h', textual=True, lazy=True),
Header('bits/fcntl.h', module_name='bits_fcntl', exists=is_android),
Header('bits/getopt.h', module_name='bits_getopt', lazy=True),
Header('bits/ioctl.h', module_name='bits_ioctl', lazy=True),
Header('bits/mbstate_t.h', textual=False, lazy=True),
Header('bits/timespec.h', textual=False, lazy=True),
Header('corecrt.h', exists=is_win, module_name='corecrt'),
Header('corecrt_wstring.h', exists=is_win, module_name='corecrt_wstring'),
Header('ctype.h'),
Header('cxxabi.h'),
AllowedHeader('dirent.h'),
AllowedHeader('dlfcn.h'),
AllowedHeader('elf.h'),
Header('endian.h'),
Header('fcntl.h',
exports=[
'*', 'asm_fcntl', 'asm_generic_fcntl', 'bits_fcntl',
'linux_fadvise', 'linux_fcntl'
]),
Header('features.h'),
Header('fenv.h'),
Header('getopt.h', exports=['bits_getopt']),
AllowedHeader('grp.h'),
AllowedHeader('libgen.h'),
Header('limits.h', textual=True),
AllowedHeader('link.h'),
Header('linux/fadvise.h', module_name='linux_fadvise'),
AllowedHeader('linux/futex.h'),
Header('linux/ioctl.h'),
Header('linux/limits.h', textual=True),
AllowedHeader('linux/posix_types.h'),
AllowedHeader('linux/random.h'),
AllowedHeader('linux/sched.h'),
Header('linux/sched/types.h', textual=True, private=True),
Header('linux/fcntl.h', module_name='linux_fcntl'),
Header('linux/stat.h', module_name='linux_stat'),
Header('linux/types.h'),
Header('linux/unistd.h'),
Header('locale.h'),
Header('malloc.h'),
AllowedHeader('netdb.h'),
AllowedHeader('netinet/in.h'),
AllowedHeader('netinet/tcp.h'),
Header('new.h', exists=is_win, module_name='new_h'),
AllowedHeader('poll.h'),
Header('pthread.h'),
Header('sal.h', exists=is_win),
Header('sched.h'),
AllowedHeader('semaphore.h'),
Header('setjmp.h'),
Header('signal.h'),
Header('string.h', exists=is_win, exports=['*', 'corecrt_wstring']),
Header('strings.h'),
AllowedHeader('sys/auxv.h'),
Header('sys/cdefs.h', textual=not is_android),
AllowedHeader('sys/eventfd.h'),
AllowedHeader('sys/inotify.h'),
Header('sys/ioctl.h',
exports=['asm_generic_ioctl', 'asm_generic_ioctls', 'bits_ioctl']),
AllowedHeader('sys/mman.h'),
AllowedHeader('sys/prctl.h'),
Header('sys/procfs.h'),
AllowedHeader('sys/ptrace.h'),
AllowedHeader('sys/resource.h'),
Header('sys/select.h'),
AllowedHeader('sys/socket.h'),
Header('sys/stat.h', exports=['linux_stat']),
Header('sys/time.h'),
AllowedHeader('sys/syscall.h'),
AllowedHeader('sys/sysinfo.h'),
AllowedHeader('sys/time.h'),
AllowedHeader('sys/timerfd.h'),
Header('sys/types.h'),
Header('sys/ucontext.h'),
AllowedHeader('sys/un.h'),
Header('sys/user.h'),
AllowedHeader('sys/utsname.h'),
AllowedHeader('sys/wait.h'),
AllowedHeader('syscall.h'),
Header('time.h'),
AllowedHeader('ucontext.h'),
Header('unistd.h', exports=['*', 'bits_getopt']),
Header('unwind.h', textual=True, private=True),
Header('vcruntime_exception.h',
exists=is_win,
module_name='vcruntime_exception'),
Header('vcruntime_new.h', exists=is_win, module_name='vcruntime_new'),
Header('vcruntime_typeinfo.h',
exists=is_win,
module_name='vcruntime_typeinfo',
exports=['*', 'vcruntime_exception']),
Header('wchar.h', textual=not is_win),
Header('winapifamily.h', exists=is_win),
]