Move genbki.pl's find_defined_symbol to Catalog.pm.
authorAndres Freund
Wed, 4 Oct 2017 07:11:36 +0000 (00:11 -0700)
committerAndres Freund
Wed, 4 Oct 2017 07:11:36 +0000 (00:11 -0700)
Will be used in Gen_fmgrtab.pl in a followup commit.

src/backend/catalog/Catalog.pm
src/backend/catalog/genbki.pl

index 7abfda3d3a465fcc22c5d70d045e6872a3c38bd8..54f83533b62cdb9632458c34cccbd2bf15d9ef77 100644 (file)
@@ -19,7 +19,7 @@ use warnings;
 require Exporter;
 our @ISA       = qw(Exporter);
 our @EXPORT    = ();
-our @EXPORT_OK = qw(Catalogs SplitDataLine RenameTempFile);
+our @EXPORT_OK = qw(Catalogs SplitDataLine RenameTempFile FindDefinedSymbol);
 
 # Call this function with an array of names of header files to parse.
 # Returns a nested data structure describing the data in the headers.
@@ -252,6 +252,39 @@ sub RenameTempFile
    rename($temp_name, $final_name) || die "rename: $temp_name: $!";
 }
 
+
+# Find a symbol defined in a particular header file and extract the value.
+#
+# The include path has to be passed as a reference to an array.
+sub FindDefinedSymbol
+{
+   my ($catalog_header, $include_path, $symbol) = @_;
+
+   for my $path (@$include_path)
+   {
+
+       # Make sure include path ends in a slash.
+       if (substr($path, -1) ne '/')
+       {
+           $path .= '/';
+       }
+       my $file = $path . $catalog_header;
+       next if !-f $file;
+       open(my $find_defined_symbol, '<', $file) || die "$file: $!";
+       while (<$find_defined_symbol>)
+       {
+           if (/^#define\s+\Q$symbol\E\s+(\S+)/)
+           {
+               return $1;
+           }
+       }
+       close $find_defined_symbol;
+       die "$file: no definition found for $symbol\n";
+   }
+   die "$catalog_header: not found in any include directory\n";
+}
+
+
 # verify the number of fields in the passed-in DATA line
 sub check_natts
 {
index 2eebb061b7cc8defe6a4efad35d740d71faf9a33..256a9c9c931f1c4a6f20158c3a04dfc7eeb4b919 100644 (file)
@@ -87,9 +87,11 @@ open my $shdescr, '>', $shdescrfile . $tmpext
 # NB: make sure that the files used here are known to be part of the .bki
 # file's dependencies by src/backend/catalog/Makefile.
 my $BOOTSTRAP_SUPERUSERID =
-  find_defined_symbol('pg_authid.h', 'BOOTSTRAP_SUPERUSERID');
+  Catalog::FindDefinedSymbol('pg_authid.h', \@include_path,
+                            'BOOTSTRAP_SUPERUSERID');
 my $PG_CATALOG_NAMESPACE =
-  find_defined_symbol('pg_namespace.h', 'PG_CATALOG_NAMESPACE');
+  Catalog::FindDefinedSymbol('pg_namespace.h', \@include_path,
+                            'PG_CATALOG_NAMESPACE');
 
 # Read all the input header files into internal data structures
 my $catalogs = Catalog::Catalogs(@input_files);
@@ -500,34 +502,6 @@ sub emit_schemapg_row
    return $row;
 }
 
-# Find a symbol defined in a particular header file and extract the value.
-sub find_defined_symbol
-{
-   my ($catalog_header, $symbol) = @_;
-   for my $path (@include_path)
-   {
-
-       # Make sure include path ends in a slash.
-       if (substr($path, -1) ne '/')
-       {
-           $path .= '/';
-       }
-       my $file = $path . $catalog_header;
-       next if !-f $file;
-       open(my $find_defined_symbol, '<', $file) || die "$file: $!";
-       while (<$find_defined_symbol>)
-       {
-           if (/^#define\s+\Q$symbol\E\s+(\S+)/)
-           {
-               return $1;
-           }
-       }
-       close $find_defined_symbol;
-       die "$file: no definition found for $symbol\n";
-   }
-   die "$catalog_header: not found in any include directory\n";
-}
-
 sub usage
 {
    die <