From 7054861f0fef88b76a10a1cad4db08abafde8721 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 19 Jan 2022 23:36:50 -0800
Subject: [PATCH v13 05/20] meson: prereq: Add src/tools/gen_export.pl

Currently the logic is all in src/Makefile.shlib. This adds a sketch of a
generation script that can be used from meson.

Author: Andres Freund <andres@anarazel.de>
Reviewed-By: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Discussion: https://postgr.es/m/7dae5979-c6c0-cec5-7a36-76a85aa8053d@enterprisedb.com
---
 src/tools/gen_export.pl | 81 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100644 src/tools/gen_export.pl

diff --git a/src/tools/gen_export.pl b/src/tools/gen_export.pl
new file mode 100644
index 00000000000..68b3ab86614
--- /dev/null
+++ b/src/tools/gen_export.pl
@@ -0,0 +1,81 @@
+use strict;
+use warnings;
+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 '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: *;
+};
+";
+}
-- 
2.37.3.542.gdd3f6c4cae

