Hi, On Mon, Jun 05, 2023 at 09:47:30AM -0400, Evan Jones wrote: > This makes "make check" work on Mac OS X. Without this patch, on Mac OS X a > default "./configure; make; make check" fails with errors like: > > dyld[65265]: Library not loaded: /usr/local/pgsql/lib/libpq.5.dylib > Referenced from: <59A2EAF9-6298-3112-BEDB-EA9A62A9DB53> > /Users/evan.jones/postgresql-clean/tmp_install/usr/local/pgsql/bin/initdb > Reason: tried: '/usr/local/pgsql/lib/libpq.5.dylib' (no such file), > '/System/Volumes/Preboot/Cryptexes/OS/usr/local/pgsql/lib/libpq.5.dylib' > (no such file), '/usr/local/pgsql/lib/libpq.5.dylib' (no such file), > '/usr/local/lib/libpq.5.dylib' (no such file), '/usr/lib/libpq.5.dylib' (no > such file, not in dyld cache) > > The reason is that at some point, Mac OS X started removing the > DYLD_LIBRARY_PATH environment variable for "untrusted" executables [1]: > "Any dynamic linker (dyld) environment variables, such as > DYLD_LIBRARY_PATH, are purged when launching protected processes." > > [1] > https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/RuntimeProtections/RuntimeProtections.html > > One solution is to explicitly pass the DYLD_LIBRARY_PATH environment > variable to to the sub-process shell scripts that are run by pg_regress. To > do this, I created an extra_envvars global variable which is set to the > empty string "", but on Mac OS X, is filled in with "DYLD_LIBRARY_PATH=%s", > where the %s is the current environment variable. The "make check" Makefile > sets this environment variable to the temporary install directory, so this > fixes the above errors.
Note that this is a known issue and a workaround is documented in the macos specific notes at https://www.postgresql.org/docs/current/installation-platform-notes.html#INSTALLATION-NOTES-MACOS: > macOS's “System Integrity Protection” (SIP) feature breaks make check, > because it prevents passing the needed setting of DYLD_LIBRARY_PATH down to > the executables being tested. You can work around that by doing make install > before make check. Most PostgreSQL developers just turn off SIP, though.