From 5e45211a64149b3c659b90ff2de6fa982a5a93ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:17:33 +0200 Subject: Adding upstream version 15.5. Signed-off-by: Daniel Baumann --- src/tools/mark_pgdllimport.pl | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 src/tools/mark_pgdllimport.pl (limited to 'src/tools/mark_pgdllimport.pl') diff --git a/src/tools/mark_pgdllimport.pl b/src/tools/mark_pgdllimport.pl new file mode 100755 index 0000000..7b51ae3 --- /dev/null +++ b/src/tools/mark_pgdllimport.pl @@ -0,0 +1,78 @@ +#!/usr/bin/perl + +#---------------------------------------------------------------------- +# +# mark_pgdllimport.pl +# Perl script that tries to add PGDLLIMPORT markings to PostgreSQL +# header files. +# +# This relies on a few idiosyncracies of the PostgreSQL coding style, +# such as the fact that we always use "extern" in function +# declarations, and that we don't use // comments. It's not very +# smart and may not catch all cases. +# +# It's probably a good idea to run pgindent on any files that this +# script modifies before committing. This script uses as arguments +# a list of the header files to scan for the markings. +# +# Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/tools/mark_pgdllimport.pl +# +#---------------------------------------------------------------------- + +use strict; +use warnings; + +for my $include_file (@ARGV) +{ + open(my $rfh, '<', $include_file) || die "$include_file: $!"; + my $buffer = ''; + my $num_pgdllimport_added = 0; + + while (my $raw_line = <$rfh>) + { + my $needs_pgdllimport = 1; + + # By convention we declare global variables explicitly extern. We're + # looking for those not already marked with PGDLLIMPORT. + $needs_pgdllimport = 0 + if $raw_line !~ /^extern\s+/ + || $raw_line =~ /PGDLLIMPORT/; + + # Make a copy of the line and perform a simple-minded comment strip. + # Also strip trailing whitespace. + my $stripped_line = $raw_line; + $stripped_line =~ s/\/\*.*\*\///g; + $stripped_line =~ s/\s+$//; + + # Variable declarations should end in a semicolon. If we see an + # opening parenthesis, it's probably a function declaration. + $needs_pgdllimport = 0 + if $stripped_line !~ /;$/ + || $stripped_line =~ /\(/; + + # Add PGDLLIMPORT marker, if required. + if ($needs_pgdllimport) + { + $raw_line =~ s/^extern/extern PGDLLIMPORT/; + ++$num_pgdllimport_added; + } + + # Add line to buffer. + $buffer .= $raw_line; + } + + close($rfh); + + # If we added any PGDLLIMPORT markers, rewrite the file. + if ($num_pgdllimport_added > 0) + { + printf "%s: adding %d PGDLLIMPORT markers\n", + $include_file, $num_pgdllimport_added; + open(my $wfh, '>', $include_file) || die "$include_file: $!"; + print $wfh $buffer; + close($wfh); + } +} -- cgit v1.2.3