diff --git a/Makefile b/Makefile index cc80fdc4..39c98dd8 100644 --- a/Makefile +++ b/Makefile @@ -114,15 +114,22 @@ rgbgfx: ${rgbgfx_obj} # 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 $@ $< diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5a891c53..bdc9bfa0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,9 +12,7 @@ set(common_src "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 @@ else() 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" ) diff --git a/src/asm/parser.y b/src/asm/parser.y index 35f22e2f..711f6162 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -166,8 +166,6 @@ static inline void failAssertMsg(enum AssertionType type, char const *msg) %} -%define api.token.raw true - %union { char tzSym[MAXSYMLEN + 1]; diff --git a/src/check_bison_ver.sh b/src/check_bison_ver.sh new file mode 100755 index 00000000..935724bd --- /dev/null +++ b/src/check_bison_ver.sh @@ -0,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"