import dataclasses
@dataclasses.dataclass
class Header:
path: str
textual: bool | None = None
lazy: bool = False
exists: bool = True
module_name: str | None = None
exports: list[str] = dataclasses.field(default_factory=lambda: ['*'])
force: bool = False
class AllowedHeader(Header):
def __init__(self, path: str):
super().__init__(path, force=True, lazy=True)
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'
return [
Header('alloca.h'),
Header('android/api-level.h', textual=True),
AllowedHeader('arpa/inet.h'),
Header('asm-generic/posix_types.h', textual=True, lazy=True),
Header('assert.h', textual=True),
Header('avx512dqintrin.h', textual=True, 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'),
AllowedHeader('fcntl.h'),
Header('features.h'),
Header('fenv.h'),
AllowedHeader('grp.h'),
AllowedHeader('libgen.h'),
Header('limits.h', textual=True),
AllowedHeader('link.h'),
AllowedHeader('linux/futex.h'),
Header('linux/limits.h', textual=True),
AllowedHeader('linux/posix_types.h'),
AllowedHeader('linux/random.h'),
Header('linux/types.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'),
AllowedHeader('sys/mman.h'),
AllowedHeader('sys/prctl.h'),
Header('sys/procfs.h'),
AllowedHeader('sys/resource.h'),
Header('sys/select.h'),
AllowedHeader('sys/socket.h'),
Header('sys/stat.h', exists=is_win),
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'),
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),
]