load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@rules_cc//cc:cc_binary.bzl", "cc_binary") load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_cc_autoconf//autoconf:autoconf.bzl", "autoconf") load("@rules_cc_autoconf//autoconf:autoconf_hdr.bzl", "autoconf_hdr") load("@rules_cc_autoconf//autoconf:autoconf_srcs.bzl", "autoconf_srcs") load("@rules_cc_autoconf//autoconf:checks.bzl", "checks") load("@rules_cc_autoconf//autoconf:package_info.bzl", "package_info") LOCAL_DEFINES = [ "HAVE_CONFIG_H", ] + select({ "@platforms//os:macos": [ "_DARWIN_C_SOURCE", ], "//conditions:default": [], }) GENERATED_SRCS = { "lib/alloca.h": "lib/alloca.in.h", "lib/dirent.h": "lib/dirent.in.h", "lib/error.h": "lib/error.in.h", "lib/fcntl.h": "lib/fcntl.in.h", "lib/getopt-cdefs.h": "lib/getopt-cdefs.in.h", "lib/getopt.h": "lib/getopt.in.h", "lib/iconv.h": "lib/iconv.in.h", "lib/inttypes.h": "lib/inttypes.in.h", "lib/langinfo.h": "lib/langinfo.in.h", "lib/limits.h": "lib/limits.in.h", "lib/locale.h": "lib/locale.in.h", "lib/malloc/scratch_buffer.gl.h": "lib/malloc/scratch_buffer.h", "lib/math.h": "lib/math.in.h", "lib/obstack.h": "lib/obstack.in.h", "lib/sched.h": "lib/sched.in.h", "lib/signal.h": "lib/signal.in.h", "lib/sigsegv.h": "lib/sigsegv.in.h", "lib/spawn.h": "lib/spawn.in.h", "lib/stdckdint.h": "lib/stdckdint.in.h", "lib/stddef.h": "lib/stddef.in.h", "lib/stdint.h": "lib/stdint.in.h", "lib/stdio.h": "lib/stdio.in.h", "lib/stdlib.h": "lib/stdlib.in.h", "lib/string.h": "lib/string.in.h", "lib/sys/random.h": "lib/sys_random.in.h", "lib/sys/stat.h": "lib/sys_stat.in.h", "lib/sys/types.h": "lib/sys_types.in.h", "lib/sys/wait.h": "lib/sys_wait.in.h", "lib/time.h": "lib/time.in.h", "lib/uchar.h": "lib/uchar.in.h", "lib/unistd.h": "lib/unistd.in.h", "lib/unistr.h": "lib/unistr.in.h", "lib/unitypes.h": "lib/unitypes.in.h", "lib/uniwidth.h": "lib/uniwidth.in.h", "lib/wchar.h": "lib/wchar.in.h", "lib/wctype.h": "lib/wctype.in.h", } M4_UNIQUE_M4_FILES = [ "m4/gnulib-cache.m4", "m4/gnulib-common.m4", "m4/gnulib-comp.m4", "m4/sigaltstack.m4", "m4/strerrorname_np.m4", ] GNULIB_M4_DEPS = [ "@rules_cc_autoconf//gnulib/m4/{}".format(file[len("m4/"):-len(".m4")]) for file in glob( include = ["m4/*.m4"], exclude = M4_UNIQUE_M4_FILES, ) ] package_info( name = "m4_package_info", package_name = "GNU M4", aliases = { "PACKAGE": "PACKAGE_NAME", "VERSION": "PACKAGE_VERSION", }, module_bazel = "MODULE.bazel", package_bugreport = "bug-m4@gnu.org", package_url = "https://www.gnu.org/software/m4/", strip_bcr_version = True, ) autoconf( name = "m4_gnulib-comp", checks = [ checks.AC_DEFINE( "GNULIB_XALLOC", 1, subst = True, ), checks.AC_DEFINE( "GNULIB_XALLOC_DIE", 1, subst = True, ), checks.AC_DEFINE( "GNULIB_STDIO_SINGLE_THREAD", 1, subst = True, ), checks.AC_DEFINE( "USE_UNLOCKED_IO", "GNULIB_STDIO_SINGLE_THREAD", ), # gl_MODULE_INDICATOR (AC_DEFINE in config.h) checks.AC_DEFINE("GNULIB_CANONICALIZE", 1), checks.AC_DEFINE("GNULIB_CANONICALIZE_LGPL", 1), checks.AC_DEFINE("GNULIB_CLOSE", 1), checks.AC_DEFINE("GNULIB_CLOSE_STREAM", 1), checks.AC_DEFINE("GNULIB_DIRNAME", 1), checks.AC_DEFINE("GNULIB_FD_SAFER_FLAG", 1), checks.AC_DEFINE("GNULIB_FDOPENDIR", 1), checks.AC_DEFINE("GNULIB_FFLUSH", 1), checks.AC_DEFINE("GNULIB_FILENAMECAT", 1), checks.AC_DEFINE("GNULIB_FOPEN_GNU", 1), checks.AC_DEFINE("GNULIB_FOPEN_SAFER", 1), checks.AC_DEFINE("GNULIB_FSTAT", 1), checks.AC_DEFINE("GNULIB_FSTATAT", 1), checks.AC_DEFINE("GNULIB_GETCWD", 1), checks.AC_DEFINE("GNULIB_HASHCODE_STRING1", 1), checks.AC_DEFINE("GNULIB_LOCALECONV", 1), checks.AC_DEFINE("GNULIB_LOCK", 1), checks.AC_DEFINE("GNULIB_LSTAT", 1), checks.AC_DEFINE("GNULIB_MSVC_NOTHROW", 1), checks.AC_DEFINE("GNULIB_OPENAT", 1), checks.AC_DEFINE("GNULIB_PIPE2_SAFER", 1), checks.AC_DEFINE("GNULIB_REALLOCARRAY", 1), checks.AC_DEFINE("GNULIB_SIGPIPE", 1), checks.AC_DEFINE("GNULIB_SNPRINTF", 1), checks.AC_DEFINE("GNULIB_STAT", 1), checks.AC_DEFINE("GNULIB_STRERROR", 1), checks.AC_DEFINE("GNULIB_TEMPNAME", 1), checks.AC_DEFINE("GNULIB_UNISTD_SAFER", 1), checks.AC_DEFINE("GNULIB_UNISTR_U8_MBTOUCR", 1), checks.AC_DEFINE("GNULIB_UNISTR_U8_UCTOMB", 1), checks.AC_DEFINE("GNULIB_FSCANF", 1), checks.AC_DEFINE("GNULIB_SCANF", 1), checks.AC_DEFINE("GNULIB_ACCEPT", 1), checks.AC_DEFINE("GNULIB_BIND", 1), checks.AC_DEFINE("GNULIB_CONNECT", 1), checks.AC_DEFINE("GNULIB_IOCTL", 1), checks.AC_DEFINE("GNULIB_ISBLANK", 1), checks.AC_DEFINE("GNULIB_LISTEN", 1), checks.AC_DEFINE("GNULIB_SELECT", 1), checks.AC_DEFINE("GNULIB_SETSOCKOPT", 1), checks.AC_DEFINE("GNULIB_SOCKET", 1), # gl_STDIO_MODULE_INDICATOR (AC_SUBST for stdio.in.h) checks.AC_SUBST("GNULIB_FCLOSE", 1), checks.AC_SUBST("GNULIB_FDOPEN", 1), checks.AC_SUBST("GNULIB_FFLUSH", 1), checks.AC_SUBST("GNULIB_FGETC", 1), checks.AC_SUBST("GNULIB_FGETS", 1), checks.AC_SUBST("GNULIB_FOPEN", 1), checks.AC_SUBST("GNULIB_FOPEN_GNU", 1), checks.AC_SUBST("GNULIB_FPRINTF", 1), checks.AC_SUBST("GNULIB_FPURGE", 1), checks.AC_SUBST("GNULIB_FPUTC", 1), checks.AC_SUBST("GNULIB_FPUTS", 1), checks.AC_SUBST("GNULIB_FREAD", 1), checks.AC_SUBST("GNULIB_FREOPEN", 1), checks.AC_SUBST("GNULIB_FSCANF", 1), checks.AC_SUBST("GNULIB_FSEEK", 1), checks.AC_SUBST("GNULIB_FSEEKO", 1), checks.AC_SUBST("GNULIB_FTELL", 1), checks.AC_SUBST("GNULIB_FTELLO", 1), checks.AC_SUBST("GNULIB_FWRITE", 1), checks.AC_SUBST("GNULIB_GETC", 1), checks.AC_SUBST("GNULIB_GETCHAR", 1), checks.AC_SUBST("GNULIB_PRINTF", 1), checks.AC_SUBST("GNULIB_PUTC", 1), checks.AC_SUBST("GNULIB_PUTCHAR", 1), checks.AC_SUBST("GNULIB_PUTS", 1), checks.AC_SUBST("GNULIB_RENAME", 1), checks.AC_SUBST("GNULIB_SCANF", 1), checks.AC_SUBST("GNULIB_SNPRINTF", 1), checks.AC_SUBST("GNULIB_VFPRINTF", 1), checks.AC_SUBST("GNULIB_VPRINTF", 1), checks.AC_SUBST("GNULIB_VASPRINTF", 1), checks.AC_SUBST("GNULIB_VASZPRINTF", 1), checks.AC_SUBST("GNULIB_VFZPRINTF", 1), checks.AC_SUBST("GNULIB_VSNZPRINTF", 1), checks.AC_SUBST("GNULIB_VZPRINTF", 1), # gl_UNISTD_MODULE_INDICATOR (AC_SUBST for unistd.in.h) checks.AC_SUBST("GNULIB_ACCESS", 1), checks.AC_SUBST("GNULIB_CHDIR", 1), checks.AC_SUBST("GNULIB_CLOSE", 1), checks.AC_SUBST("GNULIB_DUP", 1), checks.AC_SUBST("GNULIB_DUP2", 1), checks.AC_SUBST("GNULIB_ENVIRON", 1), checks.AC_SUBST("GNULIB_FCHDIR", 1), checks.AC_SUBST("GNULIB_GETCWD", 1), checks.AC_SUBST("GNULIB_GETDTABLESIZE", 1), checks.AC_SUBST("GNULIB_GETOPT_POSIX", 1), checks.AC_SUBST("GNULIB_GETPAGESIZE", 1), checks.AC_SUBST("GNULIB_LINK", 1), checks.AC_SUBST("GNULIB_LSEEK", 1), checks.AC_SUBST("GNULIB_PIPE", 1), checks.AC_SUBST("GNULIB_PIPE2", 1), checks.AC_SUBST("GNULIB_READLINK", 1), checks.AC_SUBST("GNULIB_RMDIR", 1), checks.AC_SUBST("GNULIB_SLEEP", 1), checks.AC_SUBST("GNULIB_SYMLINK", 1), checks.AC_SUBST("GNULIB_WRITE", 1), checks.AC_SUBST("GNULIB_UNISTD_H_GETOPT", 1), checks.AC_SUBST("GNULIB_FTRUNCATE", 1), # gl_STDLIB_MODULE_INDICATOR (AC_SUBST for stdlib.in.h) checks.AC_SUBST("GNULIB_CALLOC_GNU", 1), checks.AC_SUBST("GNULIB_CALLOC_POSIX", 1), checks.AC_SUBST("GNULIB_CANONICALIZE_FILE_NAME", 1), checks.AC_SUBST("GNULIB_FREE_POSIX", 1), checks.AC_SUBST("GNULIB_GETPROGNAME", 1), checks.AC_SUBST("GNULIB_MALLOC_GNU", 1), checks.AC_SUBST("GNULIB_MALLOC_POSIX", 1), checks.AC_SUBST("GNULIB_MBTOWC", 1), checks.AC_SUBST("GNULIB_MKDTEMP", 1), checks.AC_SUBST("GNULIB_MKSTEMP", 1), checks.AC_SUBST("GNULIB_PUTENV", 1), checks.AC_SUBST("GNULIB_RANDOM", 1), checks.AC_SUBST("GNULIB_RANDOM_R", 1), checks.AC_SUBST("GNULIB_REALLOCARRAY", 1), checks.AC_SUBST("GNULIB_REALLOC_POSIX", 1), checks.AC_SUBST("GNULIB_REALPATH", 1), checks.AC_SUBST("GNULIB_SECURE_GETENV", 1), checks.AC_SUBST("GNULIB_SETENV", 1), checks.AC_SUBST("GNULIB_STRTOD", 1), checks.AC_SUBST("GNULIB_UNSETENV", 1), checks.AC_SUBST("GNULIB_WCTOMB", 1), # gl_STRING_MODULE_INDICATOR (AC_SUBST for string.in.h) checks.AC_SUBST("GNULIB_MBSLEN", 1), checks.AC_SUBST("GNULIB_MBSNLEN", 1), checks.AC_SUBST("GNULIB_MBSSTR", 1), checks.AC_SUBST("GNULIB_MEMCHR", 1), checks.AC_SUBST("GNULIB_MEMPCPY", 1), checks.AC_SUBST("GNULIB_MEMRCHR", 1), checks.AC_SUBST("GNULIB_MEMSET_EXPLICIT", 1), checks.AC_SUBST("GNULIB_RAWMEMCHR", 1), checks.AC_SUBST("GNULIB_STPCPY", 1), checks.AC_SUBST("GNULIB_STRCHRNUL", 1), checks.AC_SUBST("GNULIB_STRDUP", 1), checks.AC_SUBST("GNULIB_STRERROR", 1), checks.AC_SUBST("GNULIB_STRERROR_R", 0), checks.AC_SUBST("GNULIB_STRNLEN", 1), checks.AC_SUBST("GNULIB_STRSIGNAL", 1), checks.AC_SUBST("GNULIB_STRSTR", 1), checks.AC_SUBST("GNULIB_PERROR", 0), checks.AC_SUBST("GNULIB_STR_ENDSWITH", 1), checks.AC_SUBST("GNULIB_STR_STARTSWITH", 1), # gl_MATH_MODULE_INDICATOR (AC_SUBST for math.in.h) checks.AC_SUBST("GNULIB_FREXP", 1), checks.AC_SUBST("GNULIB_FREXPL", 1), checks.AC_SUBST("GNULIB_ISNAN", 1), checks.AC_SUBST("GNULIB_ISNAND", 1), checks.AC_SUBST("GNULIB_ISNANF", 1), checks.AC_SUBST("GNULIB_ISNANL", 1), checks.AC_SUBST("GNULIB_LDEXPL", 1), checks.AC_SUBST("GNULIB_SIGNBIT", 1), # gl_WCHAR_MODULE_INDICATOR (AC_SUBST for wchar.in.h) checks.AC_SUBST("GNULIB_BTOWC", 1), checks.AC_SUBST("GNULIB_MBRTOWC", 1), checks.AC_SUBST("GNULIB_MBSINIT", 1), checks.AC_SUBST("GNULIB_MBSZERO", 1), checks.AC_SUBST("GNULIB_WCRTOMB", 1), checks.AC_SUBST("GNULIB_WCWIDTH", 1), checks.AC_SUBST("GNULIB_WCTOB", 1), # gl_WCTYPE_MODULE_INDICATOR (AC_SUBST for wctype.in.h) checks.AC_SUBST("GNULIB_ISWBLANK", 1), checks.AC_SUBST("GNULIB_ISWCTYPE", 1), checks.AC_SUBST("GNULIB_ISWDIGIT", 1), checks.AC_SUBST("GNULIB_ISWPUNCT", 1), checks.AC_SUBST("GNULIB_ISWXDIGIT", 1), checks.AC_SUBST("GNULIB_WCTYPE", 1), # gl_SPAWN_MODULE_INDICATOR (AC_SUBST for spawn.in.h) checks.AC_SUBST("GNULIB_POSIX_SPAWN", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWNATTR_DESTROY", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWNATTR_INIT", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWNATTR_SETFLAGS", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWNATTR_SETPGROUP", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWNATTR_SETSIGMASK", 1), checks.AC_SUBST("GNULIB_POSIX_SPAWNP", 1), # gl_SIGNAL_MODULE_INDICATOR (AC_SUBST for signal.in.h) checks.AC_SUBST("GNULIB_RAISE", 1), checks.AC_SUBST("GNULIB_SIGACTION", 1), checks.AC_SUBST("GNULIB_SIGPROCMASK", 1), checks.AC_SUBST("GNULIB_PTHREAD_SIGMASK", 1), # gl_SYS_STAT_MODULE_INDICATOR (AC_SUBST for sys_stat.in.h) checks.AC_SUBST("GNULIB_FSTAT", 1), checks.AC_SUBST("GNULIB_FSTATAT", 1), checks.AC_SUBST("GNULIB_LSTAT", 1), checks.AC_SUBST("GNULIB_MKDIR", 1), checks.AC_SUBST("GNULIB_STAT", 1), # gl_SYS_WAIT_MODULE_INDICATOR (AC_SUBST for sys_wait.in.h) checks.AC_SUBST("GNULIB_WAITPID", 1), # gl_FCNTL_MODULE_INDICATOR (AC_SUBST for fcntl.in.h) checks.AC_SUBST("GNULIB_CREAT", 1), checks.AC_SUBST("GNULIB_FCNTL", 1), checks.AC_SUBST("GNULIB_OPEN", 1), checks.AC_SUBST("GNULIB_OPENAT", 1), # gl_ICONV_MODULE_INDICATOR checks.AC_SUBST("GNULIB_ICONV", 1), # gl_DIRENT_MODULE_INDICATOR (AC_SUBST for dirent.in.h) checks.AC_SUBST("GNULIB_CLOSEDIR", 1), checks.AC_SUBST("GNULIB_DIRFD", 1), checks.AC_SUBST("GNULIB_FDOPENDIR", 1), checks.AC_SUBST("GNULIB_OPENDIR", 1), checks.AC_SUBST("GNULIB_READDIR", 1), checks.AC_SUBST("GNULIB_REWINDDIR", 1), # gl_LOCALE_MODULE_INDICATOR (AC_SUBST for locale.in.h) checks.AC_SUBST("GNULIB_LOCALECONV", 1), checks.AC_SUBST("GNULIB_LOCALENAME_ENVIRON", 1), checks.AC_SUBST("GNULIB_LOCALENAME_UNSAFE", 1), checks.AC_SUBST("GNULIB_GETLOCALENAME_L_UNSAFE", 1), checks.AC_SUBST("GNULIB_SETLOCALE", 1), checks.AC_SUBST("GNULIB_SETLOCALE_NULL", 1), # gl_SYS_RANDOM_MODULE_INDICATOR checks.AC_SUBST("GNULIB_GETRANDOM", 1), # gl_UCHAR_MODULE_INDICATOR (AC_SUBST for uchar.in.h) checks.AC_SUBST("GNULIB_BTOC32", 1), checks.AC_SUBST("GNULIB_C32ISALNUM", 1), checks.AC_SUBST("GNULIB_C32ISALPHA", 1), checks.AC_SUBST("GNULIB_C32ISBLANK", 1), checks.AC_SUBST("GNULIB_C32ISCNTRL", 1), checks.AC_SUBST("GNULIB_C32ISDIGIT", 1), checks.AC_SUBST("GNULIB_C32ISGRAPH", 1), checks.AC_SUBST("GNULIB_C32ISLOWER", 1), checks.AC_SUBST("GNULIB_C32ISPRINT", 1), checks.AC_SUBST("GNULIB_C32ISPUNCT", 1), checks.AC_SUBST("GNULIB_C32ISSPACE", 1), checks.AC_SUBST("GNULIB_C32ISUPPER", 1), checks.AC_SUBST("GNULIB_C32ISXDIGIT", 1), checks.AC_SUBST("GNULIB_C32RTOMB", 1), checks.AC_SUBST("GNULIB_C32TOLOWER", 1), checks.AC_SUBST("GNULIB_C32WIDTH", 1), checks.AC_SUBST("GNULIB_MBRTOC32", 1), # Compatibility substitutions for older gnulib variable names checks.AC_SUBST("REPLACE_CALLOC", 0), checks.AC_SUBST("REPLACE_MALLOC", 0), checks.AC_SUBST("REPLACE_REALLOC", 0), ], ) autoconf( name = "configure_ac", checks = [ checks.AC_CHECK_FUNC("setlocale"), checks.AC_SUBST("GUARD_PREFIX", "GL"), checks.AC_DEFINE("PACKAGE_COPYRIGHT_YEAR", 2025), # M4 is single-threaded (gl_DISABLE_THREADS in configure.ac) checks.AC_DEFINE("AVOID_ANY_THREADS", 1), checks.AC_DEFINE("GNULIB_REGEX_SINGLE_THREAD", 1), checks.AC_DEFINE("GNULIB_MBRTOWC_SINGLE_THREAD", 1), checks.AC_DEFINE("GNULIB_WCHAR_SINGLE_LOCALE", 1), # Variables missing from rules_cc_autoconf toolchain defaults checks.AC_SUBST( "HAVE_RANDOM_H", condition = "ac_cv_header_random_h", ), checks.AC_SUBST( "HAVE_LANGINFO_T_FMT_AMPM", condition = "ac_cv_header_langinfo_h", if_false = 0, if_true = 1, ), checks.AC_SUBST( "HAVE_LANGINFO_YESEXPR", condition = "ac_cv_header_langinfo_h", if_false = 0, if_true = 1, ), checks.AC_SUBST("HAVE_DECL_CBRTF", 1), checks.AC_SUBST("HAVE_DECL_CBRTL", 1), checks.AC_SUBST("HAVE_DECL_COPYSIGNF", 1), checks.AC_SUBST("HAVE_DECL_EXP2F", 1), checks.AC_SUBST("HAVE_DECL_EXP2", 1), checks.AC_SUBST("HAVE_DECL_EXP2L", 1), checks.AC_SUBST("HAVE_DECL_EXPM1L", 1), checks.AC_SUBST("HAVE_DECL_LOG2F", 1), checks.AC_SUBST("HAVE_DECL_LOG2", 1), checks.AC_SUBST("HAVE_DECL_LOG2L", 1), checks.AC_SUBST("HAVE_DECL_REMAINDER", 1), checks.AC_SUBST("HAVE_DECL_REMAINDERL", 1), checks.AC_SUBST("HAVE_DECL_RINTF", 1), checks.AC_SUBST("HAVE_DECL_ROUNDF", 1), checks.AC_SUBST("HAVE_DECL_ROUND", 1), checks.AC_SUBST("HAVE_DECL_ROUNDL", 1), # M4-specific configure.ac checks checks.AC_DEFINE("ENABLE_CHANGEWORD", 0), # getopt always needs replacement (__GETOPT_PREFIX=rpl_) checks.AC_SUBST("COMPILE_GETOPT", "1"), # rawmemchr -- GNU extension, missing on macOS checks.AC_TRY_LINK( name = "m4_cv_func_rawmemchr", code = """\ #define _GNU_SOURCE 1 #include int main(void) { (void)rawmemchr; return 0; } """, ), checks.AC_SUBST( "COMPILE_RAWMEMCHR", condition = "!m4_cv_func_rawmemchr", ), checks.AC_SUBST( "COMPILE_MEMPCPY", condition = "!ac_cv_func_mempcpy", ), checks.AC_SUBST("COMPILE_REALLOCARRAY", "1"), # error.c -- compiled when error_at_line() is missing (macOS) checks.AC_CHECK_FUNC("error_at_line"), checks.AC_SUBST( "COMPILE_ERROR", condition = "!ac_cv_func_error_at_line", ), # fpending.c -- compiled when __fpending() is missing (macOS) checks.AC_TRY_LINK( name = "m4_cv_func___fpending", code = """\ #include #if HAVE_STDIO_EXT_H # include #endif int main(void) { return ! __fpending(stdin); } """, ), checks.AC_SUBST( "COMPILE_FPENDING", condition = "!m4_cv_func___fpending", ), # fseterr.c -- compiled when __fseterr() is missing (macOS) checks.AC_TRY_LINK( name = "m4_cv_func___fseterr", code = """\ #include #ifdef __cplusplus extern "C" #endif void __fseterr(FILE *); int main(void) { __fseterr(stdin); return 0; } """, ), checks.AC_SUBST( "COMPILE_FSETERR", condition = "!m4_cv_func___fseterr", ), # memrchr -- GNU extension, missing on macOS checks.AC_TRY_LINK( name = "m4_cv_func_memrchr", code = """\ #define _GNU_SOURCE 1 #include int main(void) { (void)memrchr; return 0; } """, ), checks.AC_SUBST( "COMPILE_MEMRCHR", condition = "!m4_cv_func_memrchr", ), # secure_getenv -- GNU extension, missing on macOS checks.AC_SUBST( "COMPILE_SECURE_GETENV", condition = "!ac_cv_func_secure_getenv", ), # mbrtoc32 is always needed (macOS lacks ) checks.AC_SUBST("COMPILE_MBRTOC32", "1"), # getrandom needs gnulib replacement on macOS checks.AC_TRY_LINK( name = "m4_cv_func_getrandom", code = """\ #include int main(void) { char buf[1]; return getrandom(buf, 1, 0); } """, ), checks.AC_SUBST( "COMPILE_GETRANDOM", condition = "!m4_cv_func_getrandom", ), # obstack is always needed for m4 checks.AC_SUBST("COMPILE_OBSTACK", "1"), # regex is always needed for m4 checks.AC_SUBST("COMPILE_REGEX", "1"), ] + select({ "@platforms//os:linux": [ checks.AC_DEFINE("SYSCMD_SHELL", '"/bin/sh"'), checks.AC_DEFINE("RENAME_OPEN_FILE_WORKS", 1), checks.AC_SUBST("COMPILE_GETPROGNAME", "1"), checks.AC_SUBST("COMPILE_OPEN", "0"), checks.AC_SUBST("COMPILE_STRERROR_OVERRIDE", "0"), checks.AC_SUBST("COMPILE_MBRTOWC", "1"), checks.AC_SUBST("COMPILE_SPAWN_FACTION_ADDCHDIR", "1"), ], "@platforms//os:macos": [ checks.AC_DEFINE("SYSCMD_SHELL", '"/bin/sh"'), checks.AC_DEFINE("RENAME_OPEN_FILE_WORKS", 1), checks.AC_SUBST("COMPILE_GETPROGNAME", "0"), checks.AC_SUBST("COMPILE_OPEN", "1"), checks.AC_SUBST("COMPILE_STRERROR_OVERRIDE", "1"), checks.AC_SUBST("COMPILE_MBRTOWC", "0"), checks.AC_SUBST("COMPILE_SPAWN_FACTION_ADDCHDIR", "1"), ], "@platforms//os:windows": [ checks.AC_DEFINE("SYSCMD_SHELL", '"cmd"'), checks.AC_DEFINE("RENAME_OPEN_FILE_WORKS", 0), checks.AC_SUBST("COMPILE_GETPROGNAME", "1"), checks.AC_SUBST("COMPILE_OPEN", "0"), checks.AC_SUBST("COMPILE_STRERROR_OVERRIDE", "0"), checks.AC_SUBST("COMPILE_MBRTOWC", "0"), checks.AC_SUBST("COMPILE_SPAWN_FACTION_ADDCHDIR", "1"), ], "//conditions:default": [ checks.AC_DEFINE("SYSCMD_SHELL", '"/bin/sh"'), checks.AC_DEFINE("RENAME_OPEN_FILE_WORKS", 1), checks.AC_SUBST("COMPILE_GETPROGNAME", "1"), checks.AC_SUBST("COMPILE_OPEN", "0"), checks.AC_SUBST("COMPILE_STRERROR_OVERRIDE", "0"), checks.AC_SUBST("COMPILE_MBRTOWC", "0"), checks.AC_SUBST("COMPILE_SPAWN_FACTION_ADDCHDIR", "1"), ], }), deps = [ ":m4_gnulib-comp", ":m4_package_info", ] + GNULIB_M4_DEPS, ) # Generate header files from .in.h templates [ autoconf_hdr( name = hdr[:-len(".h")] + "_h", out = hdr, defaults = True, inlines = { "/* The definition of _GL_ARG_NONNULL is copied here. */": "lib/arg-nonnull.h", "/* The definition of _GL_WARN_ON_USE is copied here. */": "lib/warn-on-use.h", "/* The definition of _Noreturn is copied here. */": "lib/_Noreturn.h", "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */": "lib/c++defs.h", }, mode = "subst", substitutions = { "libc_hidden_proto": "// libc_hidden_proto", "__always_inline": "inline _GL_ATTRIBUTE_ALWAYS_INLINE", "__glibc_likely": "_GL_LIKELY", "__glibc_unlikely": "_GL_UNLIKELY", }, template = template, deps = [":configure_ac"], ) for hdr, template in GENERATED_SRCS.items() ] autoconf_hdr( name = "lib/config_h", out = "lib/config.h", template = "lib/config.hin", deps = [":configure_ac"], ) write_file( name = "configmake_h_src", out = "lib/configmake.h", content = [ "#define LOCALEDIR \"\"", "#define PKGDATADIR \"\"", "", ], newline = "unix", tags = ["manual"], ) autoconf_hdr( name = "assert_h", out = "lib/assert.h", inlines = { "/* The definition of static_assert is copied here. */": "lib/verify.h", }, mode = "subst", substitutions = { "/* The definition of static_assert is copied here. */": "#define _GL_STATIC_ASSERT_H\n/* The definition of static_assert is copied here. */", }, tags = ["manual"], template = "lib/assert.in.h", deps = ["@rules_cc_autoconf//gnulib/m4/assert_h"], ) UNICODE_DLL_VARIABLES = [ "GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE", "GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE", "GNULIB_UNINORM_NFC_DLL_VARIABLE", "GNULIB_UNINORM_NFD_DLL_VARIABLE", "GNULIB_UNINORM_NFKC_DLL_VARIABLE", "GNULIB_UNINORM_NFKD_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE", "GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_MODIFIER_COMBINING_MARK_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PREPENDED_CONCATENATION_MARK_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE", "GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE", ] autoconf( name = "m4_unicode_dll", checks = [ checks.AC_SUBST("HAVE_UNISTRING_WOE32DLL_H", 0), ] + [ checks.AC_SUBST(var, "") for var in UNICODE_DLL_VARIABLES ], ) [ autoconf_hdr( name = hdr[:-len(".h")] + "_h", out = hdr, mode = "subst", template = template, deps = [":m4_unicode_dll"], ) for hdr, template in { "lib/unicase.h": "lib/unicase.in.h", "lib/unictype.h": "lib/unictype.in.h", "lib/uninorm.h": "lib/uninorm.in.h", }.items() ] M4_COPTS = select({ "@rules_cc//cc/compiler:clang": [ "-w", "-std=c11", ], "@rules_cc//cc/compiler:gcc": [ "-w", "-std=c11", ], "@rules_cc//cc/compiler:msvc-cl": [ "/wd4116", "-DOBSTACK_CPTR=_OBSTACK_CPTR", ], "//conditions:default": [], }) # Gnulib conditional sources autoconf_srcs( name = "gnulib_conditional_srcs", srcs = { # REPLACE_* gated (upstream gnulib decides) "lib/access.c": "REPLACE_ACCESS", "lib/btowc.c": "REPLACE_BTOWC", "lib/canonicalize-lgpl.c": "REPLACE_CANONICALIZE_FILE_NAME", "lib/close.c": "REPLACE_CLOSE", "lib/closedir.c": "REPLACE_CLOSEDIR", "lib/dirfd.c": "REPLACE_DIRFD", "lib/dup.c": "REPLACE_DUP", "lib/dup2.c": "REPLACE_DUP2", "lib/fchdir.c": "REPLACE_FCHDIR", "lib/fclose.c": "REPLACE_FCLOSE", "lib/fcntl.c": "REPLACE_FCNTL", "lib/fdopendir.c": "REPLACE_FDOPENDIR", "lib/fflush.c": "REPLACE_FFLUSH", "lib/fopen.c": "REPLACE_FOPEN", "lib/fpending.c": "COMPILE_FPENDING", "lib/fpurge.c": "REPLACE_FPURGE", "lib/free.c": "REPLACE_FREE", "lib/fseek.c": "REPLACE_FSEEK", "lib/fseeko.c": "REPLACE_FSEEKO", "lib/fseterr.c": "COMPILE_FSETERR", "lib/fstat.c": "REPLACE_FSTAT", "lib/fstatat.c": "REPLACE_FSTATAT", "lib/ftell.c": "REPLACE_FTELL", "lib/ftello.c": "REPLACE_FTELLO", "lib/getcwd.c": "REPLACE_GETCWD", "lib/getdtablesize.c": "REPLACE_GETDTABLESIZE", "lib/getopt.c": "COMPILE_GETOPT", "lib/getopt1.c": "COMPILE_GETOPT", "lib/getprogname.c": "COMPILE_GETPROGNAME", "lib/getrandom.c": "COMPILE_GETRANDOM", "lib/iconv.c": "REPLACE_ICONV", "lib/iconv_close.c": "REPLACE_ICONV", "lib/iconv_open.c": "REPLACE_ICONV_OPEN", "lib/lseek.c": "REPLACE_LSEEK", "lib/lstat.c": "REPLACE_LSTAT", "lib/mbrtoc32.c": "COMPILE_MBRTOC32", "lib/mbrtowc.c": "COMPILE_MBRTOWC", "lib/mbsinit.c": "REPLACE_MBSINIT", "lib/mbtowc.c": "REPLACE_MBTOWC", "lib/memchr.c": "REPLACE_MEMCHR", "lib/mempcpy.c": "COMPILE_MEMPCPY", "lib/memrchr.c": "COMPILE_MEMRCHR", "lib/mkdir.c": "REPLACE_MKDIR", "lib/mkstemp.c": "REPLACE_MKSTEMP", "lib/obstack.c": "COMPILE_OBSTACK", "lib/open.c": "COMPILE_OPEN", "lib/openat.c": "REPLACE_OPENAT", "lib/opendir.c": "REPLACE_OPENDIR", "lib/raise.c": "REPLACE_RAISE", "lib/rawmemchr.c": "COMPILE_RAWMEMCHR", "lib/readdir.c": "REPLACE_READDIR", "lib/readlink.c": "REPLACE_READLINK", "lib/realloc.c": "REPLACE_REALLOC_FOR_REALLOC_POSIX", "lib/reallocarray.c": "COMPILE_REALLOCARRAY", "lib/regex.c": "COMPILE_REGEX", "lib/rename.c": "REPLACE_RENAME", "lib/rewinddir.c": "REPLACE_REWINDDIR", "lib/rmdir.c": "REPLACE_RMDIR", "lib/secure_getenv.c": "COMPILE_SECURE_GETENV", "lib/setlocale-fixes.c": "REPLACE_SETLOCALE", "lib/setlocale-lock.c": "REPLACE_SETLOCALE", "lib/setlocale.c": "REPLACE_SETLOCALE", "lib/snprintf.c": "REPLACE_SNPRINTF", "lib/spawn.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawn_faction_addchdir.c": "COMPILE_SPAWN_FACTION_ADDCHDIR", "lib/spawn_faction_addclose.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawn_faction_adddup2.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawn_faction_addopen.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawn_faction_destroy.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawn_faction_init.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawnattr_destroy.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawnattr_init.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawnattr_setflags.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawnattr_setpgroup.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawnattr_setsigmask.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawni.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/spawnp.c": "ac_cv_define_REPLACE_POSIX_SPAWN", "lib/stat.c": "REPLACE_STAT", "lib/stpcpy.c": "REPLACE_STPCPY", "lib/strchrnul.c": "REPLACE_STRCHRNUL", "lib/strdup.c": "REPLACE_STRDUP", "lib/strerror-override.c": "COMPILE_STRERROR_OVERRIDE", "lib/strerror.c": "REPLACE_STRERROR", "lib/strnlen.c": "REPLACE_STRNLEN", "lib/strsignal.c": "REPLACE_STRSIGNAL", "lib/strstr.c": "REPLACE_STRSTR", "lib/strtod.c": "REPLACE_STRTOD", "lib/vasprintf.c": "REPLACE_VASPRINTF", "lib/wcrtomb.c": "REPLACE_WCRTOMB", "lib/wctype.c": "REPLACE_WCTYPE", "lib/wcwidth.c": "REPLACE_WCWIDTH", }, defaults = True, deps = [":configure_ac"], ) cc_library( name = "gnulib", srcs = [ # === Unconditional sources (from libm4_a_SOURCES in gnulib.mk) === "lib/asyncsafe-spin.c", "lib/openat-proc.c", "lib/gl_avltree_oset.c", "lib/basename-lgpl.c", "lib/binary-io.c", "lib/bitrotate.c", "lib/c-ctype.c", "lib/c-stack.c", "lib/c-strcasecmp.c", "lib/c32isalnum.c", "lib/c32isalpha.c", "lib/c32isblank.c", "lib/c32iscntrl.c", "lib/c32isdigit.c", "lib/c32isgraph.c", "lib/c32islower.c", "lib/c32isprint.c", "lib/c32ispunct.c", "lib/c32isspace.c", "lib/c32isupper.c", "lib/c32isxdigit.c", "lib/c32tolower.c", "lib/c32width.c", "lib/canonicalize.c", "lib/clean-temp.c", "lib/clean-temp-simple.c", "lib/cloexec.c", "lib/close-stream.c", "lib/closein.c", "lib/closeout.c", "lib/concat-filename.c", "lib/dirname.c", "lib/basename.c", "lib/dirname-lgpl.c", "lib/stripslash.c", "lib/dup-safer.c", "lib/dup-safer-flag.c", "lib/error.c", "lib/execute.c", "lib/exitfail.c", "lib/fatal-signal.c", "lib/fd-hook.c", "lib/fd-safer.c", "lib/fd-safer-flag.c", "lib/file-set.c", "lib/filenamecat.c", "lib/filenamecat-lgpl.c", "lib/findprog-in.c", "lib/fopen-safer.c", "lib/freadahead.c", "lib/freading.c", "lib/gl_linked_list.c", "lib/gl_linkedhash_list.c", "lib/gl_list.c", "lib/gl_oset.c", "lib/gl_xlist.c", "lib/gl_xoset.c", "lib/glthread/lock.c", "lib/glthread/once.c", "lib/glthread/threadlib.c", "lib/glthread/tls.c", "lib/hard-locale.c", "lib/hash.c", "lib/hashcode-named-file.c", "lib/hashcode-string1.c", "lib/hashcode-string2.c", "lib/hashkey-string.c", "lib/ialloc.c", "lib/localcharset.c", "lib/localename.c", "lib/localename-environ.c", "lib/localename-table.c", "lib/malloca.c", "lib/malloc/dynarray_at_failure.c", "lib/malloc/dynarray_emplace_enlarge.c", "lib/malloc/dynarray_finalize.c", "lib/malloc/dynarray_resize.c", "lib/malloc/dynarray_resize_clear.c", "lib/malloc/scratch_buffer_grow.c", "lib/malloc/scratch_buffer_grow_preserve.c", "lib/malloc/scratch_buffer_set_array_size.c", "lib/math.c", "lib/mbchar.c", "lib/mbiterf.c", "lib/mbslen.c", "lib/mbsnlen.c", "lib/mbsstr.c", "lib/mbszero.c", "lib/mbuiter.c", "lib/mbuiterf.c", "lib/memchr2.c", "lib/mkstemp-safer.c", "lib/next-prime.c", "lib/openat-die.c", "lib/pipe-safer.c", "lib/pipe2.c", "lib/pipe2-safer.c", "lib/printf-frexp.c", "lib/printf-frexpl.c", "lib/progname.c", "lib/propername.c", "lib/quotearg.c", "lib/same-inode.c", "lib/save-cwd.c", "lib/setlocale_null.c", "lib/setlocale_null-unlocked.c", "lib/sig-handler.c", "lib/sigsegv.c", "lib/stackvma.c", "lib/spawn-pipe.c", "lib/stat-time.c", "lib/stdlib.c", "lib/striconv.c", "lib/strnlen1.c", "lib/tempname.c", "lib/tmpdir.c", "lib/trim.c", "lib/unicase/tolower.c", "lib/unictype/ctype_alnum.c", "lib/unictype/ctype_alpha.c", "lib/unictype/ctype_blank.c", "lib/unictype/ctype_cntrl.c", "lib/unictype/ctype_digit.c", "lib/unictype/ctype_graph.c", "lib/unictype/ctype_lower.c", "lib/unictype/ctype_print.c", "lib/unictype/ctype_punct.c", "lib/unictype/ctype_space.c", "lib/unictype/ctype_upper.c", "lib/unictype/ctype_xdigit.c", "lib/unistd.c", "lib/unistr/u8-mbtoucr.c", "lib/unistr/u8-uctomb.c", "lib/unistr/u8-uctomb-aux.c", "lib/uniwidth/width.c", "lib/vasnprintf.c", "lib/asnprintf.c", "lib/printf-args.c", "lib/printf-parse.c", "lib/vaszprintf.c", "lib/aszprintf.c", "lib/version-etc.c", "lib/version-etc-fsf.c", "lib/vfzprintf.c", "lib/vsnzprintf.c", "lib/vzprintf.c", "lib/wait-process.c", "lib/wctype-h.c", "lib/xalloc-die.c", "lib/xmalloc.c", "lib/xmalloca.c", "lib/xmemdup0.c", "lib/xprintf.c", "lib/xsize.c", "lib/xstriconv.c", "lib/xvasprintf.c", "lib/xasprintf.c", ] + select({ "@platforms//os:windows": [ "lib/iswctype.c", "lib/mkdtemp.c", "lib/msvc-inval.c", "lib/msvc-nothrow.c", "lib/nl_langinfo.c", "lib/sigaction.c", "lib/sigprocmask.c", "lib/stat-w32.c", "lib/waitpid.c", "lib/windows-mutex.c", "lib/windows-once.c", "lib/windows-path.c", "lib/windows-spawn.c", "lib/windows-spin.c", "lib/windows-tls.c", ], "//conditions:default": [], }) + [ ":gnulib_conditional_srcs", ], hdrs = ["lib/config.h"] + [ ":{}".format(hdr) for hdr in GENERATED_SRCS.keys() ] + [ "lib/unicase.h", "lib/unictype.h", "lib/uninorm.h", ] + glob( include = ["lib/**/*.h"], exclude = GENERATED_SRCS.keys() + [ "lib/assert.h", "lib/config.h", "lib/configmake.h", "lib/unicase.h", "lib/unictype.h", "lib/uninorm.h", ], ) + [ ":assert_h", ":configmake_h_src", ], copts = M4_COPTS, includes = ["lib"], local_defines = LOCAL_DEFINES + [ "DEFAULT_TEXT_DOMAIN=\\\"m4-gnulib\\\"", ], textual_hdrs = [ "lib/at-func.c", "lib/isnan.c", "lib/malloc/dynarray-skeleton.c", "lib/printf-frexp.c", "lib/regcomp.c", "lib/regex_internal.c", "lib/regexec.c", ], ) M4_LINKOPTS = select({ "@rules_cc//cc/compiler:msvc-cl": [ "/IGNORE:4001", ], "//conditions:default": [], }) cc_binary( name = "bin/m4", srcs = glob( include = ["src/*.c"], ) + glob(["src/*.h"]), copts = M4_COPTS, includes = [ "lib", "src", ], linkopts = M4_LINKOPTS + select({ "@platforms//os:linux": ["-lpthread"], "@platforms//os:macos": ["-liconv"], "@platforms//os:windows": ["advapi32.lib"], "//conditions:default": [], }), local_defines = LOCAL_DEFINES, visibility = ["//visibility:public"], deps = [ ":gnulib", ], ) alias( name = "m4", actual = ":bin/m4", visibility = ["//visibility:public"], ) genrule( name = "m4_help", testonly = True, outs = ["m4_help.txt"], cmd = "$(execpath :m4) --help > $@", cmd_bat = "$(execpath :m4) --help > $@", tools = [":m4"], )