From: Matthew Fernandez Date: Wed, 16 Sep 2020 00:25:26 +0000 (-0700) Subject: replace ad hoc name mangling in gml scanner with Flex's option prefix X-Git-Tag: 2.46.0~20^2^2~70^2~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=758671329be90d113720a2859d2174a45a53314b;p=graphviz replace ad hoc name mangling in gml scanner with Flex's option prefix This drops compatibility with Lex, but other scanners in the tree, e.g. lib/cgraph/scan.l already require Flex, so this does not change build requirements. Related to #1806. --- diff --git a/cmake/modify_gml2gv_gmlscan.cmake.in b/cmake/modify_gml2gv_gmlscan.cmake.in deleted file mode 100644 index 23f60c469..000000000 --- a/cmake/modify_gml2gv_gmlscan.cmake.in +++ /dev/null @@ -1,3 +0,0 @@ -file(READ @CMAKE_CURRENT_BINARY_DIR@/gmlscan.c file_contents) -string(REPLACE "yy" "gml" file_contents "${file_contents}") -file(WRITE @CMAKE_CURRENT_BINARY_DIR@/gmlscan.c "${file_contents}") diff --git a/cmd/tools/CMakeLists.txt b/cmd/tools/CMakeLists.txt index dd8852766..2dbf34cfa 100644 --- a/cmd/tools/CMakeLists.txt +++ b/cmd/tools/CMakeLists.txt @@ -106,21 +106,11 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlparse.cmake" @ONLY ) -configure_file( - "${TOP_SOURCE_DIR}/cmake/modify_gml2gv_gmlscan.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlscan.cmake" - @ONLY -) add_custom_command( OUTPUT ${BISON_Gmlparse_OUTPUTS} COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlparse.cmake APPEND ) -add_custom_command( - OUTPUT ${FLEX_Gmlscan_OUTPUTS} - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/modify_gml2gv_gmlscan.cmake - APPEND -) add_executable(gml2gv # Source files diff --git a/cmd/tools/Makefile.am b/cmd/tools/Makefile.am index 381eea3e6..fac023372 100644 --- a/cmd/tools/Makefile.am +++ b/cmd/tools/Makefile.am @@ -281,9 +281,7 @@ y.output: $(top_srcdir)/cmd/tools/gmlparse.y gmlparse.o gmlparse.lo gmlscan.o gmlscan.lo : gmlscan.c gmlparse.h gmlscan.c: $(top_srcdir)/cmd/tools/gmlscan.l - @LEX@ -i $(top_srcdir)/cmd/tools/gmlscan.l - @SED@ "s/yy/gml/g" < @LEX_OUTPUT_ROOT@.c > gmlscan.c - rm @LEX_OUTPUT_ROOT@.c + @LEX@ --outfile=$@ -i $(top_srcdir)/cmd/tools/gmlscan.l gml2gv_LDADD = \ $(top_builddir)/lib/cgraph/libcgraph.la \ diff --git a/cmd/tools/gml2gv.vcxproj b/cmd/tools/gml2gv.vcxproj index a04d9dc49..ec42ef155 100644 --- a/cmd/tools/gml2gv.vcxproj +++ b/cmd/tools/gml2gv.vcxproj @@ -72,9 +72,7 @@ getopt.lib;cdt.lib;cgraph.lib;ingraphs.lib;gvc.lib;%(AdditionalDependencies) - win_flex -o gmlscan-intermediate.c -i gmlscan.l -sed "s/yy/gml/g" < gmlscan-intermediate.c > gmlscan.c -del gmlscan-intermediate.c + win_flex --outfile=gmlscan.c -i gmlscan.l win_bison -dy gmlparse.y -o gmlparse-intermediate.c sed "s/yy/gml/g" < gmlparse-intermediate.h > gmlparse.h sed "s/yy/gml/g" < gmlparse-intermediate.c > gmlparse.c @@ -101,9 +99,7 @@ del gmlparse-intermediate.c getopt.lib;cdt.lib;cgraph.lib;ingraphs.lib;gvc.lib;%(AdditionalDependencies) - win_flex -o gmlscan-intermediate.c -i gmlscan.l -sed "s/yy/gml/g" < gmlscan-intermediate.c > gmlscan.c -del gmlscan-intermediate.c + win_flex --outfile=gmlscan.c -i gmlscan.l win_bison -dy gmlparse.y -o gmlparse-intermediate.c sed "s/yy/gml/g" < gmlparse-intermediate.h > gmlparse.h sed "s/yy/gml/g" < gmlparse-intermediate.c > gmlparse.c diff --git a/cmd/tools/gmlscan.l b/cmd/tools/gmlscan.l index 4e1175d1d..21588fa08 100644 --- a/cmd/tools/gmlscan.l +++ b/cmd/tools/gmlscan.l @@ -1,5 +1,11 @@ /* vim:set shiftwidth=4 ts=8: */ + /* By default, Flex emits a lexer using symbols prefixed with "yy". Graphviz + * contains multiple Flex-generated lexers, so we alter this prefix to avoid + * symbol clashes. + */ +%option prefix="gml" + %{ #include #include @@ -61,7 +67,7 @@ static void addstr(char *src) } static void endstr(void) { - yylval.str = strdup(Sbuf); + gmllval.str = strdup(Sbuf); } %} @@ -106,9 +112,9 @@ L_ID [a-zA-Z_][_a-zA-Z0-9]* "fontSize" return (FONTSIZE); "fontName" return (FONTNAME); "color" return (COLOR); -{L_INT} { yylval.str = strdup(yytext); return (INTEGER); } -{L_REAL} { yylval.str = strdup(yytext); return (REAL); } -{L_ID} { yylval.str = strdup(yytext); return (NAME); } +{L_INT} { gmllval.str = strdup(yytext); return (INTEGER); } +{L_REAL} { gmllval.str = strdup(yytext); return (REAL); } +{L_ID} { gmllval.str = strdup(yytext); return (NAME); } ["] BEGIN(qstring); beginstr(); ["] BEGIN(INITIAL); endstr(); return (STRING); @@ -118,7 +124,7 @@ L_ID [a-zA-Z_][_a-zA-Z0-9]* %% -void yyerror(char *str) +void gmlerror(char *str) { char buf[BUFSIZ]; if (errors)