On 04/02/2014 08:43 PM, Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>> BTW, three animals are currently trying to contribute typedefs but
>> aren't in fact contributing anything: okapi, dromedary and prairiedog.
>> See <http://www.pgbuildfarm.org/cgi-bin/typedefs.pl?show_list=1>
> Man, that's a short list. I wonder if we need to encourage more people
> to do this.
>
>> I can't really help much on these as my Gentoo facilities are
>> non-existent, and my OSX facilities are not much better. I do recall
>> trying to find a way to get typedefs on OSX a few years ago, without
>> success.
> I poked around a bit, and so far as I can tell, OS X does not store debug
> symbol tables in executables. It looks like gdb goes to the .o files when
> it wants debug info. What's in the .o files is good ol' DWARF (at least
> in reasonably recent OS X releases), so it's not any harder to pull out
> the typedef names than it is on Linux. The problem is that you gotta
> iterate over all the .o files in the build tree rather than the installed
> executables. I looked at fixing find_typedefs but it seems like it's
> pretty fixated on the latter approach; any thoughts on how to revise it?
>
>
Well, the reason it's that way is that that's the way it was done before
the buildfarm took over the task. But it's not holy writ. Doing
something else would be a SMOC.
Essentially, I think the part that would need to change is this:
foreach my $bin ( glob("$installdir/bin/*"), glob("$installdir/lib/*"),
glob("$installdir/lib/postgresql/*") )
For OSX we'd construct the list via File::Find to recurse through the
directories.
So, something like this:
my $using_osx = [some test for OSX]; my @testfiles; my $obj_wanted = sub { /^.*\.o\z/s &&
push(@testfiles,$File::Find::name); }; if ($using_osx) { File::Find::find($obj_wanted,$pgsql); } else
{ @testfiles = ( glob("$installdir/bin/*"), glob("$installdir/lib/*"),
glob("$installdir/lib/postgresql/*"); } foreach my $bin (@testfiles)
cheers
andrew