Skip to content

Commit

Permalink
Support building on FreeBSD
Browse files Browse the repository at this point in the history
This is based on the OpenBSD support

GitOrigin-RevId: b7b20a673d358dd2dbd182041e1a597c72d62ebf
  • Loading branch information
micttyl authored and jmillikin committed May 14, 2023
1 parent 1d21cac commit 3f63792
Show file tree
Hide file tree
Showing 4 changed files with 267 additions and 0 deletions.
232 changes: 232 additions & 0 deletions m4/internal/gnulib/config-freebsd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
{GNULIB_CONFIG_HEADER}

#define _GL_ATTRIBUTE_FORMAT_PRINTF(x, y)

#define O_BINARY 0
#define O_TEXT 0

extern char **environ;

/******************************************************************************/

#define CHECK_PRINTF_SAFE 1
#define C_LOCALE_MAYBE_EILSEQ 1
#define DBL_EXPBIT0_BIT 20
#define DBL_EXPBIT0_WORD 1
#define FAULT_YIELDS_SIGBUS 0
#define FLT_EXPBIT0_BIT 23
#define FLT_EXPBIT0_WORD 0
#define FUNC_FFLUSH_STDIN 0
#define FUNC_NL_LANGINFO_YESEXPR_WORKS 1
#define FUNC_REALPATH_WORKS 1
#define GETTIMEOFDAY_TIMEZONE struct timezone
#define GNULIB_CANONICALIZE_LGPL 1
#define GNULIB_CLOSE_STREAM 1
#define GNULIB_DIRNAME 1
#define GNULIB_FD_SAFER_FLAG 1
#define GNULIB_FFLUSH 1
#define GNULIB_FILENAMECAT 1
#define GNULIB_FOPEN_SAFER 1
#define GNULIB_FSCANF 1
#define GNULIB_LOCK 1
#define GNULIB_MSVC_NOTHROW 1
#define GNULIB_PIPE2_SAFER 1
#define GNULIB_SCANF 1
#define GNULIB_SIGPIPE 1
#define GNULIB_SNPRINTF 1
#define GNULIB_STRERROR 1
#define HAVE_ALLOCA 0
#define HAVE_BTOWC 1
#define HAVE_CANONICALIZE_FILE_NAME 1
#define HAVE_DECL_ALARM 1
#define HAVE_DECL_CLEARERR_UNLOCKED 0
#define HAVE_DECL_FEOF_UNLOCKED 0
#define HAVE_DECL_FERROR_UNLOCKED 1
#define HAVE_DECL_FFLUSH_UNLOCKED 1
#define HAVE_DECL_FGETS_UNLOCKED 1
#define HAVE_DECL_FPURGE 0
#define HAVE_DECL_FPUTC_UNLOCKED 0
#define HAVE_DECL_FPUTS_UNLOCKED 0
#define HAVE_DECL_FREAD_UNLOCKED 0
#define HAVE_DECL_FSEEKO 1
#define HAVE_DECL_FTELLO 1
#define HAVE_DECL_FWRITE_UNLOCKED 0
#define HAVE_DECL_GETCHAR_UNLOCKED 1
#define HAVE_DECL_GETC_UNLOCKED 1
#define HAVE_DECL_GETDTABLESIZE 1
#define HAVE_DECL_ISBLANK 1
#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0
#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0
#define HAVE_DECL_PUTCHAR_UNLOCKED 1
#define HAVE_DECL_PUTC_UNLOCKED 1
#define HAVE_DECL_SIGALTSTACK 1
#define HAVE_DECL_SNPRINTF 1
#define HAVE_DECL_STRERROR_R 1
#define HAVE_DECL_STRNDUP 1
#define HAVE_DECL_STRNLEN 1
#define HAVE_DECL_STRSIGNAL 1
#define HAVE_DECL_SYS_SIGLIST 1
#define HAVE_DECL__SNPRINTF 0
#define HAVE_DECL___ARGV 0
#define HAVE_DUP2 1
#define HAVE_ENVIRON_DECL 1
#define HAVE_FCNTL 1
#define HAVE_FREXPL_IN_LIBC 1
#define HAVE_FREXP_IN_LIBC 1
#define HAVE_FSEEKO 1
#define HAVE_GETCWD 1
#define HAVE_GETDTABLESIZE 1
#define HAVE_GETEGID 1
#define HAVE_GETEUID 1
#define HAVE_GETGID 1
#define HAVE_GETOPT_H 1
#define HAVE_GETOPT_LONG_ONLY 1
#define HAVE_GETTIMEOFDAY 1
#define HAVE_GETUID 1
#define HAVE_INTMAX_T 1
#define HAVE_INTTYPES_H 1
#define HAVE_INTTYPES_H_WITH_UINTMAX 1
#define HAVE_ISBLANK 1
#define HAVE_ISNAND_IN_LIBC 1
#define HAVE_ISNANF_IN_LIBC 1
#define HAVE_ISNANL_IN_LIBC 1
#define HAVE_ISWCNTRL 1
#define HAVE_ISWCTYPE 1
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LANGINFO_H 1
#define HAVE_LDEXPL_IN_LIBC 1
#define HAVE_LDEXP_IN_LIBC 1
#define HAVE_LIBINTL_H 1
#define HAVE_LIMITS_H 1
#define HAVE_LINK 1
#define HAVE_LONG_LONG_INT 1
#define HAVE_LSTAT 1
#define HAVE_MALLOC_H 1
#define HAVE_MALLOC_POSIX 1
#define HAVE_MAP_ANONYMOUS 1
#define HAVE_MATH_H 1
#define HAVE_MBRTOWC 1
#define HAVE_MBSINIT 1
#define HAVE_MBSTATE_T 1
#define HAVE_MBTOWC 1
#define HAVE_MEMORY_H 1
#define HAVE_MINMAX_IN_SYS_PARAM_H 1
#define HAVE_MKDTEMP 1
#define HAVE_MKSTEMP 1
#define HAVE_MPROTECT 1
#define HAVE_NL_LANGINFO 1
#define HAVE_PIPE 1
#define HAVE_PIPE2 1
#define HAVE_POSIX_SPAWN 1
#define HAVE_POSIX_SPAWNATTR_T 1
#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1
#define HAVE_PTHREAD_MUTEX_RECURSIVE 1
#define HAVE_PTHREAD_RWLOCK 1
#define HAVE_RAISE 1
#define HAVE_RAWMEMCHR 1
#define HAVE_READLINK 1
#define HAVE_REALPATH 1
#define HAVE_SECURE_GETENV 1
#define HAVE_SETRLIMIT 1
#define HAVE_SIGACTION 1
#define HAVE_SIGALTSTACK 1
#define HAVE_SIGINTERRUPT 1
#define HAVE_SIGSET_T 1
#define HAVE_SIG_ATOMIC_T 1
#define HAVE_SNPRINTF 0
#define HAVE_SNPRINTF_RETVAL_C99 1
#define HAVE_SPAWN_H 1
#define HAVE_STACK_OVERFLOW_HANDLING 1
#define HAVE_STACK_T 1
#define HAVE_STDINT_H 1
#define HAVE_STDINT_H_WITH_UINTMAX 1
#define HAVE_STDLIB_H 1
#define HAVE_STRCHRNUL 1
#define HAVE_STRERROR_R 1
#define HAVE_STRINGS_H 1
#define HAVE_STRING_H 1
#define HAVE_STRNDUP 1
#define HAVE_STRNLEN 1
#define HAVE_STRSIGNAL 1
#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1
#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
#define HAVE_SYMLINK 1
#define HAVE_SYS_CDEFS_H 1
#define HAVE_SYS_MMAN_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_SOCKET_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_WAIT_H 1
#define HAVE_TOWLOWER 1
#define HAVE_UCONTEXT_H 0
#define HAVE_UNISTD_H 1
#define HAVE_UNSIGNED_LONG_LONG_INT 1
#define HAVE_VAR___PROGNAME 1
#define HAVE_VASPRINTF 1
#define HAVE_WAITID 1
#define HAVE_WCHAR_H 1
#define HAVE_WCHAR_T 1
#define HAVE_WCRTOMB 1
#define HAVE_WCSLEN 1
#define HAVE_WCSNLEN 1
#define HAVE_WCTYPE_H 1
#define HAVE_WINT_T 1
#define HAVE_WORKING_O_NOATIME 0
#define HAVE_WORKING_O_NOFOLLOW 1
#define HAVE__BOOL 1
#define HAVE___BUILTIN_EXPECT 1
#define HAVE___FPURGE 1
#define HAVE___FREADING 1
#define HAVE___INLINE 1
#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
#define MALLOC_0_IS_NONNULL 1
# define __USE_MINGW_ANSI_STDIO 1
#define PROMOTED_MODE_T mode_t
#define SIGNAL_SAFE_LIST 1
#define STDC_HEADERS 1
#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1
#define USER_LABEL_PREFIX
#define USE_POSIX_THREADS 1
#define USE_POSIX_THREADS_WEAK 1
# define _ALL_SOURCE 1
# define _DARWIN_C_SOURCE 1
# define _GNU_SOURCE 1
# define _NETBSD_SOURCE 1
# define _OPENBSD_SOURCE 1
# define _POSIX_PTHREAD_SEMANTICS 1
# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
# define __STDC_WANT_LIB_EXT2__ 1
# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
# define _TANDEM_SOURCE 1
# define _HPUX_ALT_XOPEN_SOCKET_API 1
# define __EXTENSIONS__ 1
#define USE_UNLOCKED_IO 0
#define _DARWIN_USE_64_BIT_INODE 1
#define _NETBSD_SOURCE 1
#define _REGEX_INCLUDE_LIMITS_H 1
#define _REGEX_LARGE_OFFSETS 1
#define _USE_STD_STAT 1
#define re_comp rpl_re_comp
#define re_compile_fastmap rpl_re_compile_fastmap
#define re_compile_pattern rpl_re_compile_pattern
#define re_exec rpl_re_exec
#define re_match rpl_re_match
#define re_match_2 rpl_re_match_2
#define re_search rpl_re_search
#define re_search_2 rpl_re_search_2
#define re_set_registers rpl_re_set_registers
#define re_set_syntax rpl_re_set_syntax
#define re_syntax_options rpl_re_syntax_options
#define regcomp rpl_regcomp
#define regerror rpl_regerror
#define regexec rpl_regexec
#define regfree rpl_regfree
#define restrict __restrict

{GNULIB_CONFIG_FOOTER}
13 changes: 13 additions & 0 deletions m4/internal/gnulib/gnulib.BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ cc_library(
"@bazel_tools//src/conditions:openbsd": [
"config-openbsd/config.h",
],
"@bazel_tools//src/conditions:freebsd": [
"config-freebsd/config.h",
],
"//conditions:default": [
"config-linux/config.h",
],
Expand All @@ -40,6 +43,9 @@ cc_library(
"@bazel_tools//src/conditions:openbsd": [
"config-openbsd",
],
"@bazel_tools//src/conditions:freebsd": [
"config-freebsd",
],
"//conditions:default": [
"config-linux",
],
Expand All @@ -60,6 +66,12 @@ cc_library(
includes = ["stub-alloca"],
)

cc_library(
name = "maybe_alloca_h",
hdrs = ["maybe-alloca/alloca.h"],
includes = ["maybe-alloca"],
)

_GNULIB_HDRS = glob([
"lib/*.h",
"lib/glthread/*.h",
Expand Down Expand Up @@ -228,6 +240,7 @@ cc_library(
deps = [":config_h"] + select({
"@bazel_tools//src/conditions:windows": [":gnulib_windows_shims"],
"@bazel_tools//src/conditions:openbsd": [":stub_alloca_h"],
"@bazel_tools//src/conditions:freebsd": [":maybe_alloca_h"],
"//conditions:default": [],
}),
)
18 changes: 18 additions & 0 deletions m4/internal/gnulib/gnulib.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,10 @@ def gnulib_overlay(ctx, m4_version, extra_copts = []):
"{GNULIB_CONFIG_HEADER}": config_header,
"{GNULIB_CONFIG_FOOTER}": _CONFIG_FOOTER,
}, executable = False)
ctx.template("gnulib/config-freebsd/config.h", ctx.attr._gnulib_config_freebsd_h, substitutions = {
"{GNULIB_CONFIG_HEADER}": config_header,
"{GNULIB_CONFIG_FOOTER}": _CONFIG_FOOTER,
}, executable = False)

for shim in _WINDOWS_STDLIB_SHIMS:
in_h = "gnulib/lib/{}.in.h".format(shim.replace("/", "_"))
Expand Down Expand Up @@ -157,6 +161,20 @@ static const char * _replaced_get_charset_aliases (void)
# Some platforms have alloca() but not <alloca.h>.
ctx.file("gnulib/stub-alloca/alloca.h", "")

# Some platforms have alloca() but in <stdlib.h>
ctx.file(
"gnulib/maybe-alloca/alloca.h",
content =
"""
#if defined(__GLIBC__)
#include_next <alloca.h>
#else
#include <stdlib.h>
#endif
""",
executable = False,
)

# Silence warning about unused variable when HAVE_SNPRINTF is defined 0.
ctx.template("gnulib/lib/vasnprintf.c", "gnulib/lib/vasnprintf.c", substitutions = {
"int flags = dp->flags;": "int flags = dp->flags; (void)flags;",
Expand Down
4 changes: 4 additions & 0 deletions m4/rules/m4_repository.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -182,5 +182,9 @@ m4_repository(
default = "//m4/internal:gnulib/config-openbsd.h",
allow_single_file = True,
),
"_gnulib_config_freebsd_h": attr.label(
default = "//m4/internal:gnulib/config-freebsd.h",
allow_single_file = True,
),
},
)

0 comments on commit 3f63792

Please sign in to comment.