0001_Support_Bison_building_on_FreeBSD.patch 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. From 491f7eda0033875ac26d8511b98e33189b0c389c Mon Sep 17 00:00:00 2001
  2. From: Luke Yoo <w.lukeyoo@gmail.com>
  3. Date: Tue, 13 Dec 2022 04:57:42 -0800
  4. Subject: [PATCH] Support Bison building on FreeBSD
  5. This is based on the OpenBSD support in `v0.2.1`
  6. For later versions, it may be supported without it
  7. ---
  8. bison/internal/gnulib/config-freebsd.h | 213 +++++++++++++++++++++++++
  9. bison/internal/gnulib/gnulib.BUILD | 11 ++
  10. bison/internal/gnulib/gnulib.bzl | 15 ++
  11. bison/internal/repository.bzl | 4 +
  12. 4 files changed, 243 insertions(+)
  13. create mode 100644 bison/internal/gnulib/config-freebsd.h
  14. diff --git a/bison/internal/gnulib/config-freebsd.h b/bison/internal/gnulib/config-freebsd.h
  15. new file mode 100644
  16. index 0000000..57df34f
  17. --- /dev/null
  18. +++ b/bison/internal/gnulib/config-freebsd.h
  19. @@ -0,0 +1,213 @@
  20. +{GNULIB_CONFIG_HEADER}
  21. +
  22. +#define _GL_ATTRIBUTE_FORMAT_PRINTF(x, y)
  23. +
  24. +#define O_BINARY 0
  25. +#define O_TEXT 0
  26. +
  27. +extern char **environ;
  28. +
  29. +/******************************************************************************/
  30. +
  31. +#define CHECK_PRINTF_SAFE 1
  32. +#define C_LOCALE_MAYBE_EILSEQ 1
  33. +#define DBL_EXPBIT0_BIT 20
  34. +#define DBL_EXPBIT0_WORD 1
  35. +#define FLT_EXPBIT0_BIT 23
  36. +#define FLT_EXPBIT0_WORD 0
  37. +#define FUNC_REALPATH_WORKS 1
  38. +#define GETTIMEOFDAY_TIMEZONE struct timezone
  39. +#define GNULIB_CANONICALIZE_LGPL 1
  40. +#define GNULIB_CLOSE_STREAM 1
  41. +#define GNULIB_DIRNAME 1
  42. +#define GNULIB_FD_SAFER_FLAG 1
  43. +#define GNULIB_FOPEN_SAFER 1
  44. +#define GNULIB_FSCANF 1
  45. +#define GNULIB_LOCK 1
  46. +#define GNULIB_MALLOC_GNU 1
  47. +#define GNULIB_MSVC_NOTHROW 1
  48. +#define GNULIB_PIPE2_SAFER 1
  49. +#define GNULIB_SCANF 1
  50. +#define GNULIB_SNPRINTF 1
  51. +#define GNULIB_STRERROR 1
  52. +#define GNULIB_STRERROR_R_POSIX 1
  53. +#define HAVE_ALLOCA 0
  54. +#define HAVE_CALLOC_POSIX 1
  55. +#define HAVE_CANONICALIZE_FILE_NAME 1
  56. +#define HAVE_CATGETS 1
  57. +#define HAVE_CLOCK_GETTIME 1
  58. +#define HAVE_CLOCK_SETTIME 1
  59. +#define HAVE_DECL_ALARM 1
  60. +#define HAVE_DECL_CLEARERR_UNLOCKED 0
  61. +#define HAVE_DECL_FEOF_UNLOCKED 0
  62. +#define HAVE_DECL_FERROR_UNLOCKED 0
  63. +#define HAVE_DECL_FFLUSH_UNLOCKED 0
  64. +#define HAVE_DECL_FGETS_UNLOCKED 1
  65. +#define HAVE_DECL_FPUTC_UNLOCKED 0
  66. +#define HAVE_DECL_FPUTS_UNLOCKED 0
  67. +#define HAVE_DECL_FREAD_UNLOCKED 0
  68. +#define HAVE_DECL_FWRITE_UNLOCKED 0
  69. +#define HAVE_DECL_GETCHAR_UNLOCKED 1
  70. +#define HAVE_DECL_GETC_UNLOCKED 1
  71. +#define HAVE_DECL_GETDTABLESIZE 1
  72. +#define HAVE_DECL_GETHRTIME 0
  73. +#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H 0
  74. +#define HAVE_DECL_OBSTACK_PRINTF 1
  75. +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0
  76. +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0
  77. +#define HAVE_DECL_PUTCHAR_UNLOCKED 1
  78. +#define HAVE_DECL_PUTC_UNLOCKED 1
  79. +#define HAVE_DECL_SETENV 1
  80. +#define HAVE_DECL_SNPRINTF 1
  81. +#define HAVE_DECL_STRDUP 1
  82. +#define HAVE_DECL_STRERROR_R 1
  83. +#define HAVE_DECL_STRNDUP 1
  84. +#define HAVE_DECL_STRNLEN 1
  85. +#define HAVE_DECL_UNSETENV 1
  86. +#define HAVE_DECL_VSNPRINTF 1
  87. +#define HAVE_DECL_WCWIDTH 1
  88. +#define HAVE_DECL__SNPRINTF 0
  89. +#define HAVE_DECL___ARGV 0
  90. +#define HAVE_DUP2 1
  91. +#define HAVE_ENVIRON_DECL 1
  92. +#define HAVE_FCNTL 1
  93. +#define HAVE_FREXPL_IN_LIBC 1
  94. +#define HAVE_FREXP_IN_LIBC 1
  95. +#define HAVE_GETCWD 1
  96. +#define HAVE_GETDTABLESIZE 1
  97. +#define HAVE_GETOPT_H 1
  98. +#define HAVE_GETOPT_LONG_ONLY 1
  99. +#define HAVE_GETRUSAGE 1
  100. +#define HAVE_GETTIMEOFDAY 1
  101. +#define HAVE_INTMAX_T 1
  102. +#define HAVE_INTTYPES_H 1
  103. +#define HAVE_INTTYPES_H_WITH_UINTMAX 1
  104. +#define HAVE_ISASCII 1
  105. +#define HAVE_ISNAND_IN_LIBC 1
  106. +#define HAVE_ISNANF_IN_LIBC 1
  107. +#define HAVE_ISNANL_IN_LIBC 1
  108. +#define HAVE_ISWCNTRL 1
  109. +#define HAVE_LANGINFO_CODESET 1
  110. +#define HAVE_LDEXPL 1
  111. +#define HAVE_LDEXPL_IN_LIBC 1
  112. +#define HAVE_LDEXP_IN_LIBC 1
  113. +#define HAVE_LIMITS_H 1
  114. +#define HAVE_LINK 1
  115. +#define HAVE_LONG_LONG_INT 1
  116. +#define HAVE_LSTAT 1
  117. +#define HAVE_MALLOC_GNU 1
  118. +#define HAVE_MALLOC_POSIX 1
  119. +#define HAVE_MAP_ANONYMOUS 1
  120. +#define HAVE_MATH_H 1
  121. +#define HAVE_MBRTOWC 1
  122. +#define HAVE_MBSINIT 1
  123. +#define HAVE_MBSTATE_T 1
  124. +#define HAVE_MEMORY_H 1
  125. +#define HAVE_MINMAX_IN_SYS_PARAM_H 1
  126. +#define HAVE_MPROTECT 1
  127. +#define HAVE_OBSTACK_PRINTF 1
  128. +#define HAVE_PIPE 1
  129. +#define HAVE_PIPE2 1
  130. +#define HAVE_POSIX_SPAWN 1
  131. +#define HAVE_POSIX_SPAWNATTR_T 1
  132. +#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1
  133. +#define HAVE_PTHREAD_MUTEX_RECURSIVE 1
  134. +#define HAVE_PTHREAD_RWLOCK 1
  135. +#define HAVE_RAISE 1
  136. +#define HAVE_RAWMEMCHR 1
  137. +#define HAVE_READLINK 1
  138. +#define HAVE_READLINKAT 1
  139. +#define HAVE_REALLOC_POSIX 1
  140. +#define HAVE_REALPATH 1
  141. +#define HAVE_SEARCH_H 1
  142. +#define HAVE_SETENV 1
  143. +#define HAVE_SIGACTION 1
  144. +#define HAVE_SIGALTSTACK 1
  145. +#define HAVE_SIGINTERRUPT 1
  146. +#define HAVE_SIGSET_T 1
  147. +#define HAVE_SIG_ATOMIC_T 1
  148. +#define HAVE_SNPRINTF 0
  149. +#define HAVE_SNPRINTF_RETVAL_C99 1
  150. +#define HAVE_SPAWN_H 1
  151. +#define HAVE_STDINT_H 1
  152. +#define HAVE_STDINT_H_WITH_UINTMAX 1
  153. +#define HAVE_STDLIB_H 1
  154. +#define HAVE_STPCPY 1
  155. +#define HAVE_STRCHRNUL 1
  156. +#define HAVE_STRDUP 1
  157. +#define HAVE_STRERROR_R 1
  158. +#define HAVE_STRINGS_H 1
  159. +#define HAVE_STRING_H 1
  160. +#define HAVE_STRNDUP 1
  161. +#define HAVE_STRNLEN 1
  162. +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1
  163. +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
  164. +#define HAVE_STRUCT_TMS 1
  165. +#define HAVE_STRVERSCMP 1
  166. +#define HAVE_SYMLINK 1
  167. +#define HAVE_SYS_CDEFS_H 1
  168. +#define HAVE_SYS_MMAN_H 1
  169. +#define HAVE_SYS_PARAM_H 1
  170. +#define HAVE_SYS_RESOURCE_H 1
  171. +#define HAVE_SYS_SOCKET_H 1
  172. +#define HAVE_SYS_STAT_H 1
  173. +#define HAVE_SYS_TIMES_H 1
  174. +#define HAVE_SYS_TIME_H 1
  175. +#define HAVE_SYS_TYPES_H 1
  176. +#define HAVE_SYS_WAIT_H 1
  177. +#define HAVE_TOWLOWER 1
  178. +#define HAVE_TSEARCH 1
  179. +#define HAVE_UNISTD_H 1
  180. +#define HAVE_UNSETENV 1
  181. +#define HAVE_UNSIGNED_LONG_LONG_INT 1
  182. +#define HAVE_VAR___PROGNAME 1
  183. +#define HAVE_VSNPRINTF 1
  184. +#define HAVE_WAITID 1
  185. +#define HAVE_WCHAR_H 1
  186. +#define HAVE_WCHAR_T 1
  187. +#define HAVE_WCRTOMB 1
  188. +#define HAVE_WCSLEN 1
  189. +#define HAVE_WCSNLEN 1
  190. +#define HAVE_WCTYPE_H 1
  191. +#define HAVE_WCWIDTH 1
  192. +#define HAVE_WINT_T 1
  193. +#define HAVE_WORKING_O_NOATIME 0
  194. +#define HAVE_WORKING_O_NOFOLLOW 1
  195. +#define HAVE__BOOL 1
  196. +#define HAVE___XPG_STRERROR_R 1
  197. +#define INSTALLPREFIX "/usr/local"
  198. +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
  199. +#define MALLOC_0_IS_NONNULL 1
  200. +# define __USE_MINGW_ANSI_STDIO 1
  201. +#define PROMOTED_MODE_T mode_t
  202. +#define REPLACE_FPRINTF_POSIX 1
  203. +#define REPLACE_PRINTF_POSIX 1
  204. +#define REPLACE_VFPRINTF_POSIX 1
  205. +#define STDC_HEADERS 1
  206. +#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1
  207. +#define USER_LABEL_PREFIX
  208. +#define USE_POSIX_THREADS 1
  209. +#define USE_POSIX_THREADS_WEAK 1
  210. +# define _ALL_SOURCE 1
  211. +# define _DARWIN_C_SOURCE 1
  212. +# define _GNU_SOURCE 1
  213. +# define _NETBSD_SOURCE 1
  214. +# define _OPENBSD_SOURCE 1
  215. +# define _POSIX_PTHREAD_SEMANTICS 1
  216. +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
  217. +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
  218. +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
  219. +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
  220. +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
  221. +# define __STDC_WANT_LIB_EXT2__ 1
  222. +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
  223. +# define _TANDEM_SOURCE 1
  224. +# define _HPUX_ALT_XOPEN_SOCKET_API 1
  225. +# define __EXTENSIONS__ 1
  226. +#define USE_UNLOCKED_IO 0
  227. +#define _DARWIN_USE_64_BIT_INODE 1
  228. +#define _NETBSD_SOURCE 1
  229. +#define _USE_STD_STAT 1
  230. +#define restrict __restrict
  231. +
  232. +{GNULIB_CONFIG_FOOTER}
  233. diff --git a/bison/internal/gnulib/gnulib.BUILD b/bison/internal/gnulib/gnulib.BUILD
  234. index e23b2b8..69d969b 100644
  235. --- a/bison/internal/gnulib/gnulib.BUILD
  236. +++ b/bison/internal/gnulib/gnulib.BUILD
  237. @@ -19,6 +19,7 @@ cc_library(
  238. hdrs = select({
  239. "@bazel_tools//src/conditions:darwin": glob(["config-darwin/*.h"]),
  240. "@bazel_tools//src/conditions:windows": glob(["config-windows/*.h"]),
  241. + "@bazel_tools//src/conditions:freebsd": glob(["config-freebsd/*.h"]),
  242. "//conditions:default": glob(["config-linux/*.h"]),
  243. }),
  244. includes = select({
  245. @@ -28,6 +29,9 @@ cc_library(
  246. "@bazel_tools//src/conditions:windows": [
  247. "config-windows",
  248. ],
  249. + "@bazel_tools//src/conditions:freebsd": [
  250. + "config-freebsd",
  251. + ],
  252. "//conditions:default": [
  253. "config-linux",
  254. ],
  255. @@ -42,6 +46,12 @@ cc_library(
  256. deps = [":config_h"],
  257. )
  258. +cc_library(
  259. + name = "maybe_alloca_h",
  260. + hdrs = ["maybe-alloca/alloca.h"],
  261. + includes = ["maybe-alloca"],
  262. +)
  263. +
  264. _GNULIB_HDRS = glob([
  265. "lib/*.h",
  266. "lib/bitset/*.h",
  267. @@ -192,6 +202,7 @@ cc_library(
  268. "//:timevar_def",
  269. ] + select({
  270. "@bazel_tools//src/conditions:windows": [":gnulib_windows_shims"],
  271. + "@bazel_tools//src/conditions:freebsd": [":maybe_alloca_h"],
  272. "//conditions:default": [],
  273. }),
  274. )
  275. diff --git a/bison/internal/gnulib/gnulib.bzl b/bison/internal/gnulib/gnulib.bzl
  276. index 159ee4c..2038f4d 100644
  277. --- a/bison/internal/gnulib/gnulib.bzl
  278. +++ b/bison/internal/gnulib/gnulib.bzl
  279. @@ -83,6 +83,7 @@ def gnulib_overlay(ctx, bison_version, extra_copts = []):
  280. ("darwin", ctx.attr._gnulib_config_darwin_h),
  281. ("linux", ctx.attr._gnulib_config_linux_h),
  282. ("windows", ctx.attr._gnulib_config_windows_h),
  283. + ("freebsd", ctx.attr._gnulib_config_freebsd_h),
  284. ]:
  285. config_prefix = "gnulib/config-{}/".format(os)
  286. @@ -148,6 +149,20 @@ def gnulib_overlay(ctx, bison_version, extra_copts = []):
  287. "(const char **) environ": "NULL",
  288. }, executable = False)
  289. + # Some platforms have alloca() but in <stdlib.h>
  290. + ctx.file(
  291. + "gnulib/maybe-alloca/alloca.h",
  292. + content =
  293. + """
  294. + #if defined(__GLIBC__)
  295. + #include_next <alloca.h>
  296. + #else
  297. + #include <stdlib.h>
  298. + #endif
  299. + """,
  300. + executable = False,
  301. + )
  302. +
  303. _WINDOWS_STDLIB_SHIMS = [
  304. "alloca",
  305. "errno",
  306. diff --git a/bison/internal/repository.bzl b/bison/internal/repository.bzl
  307. index 7e17763..934e8c9 100644
  308. --- a/bison/internal/repository.bzl
  309. +++ b/bison/internal/repository.bzl
  310. @@ -133,5 +133,9 @@ bison_repository = repository_rule(
  311. default = "//bison/internal:gnulib/config-windows.h",
  312. allow_single_file = True,
  313. ),
  314. + "_gnulib_config_freebsd_h": attr.label(
  315. + default = "//bison/internal:gnulib/config-freebsd.h",
  316. + allow_single_file = True,
  317. + ),
  318. },
  319. )
  320. --
  321. 2.38.1