Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix MSVC build script's check for obsolete node support functions.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 8 Aug 2022 18:43:35 +0000 (14:43 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 8 Aug 2022 18:43:35 +0000 (14:43 -0400)
Commit 964d01ae9 was a few bricks shy of a load here: the script
checked whether gen_node_support.pl itself had been updated since it
was last run, but not whether any of its input files had been updated.
Fix that.  While here, scrape the list of input files from the
Makefiles rather than having a duplicate copy, as we do for most
other lists of source files.

In passing, improve gen_node_support.pl's error report for an
incorrect file list.

Per gripe from Amit Kapila.

Discussion: https://postgr.es/m/CAA4eK1KQk4vP-3mTAz26h-PRUZaGu8Fc=q-ZKSajsAthH0A15w@mail.gmail.com

src/backend/nodes/gen_node_support.pl
src/tools/msvc/Solution.pm

index 86cf1b39d07a2f8f6a7d191d1091b6278159ad51..b707a09f565b1a15b6fcf261dcf1936da2cae4d0 100644 (file)
@@ -174,7 +174,7 @@ push @scalar_types, qw(QualCost);
 
 
 ## check that we have the expected number of files on the command line
-die "wrong number of input files, expected @all_input_files\n"
+die "wrong number of input files, expected:\n@all_input_files\ngot:\n@ARGV\n"
   if ($#ARGV != $#all_input_files);
 
 ## read input
index 383b8a7c629bca2c8d10e9973cbdb44723c1c807..cc82668457ff0410f8cf6007450f652021683354 100644 (file)
@@ -797,36 +797,30 @@ 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;
+   @node_headers = grep { $_ ne '' } @node_headers;
+   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";