postgresql/src/tools/gen_export.pl
Tom Lane 4a1b05caa5 Restore AIX support.
The concerns that led us to remove AIX support in commit 0b16bb877
have now been alleviated:

1. IBM has stepped forward to provide support, including buildfarm
animal(s).
2. AIX 7.2 and later seem to be fine with large pg_attribute_aligned
requirements.  Since 7.1 is now EOL anyway, we can just cease to
support it.
3. Tossing xlc support overboard seems okay as well.  It's a bit
sad to drop one of the few remaining non-gcc-alike compilers, but
working around xlc's bugs and idiosyncrasies doesn't seem justified
by the theoretical portability benefits.
4. Likewise, we can stop supporting 32-bit AIX builds.  This is
not so much about whether we could build such executables as that
they're too much of a pain to manage in the field, due to limited
address space available for dynamic library loading.
5. We hit on a way to manage catalog column alignment that doesn't
require continuing developer effort (see commit ecae09725).

Hence, this commit reverts 0b16bb877 and some follow-on commits
such as e6bb491bf, except for not putting back XLC support nor
the changes related to catalog column alignment.

Some other notable changes from the way things were in v16:

Prefer unnamed POSIX semaphores on AIX, rather than the default
choice of SysV semaphores.

Include /opt/freeware/lib in -Wl,-blibpath, even when it is not
mentioned anywhere in LDFLAGS.

Remove platform-specific adjustment of MEMSET_LOOP_LIMIT; maybe
that's still the right thing, but it really ought to be re-tested.

Silence compiler warnings related to getpeereid(), wcstombs_l(),
and PAM conversation procs.

Accept "libpythonXXX.a" as an okay name for the Python shared
library (but only on AIX!).

Author: Aditya Kamath <Aditya.Kamath1@ibm.com>
Author: Srirama Kucherlapati <sriram.rk@in.ibm.com>
Co-authored-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CY5PR11MB63928CC05906F27FB10D74D0FD322@CY5PR11MB6392.namprd11.prod.outlook.com
2026-02-23 13:34:22 -05:00

91 lines
1.6 KiB
Perl

# Copyright (c) 2024-2026, 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 'aix'
or $format eq 'darwin'
or $format eq 'gnu'
or $format eq 'win'))
{
die "$0: $format is not yet handled (only aix, 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 'aix')
{
print $output_handle "#!\n";
}
elsif ($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 'aix')
{
print $output_handle "$1\n";
}
elsif ($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: *;
};
";
}