aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-07-11 13:38:40 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2022-07-11 13:38:47 -0400
commitbf022d337ef096c79e6a0b51f0b42e69749ae210 (patch)
treebb6afd166420f5cc32ded34a8751d69143ba3901
parentb2d5b4c6e09b2a505ced098d2cb1e7b015bfc50d (diff)
downloadpostgresql-bf022d337ef096c79e6a0b51f0b42e69749ae210.tar.gz
postgresql-bf022d337ef096c79e6a0b51f0b42e69749ae210.zip
Rationalize order of input files for gen_node_support.pl.
Per a question from Andres Freund. While here, also make the list of nodetag-only files easier to compare to the full list of input files. Discussion: https://postgr.es/m/20220710214622.haiektrjzisob6rl@awork3.anarazel.de
-rw-r--r--src/backend/nodes/Makefile28
-rw-r--r--src/backend/nodes/gen_node_support.pl27
-rw-r--r--src/tools/msvc/Solution.pm27
3 files changed, 50 insertions, 32 deletions
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 79ce0a532fe..7450e191ee2 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -33,27 +33,31 @@ OBJS = \
include $(top_srcdir)/src/backend/common.mk
+# The principal node-defining headers are listed in their inclusion order,
+# to ensure cross-file subtyping works correctly. The rest can just be
+# listed alphabetically.
+# Caution: re-ordering this list risks ABI breakage!
node_headers = \
nodes/nodes.h \
- nodes/execnodes.h \
- nodes/plannodes.h \
nodes/primnodes.h \
- nodes/pathnodes.h \
- nodes/extensible.h \
nodes/parsenodes.h \
- nodes/replnodes.h \
- nodes/value.h \
- commands/trigger.h \
- commands/event_trigger.h \
- foreign/fdwapi.h \
+ nodes/pathnodes.h \
+ nodes/plannodes.h \
+ nodes/execnodes.h \
access/amapi.h \
+ access/sdir.h \
access/tableam.h \
access/tsmapi.h \
- utils/rel.h \
- nodes/supportnodes.h \
+ commands/event_trigger.h \
+ commands/trigger.h \
executor/tuptable.h \
+ foreign/fdwapi.h \
+ nodes/extensible.h \
nodes/lockoptions.h \
- access/sdir.h
+ nodes/replnodes.h \
+ nodes/supportnodes.h \
+ nodes/value.h \
+ utils/rel.h
# see also catalog/Makefile for an explanation of these make rules
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 4a7902e6bfb..2c06609726f 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -95,6 +95,22 @@ push @scalar_types, qw(EquivalenceClass* EquivalenceMember*);
# currently not required.
push @scalar_types, qw(QualCost);
+# Nodes from these input files don't need support functions, just node tags.
+my @nodetag_only_files = qw(
+ 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/lockoptions.h
+ nodes/replnodes.h
+ nodes/supportnodes.h
+);
+
# XXX various things we are not publishing right now to stay level
# with the manual system
push @no_copy, qw(CallContext InlineCodeBlock);
@@ -133,6 +149,9 @@ foreach my $infile (@ARGV)
open my $ifh, '<', $infile or die "could not open \"$infile\": $!";
+ # now shorten filename for use below
+ $infile =~ s!.*src/include/!!;
+
my $raw_file_content = do { local $/; <$ifh> };
# strip C comments, preserving newlines so we can count lines correctly
@@ -295,12 +314,8 @@ foreach my $infile (@ARGV)
$node_type_info{$in_struct}->{field_types} = \%ft;
$node_type_info{$in_struct}->{field_attrs} = \%fa;
- # Nodes from these files don't need support functions,
- # just node tags.
- if (elem basename($infile),
- qw(execnodes.h trigger.h event_trigger.h amapi.h tableam.h
- tsmapi.h fdwapi.h tuptable.h replnodes.h supportnodes.h)
- )
+ # Exclude nodes in nodetag_only_files from support.
+ if (elem $infile, @nodetag_only_files)
{
push @no_copy, $in_struct;
push @no_equal, $in_struct;
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index b8b1728df7f..a9dd6045344 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -843,29 +843,28 @@ EOF
'src/backend/nodes/node-support-stamp',
'src/backend/nodes/gen_node_support.pl'))
{
- # XXX duplicates src/backend/nodes/Makefile
-
+ # XXX duplicates node_headers list in src/backend/nodes/Makefile
my @node_headers = qw(
nodes/nodes.h
- nodes/execnodes.h
- nodes/plannodes.h
nodes/primnodes.h
- nodes/pathnodes.h
- nodes/extensible.h
nodes/parsenodes.h
- nodes/replnodes.h
- nodes/value.h
- commands/trigger.h
- commands/event_trigger.h
- foreign/fdwapi.h
+ nodes/pathnodes.h
+ nodes/plannodes.h
+ nodes/execnodes.h
access/amapi.h
+ access/sdir.h
access/tableam.h
access/tsmapi.h
- utils/rel.h
- nodes/supportnodes.h
+ commands/event_trigger.h
+ commands/trigger.h
executor/tuptable.h
+ foreign/fdwapi.h
+ nodes/extensible.h
nodes/lockoptions.h
- access/sdir.h
+ nodes/replnodes.h
+ nodes/supportnodes.h
+ nodes/value.h
+ utils/rel.h
);
chdir('src/backend/nodes');