This is a refreshed version of the patch to unify the exit() reference check performed during libpq builds. Earlier versions had duplicated logic between the Makefile and Meson builds, while platform-specific details were also split between comments and build rules.
Following feedback from Michael, Daniel, Tom, and Nazir, v4 includes the following changes:
Changes in v4
Added top-level AC_PATH_PROG(NM, nm) in configure.ac, and propagated it via NM, so both build systems use the same nm path.
Updated Makefile and Meson rules to invoke the new Perl helper using
- -nm=$(NM) / - -nm=@NM@
Centralized all platform-specific behavior in the Perl script:
Skip on Solaris and Windows
Handle ThreadSanitizer (__tsan_func_exit)
Handle OpenBSD’s __cxa_atexit
Whitelist pthread_exit()
Gracefully skip if nm is not available
Removed redundant checks from meson.build and Makefile and replaced them with a short reference to the script.
Added missing cleanup (closing filehandle), and improved comments.
Ensured consistent behavior across autoconf and Meson builds.
Testing:
Both autoconf and Meson builds were tested with:
Valid nm present
Missing nm
Solaris/Windows-skip behavior
Injected exit() symbol to confirm failure mode works correctly
The behavior is now uniform across build systems.
Patch is attached.
Thanks for the reviews so far, and I welcome further comments.
On Tue, Nov 25, 2025 at 11:51:55AM +0100, Daniel Gustafsson wrote: > +if find_program('nm', required: false, native: true).found() and not get_option('b_coverage') > Sorry for being late to the party, but I wonder why we aren't adding this check > to the toplevel meson.build and configure.ac (via config/programs.m4) like how > we check for all others tools used by the build? Such checks should of course > not fail the configuration, merely record the presence or absence of the tool. > The path can then be exported to src/interfaces/libpq/{Makefile|meson.build} to > use.
+1 for this find_program() call grouped at the top of meson.build, grouped with the others.