shithub: rgbds

Download patch

ref: 3e4c2fe712c80207f855a46420572fdd9f0d5f84
parent: bdfce25db047b64e48d33a1beeb348478c06c84b
author: ISSOtm <eldredhabert0@gmail.com>
date: Thu Dec 10 08:53:45 EST 2020

Avoid error with old Bison versions

`api.token.raw` is only defined starting with Bison 3.5
Since it's not essential, define it on the command-line iff the Bison
version is sufficient.

--- a/Makefile
+++ b/Makefile
@@ -114,15 +114,22 @@
 
 # Rules to process files
 
-# We want the Bison invocations to pass through our rules, not default ones
+# We want the Bison invocation to pass through our rules, not default ones
 .y.o:
 
-# bison-generated C files have an accompanying header
-.c.h:
+# Bison-generated C files have an accompanying header
+src/asm/parser.h: src/asm/parser.c
 	$Qtouch $@
 
-.y.c:
-	$Q${BISON} -d ${YFLAGS} -o $@ $<
+src/asm/parser.c: src/asm/parser.y
+	$QDEFS=; \
+	add_flag(){ \
+		if src/check_bison_ver.sh $$1 $$2; then \
+			DEFS+=-D$$3; \
+		fi \
+	}; \
+	add_flag 3 5 api.token.raw=true; \
+	${BISON} -d $$DEFS ${YFLAGS} -o $@ $<
 
 .c.o:
 	$Q${CC} ${REALCFLAGS} ${PNGCFLAGS} -c -o $@ $<
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -12,9 +12,7 @@
     "version.c"
     )
 
-find_package(BISON REQUIRED)
 find_package(PkgConfig)
-
 if(NOT PKG_CONFIG_FOUND)
   # fallback to find_package
   find_package(PNG REQUIRED)
@@ -22,8 +20,15 @@
   pkg_check_modules(LIBPNG REQUIRED libpng)
 endif()
 
+find_package(BISON REQUIRED)
+set(BISON_FLAGS "")
+# Set sompe optimization flags on versions that support them
+if(BISON_VERSION VERSION_GREATER_EQUAL "3.5")
+  set(BISON_FLAGS "${BISON_FLAGS} -Dapi.token.raw=true")
+endif()
 BISON_TARGET(PARSER "asm/parser.y"
              "${PROJECT_SOURCE_DIR}/src/asm/parser.c"
+             COMPILE_FLAGS "${BISON_FLAGS}"
              DEFINES_FILE "${PROJECT_SOURCE_DIR}/src/asm/parser.h"
              )
 
--- a/src/asm/parser.y
+++ b/src/asm/parser.y
@@ -166,8 +166,6 @@
 
 %}
 
-%define api.token.raw true
-
 %union
 {
 	char tzSym[MAXSYMLEN + 1];
--- /dev/null
+++ b/src/check_bison_ver.sh
@@ -1,0 +1,7 @@
+#!/bin/sh
+bison -V | awk '
+/^bison.*[0-9]+(\.[0-9]+){1,2}$/ {
+	match($0, /[0-9]+(\.[0-9]+){1,2}$/);
+	split(substr($0, RSTART), ver, ".");
+	if (ver[1] == major && ver[2] >= minor) { exit 0 } else { exit 1 }
+}' major="$1" minor="$2"