Comments

edited

We get this in most travis builds on mac now built to use darwinssl. Like here. @nickzman explained the reason here and I'm pasting it here since that was in an unrelated issue.

What's happening is SSLCopyALPNProtocols() and SSLSetALPNProtocols() are defined in the Secure Transport headers, but Apple did not actually implement the functions in the Security framework until macOS 10.13.4 (which is Darwin 7.5.0), and this particular computer is using a pre-.4 point release of macOS 10.13.

Those functions are behind __builtin_available(), so they won't be executed if the user is using an older OS than 10.13.4. But the SecureTransport.h header incorrectly specifies that the function became available in 10.13.0, so I think the linker is trying to hard-link to the function, and that would explain the undefined symbols error you are seeing.

Upgrading the OS on Travis' side would solve the problem. You could also solve it by using the -mmacosx-version-min compiler flag set to 10.12 or earlier to force it to weak-link the symbol. I would recommend you just upgrade the OS, since stock 10.13 had a catastrophic security hole you may have heard about, and there have been other security holes patched as well.

This comment has been minimized.

Well, I thought that would work, but I guess it's dead-set on believing the symbol is there when it's not...

There are only two other things: you can force Travis to build against 10.12 or earlier, or you can ask them to upgrade their build computers to the latest 10.13 patch level. They really shouldn't be running any version of 10.13 older than the latest patch level. Versions .0 and .1 had a catastrophic, trivial-to-exploit security hole known on the 'net as "I Am Root." The others had less serious security issues as well. And they're going to need at least .4 before those ALPN symbols will be properly defined.