apache / pulsar-client-python

Apache Pulsar Python client library
https://pulsar.apache.org/
Apache License 2.0
51 stars 39 forks source link

Fix the OpenSSL 3.x symbols not found on macOS build #145

Closed BewareMyPower closed 1 year ago

BewareMyPower commented 1 year ago

Motivation

Recently after the runner image was upgraded, the macOS build failed with symbol not found in flat namespace (_EVP_PKEY_get_bn_param).

See https://github.com/apache/pulsar-client-python/actions/runs/5805986979/job/15740588663?pr=134

There are actually two issues.

One is that when building the C++ client on macOS, /usr/local/opt/openssl/ will be firstly searched if OPENSSL_ROOT_DIR is not defined.

https://github.com/apache/pulsar-client-cpp/blob/1e7d259bb94379ef6e4618fdac283912d0be6861/CMakeLists.txt#L136

It should be fixed at the C++ client side but we can also have a workaround here by defining the OPENSSL_ROOT_DIR variable.

The other is that when building the libcurl, the headers from /usr/local/include/openssl/ were included, see the logs:

/usr/local/include/openssl/macros.h:193:49: note: expanded from macro 'OSSL_DEPRECATEDIN_3_0'
#   define OSSL_DEPRECATEDIN_3_0                OSSL_DEPRECATED(3.0)

It's a strange error because we have already configured the --with-ssl option to specify the OpenSSL directory. I tried adding -I/path/to/my/openssl to the CFLAGS env variable but it didn't work.

Modifications

To resolve the 1st issue, specifying OPENSSL_ROOT_DIR to the DEPS_PREFIX path when building the C++ client.

To resolve the 2nd issue, since I cannot find an elegant way to do that, I just copied the OpenSSL headers from the dependency header directory to the libcurl include directory.