From b8f2e6a055af9f2bffd2078364077fe6d2942e53 Mon Sep 17 00:00:00 2001 From: John Naylor Date: Sat, 13 Aug 2022 15:02:30 +0700 Subject: [PATCH v4 06/11] Build syncrep_scanner.c standalone --- src/backend/Makefile | 3 ++- src/backend/replication/.gitignore | 1 + src/backend/replication/Makefile | 11 +++++++++-- src/backend/replication/syncrep_gram.y | 2 -- src/backend/replication/syncrep_scanner.l | 21 +++++++++++++++------ src/tools/pginclude/headerscheck | 1 + 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/backend/Makefile b/src/backend/Makefile index f527659a7b..86cbe03677 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -183,7 +183,7 @@ distprep: $(MAKE) -C bootstrap bootparse.c bootparse.h bootscanner.c $(MAKE) -C catalog distprep $(MAKE) -C nodes distprep - $(MAKE) -C replication repl_gram.c repl_gram.h repl_scanner.c syncrep_gram.c syncrep_scanner.c + $(MAKE) -C replication repl_gram.c repl_gram.h repl_scanner.c syncrep_gram.c syncrep_gram.h syncrep_scanner.c $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c $(MAKE) -C utils distprep $(MAKE) -C utils/adt jsonpath_gram.c jsonpath_scan.c @@ -307,6 +307,7 @@ maintainer-clean: distclean replication/repl_gram.h \ replication/repl_scanner.c \ replication/syncrep_gram.c \ + replication/syncrep_gram.h \ replication/syncrep_scanner.c \ storage/lmgr/lwlocknames.c \ storage/lmgr/lwlocknames.h \ diff --git a/src/backend/replication/.gitignore b/src/backend/replication/.gitignore index a5f600232f..77d5a51068 100644 --- a/src/backend/replication/.gitignore +++ b/src/backend/replication/.gitignore @@ -1,5 +1,6 @@ /repl_gram.h /repl_gram.c /repl_scanner.c +/syncrep_gram.h /syncrep_gram.c /syncrep_scanner.c diff --git a/src/backend/replication/Makefile b/src/backend/replication/Makefile index bc8170418f..23f29ba545 100644 --- a/src/backend/replication/Makefile +++ b/src/backend/replication/Makefile @@ -21,6 +21,7 @@ OBJS = \ slotfuncs.o \ syncrep.o \ syncrep_gram.o \ + syncrep_scanner.o \ walreceiver.o \ walreceiverfuncs.o \ walsender.o @@ -38,8 +39,14 @@ repl_gram.c: BISONFLAGS += -d # Force these dependencies to be known even without dependency info built: repl_gram.o repl_scanner.o: repl_gram.h -# syncrep_scanner is compiled as part of syncrep_gram -syncrep_gram.o: syncrep_scanner.c +# See notes in src/backend/parser/Makefile about the following two rules +syncrep_gram.h: syncrep_gram.c + touch $@ + +syncrep_gram.c: BISONFLAGS += -d + +# Force these dependencies to be known even without dependency info built: +syncrep_gram.o syncrep_scanner.o: syncrep_gram.h # repl_gram.c, repl_scanner.c, syncrep_gram.c and syncrep_scanner.c # are in the distribution tarball, so they are not cleaned here. diff --git a/src/backend/replication/syncrep_gram.y b/src/backend/replication/syncrep_gram.y index d932f2cda3..4fc3647da1 100644 --- a/src/backend/replication/syncrep_gram.y +++ b/src/backend/replication/syncrep_gram.y @@ -112,5 +112,3 @@ create_syncrep_config(const char *num_sync, List *members, uint8 syncrep_method) return config; } - -#include "syncrep_scanner.c" diff --git a/src/backend/replication/syncrep_scanner.l b/src/backend/replication/syncrep_scanner.l index 1952c8c6e0..bdb1a3391c 100644 --- a/src/backend/replication/syncrep_scanner.l +++ b/src/backend/replication/syncrep_scanner.l @@ -1,4 +1,4 @@ -%{ +%top{ /*------------------------------------------------------------------------- * * syncrep_scanner.l @@ -17,6 +17,15 @@ #include "lib/stringinfo.h" +/* + * NB: include syncrep_gram.h only AFTER including syncrep.h, because syncrep.h + * includes node definitions needed for YYSTYPE. + */ +#include "replication/syncrep.h" +#include "syncrep_gram.h" +} + +%{ /* Avoid exit() on fatal scanner errors (a bit ugly -- see yy_fatal_error) */ #undef fprintf #define fprintf(file, fmt, msg) fprintf_to_ereport(fmt, msg) @@ -82,28 +91,28 @@ xdinside [^"]+ appendStringInfoString(&xdbuf, yytext); } {xdstop} { - yylval.str = xdbuf.data; + syncrep_yylval.str = xdbuf.data; xdbuf.data = NULL; BEGIN(INITIAL); return NAME; } <> { - yyerror("unterminated quoted identifier"); + syncrep_yyerror("unterminated quoted identifier"); return JUNK; } {identifier} { - yylval.str = pstrdup(yytext); + syncrep_yylval.str = pstrdup(yytext); return NAME; } {digit}+ { - yylval.str = pstrdup(yytext); + syncrep_yylval.str = pstrdup(yytext); return NUM; } "*" { - yylval.str = "*"; + syncrep_yylval.str = "*"; return NAME; } diff --git a/src/tools/pginclude/headerscheck b/src/tools/pginclude/headerscheck index 917ef29c15..1e953d503f 100755 --- a/src/tools/pginclude/headerscheck +++ b/src/tools/pginclude/headerscheck @@ -121,6 +121,7 @@ do test "$f" = src/backend/parser/gram.h && continue test "$f" = src/backend/bootstrap/bootparse.h && continue test "$f" = src/backend/replication/repl_gram.h && continue + test "$f" = src/backend/replication/syncrep_gram.h && continue test "$f" = src/pl/plpgsql/src/pl_gram.h && continue test "$f" = src/interfaces/ecpg/preproc/preproc.h && continue -- 2.36.1