blob: c9b63c99c31ae732308e46b468185b65b52d4efd [file] [view]
# sed
The `config_*.h` and `config_*.bzl` files were generated by running `./configure` on the relevant
platform and invoking the following script:
```python
"""A script for parsing data from `configure` outputs of `sed`."""
import json
import platform
import re
import shutil
from pathlib import Path
# Note that some values may be missing for platforms not currently tested.
KNOWN_VALUES = {
"GNULIB__EXIT",
"GNULIB_ACCESS",
"GNULIB_ALIGNED_ALLOC",
"GNULIB_ATOLL",
"GNULIB_BTOWC",
"GNULIB_CALLOC_GNU",
"GNULIB_CALLOC_POSIX",
"GNULIB_CANONICALIZE_FILE_NAME",
"GNULIB_CHDIR",
"GNULIB_CHMOD",
"GNULIB_CHOWN",
"GNULIB_CLOSE",
"GNULIB_COPY_FILE_RANGE",
"GNULIB_CREAT",
"GNULIB_CTIME",
"GNULIB_DPRINTF",
"GNULIB_DUP",
"GNULIB_DUP2",
"GNULIB_DUP3",
"GNULIB_DUPLOCALE",
"GNULIB_ENVIRON",
"GNULIB_EUIDACCESS",
"GNULIB_EXECL",
"GNULIB_EXECLE",
"GNULIB_EXECLP",
"GNULIB_EXECV",
"GNULIB_EXECVE",
"GNULIB_EXECVP",
"GNULIB_EXECVPE",
"GNULIB_EXPLICIT_BZERO",
"GNULIB_FACCESSAT",
"GNULIB_FCHDIR",
"GNULIB_FCHMODAT",
"GNULIB_FCHOWNAT",
"GNULIB_FCLOSE",
"GNULIB_FCNTL",
"GNULIB_FDATASYNC",
"GNULIB_FDOPEN",
"GNULIB_FFLUSH",
"GNULIB_FFSL",
"GNULIB_FFSLL",
"GNULIB_FGETC",
"GNULIB_FGETS",
"GNULIB_FOPEN",
"GNULIB_FPRINTF_POSIX",
"GNULIB_FPRINTF",
"GNULIB_FPURGE",
"GNULIB_FPUTC",
"GNULIB_FPUTS",
"GNULIB_FREAD",
"GNULIB_FREE_POSIX",
"GNULIB_FREOPEN",
"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_R",
"GNULIB_GETLOGIN",
"GNULIB_GETOPT_POSIX",
"GNULIB_GETPAGESIZE",
"GNULIB_GETPASS",
"GNULIB_GETRANDOM",
"GNULIB_GETSUBOPT",
"GNULIB_GETUMASK",
"GNULIB_GETUSERSHELL",
"GNULIB_GRANTPT",
"GNULIB_GROUP_MEMBER",
"GNULIB_ISATTY",
"GNULIB_ISBLANK",
"GNULIB_ISWBLANK",
"GNULIB_ISWCTYPE",
"GNULIB_ISWDIGIT",
"GNULIB_ISWXDIGIT",
"GNULIB_LCHMOD",
"GNULIB_LCHOWN",
"GNULIB_LINK",
"GNULIB_LINKAT",
"GNULIB_LOCALECONV",
"GNULIB_LOCALENAME",
"GNULIB_LOCALTIME",
"GNULIB_LSEEK",
"GNULIB_LSTAT",
"GNULIB_MALLOC_GNU",
"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_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_LSEEK",
"GNULIB_MDA_MEMCCPY",
"GNULIB_MDA_MKDIR",
"GNULIB_MDA_MKTEMP",
"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_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_NANOSLEEP",
"GNULIB_NL_LANGINFO",
"GNULIB_NONBLOCKING",
"GNULIB_OBSTACK_PRINTF_POSIX",
"GNULIB_OBSTACK_PRINTF",
"GNULIB_OPEN",
"GNULIB_OPENAT",
"GNULIB_OVERRIDES_STRUCT_STAT",
"GNULIB_PCLOSE",
"GNULIB_PERROR",
"GNULIB_PIPE",
"GNULIB_PIPE2",
"GNULIB_POPEN",
"GNULIB_POSIX_MEMALIGN",
"GNULIB_POSIX_OPENPT",
"GNULIB_PREAD",
"GNULIB_PRINTF_POSIX",
"GNULIB_PRINTF",
"GNULIB_PTSNAME_R",
"GNULIB_PTSNAME",
"GNULIB_PUTC",
"GNULIB_PUTCHAR",
"GNULIB_PUTENV",
"GNULIB_PUTS",
"GNULIB_PWRITE",
"GNULIB_QSORT_R",
"GNULIB_RANDOM_R",
"GNULIB_RANDOM",
"GNULIB_RAWMEMCHR",
"GNULIB_READ",
"GNULIB_READLINK",
"GNULIB_READLINKAT",
"GNULIB_REALLOC_GNU",
"GNULIB_REALLOC_POSIX",
"GNULIB_REALLOCARRAY",
"GNULIB_REALPATH",
"GNULIB_REMOVE",
"GNULIB_RENAME",
"GNULIB_RENAMEAT",
"GNULIB_RMDIR",
"GNULIB_RPMATCH",
"GNULIB_SCANF",
"GNULIB_SECURE_GETENV",
"GNULIB_SETENV",
"GNULIB_SETHOSTNAME",
"GNULIB_SETLOCALE_NULL",
"GNULIB_SETLOCALE",
"GNULIB_SIGABBREV_NP",
"GNULIB_SIGDESCR_NP",
"GNULIB_SLEEP",
"GNULIB_SNPRINTF",
"GNULIB_SPRINTF_POSIX",
"GNULIB_STAT",
"GNULIB_STDIO_H_NONBLOCKING",
"GNULIB_STDIO_H_SIGPIPE",
"GNULIB_STPCPY",
"GNULIB_STPNCPY",
"GNULIB_STRCASESTR",
"GNULIB_STRCHRNUL",
"GNULIB_STRDUP",
"GNULIB_STRERROR_R",
"GNULIB_STRERROR",
"GNULIB_STRERRORNAME_NP",
"GNULIB_STRFTIME",
"GNULIB_STRNCAT",
"GNULIB_STRNDUP",
"GNULIB_STRNLEN",
"GNULIB_STRPBRK",
"GNULIB_STRPTIME",
"GNULIB_STRSEP",
"GNULIB_STRSIGNAL",
"GNULIB_STRSTR",
"GNULIB_STRTOD",
"GNULIB_STRTOK_R",
"GNULIB_STRTOL",
"GNULIB_STRTOLD",
"GNULIB_STRTOLL",
"GNULIB_STRTOUL",
"GNULIB_STRTOULL",
"GNULIB_STRVERSCMP",
"GNULIB_SYMLINK",
"GNULIB_SYMLINKAT",
"GNULIB_SYSTEM_POSIX",
"GNULIB_TIME_R",
"GNULIB_TIME_RZ",
"GNULIB_TIMEGM",
"GNULIB_TIMESPEC_GET",
"GNULIB_TIMESPEC_GETRES",
"GNULIB_TMPFILE",
"GNULIB_TOWCTRANS",
"GNULIB_TRUNCATE",
"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_POSIX",
"GNULIB_VFPRINTF",
"GNULIB_VFSCANF",
"GNULIB_VPRINTF_POSIX",
"GNULIB_VPRINTF",
"GNULIB_VSCANF",
"GNULIB_VSNPRINTF",
"GNULIB_VSPRINTF_POSIX",
"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",
"GNULIBHEADERS_OVERRIDE_WINT_T",
"GUARD_PREFIX",
"HAVE_ALLOCA_H",
"HAVE_BTOWC",
"HAVE_C99_STDINT_H",
"HAVE_CANONICALIZE_FILE_NAME",
"HAVE_DECL_ECVT",
"HAVE_DECL_EXECVPE",
"HAVE_DECL_FCLOSEALL",
"HAVE_DECL_FCVT",
"HAVE_DECL_GCVT",
"HAVE_DECL_GETDELIM",
"HAVE_DECL_MEMRCHR",
"HAVE_DECL_UNSETENV",
"HAVE_DECL_WCSDUP",
"HAVE_DECL_WCTOB",
"HAVE_DUPLOCALE",
"HAVE_EXECVPE",
"HAVE_FCNTL",
"HAVE_FEATURES_H",
"HAVE_FREELOCALE",
"HAVE_GETDTABLESIZE",
"HAVE_GETRANDOM",
"HAVE_ISWBLANK",
"HAVE_ISWCNTRL",
"HAVE_LANGINFO_ALTMON",
"HAVE_LANGINFO_CODESET",
"HAVE_LANGINFO_ERA",
"HAVE_LANGINFO_H",
"HAVE_LANGINFO_T_FMT_AMPM",
"HAVE_LANGINFO_YESEXPR",
"HAVE_LSTAT",
"HAVE_MBRLEN",
"HAVE_MBRTOWC",
"HAVE_MBSINIT",
"HAVE_MBTOWC",
"HAVE_MEMPCPY",
"HAVE_MKOSTEMP",
"HAVE_NEWLOCALE",
"HAVE_NL_LANGINFO",
"HAVE_RAWMEMCHR",
"HAVE_READLINK",
"HAVE_REALLOCARRAY",
"HAVE_REALPATH",
"HAVE_STDINT_H",
"HAVE_STRVERSCMP",
"HAVE_SYS_LOADAVG_H",
"HAVE_SYS_RANDOM_H",
"HAVE_TIMEZONE_T",
"HAVE_UNISTD_H",
"HAVE_WCHAR_H",
"HAVE_WCRTOMB",
"HAVE_WCTRANS_T",
"HAVE_WCTYPE_H",
"HAVE_WCTYPE_T",
"HAVE_WINT_T",
"HAVE_XLOCALE_H",
"INCLUDE_NEXT",
"LOCALENAME_ENHANCE_LOCALE_FUNCS",
"NEXT_ASSERT_H",
"NEXT_CTYPE_H",
"NEXT_FCNTL_H",
"NEXT_LANGINFO_H",
"NEXT_LIMITS_H",
"NEXT_LOCALE_H",
"NEXT_STDINT_H",
"NEXT_STDIO_H",
"NEXT_STDLIB_H",
"NEXT_STRING_H",
"NEXT_SYS_RANDOM_H",
"NEXT_SYS_STAT_H",
"NEXT_SYS_TYPES_H",
"NEXT_TIME_H",
"NEXT_UNISTD_H",
"NEXT_WCHAR_H",
"NEXT_WCTYPE_H",
"PRAGMA_COLUMNS",
"PRAGMA_SYSTEM_HEADER",
"REPLACE_BTOWC",
"REPLACE_CALLOC_FOR_CALLOC_GNU",
"REPLACE_CALLOC_FOR_CALLOC_POSIX",
"REPLACE_CANONICALIZE_FILE_NAME",
"REPLACE_CLOSE",
"REPLACE_DUP2",
"REPLACE_FCNTL",
"REPLACE_FPRINTF",
"REPLACE_FREE",
"REPLACE_FSTAT",
"REPLACE_GETDELIM",
"REPLACE_GETDTABLESIZE",
"REPLACE_GETRANDOM",
"REPLACE_GMTIME",
"REPLACE_ISWBLANK",
"REPLACE_ISWCNTRL",
"REPLACE_LOCALECONV",
"REPLACE_LOCALTIME",
"REPLACE_LSTAT",
"REPLACE_MALLOC_FOR_MALLOC_GNU",
"REPLACE_MALLOC_FOR_MALLOC_POSIX",
"REPLACE_MBRLEN",
"REPLACE_MBRTOWC",
"REPLACE_MBSINIT",
"REPLACE_MBSTATE_T",
"REPLACE_MBTOWC",
"REPLACE_MEMCHR",
"REPLACE_MKDIR",
"REPLACE_NL_LANGINFO",
"REPLACE_OPEN",
"REPLACE_PRINTF",
"REPLACE_READLINK",
"REPLACE_REALLOC_FOR_REALLOC_GNU",
"REPLACE_REALLOC_FOR_REALLOC_POSIX",
"REPLACE_REALLOCARRAY",
"REPLACE_REALPATH",
"REPLACE_RENAME",
"REPLACE_RMDIR",
"REPLACE_STAT",
"REPLACE_STDIO_READ_FUNCS",
"REPLACE_STDIO_WRITE_FUNCS",
"REPLACE_STRERROR",
"REPLACE_STRUCT_LCONV",
"REPLACE_TOWLOWER",
"REPLACE_VFPRINTF",
"REPLACE_VPRINTF",
"REPLACE_WCRTOMB",
"REPLACE_WCTOB",
"REPLACE_WCTOMB",
"TIME_H_DEFINES_STRUCT_TIMESPEC",
"TIME_H_DEFINES_TIME_UTC",
"UNISTD_H_HAVE_SYS_RANDOM_H",
"UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS",
"UNISTD_H_HAVE_WINSOCK2_H",
"WINDOWS_64_BIT_OFF_T",
"WINDOWS_64_BIT_ST_SIZE",
"WINDOWS_STAT_INODES",
}
def load_stat_variables(config_status: Path) -> dict[str, str]:
results = {}
pattern = re.compile(r'S\["([\w_]+)"\]="(.*)"')
for line in config_status.read_text(encoding="utf-8").splitlines():
matches = pattern.match(line)
if matches:
results[matches.group(1)] = matches.group(2)
return results
_TEMPLATE = """\
\"\"\"Platform specific configuration values\"\"\"
CONFIGURATION = {}
"""
def main() -> None:
config_h = Path("config.h")
config_status = Path("config.status")
variables = load_stat_variables(config_status)
# insert known missing variables
variables["GUARD_PREFIX"] = "GL"
filtered = {}
for value in KNOWN_VALUES:
if value in variables:
filtered[f"@{value}@"] = variables[value]
elif f"GL_{value}" in variables:
filtered[f"@{value}@"] = variables[f"GL_{value}"]
else:
print("MISSING:", value)
plat_name = "linux"
if platform.system() == "Windows":
plat_name = "windows"
if platform.system() == "Darwin":
plat_name = "macos"
shutil.copy2(config_h, config_h.parent / config_h.name.replace(".h", f"_{plat_name}.h"))
Path(f"config_{plat_name}.bzl").write_text(
_TEMPLATE.format(json.dumps(filtered, indent=4, sort_keys=True)),
encoding="utf-8",
)
print("Done")
if __name__ == "__main__":
main()
```