diff options
-rw-r--r-- | cmake/modules/UseLemon.cmake | 2 | ||||
-rw-r--r-- | tools/lemon/lemon.c | 1 | ||||
-rw-r--r-- | tools/lemon/patches/01-lemon-dashdash.patch | 14 |
3 files changed, 17 insertions, 0 deletions
diff --git a/cmake/modules/UseLemon.cmake b/cmake/modules/UseLemon.cmake index e419de1a98..10f02fd441 100644 --- a/cmake/modules/UseLemon.cmake +++ b/cmake/modules/UseLemon.cmake @@ -14,6 +14,7 @@ if(LEMON_EXECUTABLE) COMMAND ${LEMON_EXECUTABLE} -T/usr/share/lemon/lempar.c -d. + -- ${_in} DEPENDS ${_in} @@ -32,6 +33,7 @@ else() COMMAND $<TARGET_FILE:lemon> -T${CMAKE_SOURCE_DIR}/tools/lemon/lempar.c -d. + -- ${_in} DEPENDS ${_in} diff --git a/tools/lemon/lemon.c b/tools/lemon/lemon.c index 869ac58049..1a4144b383 100644 --- a/tools/lemon/lemon.c +++ b/tools/lemon/lemon.c @@ -2106,6 +2106,7 @@ int OptInit(char **a, struct s_options *o, FILE *err) if( g_argv && *g_argv && op ){ int i; for(i=1; g_argv[i]; i++){ + if( strcmp(g_argv[i],"--")==0 ) break; if( g_argv[i][0]=='+' || g_argv[i][0]=='-' ){ errcnt += handleflags(i,err); }else if( strchr(g_argv[i],'=') ){ diff --git a/tools/lemon/patches/01-lemon-dashdash.patch b/tools/lemon/patches/01-lemon-dashdash.patch new file mode 100644 index 0000000000..1c20457433 --- /dev/null +++ b/tools/lemon/patches/01-lemon-dashdash.patch @@ -0,0 +1,14 @@ +Don't try to parse flags and options that are after "--". This makes it +possible to prevent a filename path with an '=' in it from being processed +as an option. +SPDX-License-Identifier: CC0-1.0 +--- a/lemon.c ++++ b/lemon.c +@@ -2106,6 +2106,7 @@ int OptInit(char **a, struct s_options *o, FILE *err) + if( g_argv && *g_argv && op ){ + int i; + for(i=1; g_argv[i]; i++){ ++ if( strcmp(g_argv[i],"--")==0 ) break; + if( g_argv[i][0]=='+' || g_argv[i][0]=='-' ){ + errcnt += handleflags(i,err); + }else if( strchr(g_argv[i],'=') ){ |