diff options
author | John Naylor | 2022-09-04 04:33:31 +0000 |
---|---|---|
committer | John Naylor | 2022-09-04 05:09:01 +0000 |
commit | dac048f71ebbcf2f980d280711f8ff8001331c5d (patch) | |
tree | 48311f22d4636b6fb12cf2bb43925622521e758a /src/backend/bootstrap | |
parent | 80e8450a744b1f6fa75663f37f1db3388995dc67 (diff) |
Build all Flex files standalone
The proposed Meson build system will need a way to ignore certain
generated files in order to coexist with the autoconf build system,
and C files generated by Flex which are #include'd into .y files make
this more difficult. In similar vein to 72b1e3a21, arrange for all Flex
C files to compile to their own .o targets.
Reviewed by Andres Freund
Discussion: https://www.postgresql.org/message-id/20220810171935.7k5zgnjwqzalzmtm%40awork3.anarazel.de
Discussion: https://www.postgresql.org/message-id/CAFBsxsF8Gc2StS3haXofshHCzqNMRXiSxvQEYGwnFsTmsdwNeg@mail.gmail.com
Diffstat (limited to 'src/backend/bootstrap')
-rw-r--r-- | src/backend/bootstrap/.gitignore | 1 | ||||
-rw-r--r-- | src/backend/bootstrap/Makefile | 11 | ||||
-rw-r--r-- | src/backend/bootstrap/bootparse.y | 2 | ||||
-rw-r--r-- | src/backend/bootstrap/bootscanner.l | 60 |
4 files changed, 43 insertions, 31 deletions
diff --git a/src/backend/bootstrap/.gitignore b/src/backend/bootstrap/.gitignore index 1ffe8ca39ed..6351b920fd6 100644 --- a/src/backend/bootstrap/.gitignore +++ b/src/backend/bootstrap/.gitignore @@ -1,2 +1,3 @@ +/bootparse.h /bootparse.c /bootscanner.c diff --git a/src/backend/bootstrap/Makefile b/src/backend/bootstrap/Makefile index 6421efb2270..606c8021e76 100644 --- a/src/backend/bootstrap/Makefile +++ b/src/backend/bootstrap/Makefile @@ -14,12 +14,19 @@ override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) OBJS = \ bootparse.o \ + bootscanner.o \ bootstrap.o include $(top_srcdir)/src/backend/common.mk -# bootscanner is compiled as part of bootparse -bootparse.o: bootscanner.c +# See notes in src/backend/parser/Makefile about the following two rules +bootparse.h: bootparse.c + touch $@ + +bootparse.c: BISONFLAGS += -d + +# Force these dependencies to be known even without dependency info built: +bootparse.o bootscanner.o: bootparse.h # bootparse.c and bootscanner.c are in the distribution tarball, so # they are not cleaned here. diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y index 7d7655d2956..c45ddde67f2 100644 --- a/src/backend/bootstrap/bootparse.y +++ b/src/backend/bootstrap/bootparse.y @@ -488,5 +488,3 @@ boot_ident: | XNULL { $$ = pstrdup($1); } ; %% - -#include "bootscanner.c" diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l index 3094ccb93f4..d6eae84816b 100644 --- a/src/backend/bootstrap/bootscanner.l +++ b/src/backend/bootstrap/bootscanner.l @@ -1,4 +1,4 @@ -%{ +%top{ /*------------------------------------------------------------------------- * * bootscanner.l @@ -15,11 +15,17 @@ */ #include "postgres.h" +/* + * NB: include bootparse.h only AFTER including bootstrap.h, because bootstrap.h + * includes node definitions needed for YYSTYPE. + */ #include "bootstrap/bootstrap.h" +#include "bootparse.h" #include "utils/guc.h" -/* Not needed now that this file is compiled as part of bootparse. */ -/* #include "bootparse.h" */ +} + +%{ /* LCOV_EXCL_START */ @@ -52,7 +58,7 @@ id [-A-Za-z0-9_]+ sid \'([^']|\'\')*\' /* - * Keyword tokens return the keyword text (as a constant string) in yylval.kw, + * Keyword tokens return the keyword text (as a constant string) in boot_yylval.kw, * just in case that's needed because we want to treat the keyword as an * unreserved identifier. Note that _null_ is not treated as a keyword * for this purpose; it's the one "reserved word" in the bootstrap syntax. @@ -60,23 +66,23 @@ sid \'([^']|\'\')*\' * Notice that all the keywords are case-sensitive, and for historical * reasons some must be upper case. * - * String tokens return a palloc'd string in yylval.str. + * String tokens return a palloc'd string in boot_yylval.str. */ %% -open { yylval.kw = "open"; return OPEN; } +open { boot_yylval.kw = "open"; return OPEN; } -close { yylval.kw = "close"; return XCLOSE; } +close { boot_yylval.kw = "close"; return XCLOSE; } -create { yylval.kw = "create"; return XCREATE; } +create { boot_yylval.kw = "create"; return XCREATE; } -OID { yylval.kw = "OID"; return OBJ_ID; } -bootstrap { yylval.kw = "bootstrap"; return XBOOTSTRAP; } -shared_relation { yylval.kw = "shared_relation"; return XSHARED_RELATION; } -rowtype_oid { yylval.kw = "rowtype_oid"; return XROWTYPE_OID; } +OID { boot_yylval.kw = "OID"; return OBJ_ID; } +bootstrap { boot_yylval.kw = "bootstrap"; return XBOOTSTRAP; } +shared_relation { boot_yylval.kw = "shared_relation"; return XSHARED_RELATION; } +rowtype_oid { boot_yylval.kw = "rowtype_oid"; return XROWTYPE_OID; } -insert { yylval.kw = "insert"; return INSERT_TUPLE; } +insert { boot_yylval.kw = "insert"; return INSERT_TUPLE; } _null_ { return NULLVAL; } @@ -90,25 +96,25 @@ _null_ { return NULLVAL; } ^\#[^\n]* ; /* drop everything after "#" for comments */ -declare { yylval.kw = "declare"; return XDECLARE; } -build { yylval.kw = "build"; return XBUILD; } -indices { yylval.kw = "indices"; return INDICES; } -unique { yylval.kw = "unique"; return UNIQUE; } -index { yylval.kw = "index"; return INDEX; } -on { yylval.kw = "on"; return ON; } -using { yylval.kw = "using"; return USING; } -toast { yylval.kw = "toast"; return XTOAST; } -FORCE { yylval.kw = "FORCE"; return XFORCE; } -NOT { yylval.kw = "NOT"; return XNOT; } -NULL { yylval.kw = "NULL"; return XNULL; } +declare { boot_yylval.kw = "declare"; return XDECLARE; } +build { boot_yylval.kw = "build"; return XBUILD; } +indices { boot_yylval.kw = "indices"; return INDICES; } +unique { boot_yylval.kw = "unique"; return UNIQUE; } +index { boot_yylval.kw = "index"; return INDEX; } +on { boot_yylval.kw = "on"; return ON; } +using { boot_yylval.kw = "using"; return USING; } +toast { boot_yylval.kw = "toast"; return XTOAST; } +FORCE { boot_yylval.kw = "FORCE"; return XFORCE; } +NOT { boot_yylval.kw = "NOT"; return XNOT; } +NULL { boot_yylval.kw = "NULL"; return XNULL; } {id} { - yylval.str = pstrdup(yytext); + boot_yylval.str = pstrdup(yytext); return ID; } {sid} { /* strip quotes and escapes */ - yylval.str = DeescapeQuotedString(yytext); + boot_yylval.str = DeescapeQuotedString(yytext); return ID; } @@ -121,7 +127,7 @@ NULL { yylval.kw = "NULL"; return XNULL; } /* LCOV_EXCL_STOP */ void -yyerror(const char *message) +boot_yyerror(const char *message) { elog(ERROR, "%s at line %d", message, yyline); } |