v4-0006-Build-syncrep_scanner.c-standalone.patch
text/x-patch
Filename: v4-0006-Build-syncrep_scanner.c-standalone.patch
Type: text/x-patch
Part: 6
Patch
Format: format-patch
Series: patch v4-0006
Subject: Build syncrep_scanner.c standalone
| File | + | − |
|---|---|---|
| src/backend/Makefile | 2 | 1 |
| src/backend/replication/.gitignore | 1 | 0 |
| src/backend/replication/Makefile | 9 | 2 |
| src/backend/replication/syncrep_gram.y | 0 | 2 |
| src/backend/replication/syncrep_scanner.l | 15 | 6 |
| src/tools/pginclude/headerscheck | 1 | 0 |
From b8f2e6a055af9f2bffd2078364077fe6d2942e53 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@postgresql.org>
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);
}
<xd>{xdstop} {
- yylval.str = xdbuf.data;
+ syncrep_yylval.str = xdbuf.data;
xdbuf.data = NULL;
BEGIN(INITIAL);
return NAME;
}
<xd><<EOF>> {
- 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