Mercurial > irccd
changeset 1171:7d84776f902e
irccd: make lex/yacc more POSIX, closes #2538 @1h
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 28 Apr 2022 09:23:15 +0200 |
parents | 16edffa8921b |
children | c958d796e771 |
files | irccd/CMakeLists.txt irccd/conf.y irccd/lex.l |
diffstat | 3 files changed, 49 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/irccd/CMakeLists.txt Sun Mar 06 11:07:37 2022 +0100 +++ b/irccd/CMakeLists.txt Thu Apr 28 09:23:15 2022 +0200 @@ -64,16 +64,40 @@ ) endif () -find_package(BISON REQUIRED) -find_package(FLEX REQUIRED) -find_package(Threads REQUIRED) +find_program(LEX_EXECUTABLE lex flex) +find_program(YACC_EXECUTABLE yacc bison) + +if (NOT LEX_EXECUTABLE) + message(FATAL_ERROR "No lex/flex tool available") +endif () +if (NOT YACC_EXECUTABLE) + message(FATAL_ERROR "No yacc/bison tool available") +endif () -bison_target(yacc ${irccd_SOURCE_DIR}/conf.y - ${irccd_BINARY_DIR}/conf.c - DEFINES_FILE ${irccd_BINARY_DIR}/conf.h +add_custom_command( + OUTPUT + ${irccd_BINARY_DIR}/conf.tab.c + ${irccd_BINARY_DIR}/conf.tab.h + DEPENDS ${irccd_SOURCE_DIR}/conf.y + COMMAND ${YACC_EXECUTABLE} -b conf -d ${irccd_SOURCE_DIR}/conf.y + WORKING_DIRECTORY ${irccd_BINARY_DIR} ) -flex_target(lex ${irccd_SOURCE_DIR}/lex.l ${irccd_BINARY_DIR}/lex.c) -add_flex_bison_dependency(lex yacc) + +add_custom_command( + OUTPUT ${irccd_BINARY_DIR}/lex.yy.c + DEPENDS + ${irccd_SOURCE_DIR}/lex.l + ${irccd_BINARY_DIR}/conf.tab.h + COMMAND ${LEX_EXECUTABLE} ${irccd_SOURCE_DIR}/lex.l + WORKING_DIRECTORY ${irccd_BINARY_DIR} +) + +if (CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") + set_property( + SOURCE ${irccd_BINARY_DIR}/lex.yy.c + PROPERTY COMPILE_OPTIONS -Wno-unused-function + ) +endif () if (IRCCD_WITH_HTTP AND IRCCD_WITH_JS) find_package(CURL REQUIRED) @@ -88,12 +112,14 @@ # libirccd-static # ------------------------------------------------------------------- # +find_package(Threads REQUIRED) + add_library( irccd-static OBJECT ${SOURCES} - ${irccd_BINARY_DIR}/lex.c - ${irccd_BINARY_DIR}/conf.c - ${irccd_BINARY_DIR}/conf.h + ${irccd_BINARY_DIR}/lex.yy.c + ${irccd_BINARY_DIR}/conf.tab.c + ${irccd_BINARY_DIR}/conf.tab.h ) target_include_directories(irccd-static PRIVATE $<BUILD_INTERFACE:${irccd_SOURCE_DIR}>
--- a/irccd/conf.y Sun Mar 06 11:07:37 2022 +0100 +++ b/irccd/conf.y Thu Apr 28 09:23:15 2022 +0200 @@ -697,6 +697,12 @@ irc_util_die("%s:%d: %s\n", confpath, yylineno, err); } +int +yywrap(void) +{ + return 1; +} + void config_open(const char *path) {
--- a/irccd/lex.l Sun Mar 06 11:07:37 2022 +0100 +++ b/irccd/lex.l Thu Apr 28 09:23:15 2022 +0200 @@ -16,11 +16,6 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -%option noyywrap -%option nounput -%option noinput -%option yylineno - %{ #include <sys/types.h> @@ -28,7 +23,9 @@ #include <irccd/limits.h> #include <irccd/rule.h> -#include "conf.h" +#include "conf.tab.h" + +int yylineno; void yyerror(const char *); @@ -72,7 +69,8 @@ comma , semicolon ; -ws [ \t\n]+ +ws [ \t]+ +nl \n comment #.*$ number [0-9]+ word [A-Za-z_][^{};,"\r\n\t ]* @@ -82,6 +80,7 @@ %% {ws} ; +{nl} yylineno++; {comment} ; {brace_close} return T_BRACE_CLOSE;