Re: automatically generating node support functions - Mailing list pgsql-hackers

From Tom Lane
Subject Re: automatically generating node support functions
Date
Msg-id 243301.1659883752@sss.pgh.pa.us
Whole thread Raw
In response to Re: automatically generating node support functions  (Amit Kapila <amit.kapila16@gmail.com>)
Responses Re: automatically generating node support functions
List pgsql-hackers
Amit Kapila <amit.kapila16@gmail.com> writes:
> On Wed, Aug 3, 2022 at 7:16 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> More likely, we need to add something explicit to Mkvcbuild.pm
>> for this.  I recall that it has stanzas to deal with updating
>> other autogenerated files; I bet we either missed that or
>> fat-fingered it for node-support-stamp.

> I see below logic added by commit which seems to help regenerate the
> required files.

Meh ... it's not checking the data files themselves.  Here's
a patch based on the logic for invoking genbki.  Completely
untested, would somebody try it?

            regards, tom lane

diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index caacb965bb..40c962d43c 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -800,36 +800,29 @@ EOF
         close($chs);
     }

-    if (IsNewer(
-            'src/backend/nodes/node-support-stamp',
-            'src/backend/nodes/gen_node_support.pl'))
+    my $nmf = Project::read_file('src/backend/nodes/Makefile');
+    $nmf =~ s{\\\r?\n}{}g;
+    $nmf =~ /^node_headers\s*:?=(.*)$/gm
+      || croak "Could not find node_headers in Makefile\n";
+    my @node_headers = split /\s+/, $1;
+    my @node_files = map { "src/include/$_" } @node_headers;
+
+    my $need_node_support = 0;
+    foreach my $nodefile (@node_files)
     {
-        # XXX duplicates node_headers list in src/backend/nodes/Makefile
-        my @node_headers = qw(
-          nodes/nodes.h
-          nodes/primnodes.h
-          nodes/parsenodes.h
-          nodes/pathnodes.h
-          nodes/plannodes.h
-          nodes/execnodes.h
-          access/amapi.h
-          access/sdir.h
-          access/tableam.h
-          access/tsmapi.h
-          commands/event_trigger.h
-          commands/trigger.h
-          executor/tuptable.h
-          foreign/fdwapi.h
-          nodes/extensible.h
-          nodes/lockoptions.h
-          nodes/replnodes.h
-          nodes/supportnodes.h
-          nodes/value.h
-          utils/rel.h
-        );
-
-        my @node_files = map { "src/include/$_" } @node_headers;
+        if (IsNewer('src/backend/nodes/node-support-stamp', $nodefile))
+        {
+            $need_node_support = 1;
+            last;
+        }
+    }
+    $need_node_support = 1
+      if IsNewer(
+        'src/backend/nodes/node-support-stamp',
+        'src/backend/nodes/gen_node_support.pl');

+    if ($need_node_support)
+    {
         system("perl src/backend/nodes/gen_node_support.pl --outdir src/backend/nodes @node_files");
         open(my $f, '>', 'src/backend/nodes/node-support-stamp')
           || confess "Could not touch node-support-stamp";

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: bug on log generation ?
Next
From: Marcos Pegoraro
Date:
Subject: Re: bug on log generation ?