I wrote:
> every buildfarm member that's contributing to the typedefs list
> builds with OpenSSL.  That wouldn't surprise me, except that
> my own animal sifaka should be filling that gap.  Looking at
> its latest attempt[1], it seems to be generating an empty list,
> which I guess means that our recipe for extracting typedefs
> doesn't work on macOS/arm64.  I shall investigate.

Found it.  Current macOS produces

$ objdump -W
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump:
 error: unknown argument '-W'

where last year's vintage produced

$ objdump -W
objdump: Unknown command line argument '-W'.  Try: 
'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump
 --help'
objdump: Did you mean '-C'?

This confuses run_build.pl into taking the "Linux and sometimes windows"
code path instead of the $using_osx one.  I think simplest fix is to
move the $using_osx branch ahead of the heuristic ones, as attached.

                        regards, tom lane

--- run_build.pl.orig	2022-01-29 10:18:03.000000000 -0500
+++ run_build.pl	2022-05-12 16:59:58.000000000 -0400
@@ -2163,7 +2163,32 @@ sub find_typedefs
 		next if $bin =~ m!bin/(ipcclean|pltcl_)!;
 		next unless -f $bin;
 		next if -l $bin;    # ignore symlinks to plain files (e.g. postmaster)
-		if (@err == 1)      # Linux and sometimes windows
+		if ($using_osx)
+		{
+			# no run_log due to redirections.
+			@dumpout =
+			  `dwarfdump $bin 2>/dev/null | egrep -A2 TAG_typedef 2>/dev/null`;
+			foreach (@dumpout)
+			{
+				## no critic (RegularExpressions::ProhibitCaptureWithoutTest)
+				@flds = split;
+				if (@flds == 3)
+				{
+					# old format
+					next unless ($flds[0] eq "AT_name(");
+					next unless ($flds[1] =~ m/^"(.*)"$/);
+					$syms{$1} = 1;
+				}
+				elsif (@flds == 2)
+				{
+					# new format
+					next unless ($flds[0] eq "DW_AT_name");
+					next unless ($flds[1] =~ m/^\("(.*)"\)$/);
+					$syms{$1} = 1;
+				}
+			}
+		}
+		elsif (@err == 1)      # Linux and sometimes windows
 		{
 			my $cmd = "$objdump -Wi $bin 2>/dev/null | "
 			  . "egrep -A3 DW_TAG_typedef 2>/dev/null";
@@ -2194,31 +2219,6 @@ sub find_typedefs
 				$syms{ $flds[-1] } = 1;
 			}
 		}
-		elsif ($using_osx)
-		{
-			# no run_log due to redirections.
-			@dumpout =
-			  `dwarfdump $bin 2>/dev/null | egrep -A2 TAG_typedef 2>/dev/null`;
-			foreach (@dumpout)
-			{
-				## no critic (RegularExpressions::ProhibitCaptureWithoutTest)
-				@flds = split;
-				if (@flds == 3)
-				{
-					# old format
-					next unless ($flds[0] eq "AT_name(");
-					next unless ($flds[1] =~ m/^"(.*)"$/);
-					$syms{$1} = 1;
-				}
-				elsif (@flds == 2)
-				{
-					# new format
-					next unless ($flds[0] eq "DW_AT_name");
-					next unless ($flds[1] =~ m/^\("(.*)"\)$/);
-					$syms{$1} = 1;
-				}
-			}
-		}
 		else
 		{
 			# no run_log due to redirections.

Reply via email to