diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile index 79ce0a532f..7450e191ee 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 4a7902e6bf..2c06609726 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 b8b1728df7..a9dd604534 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');