| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- From 491f7eda0033875ac26d8511b98e33189b0c389c Mon Sep 17 00:00:00 2001
- From: Luke Yoo <w.lukeyoo@gmail.com>
- Date: Tue, 13 Dec 2022 04:57:42 -0800
- Subject: [PATCH] Support Bison building on FreeBSD
- This is based on the OpenBSD support in `v0.2.1`
- For later versions, it may be supported without it
- ---
- bison/internal/gnulib/config-freebsd.h | 213 +++++++++++++++++++++++++
- bison/internal/gnulib/gnulib.BUILD | 11 ++
- bison/internal/gnulib/gnulib.bzl | 15 ++
- bison/internal/repository.bzl | 4 +
- 4 files changed, 243 insertions(+)
- create mode 100644 bison/internal/gnulib/config-freebsd.h
- diff --git a/bison/internal/gnulib/config-freebsd.h b/bison/internal/gnulib/config-freebsd.h
- new file mode 100644
- index 0000000..57df34f
- --- /dev/null
- +++ b/bison/internal/gnulib/config-freebsd.h
- @@ -0,0 +1,213 @@
- +{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 FLT_EXPBIT0_BIT 23
- +#define FLT_EXPBIT0_WORD 0
- +#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_FOPEN_SAFER 1
- +#define GNULIB_FSCANF 1
- +#define GNULIB_LOCK 1
- +#define GNULIB_MALLOC_GNU 1
- +#define GNULIB_MSVC_NOTHROW 1
- +#define GNULIB_PIPE2_SAFER 1
- +#define GNULIB_SCANF 1
- +#define GNULIB_SNPRINTF 1
- +#define GNULIB_STRERROR 1
- +#define GNULIB_STRERROR_R_POSIX 1
- +#define HAVE_ALLOCA 0
- +#define HAVE_CALLOC_POSIX 1
- +#define HAVE_CANONICALIZE_FILE_NAME 1
- +#define HAVE_CATGETS 1
- +#define HAVE_CLOCK_GETTIME 1
- +#define HAVE_CLOCK_SETTIME 1
- +#define HAVE_DECL_ALARM 1
- +#define HAVE_DECL_CLEARERR_UNLOCKED 0
- +#define HAVE_DECL_FEOF_UNLOCKED 0
- +#define HAVE_DECL_FERROR_UNLOCKED 0
- +#define HAVE_DECL_FFLUSH_UNLOCKED 0
- +#define HAVE_DECL_FGETS_UNLOCKED 1
- +#define HAVE_DECL_FPUTC_UNLOCKED 0
- +#define HAVE_DECL_FPUTS_UNLOCKED 0
- +#define HAVE_DECL_FREAD_UNLOCKED 0
- +#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_GETHRTIME 0
- +#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
- +#define HAVE_DECL_OBSTACK_PRINTF 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_SETENV 1
- +#define HAVE_DECL_SNPRINTF 1
- +#define HAVE_DECL_STRDUP 1
- +#define HAVE_DECL_STRERROR_R 1
- +#define HAVE_DECL_STRNDUP 1
- +#define HAVE_DECL_STRNLEN 1
- +#define HAVE_DECL_UNSETENV 1
- +#define HAVE_DECL_VSNPRINTF 1
- +#define HAVE_DECL_WCWIDTH 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_GETCWD 1
- +#define HAVE_GETDTABLESIZE 1
- +#define HAVE_GETOPT_H 1
- +#define HAVE_GETOPT_LONG_ONLY 1
- +#define HAVE_GETRUSAGE 1
- +#define HAVE_GETTIMEOFDAY 1
- +#define HAVE_INTMAX_T 1
- +#define HAVE_INTTYPES_H 1
- +#define HAVE_INTTYPES_H_WITH_UINTMAX 1
- +#define HAVE_ISASCII 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_LANGINFO_CODESET 1
- +#define HAVE_LDEXPL 1
- +#define HAVE_LDEXPL_IN_LIBC 1
- +#define HAVE_LDEXP_IN_LIBC 1
- +#define HAVE_LIMITS_H 1
- +#define HAVE_LINK 1
- +#define HAVE_LONG_LONG_INT 1
- +#define HAVE_LSTAT 1
- +#define HAVE_MALLOC_GNU 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_MEMORY_H 1
- +#define HAVE_MINMAX_IN_SYS_PARAM_H 1
- +#define HAVE_MPROTECT 1
- +#define HAVE_OBSTACK_PRINTF 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_READLINKAT 1
- +#define HAVE_REALLOC_POSIX 1
- +#define HAVE_REALPATH 1
- +#define HAVE_SEARCH_H 1
- +#define HAVE_SETENV 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_STDINT_H 1
- +#define HAVE_STDINT_H_WITH_UINTMAX 1
- +#define HAVE_STDLIB_H 1
- +#define HAVE_STPCPY 1
- +#define HAVE_STRCHRNUL 1
- +#define HAVE_STRDUP 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_STRUCT_SIGACTION_SA_SIGACTION 1
- +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
- +#define HAVE_STRUCT_TMS 1
- +#define HAVE_STRVERSCMP 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_RESOURCE_H 1
- +#define HAVE_SYS_SOCKET_H 1
- +#define HAVE_SYS_STAT_H 1
- +#define HAVE_SYS_TIMES_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_TSEARCH 1
- +#define HAVE_UNISTD_H 1
- +#define HAVE_UNSETENV 1
- +#define HAVE_UNSIGNED_LONG_LONG_INT 1
- +#define HAVE_VAR___PROGNAME 1
- +#define HAVE_VSNPRINTF 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_WCWIDTH 1
- +#define HAVE_WINT_T 1
- +#define HAVE_WORKING_O_NOATIME 0
- +#define HAVE_WORKING_O_NOFOLLOW 1
- +#define HAVE__BOOL 1
- +#define HAVE___XPG_STRERROR_R 1
- +#define INSTALLPREFIX "/usr/local"
- +#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 REPLACE_FPRINTF_POSIX 1
- +#define REPLACE_PRINTF_POSIX 1
- +#define REPLACE_VFPRINTF_POSIX 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 _USE_STD_STAT 1
- +#define restrict __restrict
- +
- +{GNULIB_CONFIG_FOOTER}
- diff --git a/bison/internal/gnulib/gnulib.BUILD b/bison/internal/gnulib/gnulib.BUILD
- index e23b2b8..69d969b 100644
- --- a/bison/internal/gnulib/gnulib.BUILD
- +++ b/bison/internal/gnulib/gnulib.BUILD
- @@ -19,6 +19,7 @@ cc_library(
- hdrs = select({
- "@bazel_tools//src/conditions:darwin": glob(["config-darwin/*.h"]),
- "@bazel_tools//src/conditions:windows": glob(["config-windows/*.h"]),
- + "@bazel_tools//src/conditions:freebsd": glob(["config-freebsd/*.h"]),
- "//conditions:default": glob(["config-linux/*.h"]),
- }),
- includes = select({
- @@ -28,6 +29,9 @@ cc_library(
- "@bazel_tools//src/conditions:windows": [
- "config-windows",
- ],
- + "@bazel_tools//src/conditions:freebsd": [
- + "config-freebsd",
- + ],
- "//conditions:default": [
- "config-linux",
- ],
- @@ -42,6 +46,12 @@ cc_library(
- deps = [":config_h"],
- )
-
- +cc_library(
- + name = "maybe_alloca_h",
- + hdrs = ["maybe-alloca/alloca.h"],
- + includes = ["maybe-alloca"],
- +)
- +
- _GNULIB_HDRS = glob([
- "lib/*.h",
- "lib/bitset/*.h",
- @@ -192,6 +202,7 @@ cc_library(
- "//:timevar_def",
- ] + select({
- "@bazel_tools//src/conditions:windows": [":gnulib_windows_shims"],
- + "@bazel_tools//src/conditions:freebsd": [":maybe_alloca_h"],
- "//conditions:default": [],
- }),
- )
- diff --git a/bison/internal/gnulib/gnulib.bzl b/bison/internal/gnulib/gnulib.bzl
- index 159ee4c..2038f4d 100644
- --- a/bison/internal/gnulib/gnulib.bzl
- +++ b/bison/internal/gnulib/gnulib.bzl
- @@ -83,6 +83,7 @@ def gnulib_overlay(ctx, bison_version, extra_copts = []):
- ("darwin", ctx.attr._gnulib_config_darwin_h),
- ("linux", ctx.attr._gnulib_config_linux_h),
- ("windows", ctx.attr._gnulib_config_windows_h),
- + ("freebsd", ctx.attr._gnulib_config_freebsd_h),
- ]:
- config_prefix = "gnulib/config-{}/".format(os)
-
- @@ -148,6 +149,20 @@ def gnulib_overlay(ctx, bison_version, extra_copts = []):
- "(const char **) environ": "NULL",
- }, executable = False)
-
- + # 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,
- + )
- +
- _WINDOWS_STDLIB_SHIMS = [
- "alloca",
- "errno",
- diff --git a/bison/internal/repository.bzl b/bison/internal/repository.bzl
- index 7e17763..934e8c9 100644
- --- a/bison/internal/repository.bzl
- +++ b/bison/internal/repository.bzl
- @@ -133,5 +133,9 @@ bison_repository = repository_rule(
- default = "//bison/internal:gnulib/config-windows.h",
- allow_single_file = True,
- ),
- + "_gnulib_config_freebsd_h": attr.label(
- + default = "//bison/internal:gnulib/config-freebsd.h",
- + allow_single_file = True,
- + ),
- },
- )
- --
- 2.38.1
|