#!/usr/bin/perl # # Generate the errcodes.h header from errcodes.txt # Copyright (c) 2000-2023, PostgreSQL Global Development Group use strict; use warnings; use Getopt::Long; my $outfile = ''; GetOptions( 'outfile=s' => \$outfile) or die "$0: wrong arguments"; open my $errcodes, '<', $ARGV[0] or die "$0: could not open input file '$ARGV[0]': $!\n"; my $outfh; if ($outfile) { open $outfh, '>', $outfile or die "$0: could not open output file '$outfile': $!\n"; } else { $outfh = *STDOUT; } print $outfh "/* autogenerated from src/backend/utils/errcodes.txt, do not edit */\n"; print $outfh "/* there is deliberately not an #ifndef ERRCODES_H here */\n"; while (<$errcodes>) { chomp; # Skip comments next if /^#/; next if /^\s*$/; # Emit a comment for each section header if (/^Section:(.*)/) { my $header = $1; $header =~ s/^\s+//; print $outfh "\n/* $header */\n"; next; } die "unable to parse errcodes.txt" unless /^([^\s]{5})\s+[EWS]\s+([^\s]+)/; (my $sqlstate, my $errcode_macro) = ($1, $2); # Split the sqlstate letters $sqlstate = join ",", split "", $sqlstate; # And quote them $sqlstate =~ s/([^,])/'$1'/g; print $outfh "#define $errcode_macro MAKE_SQLSTATE($sqlstate)\n"; } close $errcodes; close $outfh if ($outfile);