postgresql/src/tools/gen_export.pl

83 lines
1.4 KiB
Perl

# Copyright (c) 2024, PostgreSQL Global Development Group
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
my $format;
my $libname;
my $input;
my $output;
GetOptions(
'format:s' => \$format,
'libname:s' => \$libname,
'input:s' => \$input,
'output:s' => \$output) or die "wrong arguments";
if (not( $format eq 'darwin'
or $format eq 'gnu'
or $format eq 'win'))
{
die "$0: $format is not yet handled (only darwin, gnu, win are)\n";
}
open(my $input_handle, '<', $input)
or die "$0: could not open input file '$input': $!\n";
open(my $output_handle, '>', $output)
or die "$0: could not open output file '$output': $!\n";
if ($format eq 'gnu')
{
print $output_handle "{
global:
";
}
elsif ($format eq 'win')
{
# XXX: Looks like specifying LIBRARY $libname is optional, which makes it
# easier to build a generic command for generating export files...
if ($libname)
{
print $output_handle "LIBRARY $libname\n";
}
print $output_handle "EXPORTS\n";
}
while (<$input_handle>)
{
if (/^#/)
{
# don't do anything with a comment
}
elsif (/^(\S+)\s+(\S+)/)
{
if ($format eq 'darwin')
{
print $output_handle "_$1\n";
}
elsif ($format eq 'gnu')
{
print $output_handle " $1;\n";
}
elsif ($format eq 'win')
{
print $output_handle "$1 @ $2\n";
}
}
else
{
die "$0: unexpected line $_\n";
}
}
if ($format eq 'gnu')
{
print $output_handle " local: *;
};
";
}