Opened 6 months ago

Closed 6 months ago

#65624 closed defect (fixed)

davix: builds fail for multiple macOS releases: undefined symbols during link, originating from libcurl.a

Reported by: mascguy (Christopher Nielsen) Owned by: cjones051073 (Chris Jones)
Priority: Normal Milestone:
Component: ports Version: 2.7.2
Keywords: Cc:
Port: davix root6

Description

While the undefined symbols differ between macOS releases, they seem to consistently originate from libcurl.a:

For 10.12:

Undefined symbols for architecture x86_64:
  "_SSLCopyALPNProtocols", referenced from:
      _sectransp_connect_step2 in libcurl.a(sectransp.c.o)
  "_SSLSetALPNProtocols", referenced from:
      _sectransp_connect_step1 in libcurl.a(sectransp.c.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/libdavix.0.8.2.dylib] Error 1

For 10.8:

Undefined symbols for architecture x86_64:
  "___sincos_stret", referenced from:
      ___sincos in libcurl.a(sectransp.c.o)
  "___sincosf_stret", referenced from:
      ___sincosf in libcurl.a(sectransp.c.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/libdavix.0.8.2.dylib] Error 1

For 10.7:

Undefined symbols for architecture x86_64:
  "_SSLCreateContext", referenced from:
      _Curl_sectransp_close in libcurl.a(sectransp.c.o)
      _sectransp_connect_step1 in libcurl.a(sectransp.c.o)
  "_SSLSetProtocolVersionMax", referenced from:
      _sectransp_connect_step1 in libcurl.a(sectransp.c.o)
      _set_ssl_version_min_max in libcurl.a(sectransp.c.o)
  "_SSLSetProtocolVersionMin", referenced from:
      _sectransp_connect_step1 in libcurl.a(sectransp.c.o)
      _set_ssl_version_min_max in libcurl.a(sectransp.c.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/libdavix.0.8.2.dylib] Error 1

https://ports.macports.org/port/davix/details/

Change History (7)

comment:1 Changed 6 months ago by mascguy (Christopher Nielsen)

Summary: davix: builds fail for multiple macOS releases: undefined symbols during linkdavix: builds fail for multiple macOS releases: undefined symbols during link, originating from libcurl.a

comment:2 Changed 6 months ago by mascguy (Christopher Nielsen)

Port: root6 added

Thankfully root6 is the sole dependent. Nonetheless, this is blocking builds for that port.

comment:3 Changed 6 months ago by cjones051073 (Chris Jones)

The issue appears to be davix uses its own internal libcurl build

https://build.macports.org/builders/ports-10.12_x86_64-builder/builds/194726/steps/install-port/logs/stdio

cd /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_davix/davix/work/build/src && /opt/local/bin/cmake -E cmake_link_script CMakeFiles/libdavix.dir/link.txt --verbose=ON
/usr/bin/clang++ -pipe -I/opt/local/libexec/openssl3/include -Os -DNDEBUG -I/opt/local/libexec/openssl3/include -isystem/opt/local/include/LegacySupport -isystem/opt/local/include -stdlib=libc++ -std=c++0x -arch x86_64 -mmacosx-version-min=10.12 -dynamiclib -Wl,-headerpad_max_install_names -L/opt/local/libexec/openssl3/lib -Wl,-headerpad_max_install_names -L/opt/local/lib -lMacportsLegacySupport -current_version 0.8.2 -o libdavix.0.8.2.dylib -install_name /opt/local/lib/libdavix.0.dylib CMakeFiles/libdavix.dir/auth/davix_openssl.cpp.o CMakeFiles/libdavix.dir/auth/davixauth.cpp.o CMakeFiles/libdavix.dir/auth/davixx509cred.cpp.o CMakeFiles/libdavix.dir/backend/BackendRequest.cpp.o CMakeFiles/libdavix.dir/backend/SessionFactory.cpp.o CMakeFiles/libdavix.dir/backend/StandaloneNeonRequest.cpp.o CMakeFiles/libdavix.dir/core/ContentProvider.cpp.o CMakeFiles/libdavix.dir/core/RedirectionResolver.cpp.o CMakeFiles/libdavix.dir/curl/CurlSession.cpp.o CMakeFiles/libdavix.dir/curl/CurlSessionFactory.cpp.o CMakeFiles/libdavix.dir/curl/HeaderlineParser.cpp.o CMakeFiles/libdavix.dir/curl/ResponseBuffer.cpp.o CMakeFiles/libdavix.dir/curl/StandaloneCurlRequest.cpp.o CMakeFiles/libdavix.dir/deprecated/httpcachetoken.cpp.o CMakeFiles/libdavix.dir/file/davfile.cpp.o CMakeFiles/libdavix.dir/file/davposix.cpp.o CMakeFiles/libdavix.dir/fileops/AzureIO.cpp.o CMakeFiles/libdavix.dir/fileops/chain_factory.cpp.o CMakeFiles/libdavix.dir/fileops/davix_reliability_ops.cpp.o CMakeFiles/libdavix.dir/fileops/davmeta.cpp.o CMakeFiles/libdavix.dir/fileops/fileutils.cpp.o CMakeFiles/libdavix.dir/fileops/httpiochain.cpp.o CMakeFiles/libdavix.dir/fileops/httpiovec.cpp.o CMakeFiles/libdavix.dir/fileops/iobuffmap.cpp.o CMakeFiles/libdavix.dir/fileops/S3IO.cpp.o CMakeFiles/libdavix.dir/fileops/SwiftIO.cpp.o CMakeFiles/libdavix.dir/hooks/davix_hooks.cpp.o CMakeFiles/libdavix.dir/libs/alibxx/chrono/timepoint.cpp.o CMakeFiles/libdavix.dir/libs/alibxx/crypto/base64.cpp.o CMakeFiles/libdavix.dir/libs/alibxx/crypto/hmacsha.cpp.o CMakeFiles/libdavix.dir/libs/alibxx/str/format.cpp.o CMakeFiles/libdavix.dir/libs/datetime/datetime_utils.cpp.o CMakeFiles/libdavix.dir/modules/modules_profiles.cpp.o CMakeFiles/libdavix.dir/neon/neonrequest.cpp.o CMakeFiles/libdavix.dir/neon/neonsession.cpp.o CMakeFiles/libdavix.dir/neon/neonsessionfactory.cpp.o CMakeFiles/libdavix.dir/params/davixrequestparams.cpp.o CMakeFiles/libdavix.dir/request/httprequest.cpp.o CMakeFiles/libdavix.dir/status/DavixStatus.cpp.o CMakeFiles/libdavix.dir/status/davixstatusrequest.cpp.o CMakeFiles/libdavix.dir/utils/checksum_extractor.cpp.o CMakeFiles/libdavix.dir/utils/CompatibilityHacks.cpp.o CMakeFiles/libdavix.dir/utils/davix_azure_utils.cpp.o CMakeFiles/libdavix.dir/utils/davix_gcloud_utils.cpp.o CMakeFiles/libdavix.dir/utils/davix_logger.cpp.o CMakeFiles/libdavix.dir/utils/davix_misc_utils.cpp.o CMakeFiles/libdavix.dir/utils/davix_s3_utils.cpp.o CMakeFiles/libdavix.dir/utils/davix_swift_utils.cpp.o CMakeFiles/libdavix.dir/utils/simple_get_pass.cpp.o CMakeFiles/libdavix.dir/utils/stringutils.cpp.o CMakeFiles/libdavix.dir/utils/davixuri.cpp.o CMakeFiles/libdavix.dir/xml/azurepropparser.cpp.o CMakeFiles/libdavix.dir/xml/davdeletexmlparser.cpp.o CMakeFiles/libdavix.dir/xml/davix_ptree.cpp.o CMakeFiles/libdavix.dir/xml/davpropxmlparser.cpp.o CMakeFiles/libdavix.dir/xml/davxmlparser.cpp.o CMakeFiles/libdavix.dir/xml/metalinkparser.cpp.o CMakeFiles/libdavix.dir/xml/s3deleteparser.cpp.o CMakeFiles/libdavix.dir/xml/S3MultiPartInitiationParser.cpp.o CMakeFiles/libdavix.dir/xml/s3propparser.cpp.o CMakeFiles/libdavix.dir/xml/swiftpropparser.cpp.o CMakeFiles/libdavix.dir/davixcontext.cpp.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_207.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_acl3744.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_alloc.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_auth.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_basic.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_compress.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_dates.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_i18n.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_locks.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_md5.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_ntlm.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_oldacl.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_pkcs11.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_props.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_redirect.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_request.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_session.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_socket.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_socks.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_sspi.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_string.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_uri.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_utils.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_xml.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_xmlreq.c.o ../deps/libneon/CMakeFiles/LibNeonObjects.dir/src/ne_openssl.c.o  -Wl,-rpath,/opt/local/lib ../deps/curl-install/usr/lib/libcurl.a /opt/local/libexec/openssl3/lib/libssl.dylib /opt/local/libexec/openssl3/lib/libcrypto.dylib /opt/local/lib/libxml2.dylib -lz -framework CoreFoundation -framework Security 

see the ./deps/curl-install/usr/lib/libcurl.a bit in the above.

A quick look at the configure options does not show a way to use an external libcurl, just options to enable/disable it. So perhaps this is the way forward on the very old systems.

On 10.12, going to see if extending the compiler blackist, as used on 10.11 and older at the moment helps first.

Last edited 6 months ago by cjones051073 (Chris Jones) (previous) (diff)

comment:4 Changed 6 months ago by ryandesign (Ryan Schmidt)

Instead, please try patching davix to use MacPorts curl, per the changes posted at https://github.com/cern-fts/davix/issues/77, and if that works, or if further changes are necessary, leave comments there and encourage the developer to offer this option without patching.

comment:5 Changed 6 months ago by Chris Jones <jonesc@…>

In 1942a77361ff972b667fc84afc6c40296db99268/macports-ports (master):

davix: Use MacPorts libcurl instead of internal build.
Switch back to openssl 3
See: #65624

comment:6 Changed 6 months ago by cjones051073 (Chris Jones)

thanks for that pointer. Turns out I didn't check the davie configuration well enough and indeed there is already the make option to disable the internal lib curl build, and thus use an external source. Lets see if the above now helps on older systems (worked just fine here on macOS12).

comment:7 Changed 6 months ago by cjones051073 (Chris Jones)

Resolution: fixed
Status: assignedclosed

seems to have done the trick.

Note: See TracTickets for help on using tickets.