Problem
When ICEBERG_S3=ON with vendored Arrow (the default), arrow_bundled_dependencies contains AWS SDK C libraries (aws-c-common, aws-c-io, etc.) that depend on platform system libraries. The installed iceberg-config.cmake creates the Arrow::arrow_bundled_dependencies IMPORTED STATIC target but doesn't declare these transitive dependencies, causing unresolved symbol errors at link time.
Consumers using iceberg-cpp as a statically-linked library via find_package(iceberg CONFIG) with S3 support enabled hit linker failures on macOS (and likely Windows).
Error
On macOS (arm64), linking produces hundreds of undefined symbols from Apple's Network, Security, and CoreFoundation frameworks:
Undefined symbols for architecture arm64:
"_CFRelease", referenced from:
... in libarrow_bundled_dependencies.a(...)
"_CFRetain", referenced from:
... in libarrow_bundled_dependencies.a(...)
"_nw_connection_cancel", referenced from:
_s_socket_close_fn in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
"_nw_connection_create", referenced from:
_s_socket_connect_fn in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
"_nw_connection_send", referenced from:
_s_socket_write_fn in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
"_sec_identity_create", referenced from:
_s_aws_secitem_get_identity in libarrow_bundled_dependencies.a[287](darwin_pki_utils.c.o)
"_sec_protocol_options_set_min_tls_protocol_version", referenced from:
_s_setup_tls_options in libarrow_bundled_dependencies.a[289](nw_socket.c.o)
... (30+ more _nw_*, _sec_*, _CF* symbols)
ld: symbol(s) not found for architecture arm64
Root cause
Arrow's own ArrowConfig.cmake.in handles this by checking "aws-c-common" IN_LIST ARROW_BUNDLED_STATIC_LIBS and adding find_library + target_link_libraries(INTERFACE) for the platform frameworks. iceberg-cpp's iceberg-config.cmake.in does not replicate this, so the transitive platform deps are lost.
Expected platform dependencies:
- macOS: CoreFoundation, Security, Network, SystemConfiguration
- Windows: winhttp, bcrypt, userenv, etc.
Problem
When
ICEBERG_S3=ONwith vendored Arrow (the default),arrow_bundled_dependenciescontains AWS SDK C libraries (aws-c-common,aws-c-io, etc.) that depend on platform system libraries. The installediceberg-config.cmakecreates theArrow::arrow_bundled_dependenciesIMPORTED STATIC target but doesn't declare these transitive dependencies, causing unresolved symbol errors at link time.Consumers using iceberg-cpp as a statically-linked library via
find_package(iceberg CONFIG)with S3 support enabled hit linker failures on macOS (and likely Windows).Error
On macOS (arm64), linking produces hundreds of undefined symbols from Apple's Network, Security, and CoreFoundation frameworks:
Root cause
Arrow's own
ArrowConfig.cmake.inhandles this by checking"aws-c-common" IN_LIST ARROW_BUNDLED_STATIC_LIBSand addingfind_library+target_link_libraries(INTERFACE)for the platform frameworks. iceberg-cpp'siceberg-config.cmake.indoes not replicate this, so the transitive platform deps are lost.Expected platform dependencies: