不是目录问题, 是在使用bison生成中间代码时报错:
使用sh build.sh release --trace重新执行
界面报错有显示如下:
行 8682: /root/work/oceanbase/code/gitclone/oceanbase/src/sql/CMakeLists.txt(1143): execute_process(COMMAND bash gen_parser.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src/sql/parser OUTPUT_FILE _gen_parser.output ERROR_FILE _gen_parser.error )
行 8682: /root/work/oceanbase/code/gitclone/oceanbase/src/sql/CMakeLists.txt(1143): execute_process(COMMAND bash gen_parser.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src/sql/parser OUTPUT_FILE _gen_parser.output ERROR_FILE _gen_parser.error )
...
/root/work/oceanbase/code/gitclone/oceanbase/deps/3rd/usr/local/oceanbase/devtools/share/cmake-3.20/Modules/CPack.cmake(874): configure_file(${cpack_source_input_file} ${CPACK_SOURCE_OUTPUT_CONFIG_FILE} @ONLY )
/root/work/oceanbase/code/gitclone/oceanbase/cmake/RPM.cmake(156): add_custom_target(rpm COMMAND +make package DEPENDS observer ob_admin ob_error ob_sql_proxy_parser_static )
-- Configuring done
CMake Error at src/sql/parser/CMakeLists.txt:72 (add_library):
Cannot find source file:
sql_parser_mysql_mode_lex.c
CMake Error at src/sql/parser/CMakeLists.txt:72 (add_library):
No SOURCES given to target: ob_sql_server_parser_objects
CMake Error at src/sql/parser/CMakeLists.txt:88 (add_library):
No SOURCES given to target: ob_sql_proxy_parser_static
CMake Error at src/sql/parser/CMakeLists.txt:65 (add_library):
No SOURCES given to target: ob_sql_proxy_parser_objects
CMake Error at src/sql/parser/CMakeLists.txt:93 (add_library):
No SOURCES given to target: ob_sql_server_parser_static
CMake Generate step failed. Build files cannot be regenerated correctly.
排查过程:
sql_parser_mysql_mode_lex.c该文件在oceanbase v3.1.2版本是在Cmake阶段通过bison生成的中间代码, 是通过自动执行oceanbase/src/sql/parse/gen_parse.sh脚本完成的, 根据日志中行 8682可以发现,在执行该脚本报错后,生成了错误日志在_gen_parser.error, 查看错误日志发现如下报错:
Compile error[0], abort.
查看脚本源码,可知执行以下命令报错:
bison -v -Werror -d ../../../src/sql/parser/sql_parser_mysql_mode.y -o ../../../src/sql/parser/sql_parser_mysql_mode_tab.c
bison 是使用的init阶段从Oceanbase yum源下载并解压的bison, 并不是使用的主机上的, 是sh build.sh release时使用cpio解压后放在了oceanbase/deps/3rd/usr/local/oceanbase/devtools/share/下bison工具目录
obdevtools-bison-2.4.1-3.el7.x86_64.rpm
解决方案:
主机安装bison(bison-3.0.4-2.el7.x86_64.rpm),再执行构建(build.sh release/debug)
待解疑问:
主机本地安装后,再执行构建,bison使用的依然是oceanbase/deps/3rd/usr/local/oceanbase/devtools/share/下的,却能运行成功, 说明使用到了主机的依赖, 是否是自带的bison缺少依赖?m4?