Re: Annoying build warnings from latest Apple toolchain - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Annoying build warnings from latest Apple toolchain
Date
Msg-id 20230928203213.47bn2pv45mkmxtz7@alap3.anarazel.de
Whole thread Raw
In response to Re: Annoying build warnings from latest Apple toolchain  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Annoying build warnings from latest Apple toolchain
List pgsql-hackers
Hi,

On 2023-09-27 16:52:44 -0400, Tom Lane wrote:
> I wrote:
> > I've not yet looked at the meson build infrastructure to
> > see if it needs a corresponding change.
>
> I think it doesn't, as long as all the relevant build targets
> write their dependencies with "frontend_code" before "libpq".

Hm, that's not great. I don't think that should be required. I'll try to take
a look at why that's needed.


> However, it's hard to test this, because the meson build
> seems completely broken on current macOS:

I am travelling and I don't quite dare to upgrade my mac mini remotely. So I
can't try Sonoma directly.

But CI worked after switching to sonoma - although installing packages from
macports took forever, due to macports building all packages locally.

https://cirrus-ci.com/task/5133869171605504

There's some weird warnings about hashlib/blake2, but it looks like that's a
python installation issue. Looks like this is with python from macports in
PATH.

[00:59:14.442] ERROR:root:code for hash blake2b was not found.
[00:59:14.442] Traceback (most recent call last):
[00:59:14.442]   File "/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/hashlib.py", line
307,in <module> 
[00:59:14.442]     globals()[__func_name] = __get_hash(__func_name)
[00:59:14.442]                              ^^^^^^^^^^^^^^^^^^^^^^^
[00:59:14.442]   File "/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/hashlib.py", line
129,in __get_openssl_constructor 
[00:59:14.442]     return __get_builtin_constructor(name)
[00:59:14.442]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[00:59:14.442]   File "/opt/local/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/hashlib.py", line
123,in __get_builtin_constructor 
[00:59:14.442]     raise ValueError('unsupported hash type ' + name)
[00:59:14.442] ValueError: unsupported hash type blake2b

This just happens whenever python's hashlib - supposedly in the standard
library - is imported.


There *are* some buildsystem warnings:
[00:59:27.289] [260/2328] Linking target src/interfaces/libpq/libpq.5.dylib
[00:59:27.289] ld: warning: -undefined error is deprecated
[00:59:27.289] ld: warning: ignoring -e, not used for output type

Full command:
[1/1] cc  -o src/interfaces/libpq/libpq.5.dylib src/interfaces/libpq/libpq.5.dylib.p/fe-auth-scram.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-auth.c.osrc/interfaces/libpq/libpq.5.dylib.p/fe-connect.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-exec.c.osrc/interfaces/libpq/libpq.5.dylib.p/fe-lobj.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-misc.c.osrc/interfaces/libpq/libpq.5.dylib.p/fe-print.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-protocol3.c.osrc/interfaces/libpq/libpq.5.dylib.p/fe-secure.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-trace.c.osrc/interfaces/libpq/libpq.5.dylib.p/legacy-pqsignal.c.o
src/interfaces/libpq/libpq.5.dylib.p/libpq-events.c.osrc/interfaces/libpq/libpq.5.dylib.p/pqexpbuffer.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-secure-common.c.osrc/interfaces/libpq/libpq.5.dylib.p/fe-secure-openssl.c.o
src/interfaces/libpq/libpq.5.dylib.p/fe-gssapi-common.c.osrc/interfaces/libpq/libpq.5.dylib.p/fe-secure-gssapi.c.o
-Wl,-dead_strip_dylibs-Wl,-headerpad_max_install_names -Wl,-undefined,error -shared -install_name @rpath/libpq.5.dylib
-compatibility_version5 -current_version 5.17 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.0.sdk -Og
-ggdb-Wl,-rpath,/opt/local/lib -Wl,-rpath,/opt/local/libexec/openssl3/lib src/common/libpgcommon_shlib.a
src/port/libpgport_shlib.a-exported_symbols_list=/Users/admin/pgsql/build/src/interfaces/libpq/exports.list -lm
/opt/local/lib/libintl.dylib/opt/local/lib/libgssapi_krb5.dylib /opt/local/lib/libldap.dylib
/opt/local/lib/liblber.dylib/opt/local/libexec/openssl3/lib/libssl.dylib
/opt/local/libexec/openssl3/lib/libcrypto.dylib/opt/local/lib/libz.dylib /opt/local/lib/libzstd.dylib 
ld: warning: -undefined error is deprecated
ld: warning: ignoring -e, not used for output type

So we need to make the addition of -Wl,-undefined,error conditional, that
should be easy enough. Although I'm a bit confused about this being
deprecated.

For the -e bit, this seems to do the trick:
@@ -224,7 +224,7 @@ elif host_system == 'darwin'
   library_path_var = 'DYLD_LIBRARY_PATH'

   export_file_format = 'darwin'
-  export_fmt = '-exported_symbols_list=@0@'
+  export_fmt = '-Wl,-exported_symbols_list,@0@'

   mod_link_args_fmt = ['-bundle_loader', '@0@']
   mod_link_with_dir = 'bindir'

It's quite annoying that apple is changing things option syntax.


> (I also tried with a more recent meson version, 1.1.1, with
> the same result.)

Looks like you need 1.2 for the new clang / ld output...  Apparently apple's
linker changed the format of its version output :/.

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: David Steele
Date:
Subject: Re: Requiring recovery.signal or standby.signal when recovering with a backup_label
Next
From: Tom Lane
Date:
Subject: Re: Annoying build warnings from latest Apple toolchain