Skip to content

Commit 472fbfa

Browse files
committed
sed the generated enum yytokentype and yyguts_t
to avoid LTO -Wodr warnings. yacc and flex don't support -P for these yet.
1 parent 4884ecf commit 472fbfa

File tree

9 files changed

+40
-4
lines changed

9 files changed

+40
-4
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,8 @@ else()
247247
message(STATUS "IPO / LTO not supported: <${error}>")
248248
endif()
249249

250+
find_program(SED sed gsed)
251+
250252
add_subdirectory(src)
251253
add_subdirectory(regression)
252254
add_subdirectory(unit)

src/CMakeLists.txt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,15 @@ macro(generic_bison name)
3939
COMPILE_FLAGS "${bison_warnings_as_errors} -pyy${name}"
4040
)
4141
set(renamed_parser_header "${CMAKE_CURRENT_BINARY_DIR}/${bison_header}")
42-
add_custom_command(OUTPUT "${renamed_parser_header}"
43-
COMMAND "${CMAKE_COMMAND}" -E copy "${BISON_parser_OUTPUT_HEADER}" "${renamed_parser_header}"
44-
MAIN_DEPENDENCY "${BISON_parser_OUTPUT_HEADER}"
45-
)
42+
if(${SED} STREQUAL "SED-NOTFOUND")
43+
add_custom_command(OUTPUT "${renamed_parser_header}"
44+
COMMAND "${CMAKE_COMMAND}" -E copy "${BISON_parser_OUTPUT_HEADER}" "${renamed_parser_header}"
45+
MAIN_DEPENDENCY "${BISON_parser_OUTPUT_HEADER}")
46+
else()
47+
add_custom_command(OUTPUT "${renamed_parser_header}"
48+
COMMAND ${SED} -e "s,enum yytokentype,enum yytokentype_${name}," <${BISON_parser_OUTPUT_HEADER} >${renamed_parser_header}
49+
MAIN_DEPENDENCY "${BISON_parser_OUTPUT_HEADER}")
50+
endif()
4651
list(REMOVE_ITEM BISON_parser_OUTPUTS "${BISON_parser_OUTPUT_HEADER}")
4752
list(APPEND BISON_parser_OUTPUTS "${renamed_parser_header}")
4853
endmacro(generic_bison)
@@ -60,6 +65,13 @@ macro(generic_flex name)
6065
"${CMAKE_CURRENT_BINARY_DIR}/${name}_lex.yy.cpp"
6166
COMPILE_FLAGS "-Pyy${name}"
6267
)
68+
if(NOT ${SED} STREQUAL "SED-NOTFOUND")
69+
set(new_flex_source "${CMAKE_CURRENT_BINARY_DIR}/${name}_lex_sed.yy.cpp")
70+
add_custom_command(OUTPUT "${new_flex_source}"
71+
COMMAND ${SED} -e "s,struct yyguts_t,struct yy${name}guts_t,g" <${FLEX_scanner_OUTPUTS} >${new_flex_source}
72+
MAIN_DEPENDENCY "${FLEX_scanner_OUTPUTS}")
73+
set(FLEX_scanner_OUTPUTS "${new_flex_source}")
74+
endif()
6375
endmacro(generic_flex)
6476

6577
# Set the public include locations for a target.

src/ansi-c/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,15 @@ all: ansi-c$(LIBEXT)
104104

105105
ansi_c_y.tab.cpp: parser.y
106106
$(YACC) $(YFLAGS) -pyyansi_c parser.y --defines=ansi_c_y.tab.h -o $@
107+
$(SED) -e's,enum yytokentype,enum yytokentype_ansi,' \
108+
<ansi_c_y.tab.h >ansi_c_y.tab.h.tmp && \
109+
mv ansi_c_y.tab.h.tmp ansi_c_y.tab.h
107110

108111
ansi_c_y.tab.h: ansi_c_y.tab.cpp
109112

110113
ansi_c_lex.yy.cpp: scanner.l
111114
$(LEX) -Pyyansi_c -o$@ scanner.l
115+
$(SED) -e's,struct yyguts_t,struct yyansiguts_t,g' <$@ >$@.tmp && mv $@.tmp $@
112116

113117
# extra dependencies
114118
ansi_c_y.tab$(OBJEXT): ansi_c_y.tab.cpp ansi_c_y.tab.h

src/assembler/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ all: assembler$(LIBEXT)
1616

1717
assembler_lex.yy.cpp: scanner.l
1818
$(LEX) -Pyyassembler -o$@ scanner.l
19+
$(SED) -e's,struct yyguts_t,struct yyasmguts_t,' <$@ >$@.tmp && mv $@.tmp $@
1920

2021
generated_files: assembler_lex.yy.cpp
2122

src/common

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ endif
9898
ifeq ($(origin LEX),default)
9999
LEX = flex
100100
endif
101+
ifeq ($(origin SED),default)
102+
SED = sed
103+
endif
101104

102105
else ifeq ($(BUILD_ENV_),Cygwin)
103106
# use these for Cygwin:
@@ -130,6 +133,9 @@ endif
130133
ifeq ($(origin LEX),default)
131134
LEX = flex
132135
endif
136+
ifeq ($(origin SED),default)
137+
SED = sed
138+
endif
133139

134140

135141
else ifeq ($(BUILD_ENV_),MSVC)
@@ -158,6 +164,10 @@ endif
158164
ifeq ($(origin LEX),default)
159165
LEX = win_flex
160166
endif
167+
ifeq ($(origin SED),default)
168+
# on MSVC there is no lto
169+
SED = rem
170+
endif
161171

162172

163173
else

src/crangler/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ all: crangler$(EXEEXT)
2727

2828
c_lex.yy.cpp: scanner.l
2929
$(LEX) -Pyyc -o$@ scanner.l
30+
$(SED) -e's,struct yyguts_t,struct yycguts_t,g' <$@ >$@.tmp && mv $@.tmp $@
3031

3132
###############################################################################
3233

src/json/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ json_y.tab.h: json_y.tab.cpp
2525

2626
json_lex.yy.cpp: scanner.l
2727
$(LEX) -Pyyjson -o$@ scanner.l
28+
$(SED) -e's,struct yyguts_t,struct yyjsonguts_t,g' <$@ >$@.tmp && mv $@.tmp $@
2829

2930
generated_files: json_lex.yy.cpp json_y.tab.cpp json_y.tab.h
3031

src/statement-list/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@ all: statement-list$(LIBEXT)
3131

3232
statement_list_y.tab.cpp: parser.y
3333
$(YACC) $(YFLAGS) -pyystatement_list parser.y --defines=statement_list_y.tab.h -o $@
34+
$(SED) -e's,enum yytokentype,enum yytokentype_stmt,' \
35+
<statement_list_y.tab.h >statement_list_y.tab.h.tmp && \
36+
mv statement_list_y.tab.h.tmp statement_list_y.tab.h
3437

3538
statement_list_y.tab.h: statement_list_y.tab.cpp
3639

3740
statement_list_lex.yy.cpp: scanner.l
3841
$(LEX) -Pyystatement_list -o$@ scanner.l
42+
$(SED) -e's,struct yyguts_t,struct yystmtguts_t,g' <$@ >$@.tmp && mv $@.tmp $@
3943

4044
# extra dependencies
4145
statement_list_y.tab$(OBJEXT): statement_list_y.tab.cpp \

src/xmllang/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ xml_y.tab.h: xml_y.tab.cpp
2727

2828
xml_lex.yy.cpp: scanner.l
2929
$(LEX) -Pyyxml -o$@ scanner.l
30+
$(SED) -e's,struct yyguts_t,struct yyxmlguts_t,g' <$@ >$@.tmp && mv $@.tmp $@
3031

3132
generated_files: xml_lex.yy.cpp xml_y.tab.cpp xml_y.tab.h
3233

0 commit comments

Comments
 (0)