mirror of
https://github.com/python/cpython.git
synced 2026-10-28 10:25:05 +08:00
gh-157695: Check that C API macros start with "Py" (#157696)
Add Tools/build/check_capi_macros.py. Ignore existing macros which don't start with "Py", only prevent adding new names which don't respect this convention. Run check_capi_macros.py in pre-commit. Co-authored-by: Peter Bierma <zintensitydev@gmail.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Co-authored-by: Petr Viktorin <encukou@gmail.com>
This commit is contained in:
3 files changed
+991
No files matched your search
@@ -143,6 +143,15 @@ repos:
|
||||
entry: Space found in path, move to Misc/NEWS.d/next/Core_and_Builtins/
|
||||
files: Misc/NEWS.d/next/Core and Builtins/20.*.rst
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: check-capi-macros
|
||||
name: Check C API macros start with Py
|
||||
language: python
|
||||
entry: python Tools/build/check_capi_macros.py
|
||||
pass_filenames: false
|
||||
files: ^(Include/(cpython/)?[^/]+\.h|pyconfig\.h\.in|Tools/build/check_capi_macros)
|
||||
|
||||
- repo: meta
|
||||
hooks:
|
||||
- id: check-hooks-apply
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
"""
|
||||
Check that all macros defined by the Python C API have a name starting with
|
||||
"Py". Ignore names listed by check_capi_macros_ignored.txt: macros with an
|
||||
invalid name, added before this script was created.
|
||||
|
||||
Python C API:
|
||||
|
||||
* Include/*.h
|
||||
* Include/cpython/*.h
|
||||
* pyconfig.h.in
|
||||
"""
|
||||
|
||||
import difflib
|
||||
import glob
|
||||
import os.path
|
||||
import re
|
||||
import sys
|
||||
|
||||
EXCLUDE_HEADERS = {
|
||||
# Header files not included by Python.h and ignored by this script
|
||||
'dynamic_annotations.h',
|
||||
'errcode.h',
|
||||
'opcode.h',
|
||||
'opcode_ids.h',
|
||||
'osdefs.h',
|
||||
'pyexpat.h',
|
||||
'structmember.h',
|
||||
|
||||
# Header files not included by Python.h but parsed by this script:
|
||||
# - datetime.h
|
||||
# - frameobject.h
|
||||
# - marshal.h
|
||||
# - py_curses.h
|
||||
# - pydtrace.h
|
||||
}
|
||||
|
||||
TOOLS_BUILD_DIR = os.path.abspath(os.path.dirname(__file__))
|
||||
SRC_DIR = os.path.dirname(os.path.dirname(TOOLS_BUILD_DIR))
|
||||
IGNORED_FILENAME = os.path.join(TOOLS_BUILD_DIR, 'check_capi_macros_ignored.txt')
|
||||
|
||||
DEFINE_REGEX = re.compile(r'\s*#\s*(?P<directive>define|undef)\s+(?P<macro>.*)')
|
||||
PYTHON_PREFIX = re.compile(r'(Py|PY|_Py|_PY)')
|
||||
NAME_REGEX = re.compile(r'([A-Za-z_][A-Za-z0-9_]*)\b')
|
||||
|
||||
CAUSES_BY_DIRECTIVE = {
|
||||
"define": "defined",
|
||||
"undef": "undefined",
|
||||
}
|
||||
|
||||
|
||||
def parse_file(filename, names):
|
||||
with open(filename, encoding='utf8') as fp:
|
||||
for lineno, line in enumerate(fp, start=1):
|
||||
# Check for '#define MACRO'
|
||||
match = DEFINE_REGEX.match(line)
|
||||
if not match:
|
||||
continue
|
||||
macro = match['macro']
|
||||
directive = match['directive']
|
||||
cause = CAUSES_BY_DIRECTIVE.get(directive, directive)
|
||||
|
||||
if PYTHON_PREFIX.match(macro):
|
||||
continue
|
||||
|
||||
match = NAME_REGEX.match(macro)
|
||||
if not match:
|
||||
print(f"ERROR: {filename}: Unable to parse {line!r}")
|
||||
sys.exit(1)
|
||||
name = match[1]
|
||||
names.append((name, filename, lineno, cause))
|
||||
|
||||
|
||||
def get_ignored_names():
|
||||
ignored = []
|
||||
with open(IGNORED_FILENAME, encoding='utf8') as fp:
|
||||
for line in fp:
|
||||
name = line.strip()
|
||||
if name.startswith('#'):
|
||||
# Ignore comment
|
||||
continue
|
||||
if name:
|
||||
ignored.append(name)
|
||||
return ignored
|
||||
|
||||
|
||||
def main():
|
||||
failure = False
|
||||
|
||||
# Parse header files
|
||||
include_dir = os.path.join(SRC_DIR, 'Include')
|
||||
files = glob.glob(os.path.join(include_dir, '*.h'))
|
||||
files = [filename for filename in files
|
||||
if os.path.basename(filename) not in EXCLUDE_HEADERS]
|
||||
files.extend(glob.glob(os.path.join(include_dir, 'cpython', '*.h')))
|
||||
files.append(os.path.join(SRC_DIR, 'pyconfig.h.in'))
|
||||
names = [] # list of (name: str, filename: str, lineno: int, cause: str)
|
||||
for filename in files:
|
||||
parse_file(filename, names)
|
||||
|
||||
# Parse ignore list
|
||||
ignored = get_ignored_names()
|
||||
|
||||
# Check if the sorted list has duplicated entries
|
||||
if len(set(ignored)) != len(ignored):
|
||||
print(f"ERROR: {IGNORED_FILENAME} list contains duplicated entries:")
|
||||
print()
|
||||
seen = set()
|
||||
for name in ignored:
|
||||
if name not in seen:
|
||||
seen.add(name)
|
||||
continue
|
||||
print(f"- {name}")
|
||||
print()
|
||||
failure = True
|
||||
|
||||
# Check if the sorted list is sorted
|
||||
ignored_sorted = sorted(ignored)
|
||||
if ignored_sorted != ignored:
|
||||
print(f"ERROR: {IGNORED_FILENAME} list is not sorted")
|
||||
print()
|
||||
diff = difflib.unified_diff(ignored, ignored_sorted,
|
||||
fromfile=IGNORED_FILENAME,
|
||||
tofile=IGNORED_FILENAME,
|
||||
lineterm='')
|
||||
for line in diff:
|
||||
print(line)
|
||||
print()
|
||||
failure = True
|
||||
|
||||
# Check for outdated ignore list
|
||||
names_set = {name for name, filename, lineno, cause in names}
|
||||
ignored = set(ignored)
|
||||
outdated = ignored - names_set
|
||||
if outdated:
|
||||
print(f"ERROR: {IGNORED_FILENAME} is outdated, "
|
||||
"the following macros can be removed:")
|
||||
print()
|
||||
for name in sorted(outdated):
|
||||
print(f"- {name}")
|
||||
print()
|
||||
print(f"Total: {len(outdated)} macros")
|
||||
print()
|
||||
failure = True
|
||||
|
||||
# Check for new macros
|
||||
new_macros = names_set - ignored
|
||||
if new_macros:
|
||||
print('ERROR: the Python C API defines the following new macros:')
|
||||
print()
|
||||
count = 0
|
||||
for name, filename, lineno, cause in sorted(names):
|
||||
if name in ignored:
|
||||
continue
|
||||
print(f"- {name} {cause} at {filename}:{lineno}")
|
||||
count += 1
|
||||
print()
|
||||
print(f"Total: {count} macros")
|
||||
failure = True
|
||||
|
||||
if not failure:
|
||||
print("OK: the ignore list is up to date and sorted")
|
||||
print("OK: the Python C API only defines macros with names "
|
||||
f"starting with Py (ignoring {len(ignored)} macros)")
|
||||
sys.exit(0)
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,812 @@
|
||||
# Old C API macros with a name which doesn't start with "Py". If a macro
|
||||
# is removed from the C API, it should be removed from this list as well.
|
||||
#
|
||||
# Adding a new macro to this ignore list requires the approval of the C API
|
||||
# Working Group. Open an issue at:
|
||||
# https://github.com/capi-workgroup/decisions/issues/
|
||||
|
||||
AC_APPLE_UNIVERSAL_BUILD
|
||||
AIX_BUILDDATE
|
||||
AIX_GENUINE_CPLUSPLUS
|
||||
ALIGNOF_LONG
|
||||
ALIGNOF_MAX_ALIGN_T
|
||||
ALIGNOF_SIZE_T
|
||||
ALT_SOABI
|
||||
ANDROID_API_LEVEL
|
||||
CODESET
|
||||
CO_ASYNC_GENERATOR
|
||||
CO_COROUTINE
|
||||
CO_FUTURE_ABSOLUTE_IMPORT
|
||||
CO_FUTURE_ANNOTATIONS
|
||||
CO_FUTURE_BARRY_AS_BDFL
|
||||
CO_FUTURE_DIVISION
|
||||
CO_FUTURE_GENERATOR_STOP
|
||||
CO_FUTURE_PRINT_FUNCTION
|
||||
CO_FUTURE_UNICODE_LITERALS
|
||||
CO_FUTURE_WITH_STATEMENT
|
||||
CO_GENERATOR
|
||||
CO_HAS_DOCSTRING
|
||||
CO_ITERABLE_COROUTINE
|
||||
CO_MAXBLOCKS
|
||||
CO_METHOD
|
||||
CO_NESTED
|
||||
CO_NEWLOCALS
|
||||
CO_NO_MONITORING_EVENTS
|
||||
CO_OPTIMIZED
|
||||
CO_VARARGS
|
||||
CO_VARKEYWORDS
|
||||
CURSES_ERROR_FORMAT
|
||||
CURSES_ERROR_MUST_CALL_FORMAT
|
||||
CURSES_ERROR_VERBOSE_FORMAT
|
||||
DOUBLE_IS_BIG_ENDIAN_IEEE754
|
||||
DOUBLE_IS_LITTLE_ENDIAN_IEEE754
|
||||
ENABLE_IPV6
|
||||
EVAL_CALL_API
|
||||
EVAL_CALL_BUILD_CLASS
|
||||
EVAL_CALL_FUNCTION_EX
|
||||
EVAL_CALL_FUNCTION_VECTORCALL
|
||||
EVAL_CALL_GENERATOR
|
||||
EVAL_CALL_KINDS
|
||||
EVAL_CALL_LEGACY
|
||||
EVAL_CALL_METHOD
|
||||
EVAL_CALL_SLOT
|
||||
EVAL_CALL_TOTAL
|
||||
EVAL_CALL_VECTOR
|
||||
FUTURE_ABSOLUTE_IMPORT
|
||||
FUTURE_ANNOTATIONS
|
||||
FUTURE_BARRY_AS_BDFL
|
||||
FUTURE_DIVISION
|
||||
FUTURE_GENERATORS
|
||||
FUTURE_GENERATOR_STOP
|
||||
FUTURE_NESTED_SCOPES
|
||||
FUTURE_PRINT_FUNCTION
|
||||
FUTURE_UNICODE_LITERALS
|
||||
FUTURE_WITH_STATEMENT
|
||||
FVC_ASCII
|
||||
FVC_MASK
|
||||
FVC_NONE
|
||||
FVC_REPR
|
||||
FVC_STR
|
||||
FVS_HAVE_SPEC
|
||||
FVS_MASK
|
||||
GETPGRP_HAVE_ARG
|
||||
HAVE_ACCEPT
|
||||
HAVE_ACCEPT4
|
||||
HAVE_ACOSH
|
||||
HAVE_ACOSPI
|
||||
HAVE_ADDRINFO
|
||||
HAVE_ALARM
|
||||
HAVE_ALIGNED_REQUIRED
|
||||
HAVE_ALLOCA_H
|
||||
HAVE_ALTZONE
|
||||
HAVE_ASINH
|
||||
HAVE_ASINPI
|
||||
HAVE_ASM_TYPES_H
|
||||
HAVE_ATAN2PI
|
||||
HAVE_ATANH
|
||||
HAVE_ATANPI
|
||||
HAVE_BACKTRACE
|
||||
HAVE_BIND
|
||||
HAVE_BIND_TEXTDOMAIN_CODESET
|
||||
HAVE_BLUETOOTH_BLUETOOTH_H
|
||||
HAVE_BLUETOOTH_H
|
||||
HAVE_BROKEN_MBSTOWCS
|
||||
HAVE_BROKEN_NICE
|
||||
HAVE_BROKEN_PIPE_BUF
|
||||
HAVE_BROKEN_POLL
|
||||
HAVE_BROKEN_POSIX_SEMAPHORES
|
||||
HAVE_BROKEN_PTHREAD_SIGMASK
|
||||
HAVE_BROKEN_SEM_GETVALUE
|
||||
HAVE_BROKEN_UNSETENV
|
||||
HAVE_BUILTIN_ATOMIC
|
||||
HAVE_BZLIB_H
|
||||
HAVE_CHFLAGS
|
||||
HAVE_CHMOD
|
||||
HAVE_CHOWN
|
||||
HAVE_CHROOT
|
||||
HAVE_CLEARENV
|
||||
HAVE_CLOCK
|
||||
HAVE_CLOCK_GETRES
|
||||
HAVE_CLOCK_GETTIME
|
||||
HAVE_CLOCK_NANOSLEEP
|
||||
HAVE_CLOCK_SETTIME
|
||||
HAVE_CLOCK_T
|
||||
HAVE_CLOSEFROM
|
||||
HAVE_CLOSE_RANGE
|
||||
HAVE_COMPUTED_GOTOS
|
||||
HAVE_CONFSTR
|
||||
HAVE_CONIO_H
|
||||
HAVE_CONNECT
|
||||
HAVE_COPY_FILE_RANGE
|
||||
HAVE_COSPI
|
||||
HAVE_CTERMID
|
||||
HAVE_CTERMID_R
|
||||
HAVE_CURSES_DEFINE_KEY
|
||||
HAVE_CURSES_ESCDELAY
|
||||
HAVE_CURSES_FILTER
|
||||
HAVE_CURSES_GETMOUSE
|
||||
HAVE_CURSES_H
|
||||
HAVE_CURSES_HAS_KEY
|
||||
HAVE_CURSES_HAS_MOUSE
|
||||
HAVE_CURSES_IMMEDOK
|
||||
HAVE_CURSES_IS_KEYPAD
|
||||
HAVE_CURSES_IS_LEAVEOK
|
||||
HAVE_CURSES_IS_PAD
|
||||
HAVE_CURSES_IS_TERM_RESIZED
|
||||
HAVE_CURSES_KEYOK
|
||||
HAVE_CURSES_KEY_DEFINED
|
||||
HAVE_CURSES_NEW_PRESCR
|
||||
HAVE_CURSES_NOFILTER
|
||||
HAVE_CURSES_RESIZETERM
|
||||
HAVE_CURSES_RESIZE_TERM
|
||||
HAVE_CURSES_SCR_DUMP
|
||||
HAVE_CURSES_SCR_SET
|
||||
HAVE_CURSES_SET_ESCDELAY
|
||||
HAVE_CURSES_SET_TABSIZE
|
||||
HAVE_CURSES_SLK_ATTR_OFF
|
||||
HAVE_CURSES_SLK_ATTR_ON
|
||||
HAVE_CURSES_SLK_ATTR_SET
|
||||
HAVE_CURSES_SLK_COLOR
|
||||
HAVE_CURSES_SYNCOK
|
||||
HAVE_CURSES_TABSIZE
|
||||
HAVE_CURSES_TERM_ATTRS
|
||||
HAVE_CURSES_TYPEAHEAD
|
||||
HAVE_CURSES_USE_ENV
|
||||
HAVE_CURSES_USE_SCREEN
|
||||
HAVE_CURSES_USE_WINDOW
|
||||
HAVE_CURSES_WATTR_GET
|
||||
HAVE_CURSES_WATTR_OFF
|
||||
HAVE_CURSES_WATTR_ON
|
||||
HAVE_CURSES_WATTR_SET
|
||||
HAVE_CURSES_WCHGAT
|
||||
HAVE_CURSES_WCOLOR_SET
|
||||
HAVE_DB_H
|
||||
HAVE_DECLSPEC_DLL
|
||||
HAVE_DECL_PR_SET_VMA_ANON_NAME
|
||||
HAVE_DECL_RTLD_DEEPBIND
|
||||
HAVE_DECL_RTLD_GLOBAL
|
||||
HAVE_DECL_RTLD_LAZY
|
||||
HAVE_DECL_RTLD_LOCAL
|
||||
HAVE_DECL_RTLD_MEMBER
|
||||
HAVE_DECL_RTLD_NODELETE
|
||||
HAVE_DECL_RTLD_NOLOAD
|
||||
HAVE_DECL_RTLD_NOW
|
||||
HAVE_DECL_TZNAME
|
||||
HAVE_DECL_UT_NAMESIZE
|
||||
HAVE_DEVICE_MACROS
|
||||
HAVE_DEV_PTC
|
||||
HAVE_DEV_PTMX
|
||||
HAVE_DIRECT_H
|
||||
HAVE_DIRENT_D_TYPE
|
||||
HAVE_DIRENT_H
|
||||
HAVE_DIRFD
|
||||
HAVE_DLADDR
|
||||
HAVE_DLADDR1
|
||||
HAVE_DLFCN_H
|
||||
HAVE_DLOPEN
|
||||
HAVE_DL_ITERATE_PHDR
|
||||
HAVE_DUP
|
||||
HAVE_DUP2
|
||||
HAVE_DUP3
|
||||
HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
|
||||
HAVE_DYNAMIC_LOADING
|
||||
HAVE_EDITLINE_READLINE_H
|
||||
HAVE_ENDIAN_H
|
||||
HAVE_EPOLL
|
||||
HAVE_EPOLL_CREATE1
|
||||
HAVE_ERF
|
||||
HAVE_ERFC
|
||||
HAVE_ERRNO_H
|
||||
HAVE_EVENTFD
|
||||
HAVE_EXECINFO_H
|
||||
HAVE_EXECV
|
||||
HAVE_EXPLICIT_BZERO
|
||||
HAVE_EXPLICIT_MEMSET
|
||||
HAVE_EXPM1
|
||||
HAVE_FACCESSAT
|
||||
HAVE_FCHDIR
|
||||
HAVE_FCHMOD
|
||||
HAVE_FCHMODAT
|
||||
HAVE_FCHOWN
|
||||
HAVE_FCHOWNAT
|
||||
HAVE_FCNTL_H
|
||||
HAVE_FDATASYNC
|
||||
HAVE_FDOPENDIR
|
||||
HAVE_FDWALK
|
||||
HAVE_FEXECVE
|
||||
HAVE_FFI_CLOSURE_ALLOC
|
||||
HAVE_FFI_PREP_CIF_VAR
|
||||
HAVE_FFI_PREP_CLOSURE_LOC
|
||||
HAVE_FLOCK
|
||||
HAVE_FORK
|
||||
HAVE_FORK1
|
||||
HAVE_FORKPTY
|
||||
HAVE_FPATHCONF
|
||||
HAVE_FSEEK64
|
||||
HAVE_FSEEKO
|
||||
HAVE_FSTATAT
|
||||
HAVE_FSTATVFS
|
||||
HAVE_FSYNC
|
||||
HAVE_FTELL64
|
||||
HAVE_FTELLO
|
||||
HAVE_FTIME
|
||||
HAVE_FTRUNCATE
|
||||
HAVE_FUTIMENS
|
||||
HAVE_FUTIMES
|
||||
HAVE_FUTIMESAT
|
||||
HAVE_GAI_STRERROR
|
||||
HAVE_GCC_ASM_FOR_MC68881
|
||||
HAVE_GCC_ASM_FOR_X64
|
||||
HAVE_GCC_ASM_FOR_X87
|
||||
HAVE_GCC_UINT128_T
|
||||
HAVE_GDBM_DASH_NDBM_H
|
||||
HAVE_GDBM_H
|
||||
HAVE_GDBM_NDBM_H
|
||||
HAVE_GETADDRINFO
|
||||
HAVE_GETC_UNLOCKED
|
||||
HAVE_GETDENTS64
|
||||
HAVE_GETEGID
|
||||
HAVE_GETENTROPY
|
||||
HAVE_GETEUID
|
||||
HAVE_GETGID
|
||||
HAVE_GETGRENT
|
||||
HAVE_GETGRGID
|
||||
HAVE_GETGRGID_R
|
||||
HAVE_GETGRNAM_R
|
||||
HAVE_GETGROUPLIST
|
||||
HAVE_GETGROUPS
|
||||
HAVE_GETHOSTBYADDR
|
||||
HAVE_GETHOSTBYNAME
|
||||
HAVE_GETHOSTBYNAME_R
|
||||
HAVE_GETHOSTBYNAME_R_3_ARG
|
||||
HAVE_GETHOSTBYNAME_R_5_ARG
|
||||
HAVE_GETHOSTBYNAME_R_6_ARG
|
||||
HAVE_GETHOSTNAME
|
||||
HAVE_GETITIMER
|
||||
HAVE_GETLOADAVG
|
||||
HAVE_GETLOGIN
|
||||
HAVE_GETLOGIN_R
|
||||
HAVE_GETNAMEINFO
|
||||
HAVE_GETPAGESIZE
|
||||
HAVE_GETPEERNAME
|
||||
HAVE_GETPGID
|
||||
HAVE_GETPGRP
|
||||
HAVE_GETPID
|
||||
HAVE_GETPPID
|
||||
HAVE_GETPRIORITY
|
||||
HAVE_GETPROTOBYNAME
|
||||
HAVE_GETPWENT
|
||||
HAVE_GETPWNAM_R
|
||||
HAVE_GETPWUID
|
||||
HAVE_GETPWUID_R
|
||||
HAVE_GETRANDOM
|
||||
HAVE_GETRANDOM_SYSCALL
|
||||
HAVE_GETRESGID
|
||||
HAVE_GETRESUID
|
||||
HAVE_GETRUSAGE
|
||||
HAVE_GETSERVBYNAME
|
||||
HAVE_GETSERVBYPORT
|
||||
HAVE_GETSID
|
||||
HAVE_GETSOCKNAME
|
||||
HAVE_GETSPENT
|
||||
HAVE_GETSPNAM
|
||||
HAVE_GETTID
|
||||
HAVE_GETUID
|
||||
HAVE_GETWD
|
||||
HAVE_GLIBC_MEMMOVE_BUG
|
||||
HAVE_GRANTPT
|
||||
HAVE_GRP_H
|
||||
HAVE_HSTRERROR
|
||||
HAVE_HTOLE64
|
||||
HAVE_ICONV
|
||||
HAVE_ICONV_H
|
||||
HAVE_IF_INDEXTONAME
|
||||
HAVE_IF_NAMEINDEX
|
||||
HAVE_IF_NAMETOINDEX
|
||||
HAVE_INET_ATON
|
||||
HAVE_INET_NTOA
|
||||
HAVE_INET_PTON
|
||||
HAVE_INITGROUPS
|
||||
HAVE_INTTYPES_H
|
||||
HAVE_IO_H
|
||||
HAVE_IPA_PURE_CONST_BUG
|
||||
HAVE_KILL
|
||||
HAVE_KILLPG
|
||||
HAVE_KQUEUE
|
||||
HAVE_LANGINFO_H
|
||||
HAVE_LARGEFILE_SUPPORT
|
||||
HAVE_LCHFLAGS
|
||||
HAVE_LCHMOD
|
||||
HAVE_LCHOWN
|
||||
HAVE_LIBDB
|
||||
HAVE_LIBDL
|
||||
HAVE_LIBDLD
|
||||
HAVE_LIBIEEE
|
||||
HAVE_LIBINTL_H
|
||||
HAVE_LIBSENDFILE
|
||||
HAVE_LIBSQLITE3
|
||||
HAVE_LIBUTIL_H
|
||||
HAVE_LINK
|
||||
HAVE_LINKAT
|
||||
HAVE_LINK_H
|
||||
HAVE_LINUX_AUXVEC_H
|
||||
HAVE_LINUX_CAN_BCM_H
|
||||
HAVE_LINUX_CAN_H
|
||||
HAVE_LINUX_CAN_ISOTP_H
|
||||
HAVE_LINUX_CAN_J1939_H
|
||||
HAVE_LINUX_CAN_RAW_FD_FRAMES
|
||||
HAVE_LINUX_CAN_RAW_H
|
||||
HAVE_LINUX_CAN_RAW_JOIN_FILTERS
|
||||
HAVE_LINUX_FS_H
|
||||
HAVE_LINUX_LIMITS_H
|
||||
HAVE_LINUX_MEMFD_H
|
||||
HAVE_LINUX_NETFILTER_IPV4_H
|
||||
HAVE_LINUX_NETLINK_H
|
||||
HAVE_LINUX_QRTR_H
|
||||
HAVE_LINUX_RANDOM_H
|
||||
HAVE_LINUX_SCHED_H
|
||||
HAVE_LINUX_SOUNDCARD_H
|
||||
HAVE_LINUX_TIPC_H
|
||||
HAVE_LINUX_VM_SOCKETS_H
|
||||
HAVE_LINUX_WAIT_H
|
||||
HAVE_LISTEN
|
||||
HAVE_LOCKF
|
||||
HAVE_LOG1P
|
||||
HAVE_LOG2
|
||||
HAVE_LOGIN_TTY
|
||||
HAVE_LONG_DOUBLE
|
||||
HAVE_LONG_LONG
|
||||
HAVE_LSTAT
|
||||
HAVE_LUTIMES
|
||||
HAVE_LZMA_H
|
||||
HAVE_MADVISE
|
||||
HAVE_MAKEDEV
|
||||
HAVE_MAXLOGNAME
|
||||
HAVE_MBRTOWC
|
||||
HAVE_MEMFD_CREATE
|
||||
HAVE_MEMRCHR
|
||||
HAVE_MINIX_CONFIG_H
|
||||
HAVE_MKDIRAT
|
||||
HAVE_MKFIFO
|
||||
HAVE_MKFIFOAT
|
||||
HAVE_MKNOD
|
||||
HAVE_MKNODAT
|
||||
HAVE_MKTIME
|
||||
HAVE_MMAP
|
||||
HAVE_MREMAP
|
||||
HAVE_NANOSLEEP
|
||||
HAVE_NCURSES
|
||||
HAVE_NCURSESW
|
||||
HAVE_NCURSESW_CURSES_H
|
||||
HAVE_NCURSESW_NCURSES_H
|
||||
HAVE_NCURSESW_PANEL_H
|
||||
HAVE_NCURSES_CURSES_H
|
||||
HAVE_NCURSES_H
|
||||
HAVE_NCURSES_NCURSES_H
|
||||
HAVE_NCURSES_PANEL_H
|
||||
HAVE_NDBM_H
|
||||
HAVE_NDIR_H
|
||||
HAVE_NETCAN_CAN_H
|
||||
HAVE_NETDB_H
|
||||
HAVE_NETINET_IN_H
|
||||
HAVE_NETLINK_NETLINK_H
|
||||
HAVE_NETPACKET_PACKET_H
|
||||
HAVE_NET_ETHERNET_H
|
||||
HAVE_NET_IF_H
|
||||
HAVE_NICE
|
||||
HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
|
||||
HAVE_OPENAT
|
||||
HAVE_OPENDIR
|
||||
HAVE_OPENPTY
|
||||
HAVE_PANEL
|
||||
HAVE_PANELW
|
||||
HAVE_PANEL_H
|
||||
HAVE_PATHCONF
|
||||
HAVE_PAUSE
|
||||
HAVE_PIDFD_GETFD
|
||||
HAVE_PIDFD_OPEN
|
||||
HAVE_PIDFD_SEND_SIGNAL
|
||||
HAVE_PIPE
|
||||
HAVE_PIPE2
|
||||
HAVE_PLOCK
|
||||
HAVE_POLL
|
||||
HAVE_POLL_H
|
||||
HAVE_POSIX_FADVISE
|
||||
HAVE_POSIX_FALLOCATE
|
||||
HAVE_POSIX_OPENPT
|
||||
HAVE_POSIX_SPAWN
|
||||
HAVE_POSIX_SPAWNP
|
||||
HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSEFROM_NP
|
||||
HAVE_PPOLL
|
||||
HAVE_PREAD
|
||||
HAVE_PREADV
|
||||
HAVE_PREADV2
|
||||
HAVE_PRLIMIT
|
||||
HAVE_PROCESS_H
|
||||
HAVE_PROCESS_VM_READV
|
||||
HAVE_PROTOTYPES
|
||||
HAVE_PTHREAD_CONDATTR_SETCLOCK
|
||||
HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP
|
||||
HAVE_PTHREAD_DESTRUCTOR
|
||||
HAVE_PTHREAD_GETATTR_NP
|
||||
HAVE_PTHREAD_GETCPUCLOCKID
|
||||
HAVE_PTHREAD_GETNAME_NP
|
||||
HAVE_PTHREAD_GET_NAME_NP
|
||||
HAVE_PTHREAD_H
|
||||
HAVE_PTHREAD_INIT
|
||||
HAVE_PTHREAD_KILL
|
||||
HAVE_PTHREAD_SETNAME_NP
|
||||
HAVE_PTHREAD_SET_NAME_NP
|
||||
HAVE_PTHREAD_SIGMASK
|
||||
HAVE_PTHREAD_STUBS
|
||||
HAVE_PTSNAME
|
||||
HAVE_PTSNAME_R
|
||||
HAVE_PTY_H
|
||||
HAVE_PWRITE
|
||||
HAVE_PWRITEV
|
||||
HAVE_PWRITEV2
|
||||
HAVE_READLINE_READLINE_H
|
||||
HAVE_READLINK
|
||||
HAVE_READLINKAT
|
||||
HAVE_READV
|
||||
HAVE_REALPATH
|
||||
HAVE_RECVFROM
|
||||
HAVE_RENAMEAT
|
||||
HAVE_RL_APPEND_HISTORY
|
||||
HAVE_RL_CATCH_SIGNAL
|
||||
HAVE_RL_CHANGE_ENVIRONMENT
|
||||
HAVE_RL_COMPDISP_FUNC_T
|
||||
HAVE_RL_COMPLETION_APPEND_CHARACTER
|
||||
HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK
|
||||
HAVE_RL_COMPLETION_MATCHES
|
||||
HAVE_RL_COMPLETION_SUPPRESS_APPEND
|
||||
HAVE_RL_PRE_INPUT_HOOK
|
||||
HAVE_RL_RESIZE_TERMINAL
|
||||
HAVE_RTPSPAWN
|
||||
HAVE_SCHED_GET_PRIORITY_MAX
|
||||
HAVE_SCHED_H
|
||||
HAVE_SCHED_RR_GET_INTERVAL
|
||||
HAVE_SCHED_SETAFFINITY
|
||||
HAVE_SCHED_SETPARAM
|
||||
HAVE_SCHED_SETSCHEDULER
|
||||
HAVE_SEM_CLOCKWAIT
|
||||
HAVE_SEM_GETVALUE
|
||||
HAVE_SEM_OPEN
|
||||
HAVE_SEM_TIMEDWAIT
|
||||
HAVE_SEM_UNLINK
|
||||
HAVE_SENDFILE
|
||||
HAVE_SENDTO
|
||||
HAVE_SETEGID
|
||||
HAVE_SETEUID
|
||||
HAVE_SETGID
|
||||
HAVE_SETGROUPS
|
||||
HAVE_SETHOSTNAME
|
||||
HAVE_SETITIMER
|
||||
HAVE_SETJMP_H
|
||||
HAVE_SETLOCALE
|
||||
HAVE_SETNS
|
||||
HAVE_SETPGID
|
||||
HAVE_SETPGRP
|
||||
HAVE_SETPRIORITY
|
||||
HAVE_SETREGID
|
||||
HAVE_SETRESGID
|
||||
HAVE_SETRESUID
|
||||
HAVE_SETREUID
|
||||
HAVE_SETSID
|
||||
HAVE_SETSOCKOPT
|
||||
HAVE_SETUID
|
||||
HAVE_SETVBUF
|
||||
HAVE_SHADOW_H
|
||||
HAVE_SHM_OPEN
|
||||
HAVE_SHM_UNLINK
|
||||
HAVE_SHUTDOWN
|
||||
HAVE_SIGACTION
|
||||
HAVE_SIGALTSTACK
|
||||
HAVE_SIGFILLSET
|
||||
HAVE_SIGINFO_T_SI_BAND
|
||||
HAVE_SIGINTERRUPT
|
||||
HAVE_SIGNAL_H
|
||||
HAVE_SIGPENDING
|
||||
HAVE_SIGRELSE
|
||||
HAVE_SIGTIMEDWAIT
|
||||
HAVE_SIGWAIT
|
||||
HAVE_SIGWAITINFO
|
||||
HAVE_SINPI
|
||||
HAVE_SNPRINTF
|
||||
HAVE_SOCKADDR_ALG
|
||||
HAVE_SOCKADDR_SA_LEN
|
||||
HAVE_SOCKADDR_STORAGE
|
||||
HAVE_SOCKET
|
||||
HAVE_SOCKETPAIR
|
||||
HAVE_SOCKLEN_T
|
||||
HAVE_SPAWN_H
|
||||
HAVE_SPLICE
|
||||
HAVE_SSIZE_T
|
||||
HAVE_STATVFS
|
||||
HAVE_STATX
|
||||
HAVE_STAT_TV_NSEC
|
||||
HAVE_STAT_TV_NSEC2
|
||||
HAVE_STDINT_H
|
||||
HAVE_STDIO_H
|
||||
HAVE_STDLIB_H
|
||||
HAVE_STD_ATOMIC
|
||||
HAVE_STRFTIME
|
||||
HAVE_STRINGS_H
|
||||
HAVE_STRING_H
|
||||
HAVE_STRLCPY
|
||||
HAVE_STROPTS_H
|
||||
HAVE_STRSIGNAL
|
||||
HAVE_STRUCT_PASSWD_PW_GECOS
|
||||
HAVE_STRUCT_PASSWD_PW_PASSWD
|
||||
HAVE_STRUCT_STATX_STX_ATOMIC_WRITE_UNIT_MAX_OPT
|
||||
HAVE_STRUCT_STATX_STX_ATOMIC_WRITE_UNIT_MIN
|
||||
HAVE_STRUCT_STATX_STX_DIO_MEM_ALIGN
|
||||
HAVE_STRUCT_STATX_STX_DIO_READ_OFFSET_ALIGN
|
||||
HAVE_STRUCT_STATX_STX_MNT_ID
|
||||
HAVE_STRUCT_STATX_STX_SUBVOL
|
||||
HAVE_STRUCT_STAT_ST_BIRTHTIME
|
||||
HAVE_STRUCT_STAT_ST_BLKSIZE
|
||||
HAVE_STRUCT_STAT_ST_BLOCKS
|
||||
HAVE_STRUCT_STAT_ST_FLAGS
|
||||
HAVE_STRUCT_STAT_ST_GEN
|
||||
HAVE_STRUCT_STAT_ST_RDEV
|
||||
HAVE_STRUCT_TM_TM_ZONE
|
||||
HAVE_SYMLINK
|
||||
HAVE_SYMLINKAT
|
||||
HAVE_SYNC
|
||||
HAVE_SYSCONF
|
||||
HAVE_SYSCTLBYNAME
|
||||
HAVE_SYSEXITS_H
|
||||
HAVE_SYSLOG_H
|
||||
HAVE_SYSTEM
|
||||
HAVE_SYS_AUDIOIO_H
|
||||
HAVE_SYS_AUXV_H
|
||||
HAVE_SYS_BSDTTY_H
|
||||
HAVE_SYS_DEVPOLL_H
|
||||
HAVE_SYS_DIR_H
|
||||
HAVE_SYS_ENDIAN_H
|
||||
HAVE_SYS_EPOLL_H
|
||||
HAVE_SYS_EVENTFD_H
|
||||
HAVE_SYS_EVENT_H
|
||||
HAVE_SYS_FILE_H
|
||||
HAVE_SYS_IOCTL_H
|
||||
HAVE_SYS_KERN_CONTROL_H
|
||||
HAVE_SYS_LOADAVG_H
|
||||
HAVE_SYS_LOCK_H
|
||||
HAVE_SYS_MEMFD_H
|
||||
HAVE_SYS_MKDEV_H
|
||||
HAVE_SYS_MMAN_H
|
||||
HAVE_SYS_MODEM_H
|
||||
HAVE_SYS_NDIR_H
|
||||
HAVE_SYS_PARAM_H
|
||||
HAVE_SYS_PIDFD_H
|
||||
HAVE_SYS_POLL_H
|
||||
HAVE_SYS_RANDOM_H
|
||||
HAVE_SYS_RESOURCE_H
|
||||
HAVE_SYS_SELECT_H
|
||||
HAVE_SYS_SENDFILE_H
|
||||
HAVE_SYS_SOCKET_H
|
||||
HAVE_SYS_SOUNDCARD_H
|
||||
HAVE_SYS_STATVFS_H
|
||||
HAVE_SYS_STAT_H
|
||||
HAVE_SYS_SYSCALL_H
|
||||
HAVE_SYS_SYSCTL_H
|
||||
HAVE_SYS_SYSMACROS_H
|
||||
HAVE_SYS_SYS_DOMAIN_H
|
||||
HAVE_SYS_TERMIO_H
|
||||
HAVE_SYS_TIMERFD_H
|
||||
HAVE_SYS_TIMES_H
|
||||
HAVE_SYS_TIME_H
|
||||
HAVE_SYS_TYPES_H
|
||||
HAVE_SYS_UIO_H
|
||||
HAVE_SYS_UN_H
|
||||
HAVE_SYS_UTSNAME_H
|
||||
HAVE_SYS_WAIT_H
|
||||
HAVE_SYS_XATTR_H
|
||||
HAVE_TANPI
|
||||
HAVE_TCGETPGRP
|
||||
HAVE_TCSETPGRP
|
||||
HAVE_TEMPNAM
|
||||
HAVE_TERMIOS_H
|
||||
HAVE_TERM_H
|
||||
HAVE_THREAD_LOCAL
|
||||
HAVE_TIMEGM
|
||||
HAVE_TIMERFD_CREATE
|
||||
HAVE_TIMES
|
||||
HAVE_TMPFILE
|
||||
HAVE_TMPNAM
|
||||
HAVE_TMPNAM_R
|
||||
HAVE_TM_ZONE
|
||||
HAVE_TRUNCATE
|
||||
HAVE_TTYNAME_R
|
||||
HAVE_TZNAME
|
||||
HAVE_UMASK
|
||||
HAVE_UNAME
|
||||
HAVE_UNISTD_H
|
||||
HAVE_UNLINKAT
|
||||
HAVE_UNLOCKPT
|
||||
HAVE_UNSHARE
|
||||
HAVE_USABLE_WCHAR_T
|
||||
HAVE_UTIL_H
|
||||
HAVE_UTIMENSAT
|
||||
HAVE_UTIMES
|
||||
HAVE_UTIME_H
|
||||
HAVE_UTMP_H
|
||||
HAVE_UT_NAMESIZE
|
||||
HAVE_UUID_CREATE
|
||||
HAVE_UUID_ENC_BE
|
||||
HAVE_UUID_GENERATE_TIME_SAFE
|
||||
HAVE_UUID_GENERATE_TIME_SAFE_STABLE_MAC
|
||||
HAVE_UUID_H
|
||||
HAVE_UUID_UUID_H
|
||||
HAVE_VFORK
|
||||
HAVE_WAIT
|
||||
HAVE_WAIT3
|
||||
HAVE_WAIT4
|
||||
HAVE_WAITID
|
||||
HAVE_WAITPID
|
||||
HAVE_WCHAR_H
|
||||
HAVE_WCSCOLL
|
||||
HAVE_WCSFTIME
|
||||
HAVE_WCSXFRM
|
||||
HAVE_WMEMCMP
|
||||
HAVE_WORKING_TZSET
|
||||
HAVE_WRITEV
|
||||
HAVE_ZDICT_H
|
||||
HAVE_ZLIB_COPY
|
||||
HAVE_ZLIB_H
|
||||
HAVE_ZSTD_H
|
||||
HAVE__GETPTY
|
||||
HAVE___UINT128_T
|
||||
INT_MAX
|
||||
LONG_BIT
|
||||
LONG_MAX
|
||||
LONG_MIN
|
||||
MAJOR_IN_MKDEV
|
||||
MAJOR_IN_SYSMACROS
|
||||
MAX_CO_EXTRA_USERS
|
||||
METH_CLASS
|
||||
METH_COEXIST
|
||||
METH_FASTCALL
|
||||
METH_KEYWORDS
|
||||
METH_METHOD
|
||||
METH_NOARGS
|
||||
METH_O
|
||||
METH_STACKLESS
|
||||
METH_STATIC
|
||||
METH_VARARGS
|
||||
MVWDELCH_IS_EXPRESSION
|
||||
NATIVE_TSS_KEY_T
|
||||
NCURSES_OPAQUE
|
||||
NOWAIT_LOCK
|
||||
PACKAGE_BUGREPORT
|
||||
PACKAGE_NAME
|
||||
PACKAGE_STRING
|
||||
PACKAGE_TARNAME
|
||||
PACKAGE_URL
|
||||
PACKAGE_VERSION
|
||||
PDC_NCMOUSE
|
||||
POSIX_SEMAPHORES_NOT_ENABLED
|
||||
PTHREAD_KEYS_MAX
|
||||
PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT
|
||||
PTHREAD_SYSTEM_SCHED_SUPPORTED
|
||||
RETSIGTYPE
|
||||
SETPGRP_HAVE_ARG
|
||||
SIGNED_RIGHT_SHIFT_ZERO_FILLS
|
||||
SIZEOF_DOUBLE
|
||||
SIZEOF_FLOAT
|
||||
SIZEOF_FPOS_T
|
||||
SIZEOF_INT
|
||||
SIZEOF_LONG
|
||||
SIZEOF_LONG_DOUBLE
|
||||
SIZEOF_LONG_LONG
|
||||
SIZEOF_OFF_T
|
||||
SIZEOF_PID_T
|
||||
SIZEOF_PTHREAD_KEY_T
|
||||
SIZEOF_PTHREAD_T
|
||||
SIZEOF_PY_HASH_T
|
||||
SIZEOF_PY_UHASH_T
|
||||
SIZEOF_SHORT
|
||||
SIZEOF_SIZE_T
|
||||
SIZEOF_TIME_T
|
||||
SIZEOF_UINTPTR_T
|
||||
SIZEOF_VOID_P
|
||||
SIZEOF_WCHAR_T
|
||||
SIZEOF__BOOL
|
||||
SOABI_PLATFORM
|
||||
SPECIALIZATION_FAILURE_KINDS
|
||||
SSTATE_INTERNED_IMMORTAL
|
||||
SSTATE_INTERNED_IMMORTAL_STATIC
|
||||
SSTATE_INTERNED_MORTAL
|
||||
SSTATE_NOT_INTERNED
|
||||
STDC_HEADERS
|
||||
STRICT_SYSV_CURSES
|
||||
SYS_SELECT_WITH_SYS_TIME
|
||||
S_IFLNK
|
||||
S_IFMT
|
||||
S_ISCHR
|
||||
S_ISDIR
|
||||
S_ISLNK
|
||||
S_ISREG
|
||||
THREAD_STACK_SIZE
|
||||
TIMEMODULE_LIB
|
||||
TM_IN_SYS_TIME
|
||||
USE_COMPUTED_GOTOS
|
||||
USE_STACKCHECK
|
||||
VA_LIST_IS_ARRAY
|
||||
WAIT_LOCK
|
||||
WINDOW_HAS_FLAGS
|
||||
WITH_DECIMAL_CONTEXTVAR
|
||||
WITH_DOC_STRINGS
|
||||
WITH_DTRACE
|
||||
WITH_DYLD
|
||||
WITH_EDITLINE
|
||||
WITH_LIBINTL
|
||||
WITH_MIMALLOC
|
||||
WITH_NEXT_FRAMEWORK
|
||||
WITH_PYMALLOC
|
||||
WITH_THREAD
|
||||
WITH_VALGRIND
|
||||
WORDS_BIGENDIAN
|
||||
X87_DOUBLE_ROUNDING
|
||||
_ALL_SOURCE
|
||||
_Atomic
|
||||
_BOOL
|
||||
_BSD_SOURCE
|
||||
_DARWIN_C_SOURCE
|
||||
_FILE_OFFSET_BITS
|
||||
_GNU_SOURCE
|
||||
_HPUX_ALT_XOPEN_SOCKET_API
|
||||
_INCLUDE__STDC_A1_SOURCE
|
||||
_ISOC23_SOURCE
|
||||
_LARGEFILE_SOURCE
|
||||
_LARGE_FILES
|
||||
_MINIX
|
||||
_NETBSD_SOURCE
|
||||
_OPENBSD_SOURCE
|
||||
_POSIX_1_SOURCE
|
||||
_POSIX_C_SOURCE
|
||||
_POSIX_PTHREAD_SEMANTICS
|
||||
_POSIX_SOURCE
|
||||
_POSIX_THREADS
|
||||
_REENTRANT
|
||||
_SGI_MP_SOURCE
|
||||
_TANDEM_SOURCE
|
||||
_WASI_EMULATED_GETPID
|
||||
_WASI_EMULATED_PROCESS_CLOCKS
|
||||
_WASI_EMULATED_SIGNAL
|
||||
_WCHAR_T
|
||||
_XOPEN_SOURCE
|
||||
_XOPEN_SOURCE_EXTENDED
|
||||
__BSD_VISIBLE
|
||||
__EXTENSIONS__
|
||||
__NEED_pthread_attr_t
|
||||
__NEED_pthread_cond_t
|
||||
__NEED_pthread_condattr_t
|
||||
__NEED_pthread_key_t
|
||||
__NEED_pthread_mutex_t
|
||||
__NEED_pthread_mutexattr_t
|
||||
__NEED_pthread_t
|
||||
__STDC_WANT_IEC_60559_ATTRIBS_EXT__
|
||||
__STDC_WANT_IEC_60559_BFP_EXT__
|
||||
__STDC_WANT_IEC_60559_DFP_EXT__
|
||||
__STDC_WANT_IEC_60559_EXT__
|
||||
__STDC_WANT_IEC_60559_FUNCS_EXT__
|
||||
__STDC_WANT_IEC_60559_TYPES_EXT__
|
||||
__STDC_WANT_LIB_EXT2__
|
||||
__STDC_WANT_MATH_SPEC_FUNCS__
|
||||
__bool__
|
||||
__wchar_t
|
||||
__wint_t
|
||||
clock_t
|
||||
const
|
||||
gid_t
|
||||
import_curses
|
||||
mode_t
|
||||
off_t
|
||||
pid_t
|
||||
signed
|
||||
size_t
|
||||
socklen_t
|
||||
static_assert
|
||||
uid_t
|
||||
Reference in new issue
Block a user