Re: build remaining Flex files standalone - Mailing list pgsql-hackers
From | Andres Freund |
---|---|
Subject | Re: build remaining Flex files standalone |
Date | |
Msg-id | 20220817011431.ea2owxl4abb5zzor@awork3.anarazel.de Whole thread Raw |
In response to | Re: build remaining Flex files standalone (John Naylor <john.naylor@enterprisedb.com>) |
Responses |
Re: build remaining Flex files standalone
Re: build remaining Flex files standalone Re: build remaining Flex files standalone |
List | pgsql-hackers |
Hi, On 2022-08-16 17:41:43 +0700, John Naylor wrote: > For v3, I addressed some comments and added .h files to the > headerscheck exceptions. Thanks! > /* > * NB: include bootparse.h only AFTER including bootstrap.h, because bootstrap.h > * includes node definitions needed for YYSTYPE. > */ > > Future cleanup: I see this in headerscheck: > > # We can't make these Bison output files compilable standalone > # without using "%code require", which old Bison versions lack. > # parser/gram.h will be included by parser/gramparse.h anyway. > > That directive has been supported in Bison since 2.4.2. 2.4.2 is from 2010. So I think we could just start relying on it? > > > +/* functions shared between guc.c and guc-file.l */ > > > [...] > > I think I prefer your suggestion of a guc_internal.h upthread. > > Started in 0002, but left open the headerscheck failure. > > Also, if such a thing is meant to be #include'd only by two generated > files, maybe it should just live in the directory where they live, and > not in the src/include dir? It's not something we've done for the backend afaics, but I don't see a reason not to start at some point. > > > From 7d4ecfcb3e91f3b45e94b9e64c7c40f1bbd22aa8 Mon Sep 17 00:00:00 2001 > > > From: John Naylor <john.naylor@postgresql.org> > > > Date: Fri, 12 Aug 2022 15:45:24 +0700 > > > Subject: [PATCH v201 2/9] Build booscanner.c standalone > > > > > -# 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 bootscan.o: bootparse.h > > > > Wonder if we could / should wrap this is something common. It's somewhat > > annoying to repeat this stuff everywhere. > > I haven't looked at the Meson effort recently, but if the build rule > is less annoying there, I'm inclined to leave this as a wart until > autotools are retired. The only complicating thing in the rules there is the dependencies from one .c file to another .c file. > > > diff --git a/contrib/cube/cubedata.h b/contrib/cube/cubedata.h > > > index dbe7d4f742..0b373048b5 100644 > > > --- a/contrib/cube/cubedata.h > > > +++ b/contrib/cube/cubedata.h > > > @@ -67,3 +67,7 @@ extern void cube_scanner_finish(void); > > > > > > /* in cubeparse.y */ > > > extern int cube_yyparse(NDBOX **result); > > > + > > > +/* All grammar constructs return strings */ > > > +#define YYSTYPE char * > > > > Why does this need to be defined in a semi-public header? If we do this in > > multiple files we'll end up with the danger of macro redefinition warnings. > > I tried to put all the Flex/Bison stuff in another *_internal header, > but that breaks the build. Putting just this one symbol in a header is > silly, but done that way for now. Maybe two copies of the symbol? The problem is that if it's in a header you can't include another header with such a define. That's fine if it's a .h that's just intended to be included by a limited set of files, but for something like a header for a datatype that might need to be included to e.g. define a PL transform or a new operator or ... This would be solved by the %code requires thing, right? Greetings, Andres Freund
pgsql-hackers by date: