blob: fb86530a60b6d1b1416f1dfbb684e9f847646171 [file] [log] [blame]
"""A script for collecting and generating files for bison BUILD files."""
import argparse
import shutil
import os
import re
import platform
import json
from pathlib import Path
TEMPLATE_KEYS = [
"APPLE_UNIVERSAL_BUILD",
"ASM_SYMBOL_PREFIX",
"BITSIZEOF_PTRDIFF_T",
"BITSIZEOF_SIG_ATOMIC_T",
"BITSIZEOF_SIZE_T",
"BITSIZEOF_WCHAR_T",
"BITSIZEOF_WINT_T",
"EMULTIHOP_HIDDEN",
"EMULTIHOP_VALUE",
"ENOLINK_HIDDEN",
"ENOLINK_VALUE",
"EOVERFLOW_HIDDEN",
"EOVERFLOW_VALUE",
"GNULIBHEADERS_OVERRIDE_WINT_T",
"GNULIB_ACCESS",
"GNULIB_ACOSF",
"GNULIB_ACOSL",
"GNULIB_ALIGNED_ALLOC",
"GNULIB_ALPHASORT",
"GNULIB_ASINF",
"GNULIB_ASINL",
"GNULIB_ATAN2F",
"GNULIB_ATANF",
"GNULIB_ATANL",
"GNULIB_ATOLL",
"GNULIB_BTOWC",
"GNULIB_CALLOC_POSIX",
"GNULIB_CANONICALIZE_FILE_NAME",
"GNULIB_CBRT",
"GNULIB_CBRTF",
"GNULIB_CBRTL",
"GNULIB_CEIL",
"GNULIB_CEILF",
"GNULIB_CEILL",
"GNULIB_CHDIR",
"GNULIB_CHOWN",
"GNULIB_CLOSE",
"GNULIB_CLOSEDIR",
"GNULIB_COPYSIGN",
"GNULIB_COPYSIGNF",
"GNULIB_COPYSIGNL",
"GNULIB_COPY_FILE_RANGE",
"GNULIB_COSF",
"GNULIB_COSHF",
"GNULIB_COSL",
"GNULIB_CREAT",
"GNULIB_CTIME",
"GNULIB_DIRFD",
"GNULIB_DPRINTF",
"GNULIB_DUP2",
"GNULIB_DUP3",
"GNULIB_DUP",
"GNULIB_DUPLOCALE",
"GNULIB_ENVIRON",
"GNULIB_EUIDACCESS",
"GNULIB_EXECL",
"GNULIB_EXECLE",
"GNULIB_EXECLP",
"GNULIB_EXECV",
"GNULIB_EXECVE",
"GNULIB_EXECVP",
"GNULIB_EXECVPE",
"GNULIB_EXP2",
"GNULIB_EXP2F",
"GNULIB_EXP2L",
"GNULIB_EXPF",
"GNULIB_EXPL",
"GNULIB_EXPLICIT_BZERO",
"GNULIB_EXPM1",
"GNULIB_EXPM1F",
"GNULIB_EXPM1L",
"GNULIB_FABSF",
"GNULIB_FABSL",
"GNULIB_FACCESSAT",
"GNULIB_FCHDIR",
"GNULIB_FCHMODAT",
"GNULIB_FCHOWNAT",
"GNULIB_FCLOSE",
"GNULIB_FCNTL",
"GNULIB_FDATASYNC",
"GNULIB_FDOPEN",
"GNULIB_FDOPENDIR",
"GNULIB_FFLUSH",
"GNULIB_FFS",
"GNULIB_FFSL",
"GNULIB_FFSLL",
"GNULIB_FGETC",
"GNULIB_FGETS",
"GNULIB_FLOOR",
"GNULIB_FLOORF",
"GNULIB_FLOORL",
"GNULIB_FMA",
"GNULIB_FMAF",
"GNULIB_FMAL",
"GNULIB_FMOD",
"GNULIB_FMODF",
"GNULIB_FMODL",
"GNULIB_FOPEN",
"GNULIB_FPRINTF",
"GNULIB_FPRINTF_POSIX",
"GNULIB_FPURGE",
"GNULIB_FPUTC",
"GNULIB_FPUTS",
"GNULIB_FREAD",
"GNULIB_FREELOCALE",
"GNULIB_FREE_POSIX",
"GNULIB_FREOPEN",
"GNULIB_FREXP",
"GNULIB_FREXPF",
"GNULIB_FREXPL",
"GNULIB_FSCANF",
"GNULIB_FSEEK",
"GNULIB_FSEEKO",
"GNULIB_FSTAT",
"GNULIB_FSTATAT",
"GNULIB_FSYNC",
"GNULIB_FTELL",
"GNULIB_FTELLO",
"GNULIB_FTRUNCATE",
"GNULIB_FUTIMENS",
"GNULIB_FWRITE",
"GNULIB_GETC",
"GNULIB_GETCHAR",
"GNULIB_GETCWD",
"GNULIB_GETDELIM",
"GNULIB_GETDOMAINNAME",
"GNULIB_GETDTABLESIZE",
"GNULIB_GETENTROPY",
"GNULIB_GETGROUPS",
"GNULIB_GETHOSTNAME",
"GNULIB_GETLINE",
"GNULIB_GETLOADAVG",
"GNULIB_GETLOGIN",
"GNULIB_GETLOGIN_R",
"GNULIB_GETOPT_POSIX",
"GNULIB_GETPAGESIZE",
"GNULIB_GETPASS",
"GNULIB_GETRUSAGE",
"GNULIB_GETSUBOPT",
"GNULIB_GETTIMEOFDAY",
"GNULIB_GETUMASK",
"GNULIB_GETUSERSHELL",
"GNULIB_GRANTPT",
"GNULIB_GROUP_MEMBER",
"GNULIB_HYPOT",
"GNULIB_HYPOTF",
"GNULIB_HYPOTL",
"GNULIB_ICONV",
"GNULIB_ILOGB",
"GNULIB_ILOGBF",
"GNULIB_ILOGBL",
"GNULIB_IMAXABS",
"GNULIB_IMAXDIV",
"GNULIB_IOCTL",
"GNULIB_ISATTY",
"GNULIB_ISFINITE",
"GNULIB_ISINF",
"GNULIB_ISNAN",
"GNULIB_ISNAND",
"GNULIB_ISNANF",
"GNULIB_ISNANL",
"GNULIB_ISWBLANK",
"GNULIB_ISWCTYPE",
"GNULIB_ISWDIGIT",
"GNULIB_ISWXDIGIT",
"GNULIB_LCHMOD",
"GNULIB_LCHOWN",
"GNULIB_LDEXPF",
"GNULIB_LDEXPL",
"GNULIB_LINK",
"GNULIB_LINKAT",
"GNULIB_LOCALECONV",
"GNULIB_LOCALENAME",
"GNULIB_LOCALTIME",
"GNULIB_LOG10",
"GNULIB_LOG10F",
"GNULIB_LOG10L",
"GNULIB_LOG1P",
"GNULIB_LOG1PF",
"GNULIB_LOG1PL",
"GNULIB_LOG2",
"GNULIB_LOG2F",
"GNULIB_LOG2L",
"GNULIB_LOG",
"GNULIB_LOGB",
"GNULIB_LOGBF",
"GNULIB_LOGBL",
"GNULIB_LOGF",
"GNULIB_LOGL",
"GNULIB_LSEEK",
"GNULIB_LSTAT",
"GNULIB_MALLOC_POSIX",
"GNULIB_MBRLEN",
"GNULIB_MBRTOWC",
"GNULIB_MBSCASECMP",
"GNULIB_MBSCASESTR",
"GNULIB_MBSCHR",
"GNULIB_MBSCSPN",
"GNULIB_MBSINIT",
"GNULIB_MBSLEN",
"GNULIB_MBSNCASECMP",
"GNULIB_MBSNLEN",
"GNULIB_MBSNRTOWCS",
"GNULIB_MBSPBRK",
"GNULIB_MBSPCASECMP",
"GNULIB_MBSRCHR",
"GNULIB_MBSRTOWCS",
"GNULIB_MBSSEP",
"GNULIB_MBSSPN",
"GNULIB_MBSSTR",
"GNULIB_MBSTOK_R",
"GNULIB_MBTOWC",
"GNULIB_MDA_ACCESS",
"GNULIB_MDA_CHDIR",
"GNULIB_MDA_CHMOD",
"GNULIB_MDA_CLOSE",
"GNULIB_MDA_CREAT",
"GNULIB_MDA_DUP2",
"GNULIB_MDA_DUP",
"GNULIB_MDA_ECVT",
"GNULIB_MDA_EXECL",
"GNULIB_MDA_EXECLE",
"GNULIB_MDA_EXECLP",
"GNULIB_MDA_EXECV",
"GNULIB_MDA_EXECVE",
"GNULIB_MDA_EXECVP",
"GNULIB_MDA_EXECVPE",
"GNULIB_MDA_FCLOSEALL",
"GNULIB_MDA_FCVT",
"GNULIB_MDA_FDOPEN",
"GNULIB_MDA_FILENO",
"GNULIB_MDA_GCVT",
"GNULIB_MDA_GETCWD",
"GNULIB_MDA_GETPID",
"GNULIB_MDA_GETW",
"GNULIB_MDA_ISATTY",
"GNULIB_MDA_J0",
"GNULIB_MDA_J1",
"GNULIB_MDA_JN",
"GNULIB_MDA_LSEEK",
"GNULIB_MDA_MEMCCPY",
"GNULIB_MDA_MKDIR",
"GNULIB_MDA_MKTEMP",
"GNULIB_MDA_OPEN",
"GNULIB_MDA_PUTENV",
"GNULIB_MDA_PUTW",
"GNULIB_MDA_READ",
"GNULIB_MDA_RMDIR",
"GNULIB_MDA_STRDUP",
"GNULIB_MDA_SWAB",
"GNULIB_MDA_TEMPNAM",
"GNULIB_MDA_TZSET",
"GNULIB_MDA_UMASK",
"GNULIB_MDA_UNLINK",
"GNULIB_MDA_WCSDUP",
"GNULIB_MDA_WRITE",
"GNULIB_MDA_Y0",
"GNULIB_MDA_Y1",
"GNULIB_MDA_YN",
"GNULIB_MEMCHR",
"GNULIB_MEMMEM",
"GNULIB_MEMPCPY",
"GNULIB_MEMRCHR",
"GNULIB_MKDIR",
"GNULIB_MKDIRAT",
"GNULIB_MKDTEMP",
"GNULIB_MKFIFO",
"GNULIB_MKFIFOAT",
"GNULIB_MKNOD",
"GNULIB_MKNODAT",
"GNULIB_MKOSTEMP",
"GNULIB_MKOSTEMPS",
"GNULIB_MKSTEMP",
"GNULIB_MKSTEMPS",
"GNULIB_MKTIME",
"GNULIB_MODF",
"GNULIB_MODFF",
"GNULIB_MODFL",
"GNULIB_NANOSLEEP",
"GNULIB_NEWLOCALE",
"GNULIB_NONBLOCKING",
"GNULIB_OBSTACK_PRINTF",
"GNULIB_OBSTACK_PRINTF_POSIX",
"GNULIB_OPEN",
"GNULIB_OPENAT",
"GNULIB_OPENDIR",
"GNULIB_OVERRIDES_STRUCT_STAT",
"GNULIB_PCLOSE",
"GNULIB_PERROR",
"GNULIB_PIPE2",
"GNULIB_PIPE",
"GNULIB_POPEN",
"GNULIB_POSIX_MEMALIGN",
"GNULIB_POSIX_OPENPT",
"GNULIB_POSIX_SPAWN",
"GNULIB_POSIX_SPAWNATTR_DESTROY",
"GNULIB_POSIX_SPAWNATTR_GETFLAGS",
"GNULIB_POSIX_SPAWNATTR_GETPGROUP",
"GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM",
"GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY",
"GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT",
"GNULIB_POSIX_SPAWNATTR_GETSIGMASK",
"GNULIB_POSIX_SPAWNATTR_INIT",
"GNULIB_POSIX_SPAWNATTR_SETFLAGS",
"GNULIB_POSIX_SPAWNATTR_SETPGROUP",
"GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM",
"GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY",
"GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT",
"GNULIB_POSIX_SPAWNATTR_SETSIGMASK",
"GNULIB_POSIX_SPAWNP",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY",
"GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT",
"GNULIB_POWF",
"GNULIB_PREAD",
"GNULIB_PRINTF",
"GNULIB_PRINTF_POSIX",
"GNULIB_PTHREAD_SIGMASK",
"GNULIB_PTSNAME",
"GNULIB_PTSNAME_R",
"GNULIB_PUTC",
"GNULIB_PUTCHAR",
"GNULIB_PUTENV",
"GNULIB_PUTS",
"GNULIB_PWRITE",
"GNULIB_QSORT_R",
"GNULIB_RAISE",
"GNULIB_RANDOM",
"GNULIB_RANDOM_R",
"GNULIB_RAWMEMCHR",
"GNULIB_READ",
"GNULIB_READDIR",
"GNULIB_READLINK",
"GNULIB_READLINKAT",
"GNULIB_REALLOCARRAY",
"GNULIB_REALLOC_POSIX",
"GNULIB_REALPATH",
"GNULIB_REMAINDER",
"GNULIB_REMAINDERF",
"GNULIB_REMAINDERL",
"GNULIB_REMOVE",
"GNULIB_RENAME",
"GNULIB_RENAMEAT",
"GNULIB_REWINDDIR",
"GNULIB_RINT",
"GNULIB_RINTF",
"GNULIB_RINTL",
"GNULIB_RMDIR",
"GNULIB_ROUND",
"GNULIB_ROUNDF",
"GNULIB_ROUNDL",
"GNULIB_RPMATCH",
"GNULIB_SCANDIR",
"GNULIB_SCANF",
"GNULIB_SCHED_YIELD",
"GNULIB_SECURE_GETENV",
"GNULIB_SETENV",
"GNULIB_SETHOSTNAME",
"GNULIB_SETLOCALE",
"GNULIB_SETLOCALE_NULL",
"GNULIB_SIGABBREV_NP",
"GNULIB_SIGACTION",
"GNULIB_SIGDESCR_NP",
"GNULIB_SIGNAL_H_SIGPIPE",
"GNULIB_SIGNBIT",
"GNULIB_SIGPROCMASK",
"GNULIB_SINF",
"GNULIB_SINHF",
"GNULIB_SINL",
"GNULIB_SLEEP",
"GNULIB_SNPRINTF",
"GNULIB_SPRINTF_POSIX",
"GNULIB_SQRTF",
"GNULIB_SQRTL",
"GNULIB_STAT",
"GNULIB_STDIO_H_NONBLOCKING",
"GNULIB_STDIO_H_SIGPIPE",
"GNULIB_STPCPY",
"GNULIB_STPNCPY",
"GNULIB_STRCASESTR",
"GNULIB_STRCHRNUL",
"GNULIB_STRDUP",
"GNULIB_STRERROR",
"GNULIB_STRERRORNAME_NP",
"GNULIB_STRERROR_R",
"GNULIB_STRFTIME",
"GNULIB_STRNCAT",
"GNULIB_STRNDUP",
"GNULIB_STRNLEN",
"GNULIB_STRPBRK",
"GNULIB_STRPTIME",
"GNULIB_STRSEP",
"GNULIB_STRSIGNAL",
"GNULIB_STRSTR",
"GNULIB_STRTOD",
"GNULIB_STRTOIMAX",
"GNULIB_STRTOK_R",
"GNULIB_STRTOL",
"GNULIB_STRTOLD",
"GNULIB_STRTOLL",
"GNULIB_STRTOUL",
"GNULIB_STRTOULL",
"GNULIB_STRTOUMAX",
"GNULIB_STRVERSCMP",
"GNULIB_SYMLINK",
"GNULIB_SYMLINKAT",
"GNULIB_SYSTEM_POSIX",
"GNULIB_TANF",
"GNULIB_TANHF",
"GNULIB_TANL",
"GNULIB_TCGETSID",
"GNULIB_TIMEGM",
"GNULIB_TIMES",
"GNULIB_TIMESPEC_GET",
"GNULIB_TIME_R",
"GNULIB_TIME_RZ",
"GNULIB_TMPFILE",
"GNULIB_TOWCTRANS",
"GNULIB_TRUNC",
"GNULIB_TRUNCATE",
"GNULIB_TRUNCF",
"GNULIB_TRUNCL",
"GNULIB_TTYNAME_R",
"GNULIB_TZSET",
"GNULIB_UNISTD_H_GETOPT",
"GNULIB_UNLINK",
"GNULIB_UNLINKAT",
"GNULIB_UNLOCKPT",
"GNULIB_UNSETENV",
"GNULIB_USLEEP",
"GNULIB_UTIMENSAT",
"GNULIB_VASPRINTF",
"GNULIB_VDPRINTF",
"GNULIB_VFPRINTF",
"GNULIB_VFPRINTF_POSIX",
"GNULIB_VFSCANF",
"GNULIB_VPRINTF",
"GNULIB_VPRINTF_POSIX",
"GNULIB_VSCANF",
"GNULIB_VSNPRINTF",
"GNULIB_VSPRINTF_POSIX",
"GNULIB_WAITPID",
"GNULIB_WCPCPY",
"GNULIB_WCPNCPY",
"GNULIB_WCRTOMB",
"GNULIB_WCSCASECMP",
"GNULIB_WCSCAT",
"GNULIB_WCSCHR",
"GNULIB_WCSCMP",
"GNULIB_WCSCOLL",
"GNULIB_WCSCPY",
"GNULIB_WCSCSPN",
"GNULIB_WCSDUP",
"GNULIB_WCSFTIME",
"GNULIB_WCSLEN",
"GNULIB_WCSNCASECMP",
"GNULIB_WCSNCAT",
"GNULIB_WCSNCMP",
"GNULIB_WCSNCPY",
"GNULIB_WCSNLEN",
"GNULIB_WCSNRTOMBS",
"GNULIB_WCSPBRK",
"GNULIB_WCSRCHR",
"GNULIB_WCSRTOMBS",
"GNULIB_WCSSPN",
"GNULIB_WCSSTR",
"GNULIB_WCSTOK",
"GNULIB_WCSWIDTH",
"GNULIB_WCSXFRM",
"GNULIB_WCTOB",
"GNULIB_WCTOMB",
"GNULIB_WCTRANS",
"GNULIB_WCTYPE",
"GNULIB_WCWIDTH",
"GNULIB_WMEMCHR",
"GNULIB_WMEMCMP",
"GNULIB_WMEMCPY",
"GNULIB_WMEMMOVE",
"GNULIB_WMEMPCPY",
"GNULIB_WMEMSET",
"GNULIB_WRITE",
"GNULIB__EXIT",
"GUARD_PREFIX",
"HAVE_ACOSF",
"HAVE_ACOSL",
"HAVE_ALIGNED_ALLOC",
"HAVE_ALLOCA_H",
"HAVE_ALPHASORT",
"HAVE_ASINF",
"HAVE_ASINL",
"HAVE_ATAN2F",
"HAVE_ATANF",
"HAVE_ATANL",
"HAVE_ATOLL",
"HAVE_BTOWC",
"HAVE_C99_STDINT_H",
"HAVE_CANONICALIZE_FILE_NAME",
"HAVE_CBRT",
"HAVE_CHOWN",
"HAVE_CLOSEDIR",
"HAVE_COPYSIGN",
"HAVE_COPYSIGNL",
"HAVE_COPY_FILE_RANGE",
"HAVE_COSF",
"HAVE_COSHF",
"HAVE_COSL",
"HAVE_CRTDEFS_H",
"HAVE_DECL_ACOSL",
"HAVE_DECL_ASINL",
"HAVE_DECL_ATANL",
"HAVE_DECL_CBRTF",
"HAVE_DECL_CBRTL",
"HAVE_DECL_CEILF",
"HAVE_DECL_CEILL",
"HAVE_DECL_COPYSIGNF",
"HAVE_DECL_COSL",
"HAVE_DECL_DIRFD",
"HAVE_DECL_ECVT",
"HAVE_DECL_ENVIRON",
"HAVE_DECL_EXECVPE",
"HAVE_DECL_EXP2",
"HAVE_DECL_EXP2F",
"HAVE_DECL_EXP2L",
"HAVE_DECL_EXPL",
"HAVE_DECL_EXPM1L",
"HAVE_DECL_FCHDIR",
"HAVE_DECL_FCLOSEALL",
"HAVE_DECL_FCVT",
"HAVE_DECL_FDATASYNC",
"HAVE_DECL_FDOPENDIR",
"HAVE_DECL_FLOORF",
"HAVE_DECL_FLOORL",
"HAVE_DECL_FPURGE",
"HAVE_DECL_FREXPL",
"HAVE_DECL_FSEEKO",
"HAVE_DECL_FTELLO",
"HAVE_DECL_GCVT",
"HAVE_DECL_GETDELIM",
"HAVE_DECL_GETDOMAINNAME",
"HAVE_DECL_GETLINE",
"HAVE_DECL_GETLOADAVG",
"HAVE_DECL_GETLOGIN",
"HAVE_DECL_GETLOGIN_R",
"HAVE_DECL_GETPAGESIZE",
"HAVE_DECL_GETUSERSHELL",
"HAVE_DECL_IMAXABS",
"HAVE_DECL_IMAXDIV",
"HAVE_DECL_INITSTATE",
"HAVE_DECL_LDEXPL",
"HAVE_DECL_LOCALTIME_R",
"HAVE_DECL_LOG10L",
"HAVE_DECL_LOG2",
"HAVE_DECL_LOG2F",
"HAVE_DECL_LOG2L",
"HAVE_DECL_LOGB",
"HAVE_DECL_LOGL",
"HAVE_DECL_MEMMEM",
"HAVE_DECL_MEMRCHR",
"HAVE_DECL_OBSTACK_PRINTF",
"HAVE_DECL_REMAINDER",
"HAVE_DECL_REMAINDERL",
"HAVE_DECL_RINTF",
"HAVE_DECL_ROUND",
"HAVE_DECL_ROUNDF",
"HAVE_DECL_ROUNDL",
"HAVE_DECL_SETENV",
"HAVE_DECL_SETHOSTNAME",
"HAVE_DECL_SETSTATE",
"HAVE_DECL_SINL",
"HAVE_DECL_SNPRINTF",
"HAVE_DECL_SQRTL",
"HAVE_DECL_STRDUP",
"HAVE_DECL_STRERROR_R",
"HAVE_DECL_STRNCASECMP",
"HAVE_DECL_STRNDUP",
"HAVE_DECL_STRNLEN",
"HAVE_DECL_STRSIGNAL",
"HAVE_DECL_STRTOIMAX",
"HAVE_DECL_STRTOK_R",
"HAVE_DECL_STRTOUMAX",
"HAVE_DECL_TANL",
"HAVE_DECL_TCGETSID",
"HAVE_DECL_TRUNC",
"HAVE_DECL_TRUNCATE",
"HAVE_DECL_TRUNCF",
"HAVE_DECL_TRUNCL",
"HAVE_DECL_TTYNAME_R",
"HAVE_DECL_UNSETENV",
"HAVE_DECL_VSNPRINTF",
"HAVE_DECL_WCSDUP",
"HAVE_DECL_WCTOB",
"HAVE_DECL_WCWIDTH",
"HAVE_DIRENT_H",
"HAVE_DPRINTF",
"HAVE_DUP3",
"HAVE_DUPLOCALE",
"HAVE_EUIDACCESS",
"HAVE_EXECVPE",
"HAVE_EXPF",
"HAVE_EXPL",
"HAVE_EXPLICIT_BZERO",
"HAVE_EXPM1",
"HAVE_EXPM1F",
"HAVE_FABSF",
"HAVE_FABSL",
"HAVE_FACCESSAT",
"HAVE_FCHDIR",
"HAVE_FCHMODAT",
"HAVE_FCHOWNAT",
"HAVE_FCNTL",
"HAVE_FDATASYNC",
"HAVE_FDOPENDIR",
"HAVE_FEATURES_H",
"HAVE_FFS",
"HAVE_FFSL",
"HAVE_FFSLL",
"HAVE_FMA",
"HAVE_FMAF",
"HAVE_FMAL",
"HAVE_FMODF",
"HAVE_FMODL",
"HAVE_FREELOCALE",
"HAVE_FREXPF",
"HAVE_FSTATAT",
"HAVE_FSYNC",
"HAVE_FTRUNCATE",
"HAVE_FUTIMENS",
"HAVE_GETDTABLESIZE",
"HAVE_GETENTROPY",
"HAVE_GETGROUPS",
"HAVE_GETHOSTNAME",
"HAVE_GETOPT_H",
"HAVE_GETPAGESIZE",
"HAVE_GETPASS",
"HAVE_GETRUSAGE",
"HAVE_GETSUBOPT",
"HAVE_GETTIMEOFDAY",
"HAVE_GETUMASK",
"HAVE_GRANTPT",
"HAVE_GROUP_MEMBER",
"HAVE_HYPOTF",
"HAVE_HYPOTL",
"HAVE_ILOGB",
"HAVE_ILOGBF",
"HAVE_ILOGBL",
"HAVE_IMAXDIV_T",
"HAVE_INITSTATE",
"HAVE_INTTYPES_H",
"HAVE_ISNAND",
"HAVE_ISNANF",
"HAVE_ISNANL",
"HAVE_ISWBLANK",
"HAVE_ISWCNTRL",
"HAVE_LCHMOD",
"HAVE_LCHOWN",
"HAVE_LDEXPF",
"HAVE_LINK",
"HAVE_LINKAT",
"HAVE_LOG10F",
"HAVE_LOG10L",
"HAVE_LOG1P",
"HAVE_LOG1PF",
"HAVE_LOG1PL",
"HAVE_LOGBF",
"HAVE_LOGBL",
"HAVE_LOGF",
"HAVE_LOGL",
"HAVE_LSTAT",
"HAVE_MAX_ALIGN_T",
"HAVE_MBRLEN",
"HAVE_MBRTOWC",
"HAVE_MBSINIT",
"HAVE_MBSLEN",
"HAVE_MBSNRTOWCS",
"HAVE_MBSRTOWCS",
"HAVE_MBTOWC",
"HAVE_MEMPCPY",
"HAVE_MKDIRAT",
"HAVE_MKDTEMP",
"HAVE_MKFIFO",
"HAVE_MKFIFOAT",
"HAVE_MKNOD",
"HAVE_MKNODAT",
"HAVE_MKOSTEMP",
"HAVE_MKOSTEMPS",
"HAVE_MKSTEMP",
"HAVE_MKSTEMPS",
"HAVE_MODFF",
"HAVE_MODFL",
"HAVE_NANOSLEEP",
"HAVE_NEWLOCALE",
"HAVE_OPENAT",
"HAVE_OPENDIR",
"HAVE_OS_H",
"HAVE_PCLOSE",
"HAVE_PIPE2",
"HAVE_PIPE",
"HAVE_POPEN",
"HAVE_POSIX_MEMALIGN",
"HAVE_POSIX_OPENPT",
"HAVE_POSIX_SIGNALBLOCKING",
"HAVE_POSIX_SPAWN",
"HAVE_POSIX_SPAWNATTR_T",
"HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR",
"HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR",
"HAVE_POSIX_SPAWN_FILE_ACTIONS_T",
"HAVE_POWF",
"HAVE_PREAD",
"HAVE_PTHREAD_SIGMASK",
"HAVE_PTSNAME",
"HAVE_PTSNAME_R",
"HAVE_PWRITE",
"HAVE_QSORT_R",
"HAVE_RAISE",
"HAVE_RANDOM",
"HAVE_RANDOM_H",
"HAVE_RANDOM_R",
"HAVE_RAWMEMCHR",
"HAVE_READDIR",
"HAVE_READLINK",
"HAVE_READLINKAT",
"HAVE_REALLOCARRAY",
"HAVE_REALPATH",
"HAVE_REMAINDER",
"HAVE_REMAINDERF",
"HAVE_RENAMEAT",
"HAVE_REWINDDIR",
"HAVE_RINT",
"HAVE_RINTL",
"HAVE_RPMATCH",
"HAVE_SCANDIR",
"HAVE_SCHED_H",
"HAVE_SCHED_YIELD",
"HAVE_SECURE_GETENV",
"HAVE_SETHOSTNAME",
"HAVE_SETSTATE",
"HAVE_SIGABBREV_NP",
"HAVE_SIGACTION",
"HAVE_SIGDESCR_NP",
"HAVE_SIGHANDLER_T",
"HAVE_SIGINFO_T",
"HAVE_SIGNED_SIG_ATOMIC_T",
"HAVE_SIGNED_WCHAR_T",
"HAVE_SIGNED_WINT_T",
"HAVE_SIGSET_T",
"HAVE_SINF",
"HAVE_SINHF",
"HAVE_SINL",
"HAVE_SLEEP",
"HAVE_SPAWN_H",
"HAVE_SQRTF",
"HAVE_SQRTL",
"HAVE_STDINT_H",
"HAVE_STPCPY",
"HAVE_STPNCPY",
"HAVE_STRCASECMP",
"HAVE_STRCASESTR",
"HAVE_STRCHRNUL",
"HAVE_STRERRORNAME_NP",
"HAVE_STRINGS_H",
"HAVE_STRPBRK",
"HAVE_STRPTIME",
"HAVE_STRSEP",
"HAVE_STRTOD",
"HAVE_STRTOL",
"HAVE_STRTOLD",
"HAVE_STRTOLL",
"HAVE_STRTOUL",
"HAVE_STRTOULL",
"HAVE_STRUCT_RANDOM_DATA",
"HAVE_STRUCT_SCHED_PARAM",
"HAVE_STRUCT_SIGACTION_SA_SIGACTION",
"HAVE_STRUCT_TIMEVAL",
"HAVE_STRUCT_TMS",
"HAVE_STRVERSCMP",
"HAVE_SYMLINK",
"HAVE_SYMLINKAT",
"HAVE_SYS_BITYPES_H",
"HAVE_SYS_CDEFS_H",
"HAVE_SYS_INTTYPES_H",
"HAVE_SYS_IOCTL_H",
"HAVE_SYS_LOADAVG_H",
"HAVE_SYS_PARAM_H",
"HAVE_SYS_RESOURCE_H",
"HAVE_SYS_TIMES_H",
"HAVE_SYS_TIME_H",
"HAVE_SYS_TYPES_H",
"HAVE_TANF",
"HAVE_TANHF",
"HAVE_TANL",
"HAVE_TERMIOS_H",
"HAVE_TIMEGM",
"HAVE_TIMES",
"HAVE_TIMESPEC_GET",
"HAVE_TIMEZONE_T",
"HAVE_TYPE_VOLATILE_SIG_ATOMIC_T",
"HAVE_UNISTD_H",
"HAVE_UNLINKAT",
"HAVE_UNLOCKPT",
"HAVE_USLEEP",
"HAVE_UTIMENSAT",
"HAVE_VASPRINTF",
"HAVE_VDPRINTF",
"HAVE_WCHAR_H",
"HAVE_WCHAR_T",
"HAVE_WCPCPY",
"HAVE_WCPNCPY",
"HAVE_WCRTOMB",
"HAVE_WCSCASECMP",
"HAVE_WCSCAT",
"HAVE_WCSCHR",
"HAVE_WCSCMP",
"HAVE_WCSCOLL",
"HAVE_WCSCPY",
"HAVE_WCSCSPN",
"HAVE_WCSDUP",
"HAVE_WCSFTIME",
"HAVE_WCSLEN",
"HAVE_WCSNCASECMP",
"HAVE_WCSNCAT",
"HAVE_WCSNCMP",
"HAVE_WCSNCPY",
"HAVE_WCSNLEN",
"HAVE_WCSNRTOMBS",
"HAVE_WCSPBRK",
"HAVE_WCSRCHR",
"HAVE_WCSRTOMBS",
"HAVE_WCSSPN",
"HAVE_WCSSTR",
"HAVE_WCSTOK",
"HAVE_WCSWIDTH",
"HAVE_WCSXFRM",
"HAVE_WCTRANS_T",
"HAVE_WCTYPE_H",
"HAVE_WCTYPE_T",
"HAVE_WINSOCK2_H",
"HAVE_WINT_T",
"HAVE_WMEMCHR",
"HAVE_WMEMCMP",
"HAVE_WMEMCPY",
"HAVE_WMEMMOVE",
"HAVE_WMEMPCPY",
"HAVE_WMEMSET",
"HAVE_XLOCALE_H",
"HAVE__BOOL",
"HAVE__EXIT",
"ICONV_CONST",
"INCLUDE_NEXT",
"INCLUDE_NEXT_AS_FIRST_DIRECTIVE",
"INT32_MAX_LT_INTMAX_MAX",
"INT64_MAX_EQ_LONG_MAX",
"LOCALENAME_ENHANCE_LOCALE_FUNCS",
"NEXT_AS_FIRST_DIRECTIVE_MATH_H",
"NEXT_DIRENT_H",
"NEXT_ERRNO_H",
"NEXT_FCNTL_H",
"NEXT_FLOAT_H",
"NEXT_GETOPT_H",
"NEXT_ICONV_H",
"NEXT_INTTYPES_H",
"NEXT_LIMITS_H",
"NEXT_LOCALE_H",
"NEXT_SCHED_H",
"NEXT_SIGNAL_H",
"NEXT_SPAWN_H",
"NEXT_STDDEF_H",
"NEXT_STDINT_H",
"NEXT_STDIO_H",
"NEXT_STDLIB_H",
"NEXT_STRINGS_H",
"NEXT_STRING_H",
"NEXT_SYS_IOCTL_H",
"NEXT_SYS_RESOURCE_H",
"NEXT_SYS_STAT_H",
"NEXT_SYS_TIMES_H",
"NEXT_SYS_TIME_H",
"NEXT_SYS_TYPES_H",
"NEXT_SYS_WAIT_H",
"NEXT_TERMIOS_H",
"NEXT_TIME_H",
"NEXT_UNISTD_H",
"NEXT_WCHAR_H",
"NEXT_WCTYPE_H",
"PRAGMA_COLUMNS",
"PRAGMA_SYSTEM_HEADER",
"PRIPTR_PREFIX",
"PTHREAD_H_DEFINES_STRUCT_TIMESPEC",
"PTRDIFF_T_SUFFIX",
"REPLACE_ACCESS",
"REPLACE_ACOSF",
"REPLACE_ALIGNED_ALLOC",
"REPLACE_ASINF",
"REPLACE_ATAN2F",
"REPLACE_ATANF",
"REPLACE_BTOWC",
"REPLACE_CALLOC",
"REPLACE_CANONICALIZE_FILE_NAME",
"REPLACE_CBRTF",
"REPLACE_CBRTL",
"REPLACE_CEIL",
"REPLACE_CEILF",
"REPLACE_CEILL",
"REPLACE_CHOWN",
"REPLACE_CLOSE",
"REPLACE_CLOSEDIR",
"REPLACE_COSF",
"REPLACE_COSHF",
"REPLACE_CREAT",
"REPLACE_CTIME",
"REPLACE_DIRFD",
"REPLACE_DPRINTF",
"REPLACE_DUP2",
"REPLACE_DUP",
"REPLACE_DUPLOCALE",
"REPLACE_EXECL",
"REPLACE_EXECLE",
"REPLACE_EXECLP",
"REPLACE_EXECV",
"REPLACE_EXECVE",
"REPLACE_EXECVP",
"REPLACE_EXECVPE",
"REPLACE_EXP2",
"REPLACE_EXP2L",
"REPLACE_EXPF",
"REPLACE_EXPL",
"REPLACE_EXPM1",
"REPLACE_EXPM1F",
"REPLACE_EXPM1L",
"REPLACE_FABSL",
"REPLACE_FACCESSAT",
"REPLACE_FCHMODAT",
"REPLACE_FCHOWNAT",
"REPLACE_FCLOSE",
"REPLACE_FCNTL",
"REPLACE_FDOPEN",
"REPLACE_FDOPENDIR",
"REPLACE_FFLUSH",
"REPLACE_FFSLL",
"REPLACE_FLOOR",
"REPLACE_FLOORF",
"REPLACE_FLOORL",
"REPLACE_FMA",
"REPLACE_FMAF",
"REPLACE_FMAL",
"REPLACE_FMOD",
"REPLACE_FMODF",
"REPLACE_FMODL",
"REPLACE_FOPEN",
"REPLACE_FPRINTF",
"REPLACE_FPURGE",
"REPLACE_FREE",
"REPLACE_FREELOCALE",
"REPLACE_FREOPEN",
"REPLACE_FREXP",
"REPLACE_FREXPF",
"REPLACE_FREXPL",
"REPLACE_FSEEK",
"REPLACE_FSEEKO",
"REPLACE_FSTAT",
"REPLACE_FSTATAT",
"REPLACE_FTELL",
"REPLACE_FTELLO",
"REPLACE_FTRUNCATE",
"REPLACE_FUTIMENS",
"REPLACE_GETCWD",
"REPLACE_GETDELIM",
"REPLACE_GETDOMAINNAME",
"REPLACE_GETDTABLESIZE",
"REPLACE_GETGROUPS",
"REPLACE_GETLINE",
"REPLACE_GETLOGIN_R",
"REPLACE_GETPAGESIZE",
"REPLACE_GETPASS",
"REPLACE_GETTIMEOFDAY",
"REPLACE_GMTIME",
"REPLACE_HUGE_VAL",
"REPLACE_HYPOT",
"REPLACE_HYPOTF",
"REPLACE_HYPOTL",
"REPLACE_ICONV",
"REPLACE_ICONV_OPEN",
"REPLACE_ICONV_UTF",
"REPLACE_ILOGB",
"REPLACE_ILOGBF",
"REPLACE_ILOGBL",
"REPLACE_INITSTATE",
"REPLACE_IOCTL",
"REPLACE_ISATTY",
"REPLACE_ISFINITE",
"REPLACE_ISINF",
"REPLACE_ISNAN",
"REPLACE_ISWBLANK",
"REPLACE_ISWCNTRL",
"REPLACE_ISWDIGIT",
"REPLACE_ISWXDIGIT",
"REPLACE_ITOLD",
"REPLACE_LCHOWN",
"REPLACE_LDEXPL",
"REPLACE_LINK",
"REPLACE_LINKAT",
"REPLACE_LOCALECONV",
"REPLACE_LOCALTIME",
"REPLACE_LOCALTIME_R",
"REPLACE_LOG10",
"REPLACE_LOG10F",
"REPLACE_LOG10L",
"REPLACE_LOG1P",
"REPLACE_LOG1PF",
"REPLACE_LOG1PL",
"REPLACE_LOG2",
"REPLACE_LOG2F",
"REPLACE_LOG2L",
"REPLACE_LOG",
"REPLACE_LOGB",
"REPLACE_LOGBF",
"REPLACE_LOGBL",
"REPLACE_LOGF",
"REPLACE_LOGL",
"REPLACE_LSEEK",
"REPLACE_LSTAT",
"REPLACE_MALLOC",
"REPLACE_MBRLEN",
"REPLACE_MBRTOWC",
"REPLACE_MBSINIT",
"REPLACE_MBSNRTOWCS",
"REPLACE_MBSRTOWCS",
"REPLACE_MBSTATE_T",
"REPLACE_MBTOWC",
"REPLACE_MEMCHR",
"REPLACE_MEMMEM",
"REPLACE_MKDIR",
"REPLACE_MKFIFO",
"REPLACE_MKFIFOAT",
"REPLACE_MKNOD",
"REPLACE_MKNODAT",
"REPLACE_MKSTEMP",
"REPLACE_MKTIME",
"REPLACE_MODF",
"REPLACE_MODFF",
"REPLACE_MODFL",
"REPLACE_NAN",
"REPLACE_NANOSLEEP",
"REPLACE_NEWLOCALE",
"REPLACE_NULL",
"REPLACE_OBSTACK_PRINTF",
"REPLACE_OPEN",
"REPLACE_OPENAT",
"REPLACE_OPENDIR",
"REPLACE_PERROR",
"REPLACE_POPEN",
"REPLACE_POSIX_MEMALIGN",
"REPLACE_POSIX_SPAWN",
"REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR",
"REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE",
"REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2",
"REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR",
"REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN",
"REPLACE_PREAD",
"REPLACE_PRINTF",
"REPLACE_PTHREAD_SIGMASK",
"REPLACE_PTSNAME",
"REPLACE_PTSNAME_R",
"REPLACE_PUTENV",
"REPLACE_PWRITE",
"REPLACE_QSORT_R",
"REPLACE_RAISE",
"REPLACE_RANDOM",
"REPLACE_RANDOM_R",
"REPLACE_READ",
"REPLACE_READLINK",
"REPLACE_READLINKAT",
"REPLACE_REALLOC",
"REPLACE_REALLOCARRAY",
"REPLACE_REALPATH",
"REPLACE_REMAINDER",
"REPLACE_REMAINDERF",
"REPLACE_REMAINDERL",
"REPLACE_REMOVE",
"REPLACE_RENAME",
"REPLACE_RENAMEAT",
"REPLACE_RINTL",
"REPLACE_RMDIR",
"REPLACE_ROUND",
"REPLACE_ROUNDF",
"REPLACE_ROUNDL",
"REPLACE_SCHED_YIELD",
"REPLACE_SETENV",
"REPLACE_SETLOCALE",
"REPLACE_SETSTATE",
"REPLACE_SIGNBIT",
"REPLACE_SIGNBIT_USING_BUILTINS",
"REPLACE_SINF",
"REPLACE_SINHF",
"REPLACE_SLEEP",
"REPLACE_SNPRINTF",
"REPLACE_SPRINTF",
"REPLACE_SQRTF",
"REPLACE_SQRTL",
"REPLACE_STAT",
"REPLACE_STDIO_READ_FUNCS",
"REPLACE_STDIO_WRITE_FUNCS",
"REPLACE_STPNCPY",
"REPLACE_STRCASESTR",
"REPLACE_STRCHRNUL",
"REPLACE_STRDUP",
"REPLACE_STRERROR",
"REPLACE_STRERRORNAME_NP",
"REPLACE_STRERROR_R",
"REPLACE_STRFTIME",
"REPLACE_STRNCAT",
"REPLACE_STRNDUP",
"REPLACE_STRNLEN",
"REPLACE_STRSIGNAL",
"REPLACE_STRSTR",
"REPLACE_STRTOD",
"REPLACE_STRTOIMAX",
"REPLACE_STRTOK_R",
"REPLACE_STRTOL",
"REPLACE_STRTOLD",
"REPLACE_STRTOLL",
"REPLACE_STRTOUL",
"REPLACE_STRTOULL",
"REPLACE_STRTOUMAX",
"REPLACE_STRUCT_LCONV",
"REPLACE_STRUCT_TIMEVAL",
"REPLACE_SYMLINK",
"REPLACE_SYMLINKAT",
"REPLACE_TANF",
"REPLACE_TANHF",
"REPLACE_TIMEGM",
"REPLACE_TMPFILE",
"REPLACE_TOWLOWER",
"REPLACE_TRUNC",
"REPLACE_TRUNCATE",
"REPLACE_TRUNCF",
"REPLACE_TRUNCL",
"REPLACE_TTYNAME_R",
"REPLACE_TZSET",
"REPLACE_UNLINK",
"REPLACE_UNLINKAT",
"REPLACE_UNSETENV",
"REPLACE_USLEEP",
"REPLACE_UTIMENSAT",
"REPLACE_VASPRINTF",
"REPLACE_VDPRINTF",
"REPLACE_VFPRINTF",
"REPLACE_VPRINTF",
"REPLACE_VSNPRINTF",
"REPLACE_VSPRINTF",
"REPLACE_WCRTOMB",
"REPLACE_WCSFTIME",
"REPLACE_WCSNRTOMBS",
"REPLACE_WCSRTOMBS",
"REPLACE_WCSTOK",
"REPLACE_WCSWIDTH",
"REPLACE_WCTOB",
"REPLACE_WCTOMB",
"REPLACE_WCWIDTH",
"REPLACE_WRITE",
"SIG_ATOMIC_T_SUFFIX",
"SIZE_T_SUFFIX",
"SYS_IOCTL_H_HAVE_WINSOCK2_H",
"SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS",
"SYS_TIME_H_DEFINES_STRUCT_TIMESPEC",
"TIME_H_DEFINES_STRUCT_TIMESPEC",
"TIME_H_DEFINES_TIME_UTC",
"UINT32_MAX_LT_UINTMAX_MAX",
"UINT64_MAX_EQ_ULONG_MAX",
"UNDEFINE_STRTOK_R",
"UNISTD_H_DEFINES_STRUCT_TIMESPEC",
"UNISTD_H_HAVE_SYS_RANDOM_H",
"UNISTD_H_HAVE_WINSOCK2_H",
"UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS",
"WCHAR_T_SUFFIX",
"WINDOWS_64_BIT_OFF_T",
"WINDOWS_64_BIT_ST_SIZE",
"WINDOWS_STAT_INODES",
"WINDOWS_STAT_TIMESPEC",
"WINT_T_SUFFIX",
]
FILE_REPLACEMENT_KEYS = [
"definition of _GL_ARG_NONNULL",
"definition of _GL_WARN_ON_USE",
"definition of _GL_WARN_ON_USE",
"definition of _Noreturn",
"definitions of _GL_FUNCDECL_RPL",
]
DIRECT_REPLACEMENT_KEYS = [
"__always_inline",
"__glibc_likely",
"__glibc_unlikely",
]
DELETE_KEYS = [
"libc_hidden_proto",
]
_BZL_TEMPLATE = """\
\"\"\"Configuration values\"\"\"
AUTOMAKE_VARIABLES = {}
DIRECT_VARIABLES = {}
INLINE_VARIABLES = {}
DELETE_VARIABLES = {}
"""
def parse_args() -> argparse.Namespace:
"""Parse command line arguments."""
parser = argparse.ArgumentParser()
parser.add_argument(
"version",
type=str,
help="The version of bison to process.",
)
parser.add_argument(
"checkout",
type=Path,
help="The location of a fully built bison checkout",
)
default_platform = "linux"
if platform.system() == "Darwin":
default_platform = "macos"
elif platform.system() == "Windows":
default_platform = "windows"
parser.add_argument(
"--platform",
type=str,
default=default_platform,
choices=[
"macos",
"linux",
"windows",
],
help="The platform to process.",
)
return parser.parse_args()
def get_module_bison_path(version: str) -> Path:
"""Locate the bison module path."""
if "BUILD_WORKSPACE_DIRECTORY" in os.environ:
return Path(os.environ["BUILD_WORKSPACE_DIRECTORY"]) / f"modules/bison/{version}"
return Path(__file__).parent / version
def collect_template_values(
makefile: Path,
) -> tuple[dict[str, str], dict[str, str], dict[str, str], list[str]]:
"""Collect template values from the Makefile generated in the Bison checkout."""
content = makefile.read_text(encoding="utf-8")
sed_mappings = {}
# Look for sed commands like: -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g'
sed_pattern = re.compile(r"-e\s+'s/@''([A-Z_][\w\d_]*)''@/0?\$\(([\w\d_]+)\)/g'")
for key, value in sed_pattern.findall(content):
sed_mappings[key] = value
defines = {}
# Look for Makefile defines like: `FOO = 1`
defines_pattern = re.compile(r"^([\w_-]+) = (.*)$", re.MULTILINE)
for key, value in defines_pattern.findall(content):
defines[key] = value
automake_templates = {}
for key in sorted(TEMPLATE_KEYS):
real_key = sed_mappings.get(key, key)
sed_key = f"@''{key}''@"
automake_templates[sed_key] = defines.get(real_key, "")
# This variable is weirdly prefixed with `0` so that should be
# retained.
if real_key == "GL_GNULIB_UNISTD_H_GETOPT":
automake_templates[sed_key] = f"0{automake_templates[sed_key]}"
direct_templates = {}
direct_pattern = re.compile(r"-e\s+'s\|([\w_]+)\|([\w\s]+)\|g'", re.MULTILINE)
for key, value in direct_pattern.findall(content):
if key not in DIRECT_REPLACEMENT_KEYS:
continue
direct_templates[key] = value
inlines = {}
# Look for sed commands like:
inline_pattern = re.compile(r"^\s+-e\s+'\/([\w\s_]+)\/r \$\(([\w_]+)\)'", re.MULTILINE)
for key, value in inline_pattern.findall(content):
inlines[key] = defines[value].replace("$(top_srcdir)/", "")
inline_templates = {}
for key in sorted(FILE_REPLACEMENT_KEYS):
inline_templates[key] = inlines[key]
delete_keys = []
delete_pattern = re.compile(r"-e '/([\w_]+)/d'", re.MULTILINE)
for key in delete_pattern.findall(content):
if key not in sorted(DELETE_KEYS):
continue
delete_keys.append(key)
return automake_templates, direct_templates, inline_templates, delete_keys
def main() -> None:
"""The main entrypoint."""
args = parse_args()
module_path = get_module_bison_path(args.version)
checkout = Path(args.checkout)
assert checkout.exists(), "Checkout directory doesn't exist."
makefile = checkout / "Makefile"
assert makefile.exists(), "Makefile didn't exist in checkout, was it configured?"
config_src = checkout / "lib/config.h"
assert config_src.exists(), "config.h didn't exist in checkout, was it compiled?"
automake_vars, direct_vars, inline_vars, delete_keys = collect_template_values(makefile)
config_bzl = module_path / f"overlay/config_{args.platform}.bzl"
config_bzl.parent.mkdir(exist_ok=True, parents=True)
config_bzl.write_text(
_BZL_TEMPLATE.format(
json.dumps(automake_vars, indent=4).replace("\n}", ",\n}"),
json.dumps(direct_vars, indent=4).replace("\n}", ",\n}"),
json.dumps(inline_vars, indent=4).replace("\n}", ",\n}"),
json.dumps(delete_keys, indent=4).replace("\n]", ",\n]"),
)
+ "\n"
)
config_h = module_path / f"overlay/config_{args.platform}.h"
config_h.parent.mkdir(exist_ok=True, parents=True)
shutil.copy2(config_src, config_h)
if __name__ == "__main__":
main()