summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-01-10 21:53:01 -0800
committerKaz Kylheku <kaz@kylheku.com>2020-01-10 21:53:01 -0800
commit266df44381759139e7b072aaf90971cfeed4e813 (patch)
tree471ef4b7141f296482d0bd40c2b7ce03d150476d
parent251740660baa0483a05d844cb91e6d3ea43b79b0 (diff)
downloadtxr-266df44381759139e7b072aaf90971cfeed4e813.tar.gz
txr-266df44381759139e7b072aaf90971cfeed4e813.tar.bz2
txr-266df44381759139e7b072aaf90971cfeed4e813.zip
build: deal with the mess of new Bison warnings.
Newer versions of Bison produce spurious warnings in Yacc mode about %pure-parser being not POSIX conforming and also deprecated. Plus some strange fluff about "fix-its" that can be applied if option --update is specified. Let's detect at configure time whether the Yacc program being used is actually Bison 3.0 or greater, and if so, give it some flags to shut up these warnings. * Makefile (YACC_FLAGS): New variable, conditionally set based on yacc_is_newer_bison, also new variable, that being generated into config.make. (y.tab.c): Invoke $(TXR_YACC) with $(YACC_FLAGS). (conftest.yacc-version): New phony target for running Yacc with --version, out of the configure script. * configure (yacc_is_newer_bison): New variable. (gen_config_make): Generate yacc_is_newer_bison make variable. New test for whether Yacc is Bison. If so, and the version is >= 3.0, sets the yacc_is_newer_bison variable to y.
-rw-r--r--Makefile12
-rwxr-xr-xconfigure18
2 files changed, 29 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 44b3f8a3..66fae7b3 100644
--- a/Makefile
+++ b/Makefile
@@ -93,6 +93,12 @@ OBJS := $(DBG_OBJS) $(OPT_OBJS)
TXR := ./$(PROG)
+ifneq ($(yacc_is_newer_bison),)
+YACC_FLAGS := -Wno-yacc -Wno-deprecated
+else
+YACC_FLAGS :=
+endif
+
.SUFFIXES:
MAKEFLAGS += --no-builtin-rules
@@ -288,7 +294,7 @@ y.tab.c: $(top_srcdir)parser.y
if [ -e y.tab.h ]; then mv y.tab.h y.tab.h.old ; fi)
$(call SH,rm -f y.tab.c)
$(call SH, \
- if $(TXR_YACC) -v -d $< ; then \
+ if $(TXR_YACC) $(YACC_FLAGS) -v -d $< ; then \
grep -qs '$(BS_LIC_FROM)' y.tab.c && \
grep -qs '$(BS_LIC_TO)' y.tab.c && \
sed -e '/$(BS_LIC_FROM)/$(CM)/$(BS_LIC_TO)/d' \
@@ -552,6 +558,10 @@ conftest.syms: conftest.o
conftest.yacc:
$(V)echo $(TXR_YACC)
+.PHONY: conftest.yacc-version
+conftest.yacc-version:
+ $(V)$(TXR_YACC) --version 2> /dev/null || true
+
.PHONY: conftest.ccver
conftest.ccver:
$(V)$(TXR_CC) --version
diff --git a/configure b/configure
index a621a9f8..a070755d 100755
--- a/configure
+++ b/configure
@@ -106,6 +106,7 @@ yaccname_given=
yaccname='' # test tries $(YACC) first
yacc='$(cross)$(tool_prefix)$(yaccname)'
yacc_given=
+yacc_is_newer_bison=
nm='$(cross)$(tool_prefix)nm'
opt_flags='-O2 -fno-stack-protector'
lang_flags='-ansi -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200112 -D_GNU_SOURCE'
@@ -748,6 +749,8 @@ have_git := $have_git
add_win_res := $([ -n "$have_windows_h" -a -n "$have_windres" ] && echo "y")
+yacc_is_newer_bison := $yacc_is_newer_bison
+
TXR_CC := $cc
TXR_LEX := $lex
TXR_YACC := $yacc
@@ -1623,6 +1626,21 @@ else
esac
fi
+printf "Checking if yacc program is GNU Bison ... "
+
+gen_config_make
+
+bison_version="$($make conftest.yacc-version | grep -E '[Bb]ison')" || true
+
+if [ -n "$bison_version" ] ; then
+ set -- $bison_version
+ printf "yes (%s)\n" "$4"
+ save_ifs=$IFS ; IFS=. ; set -- $4 ; IFS=$save_ifs
+ [ $1 -ge 3 ] && yacc_is_newer_bison=y
+else
+ printf "no\n"
+fi
+
#
# sys/wait.h
#