execute_process(
COMMAND bison -d -o gram.cpp gram.y
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE PARSER_GRAM
)
execute_process(
COMMAND sed -i "s/YY_NULL nullptr/YY_NULL 0/g" gram.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE PARSER_GRAM
)
execute_process(
COMMAND sed -i "s/\# define YYINITDEPTH .*/\# define YYINITDEPTH 1000/g" gram.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE PARSER_GRAM
)
execute_process(
COMMAND bison -d -o hint_gram.cpp hint_gram.y
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE PARSER_HINT_GRAM
)
execute_process(
COMMAND sed -i "s/YY_NULL nullptr/YY_NULL 0/g" hint_gram.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE PARSER_HINT_GRAM
)
execute_process(
COMMAND perl -I ${PROJECT_SRC_DIR}/tools/ ${PROJECT_SRC_DIR}/tools/gen_keywordlist.pl --extern ${PROJECT_SRC_DIR}/include/parser/kwlist.h
WORKING_DIRECTORY ${PROJECT_SRC_DIR}/include/parser/
)
set(parser_cmd_src
"${PROJECT_SRC_DIR}/common/backend/parser|rm -fr lex.backup||flex -CF -b -p -p -o'scan.inc' scan.l|sed -i 's/YY_NULL/YY_ZERO/g' scan.inc"
"${PROJECT_SRC_DIR}/common/backend/parser|rm -fr lex.backup||flex -CF -b -p -p -o'hint_scan.inc' hint_scan.l|sed -i 's/YY_NULL/YY_ZERO/g' hint_scan.inc"
)
add_cmd_gen_when_configure(flex_target parser_cmd_src)
execute_process(
COMMAND ln -fs ${CMAKE_CURRENT_SOURCE_DIR}/gram.hpp ${PROJECT_SRC_DIR}/include/parser/gram.hpp
COMMAND ln -fs ${CMAKE_CURRENT_SOURCE_DIR}/hint_gram.hpp ${PROJECT_SRC_DIR}/include/parser/hint_gram.hpp
)
set(TGT_parser_SRC
${CMAKE_CURRENT_SOURCE_DIR}/analyze.cpp
${CMAKE_CURRENT_SOURCE_DIR}/keywords.cpp
${CMAKE_CURRENT_SOURCE_DIR}/kwlookup.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_agg.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_clause.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_coerce.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_collate.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_compatibility.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_cte.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_expr.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_func.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_hint.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_merge.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_node.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_oper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_param.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_startwith.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parser.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_relation.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_target.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_type.cpp
${CMAKE_CURRENT_SOURCE_DIR}/parse_utilcmd.cpp
${CMAKE_CURRENT_SOURCE_DIR}/scansup.cpp
${CMAKE_CURRENT_SOURCE_DIR}/gram.cpp
${CMAKE_CURRENT_SOURCE_DIR}/hint_gram.cpp
)
set(TGT_parser_INC
${PROJECT_SRC_DIR}/include
${PROJECT_SRC_DIR}/lib/gstrace
${LZ4_INCLUDE_PATH}
${ZLIB_INCLUDE_PATH}
)
if("${ENABLE_MULTIPLE_NODES}" STREQUAL "ON")
list(APPEND TGT_parser_INC ${PROJECT_TRUNK_DIR}/distribute/include)
endif()
set(parser_DEF_OPTIONS ${MACRO_OPTIONS})
set(parser_COMPILE_OPTIONS ${OPTIMIZE_OPTIONS} ${OS_OPTIONS} ${PROTECT_OPTIONS} ${WARNING_OPTIONS} ${BIN_SECURE_OPTIONS} ${CHECK_OPTIONS})
set(parser_LINK_OPTIONS ${BIN_LINK_OPTIONS})
add_static_objtarget(common_backend_parser TGT_parser_SRC TGT_parser_INC "${parser_DEF_OPTIONS}" "${parser_COMPILE_OPTIONS}" "${parser_LINK_OPTIONS}")