couchbase 3.8.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/CMakeLists.txt +16 -1
- data/ext/cache/cpm/{CPM_0.42.0.cmake → CPM_0.43.1.cmake} +18 -2
- data/ext/cache/extconf_include.rb +6 -6
- data/ext/cache/mozilla-ca-bundle.crt +214 -155
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +130 -21
- data/ext/couchbase/cmake/APKBUILD.in +25 -4
- data/ext/couchbase/cmake/Bundler.cmake +143 -34
- data/ext/couchbase/cmake/CPM.cmake +126 -12
- data/ext/couchbase/cmake/Cache.cmake +7 -1
- data/ext/couchbase/cmake/CompilerOptions.cmake +1 -1
- data/ext/couchbase/cmake/CompilerWarnings.cmake +17 -6
- data/ext/couchbase/cmake/GrpcProtobuf.cmake +481 -0
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -3
- data/ext/couchbase/cmake/Packaging.cmake +519 -65
- data/ext/couchbase/cmake/Protostellar.cmake +250 -0
- data/ext/couchbase/cmake/Sanitizers.cmake +61 -50
- data/ext/couchbase/cmake/StaticAnalyzers.cmake +16 -5
- data/ext/couchbase/cmake/TestFramework.cmake +283 -0
- data/ext/couchbase/cmake/TestFrameworkAddTests.cmake +51 -0
- data/ext/couchbase/cmake/Testing.cmake +27 -9
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +141 -8
- data/ext/couchbase/cmake/VersionInfo.cmake +50 -0
- data/ext/couchbase/cmake/build_config.hxx.in +2 -1
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +101 -23
- data/ext/couchbase/cmake/couchbase_cxx_client_static-config.cmake.in +7 -0
- data/ext/couchbase/cmake/couchbase_cxx_client_static.pc.in +2 -0
- data/ext/couchbase/cmake/gRPC_Generate.cmake +58 -0
- data/ext/couchbase/cmake/protobuf_Generate.cmake +69 -0
- data/ext/couchbase/cmake/require-git-checkout.cmake +25 -0
- data/ext/couchbase/cmake/tarball_glob.txt +49 -0
- data/ext/couchbase/core/agent_group.cxx +0 -8
- data/ext/couchbase/core/agent_group.hxx +0 -4
- data/ext/couchbase/core/analytics_stream.cxx +314 -0
- data/ext/couchbase/core/analytics_stream.hxx +129 -0
- data/ext/couchbase/core/analytics_stream_component.cxx +245 -0
- data/ext/couchbase/core/analytics_stream_component.hxx +67 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +25 -3
- data/ext/couchbase/core/app_telemetry_meter.hxx +77 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +7 -6
- data/ext/couchbase/core/bucket.cxx +381 -87
- data/ext/couchbase/core/bucket.hxx +105 -25
- data/ext/couchbase/core/bucket_unit_test_api.hxx +57 -0
- data/ext/couchbase/core/capella.hxx +91 -0
- data/ext/couchbase/core/cluster.cxx +1554 -398
- data/ext/couchbase/core/cluster.hxx +39 -8
- data/ext/couchbase/core/cluster_agent.cxx +0 -8
- data/ext/couchbase/core/cluster_agent.hxx +0 -4
- data/ext/couchbase/core/cluster_options.hxx +26 -3
- data/ext/couchbase/core/collections_component.cxx +39 -15
- data/ext/couchbase/core/config_profiles.cxx +1 -1
- data/ext/couchbase/core/crud_component.cxx +2 -2
- data/ext/couchbase/core/crud_options.hxx +34 -0
- data/ext/couchbase/core/crypto/cbcrypto.cc +18 -13
- data/ext/couchbase/core/document_id_redaction.hxx +81 -0
- data/ext/couchbase/core/error_context/base_error_context.hxx +7 -6
- data/ext/couchbase/core/error_context/key_value.cxx +25 -2
- data/ext/couchbase/core/error_context/key_value.hxx +60 -33
- data/ext/couchbase/core/error_context/key_value_error_context.hxx +16 -15
- data/ext/couchbase/core/error_context/search.hxx +5 -0
- data/ext/couchbase/core/error_context/search_json.hxx +3 -0
- data/ext/couchbase/core/error_context/subdocument_error_context.hxx +19 -18
- data/ext/couchbase/core/error_context/view.hxx +5 -0
- data/ext/couchbase/core/free_form_http_request.cxx +237 -4
- data/ext/couchbase/core/free_form_http_request.hxx +41 -8
- data/ext/couchbase/core/http_component.cxx +300 -284
- data/ext/couchbase/core/http_component.hxx +0 -4
- data/ext/couchbase/core/impl/analytics.cxx +38 -5
- data/ext/couchbase/core/impl/analytics.hxx +34 -0
- data/ext/couchbase/core/impl/bootstrap_error.hxx +0 -3
- data/ext/couchbase/core/impl/collection.cxx +215 -202
- data/ext/couchbase/core/impl/collection_manager.cxx +1 -1
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +45 -18
- data/ext/couchbase/core/impl/error.cxx +22 -2
- data/ext/couchbase/core/impl/internal_analytics_stream_result.hxx +111 -0
- data/ext/couchbase/core/impl/internal_query_stream_result.hxx +110 -0
- data/ext/couchbase/core/impl/invoke_with_node_id.hxx +15 -7
- data/ext/couchbase/core/impl/key_value_error_category.cxx +6 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +10 -10
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +4 -4
- data/ext/couchbase/core/impl/node_id.cxx +49 -13
- data/ext/couchbase/core/impl/observability_recorder.cxx +12 -2
- data/ext/couchbase/core/impl/observe_poll.cxx +63 -23
- data/ext/couchbase/core/impl/public_analytics_stream_result.cxx +372 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +48 -2
- data/ext/couchbase/core/impl/public_cluster.cxx +325 -25
- data/ext/couchbase/core/impl/public_query_stream_result.cxx +380 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx +42 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_result.cxx +42 -0
- data/ext/couchbase/core/impl/query.cxx +76 -7
- data/ext/couchbase/core/impl/query.hxx +36 -0
- data/ext/couchbase/core/impl/query_index_manager.cxx +54 -1
- data/ext/couchbase/core/impl/replica_utils.cxx +101 -0
- data/ext/couchbase/core/impl/replica_utils.hxx +64 -0
- data/ext/couchbase/core/impl/resolve_node_id.hxx +125 -0
- data/ext/couchbase/core/impl/scope.cxx +70 -0
- data/ext/couchbase/core/impl/search.cxx +31 -1
- data/ext/couchbase/core/impl/transactions.cxx +130 -0
- data/ext/couchbase/core/impl/wait_until_ready.cxx +439 -0
- data/ext/couchbase/core/impl/wait_until_ready.hxx +110 -0
- data/ext/couchbase/core/impl/with_bucket_config_or_timeout.hxx +180 -0
- data/ext/couchbase/core/impl/with_cancellation.hxx +11 -3
- data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +66 -0
- data/ext/couchbase/core/io/dns_client.cxx +122 -45
- data/ext/couchbase/core/io/dns_codec.hxx +21 -21
- data/ext/couchbase/core/io/dns_config.cxx +21 -6
- data/ext/couchbase/core/io/http_command.hxx +149 -121
- data/ext/couchbase/core/io/http_error.hxx +107 -0
- data/ext/couchbase/core/io/http_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_session.cxx +606 -154
- data/ext/couchbase/core/io/http_session.hxx +147 -30
- data/ext/couchbase/core/io/http_session_manager.hxx +329 -382
- data/ext/couchbase/core/io/http_streaming_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_streaming_response.cxx +328 -43
- data/ext/couchbase/core/io/http_streaming_response.hxx +37 -3
- data/ext/couchbase/core/io/mcbp_buffer_pool.hxx +122 -0
- data/ext/couchbase/core/io/mcbp_command.hxx +150 -51
- data/ext/couchbase/core/io/mcbp_command_id.hxx +45 -0
- data/ext/couchbase/core/io/mcbp_message.cxx +9 -1
- data/ext/couchbase/core/io/mcbp_message.hxx +19 -0
- data/ext/couchbase/core/io/mcbp_output_queue.hxx +150 -0
- data/ext/couchbase/core/io/mcbp_parser.cxx +24 -7
- data/ext/couchbase/core/io/mcbp_session.cxx +316 -317
- data/ext/couchbase/core/io/mcbp_session.hxx +27 -18
- data/ext/couchbase/core/io/opaque_ring_table.hxx +145 -0
- data/ext/couchbase/core/io/retry_orchestrator.hxx +6 -5
- data/ext/couchbase/core/io/stream_deadline.hxx +50 -0
- data/ext/couchbase/core/io/streams.cxx +275 -14
- data/ext/couchbase/core/io/streams.hxx +53 -0
- data/ext/couchbase/core/logger/logger.cxx +36 -0
- data/ext/couchbase/core/logger/logger.hxx +46 -6
- data/ext/couchbase/core/logger/redaction.hxx +503 -0
- data/ext/couchbase/core/management/eventing_status.hxx +10 -0
- data/ext/couchbase/core/management/eventing_status_json.hxx +4 -0
- data/ext/couchbase/core/mcbp/big_endian.cxx +1 -1
- data/ext/couchbase/core/mcbp/codec.cxx +27 -18
- data/ext/couchbase/core/mcbp/operation_queue.cxx +2 -2
- data/ext/couchbase/core/mcbp/packet.hxx +2 -2
- data/ext/couchbase/core/mcbp/queue_request.cxx +23 -6
- data/ext/couchbase/core/mcbp/queue_request.hxx +21 -0
- data/ext/couchbase/core/meta/features.hxx +13 -0
- data/ext/couchbase/core/meta/version.cxx +6 -3
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -10
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +63 -33
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +55 -3
- data/ext/couchbase/core/operations/analytics_response_parsing.cxx +177 -0
- data/ext/couchbase/core/operations/analytics_response_parsing.hxx +55 -0
- data/ext/couchbase/core/operations/document_analytics.cxx +48 -130
- data/ext/couchbase/core/operations/document_analytics.hxx +14 -2
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +15 -7
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +19 -8
- data/ext/couchbase/core/operations/document_get_projected.cxx +1 -1
- data/ext/couchbase/core/{impl/get_replica.cxx → operations/document_get_replica.cxx} +21 -3
- data/ext/couchbase/core/{impl/get_replica.hxx → operations/document_get_replica.hxx} +31 -4
- data/ext/couchbase/core/operations/document_lookup_in.cxx +10 -10
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +228 -198
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +215 -217
- data/ext/couchbase/core/operations/document_query.cxx +108 -221
- data/ext/couchbase/core/operations/document_query.hxx +18 -4
- data/ext/couchbase/core/operations/document_search.cxx +52 -8
- data/ext/couchbase/core/operations/document_search.hxx +3 -0
- data/ext/couchbase/core/operations/document_view.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +15 -8
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +4 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +2 -1
- data/ext/couchbase/core/operations/management/analytics_index_create.cxx +33 -8
- data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +12 -7
- data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_link_create.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +10 -4
- data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +6 -4
- data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +4 -3
- data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +1 -1
- data/ext/couchbase/core/operations/management/bucket_create.cxx +37 -38
- data/ext/couchbase/core/operations/management/bucket_update.cxx +26 -28
- data/ext/couchbase/core/operations/management/change_password.cxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/error_utils.cxx +59 -5
- data/ext/couchbase/core/operations/management/error_utils.hxx +29 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +8 -3
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_get_function.cxx +5 -3
- data/ext/couchbase/core/operations/management/eventing_get_status.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/group_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_upsert.cxx +11 -8
- data/ext/couchbase/core/operations/management/query_index_build.cxx +5 -2
- data/ext/couchbase/core/operations/management/query_index_create.cxx +9 -3
- data/ext/couchbase/core/operations/management/query_index_drop.cxx +11 -4
- data/ext/couchbase/core/operations/management/query_index_get_all.cxx +1 -1
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +1 -1
- data/ext/couchbase/core/operations/management/scope_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/scope_get_all.cxx +6 -1
- data/ext/couchbase/core/operations/management/search_get_stats.cxx +10 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_query.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_drop.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +3 -1
- data/ext/couchbase/core/operations/management/search_index_upsert.cxx +2 -2
- data/ext/couchbase/core/operations/management/user_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_upsert.cxx +12 -9
- data/ext/couchbase/core/operations/management/view_index_drop.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_get.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_upsert.cxx +1 -1
- data/ext/couchbase/core/operations/operation_traits.hxx +18 -0
- data/ext/couchbase/core/operations/query_response_parsing.cxx +211 -0
- data/ext/couchbase/core/operations/query_response_parsing.hxx +60 -0
- data/ext/couchbase/core/operations_fwd.hxx +3 -3
- data/ext/couchbase/core/origin.cxx +54 -26
- data/ext/couchbase/core/origin.hxx +12 -0
- data/ext/couchbase/core/orphan_reporter.cxx +2 -1
- data/ext/couchbase/core/platform/random.cc +7 -7
- data/ext/couchbase/core/protocol/client_request.cxx +2 -2
- data/ext/couchbase/core/protocol/client_request.hxx +38 -21
- data/ext/couchbase/core/protocol/client_response.cxx +11 -3
- data/ext/couchbase/core/protocol/client_response.hxx +27 -6
- data/ext/couchbase/core/protocol/cmd_append.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_decrement.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_get.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +6 -4
- data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_meta.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_get_replica.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_hello.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_increment.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_insert.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +10 -9
- data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +10 -10
- data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +7 -7
- data/ext/couchbase/core/protocol/cmd_prepend.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_remove.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_replace.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_touch.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_upsert.cxx +4 -4
- data/ext/couchbase/core/protocol/datatype.hxx +118 -1
- data/ext/couchbase/core/protocol/frame_info_utils.cxx +1 -1
- data/ext/couchbase/core/protocol/magic.hxx +4 -0
- data/ext/couchbase/core/protocol/magic_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/server_request.hxx +3 -1
- data/ext/couchbase/core/protocol/status.cxx +1 -1
- data/ext/couchbase/core/protostellar/analytics_converter.hxx +171 -0
- data/ext/couchbase/core/protostellar/bucket_admin_converter.hxx +301 -0
- data/ext/couchbase/core/protostellar/collection_admin_converter.hxx +92 -0
- data/ext/couchbase/core/protostellar/component.cxx +2445 -0
- data/ext/couchbase/core/protostellar/component.hxx +391 -0
- data/ext/couchbase/core/{columnar/bootstrap_notification_subscriber.hxx → protostellar/compression_settings.hxx} +11 -10
- data/ext/couchbase/core/protostellar/credentials.cxx +233 -0
- data/ext/couchbase/core/protostellar/credentials.hxx +88 -0
- data/ext/couchbase/core/protostellar/dispatcher.cxx +57 -0
- data/ext/couchbase/core/protostellar/dispatcher.hxx +482 -0
- data/ext/couchbase/core/protostellar/error_utils.cxx +293 -0
- data/ext/couchbase/core/protostellar/error_utils.hxx +97 -0
- data/ext/couchbase/core/protostellar/json_payload.hxx +49 -0
- data/ext/couchbase/core/protostellar/kv_converter.cxx +70 -0
- data/ext/couchbase/core/protostellar/kv_converter.hxx +600 -0
- data/ext/couchbase/core/protostellar/query_converter.hxx +265 -0
- data/ext/couchbase/core/protostellar/query_index_admin_converter.hxx +291 -0
- data/ext/couchbase/core/protostellar/query_proto.hxx +73 -0
- data/ext/couchbase/core/protostellar/search_converter.hxx +244 -0
- data/ext/couchbase/core/protostellar/search_index_admin_converter.hxx +156 -0
- data/ext/couchbase/core/protostellar/view_converter.hxx +158 -0
- data/ext/couchbase/core/query_stream.cxx +447 -0
- data/ext/couchbase/core/query_stream.hxx +141 -0
- data/ext/couchbase/core/query_stream_component.cxx +243 -0
- data/ext/couchbase/core/query_stream_component.hxx +68 -0
- data/ext/couchbase/core/range_scan_load_balancer.cxx +15 -8
- data/ext/couchbase/core/range_scan_orchestrator.cxx +15 -3
- data/ext/couchbase/core/response_handler.hxx +41 -4
- data/ext/couchbase/core/row_streamer.cxx +332 -46
- data/ext/couchbase/core/row_streamer.hxx +31 -1
- data/ext/couchbase/core/row_streamer_options.hxx +55 -0
- data/ext/couchbase/core/sasl/client.h +3 -0
- data/ext/couchbase/core/search_scoring.hxx +66 -0
- data/ext/couchbase/core/stream_error_details.hxx +69 -0
- data/ext/couchbase/core/timeout_defaults.hxx +0 -1
- data/ext/couchbase/core/topology/capabilities.hxx +6 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
- data/ext/couchbase/core/topology/configuration.cxx +21 -6
- data/ext/couchbase/core/topology/configuration.hxx +29 -8
- data/ext/couchbase/core/topology/configuration_json.hxx +3 -0
- data/ext/couchbase/core/topology/error_map_json.hxx +3 -1
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +70 -4
- data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +10 -0
- data/ext/couchbase/core/transactions/active_transaction_record.cxx +0 -34
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +362 -241
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +24 -3
- data/ext/couchbase/core/transactions/error_list.hxx +2 -2
- data/ext/couchbase/core/transactions/get_multi_fetch.hxx +160 -0
- data/ext/couchbase/core/transactions/get_multi_orchestrator.cxx +326 -125
- data/ext/couchbase/core/transactions/get_multi_transaction_id.hxx +62 -0
- data/ext/couchbase/core/transactions/internal/atr_entry.hxx +22 -2
- data/ext/couchbase/core/transactions/internal/transaction_context.hxx +2 -2
- data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +23 -1
- data/ext/couchbase/core/transactions/internal/utils.hxx +50 -14
- data/ext/couchbase/core/transactions/staged_mutation.cxx +23 -18
- data/ext/couchbase/core/transactions/staged_mutation.hxx +15 -4
- data/ext/couchbase/core/transactions/transaction_context.cxx +55 -40
- data/ext/couchbase/core/transactions/transaction_get_result.hxx +16 -0
- data/ext/couchbase/core/transactions/transactions.cxx +3 -55
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +194 -66
- data/ext/couchbase/core/transactions/transactions_config.cxx +0 -11
- data/ext/couchbase/core/transactions/utils.cxx +10 -0
- data/ext/couchbase/core/transactions/waitable_op_list.hxx +15 -4
- data/ext/couchbase/core/transactions.hxx +9 -9
- data/ext/couchbase/core/utils/byteswap.hxx +166 -9
- data/ext/couchbase/core/utils/connection_string.cxx +50 -85
- data/ext/couchbase/core/utils/connection_string.hxx +15 -0
- data/ext/couchbase/core/{columnar/backoff_calculator.hxx → utils/deadline.hxx} +13 -13
- data/ext/couchbase/core/utils/duration_parser.cxx +1 -1
- data/ext/couchbase/core/utils/json_streaming_lexer.cxx +48 -5
- data/ext/couchbase/core/utils/json_streaming_lexer.hxx +4 -1
- data/ext/couchbase/core/utils/movable_function.hxx +301 -52
- data/ext/couchbase/core/utils/name_codec.hxx +154 -11
- data/ext/couchbase/core/{columnar/retry_info.hxx → utils/process_id.hxx} +18 -13
- data/ext/couchbase/core/utils/url_codec.cxx +12 -51
- data/ext/couchbase/core/websocket_codec.cxx +3 -29
- data/ext/couchbase/couchbase/analytics_options.hxx +21 -10
- data/ext/couchbase/couchbase/analytics_row.hxx +105 -0
- data/ext/couchbase/couchbase/analytics_stream_result.hxx +266 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +3 -3
- data/ext/couchbase/couchbase/bucket.hxx +57 -0
- data/ext/couchbase/couchbase/cluster.hxx +216 -5
- data/ext/couchbase/{core/columnar/security_options.hxx → couchbase/cluster_state.hxx} +18 -14
- data/ext/couchbase/couchbase/codec/lenient_json_transcoder.hxx +69 -0
- data/ext/couchbase/couchbase/collection.hxx +234 -14
- data/ext/couchbase/couchbase/common_durability_options.hxx +18 -3
- data/ext/couchbase/couchbase/conjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +6 -1
- data/ext/couchbase/couchbase/date_range_query.hxx +2 -2
- data/ext/couchbase/couchbase/decrement_options.hxx +1 -1
- data/ext/couchbase/couchbase/disjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/error.hxx +32 -0
- data/ext/couchbase/couchbase/error_codes.hxx +32 -0
- data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_distance_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_polygon_query.hxx +1 -1
- data/ext/couchbase/couchbase/get_replica_options.hxx +68 -0
- data/ext/couchbase/couchbase/get_replica_result.hxx +5 -3
- data/ext/couchbase/couchbase/get_replica_strategy.hxx +161 -0
- data/ext/couchbase/couchbase/get_result.hxx +1 -0
- data/ext/couchbase/couchbase/increment_options.hxx +1 -1
- data/ext/couchbase/couchbase/insert_options.hxx +1 -1
- data/ext/couchbase/couchbase/match_phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/match_query.hxx +1 -1
- data/ext/couchbase/couchbase/mutate_in_options.hxx +3 -3
- data/ext/couchbase/couchbase/network_options.hxx +1 -1
- data/ext/couchbase/couchbase/node_id.hxx +42 -14
- data/ext/couchbase/couchbase/node_id_for_options.hxx +7 -1
- data/ext/couchbase/couchbase/node_ids_options.hxx +8 -2
- data/ext/couchbase/couchbase/numeric_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/prefix_query.hxx +1 -1
- data/ext/couchbase/couchbase/query_options.hxx +23 -12
- data/ext/couchbase/couchbase/query_row.hxx +111 -0
- data/ext/couchbase/couchbase/query_stream_result.hxx +302 -0
- data/ext/couchbase/couchbase/query_string_query.hxx +3 -3
- data/ext/couchbase/couchbase/regexp_query.hxx +1 -1
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/result.hxx +14 -3
- data/ext/couchbase/couchbase/scan_result_item.hxx +1 -0
- data/ext/couchbase/couchbase/scope.hxx +85 -2
- data/ext/couchbase/couchbase/search_options.hxx +58 -8
- data/ext/couchbase/couchbase/search_scoring.hxx +94 -0
- data/ext/couchbase/couchbase/search_scoring_none.hxx +51 -0
- data/ext/couchbase/couchbase/search_scoring_reciprocal_rank_fusion.hxx +88 -0
- data/ext/couchbase/couchbase/search_scoring_relative_score_fusion.hxx +70 -0
- data/ext/couchbase/couchbase/term_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/tracing/request_span.hxx +46 -0
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +23 -21
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_result.hxx +24 -19
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +17 -3
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +4 -2
- data/ext/couchbase/couchbase/transactions.hxx +27 -18
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/vector_query.hxx +1 -1
- data/ext/couchbase/couchbase/wait_until_ready_options.hxx +111 -0
- data/ext/couchbase/couchbase/wildcard_query.hxx +1 -1
- data/ext/extconf.rb +15 -10
- data/ext/rcb_analytics.cxx +82 -102
- data/ext/rcb_backend.cxx +42 -36
- data/ext/rcb_backend.hxx +2 -0
- data/ext/rcb_buckets.cxx +47 -59
- data/ext/rcb_collections.cxx +42 -52
- data/ext/rcb_crud.cxx +345 -224
- data/ext/rcb_diagnostics.cxx +117 -27
- data/ext/rcb_exceptions.cxx +152 -99
- data/ext/rcb_exceptions.hxx +25 -0
- data/ext/rcb_extras.cxx +18 -19
- data/ext/rcb_hdr_histogram.cxx +19 -4
- data/ext/rcb_logger.cxx +202 -27
- data/ext/rcb_logger.hxx +12 -0
- data/ext/rcb_multi.cxx +40 -40
- data/ext/rcb_observability.cxx +7 -5
- data/ext/rcb_query.cxx +99 -142
- data/ext/rcb_range_scan.cxx +41 -35
- data/ext/rcb_search.cxx +98 -99
- data/ext/rcb_users.cxx +36 -56
- data/ext/rcb_utils.cxx +100 -37
- data/ext/rcb_utils.hxx +287 -33
- data/ext/rcb_version.cxx +1 -1
- data/ext/rcb_views.cxx +55 -51
- data/lib/active_support/cache/couchbase_store.rb +77 -12
- data/lib/couchbase/bucket.rb +20 -0
- data/lib/couchbase/cluster.rb +33 -14
- data/lib/couchbase/collection.rb +36 -1
- data/lib/couchbase/errors.rb +18 -0
- data/lib/couchbase/fork_hooks.rb +16 -7
- data/lib/couchbase/get_replica_strategy.rb +89 -0
- data/lib/couchbase/logger.rb +1 -1
- data/lib/couchbase/management/analytics_index_manager.rb +15 -15
- data/lib/couchbase/management/bucket_manager.rb +6 -6
- data/lib/couchbase/management/collection_manager.rb +6 -6
- data/lib/couchbase/management/query_index_manager.rb +7 -7
- data/lib/couchbase/management/search_index_manager.rb +13 -13
- data/lib/couchbase/management/user_manager.rb +10 -10
- data/lib/couchbase/management/view_index_manager.rb +5 -5
- data/lib/couchbase/options.rb +181 -44
- data/lib/couchbase/protostellar/bucket.rb +4 -0
- data/lib/couchbase/protostellar/cluster.rb +4 -0
- data/lib/couchbase/protostellar/collection.rb +4 -0
- data/lib/couchbase/protostellar/error_handling.rb +2 -1
- data/lib/couchbase/protostellar/request.rb +1 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +16 -2
- data/lib/couchbase/protostellar/request_generator/search.rb +17 -1
- data/lib/couchbase/protostellar/retry/orchestrator.rb +3 -2
- data/lib/couchbase/protostellar/retry/strategies/fail_fast.rb +33 -0
- data/lib/couchbase/protostellar/retry/strategies.rb +1 -0
- data/lib/couchbase/search_options.rb +95 -6
- data/lib/couchbase/version.rb +1 -1
- metadata +92 -33
- data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +0 -40
- data/ext/couchbase/core/columnar/agent.hxx +0 -71
- data/ext/couchbase/core/columnar/agent_config.hxx +0 -59
- data/ext/couchbase/core/columnar/background_bootstrap_listener.hxx +0 -42
- data/ext/couchbase/core/columnar/backoff_calculator.cxx +0 -62
- data/ext/couchbase/core/columnar/columnar_agent.cxx +0 -147
- data/ext/couchbase/core/columnar/columnar_agent_config.cxx +0 -48
- data/ext/couchbase/core/columnar/columnar_error.cxx +0 -51
- data/ext/couchbase/core/columnar/database_management_options.hxx +0 -56
- data/ext/couchbase/core/columnar/error.hxx +0 -51
- data/ext/couchbase/core/columnar/error_codes.cxx +0 -107
- data/ext/couchbase/core/columnar/error_codes.hxx +0 -75
- data/ext/couchbase/core/columnar/management_component.cxx +0 -300
- data/ext/couchbase/core/columnar/management_component.hxx +0 -56
- data/ext/couchbase/core/columnar/query_component.cxx +0 -523
- data/ext/couchbase/core/columnar/query_component.hxx +0 -57
- data/ext/couchbase/core/columnar/query_options.hxx +0 -59
- data/ext/couchbase/core/columnar/query_result.cxx +0 -130
- data/ext/couchbase/core/columnar/query_result.hxx +0 -78
- data/ext/couchbase/core/io/config_tracker.cxx +0 -687
- data/ext/couchbase/core/io/config_tracker.hxx +0 -123
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
796f1389bfea13c0ed78f663b765baaff54a508e5483786bd6ece73c5e3e3cbe cacert.pem
|
|
@@ -14,14 +14,9 @@ if(NOT DEFINED COUCHBASE_CXX_CLIENT_MASTER_PROJECT)
|
|
|
14
14
|
endif()
|
|
15
15
|
endif()
|
|
16
16
|
|
|
17
|
-
option(COUCHBASE_CXX_CLIENT_COLUMNAR "Build with Columnar additions" FALSE)
|
|
18
|
-
if(COUCHBASE_CXX_CLIENT_COLUMNAR)
|
|
19
|
-
message(STATUS "COUCHBASE_CXX_CLIENT_COLUMNAR=${COUCHBASE_CXX_CLIENT_COLUMNAR} building with Columnar additions.")
|
|
20
|
-
endif()
|
|
21
|
-
|
|
22
17
|
project(
|
|
23
18
|
couchbase_cxx_client
|
|
24
|
-
VERSION "1.
|
|
19
|
+
VERSION "1.5.0"
|
|
25
20
|
LANGUAGES CXX C)
|
|
26
21
|
message(
|
|
27
22
|
STATUS
|
|
@@ -32,6 +27,33 @@ if(WIN32)
|
|
|
32
27
|
message(STATUS "Windows SDK: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
|
|
33
28
|
endif()
|
|
34
29
|
|
|
30
|
+
# On Windows ARM64, MSVC's <winbase.h> defines C++ overloads for the
|
|
31
|
+
# _Interlocked* intrinsics that clash with the intrinsic declarations pulled
|
|
32
|
+
# in transitively (e.g. via asio/BoringSSL), breaking the build. Disabling
|
|
33
|
+
# the C++ overloads restores the plain intrinsic declarations. Match both the
|
|
34
|
+
# native case (CMAKE_SYSTEM_PROCESSOR) and the cross-compile case
|
|
35
|
+
# (-A ARM64 sets CMAKE_GENERATOR_PLATFORM).
|
|
36
|
+
if(MSVC AND (CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64" OR CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64"))
|
|
37
|
+
message(STATUS "Applying WinBase Interlocked macro for Windows ARM64")
|
|
38
|
+
add_compile_definitions(MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS=0)
|
|
39
|
+
endif()
|
|
40
|
+
|
|
41
|
+
# Multi-process compile for MSVC. With the Visual Studio generator each
|
|
42
|
+
# .vcxproj invokes a single cl.exe that processes its source files
|
|
43
|
+
# serially; /MP turns each invocation into a parallel batch driven by
|
|
44
|
+
# NUMBER_OF_PROCESSORS. Combined with MSBuild's /m:N (project-level
|
|
45
|
+
# parallelism) this lets a Windows agent saturate its cores. Must be
|
|
46
|
+
# applied at directory scope before ThirdPartyDependencies.cmake so
|
|
47
|
+
# the FetchContent-built dependencies (gRPC, protobuf, abseil, curl,
|
|
48
|
+
# boringssl, ...) inherit it — they are the bulk of the Windows build.
|
|
49
|
+
#
|
|
50
|
+
# Scoped to C and CXX via COMPILE_LANGUAGE: NASM (used by BoringSSL's
|
|
51
|
+
# x86 assembly) and other ASM dialects do not understand /MP and would
|
|
52
|
+
# abort with `nasm.exe ... /MP ... exited with code 1`.
|
|
53
|
+
if(MSVC)
|
|
54
|
+
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/MP>)
|
|
55
|
+
endif()
|
|
56
|
+
|
|
35
57
|
include(cmake/TarballRelease.cmake OPTIONAL)
|
|
36
58
|
|
|
37
59
|
include(cmake/PreventInSourceBuilds.cmake)
|
|
@@ -62,9 +84,66 @@ endif()
|
|
|
62
84
|
find_package(Threads REQUIRED)
|
|
63
85
|
|
|
64
86
|
option(COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY "Build with OpenTelemetry" ${COUCHBASE_CXX_CLIENT_MASTER_PROJECT})
|
|
87
|
+
option(COUCHBASE_CXX_CLIENT_BUILD_TOOLS "Build tools" ${COUCHBASE_CXX_CLIENT_MASTER_PROJECT})
|
|
88
|
+
# fit_performer links gRPC/Protobuf, which cmake/GrpcProtobuf.cmake resolves from the platform or
|
|
89
|
+
# builds from source, so this no longer depends on what the platform packages. Turning it OFF only
|
|
90
|
+
# skips the tool.
|
|
91
|
+
option(COUCHBASE_CXX_CLIENT_BUILD_FIT_PERFORMER
|
|
92
|
+
"Build the FIT performer integration-test tool"
|
|
93
|
+
${COUCHBASE_CXX_CLIENT_BUILD_TOOLS})
|
|
94
|
+
|
|
95
|
+
# couchbase2:// (Protostellar) support. Like the FIT performer it pulls in gRPC and protobuf. Default
|
|
96
|
+
# OFF: the transport is experimental and opt-in. When enabled it vendors the Protostellar schema,
|
|
97
|
+
# builds the generated stubs, and compiles the couchbase2 transport into the client library on top of
|
|
98
|
+
# them.
|
|
99
|
+
option(COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2
|
|
100
|
+
"Build with couchbase2:// (Protostellar/gRPC) support"
|
|
101
|
+
OFF)
|
|
102
|
+
|
|
103
|
+
# Build the way the redistributable packages are built.
|
|
104
|
+
#
|
|
105
|
+
# The packages must carry every vendored dependency inside their own artefacts, so this switch makes
|
|
106
|
+
# the build resolve gRPC, Protobuf and their transitive dependencies from source, hide the generated
|
|
107
|
+
# Protostellar stubs from the shared library's exported ABI, and link the in-tree executables against
|
|
108
|
+
# the static client so each holds exactly one copy of them.
|
|
109
|
+
#
|
|
110
|
+
# All of that is expensive: a source build of gRPC on every configure, and a full copy of the client
|
|
111
|
+
# and the vendored stack in every executable that is linked. A development or CI build needs none of
|
|
112
|
+
# it -- it wants the platform's gRPC where one exists and the shared client everywhere -- so the
|
|
113
|
+
# switch is off by default and the packaging manifests turn it on.
|
|
114
|
+
option(COUCHBASE_CXX_CLIENT_PACKAGE_BUILD
|
|
115
|
+
"Resolve and link the vendored dependencies the way the redistributable packages do" FALSE)
|
|
65
116
|
|
|
66
117
|
include(cmake/ThirdPartyDependencies.cmake)
|
|
67
118
|
|
|
119
|
+
if(COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2)
|
|
120
|
+
# Vendors the Protostellar schema (CPM) and builds the generated gRPC/protobuf stubs library.
|
|
121
|
+
include(cmake/Protostellar.cmake)
|
|
122
|
+
endif()
|
|
123
|
+
|
|
124
|
+
# Remove the staging prefix at the end of ANY install, not only the three packaging manifests.
|
|
125
|
+
#
|
|
126
|
+
# The vendored dependencies declare install rules no option switches off, and they are redirected
|
|
127
|
+
# under one throwaway prefix. The RPM, DEB and Alpine steps each delete it -- but nothing else does,
|
|
128
|
+
# so a plain "cmake --install" left gRPC's headers, archives and roots.pem sitting under
|
|
129
|
+
# <prefix>/vendored-not-installed. That affects every source build with a vendored dependency, which
|
|
130
|
+
# since AUTO includes any host without a system gRPC.
|
|
131
|
+
#
|
|
132
|
+
# Declared here, unconditionally, rather than in cmake/Packaging.cmake: that file is included only
|
|
133
|
+
# when COUCHBASE_CXX_CLIENT_INSTALL is ON, while the vendored dependencies register their install
|
|
134
|
+
# rules regardless, so with INSTALL off "cmake --install" still staged them and nothing removed them.
|
|
135
|
+
# install(CODE) runs in declaration order, and this point is after the dependencies were added.
|
|
136
|
+
# CMAKE_INSTALL_PREFIX is escaped so the generated script reads it at install time: "cmake --install
|
|
137
|
+
# --prefix <other>" stages the redirected files under the override, and expanding the configured
|
|
138
|
+
# prefix here would try to delete them from somewhere else entirely, leaving them behind.
|
|
139
|
+
install(CODE "
|
|
140
|
+
set(_junk \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}\")
|
|
141
|
+
if(EXISTS \"\${_junk}\")
|
|
142
|
+
message(STATUS \"Removing vendored staging prefix: \${_junk}\")
|
|
143
|
+
file(REMOVE_RECURSE \"\${_junk}\")
|
|
144
|
+
endif()
|
|
145
|
+
")
|
|
146
|
+
|
|
68
147
|
include(cmake/VersionInfo.cmake)
|
|
69
148
|
|
|
70
149
|
include(cmake/RPath.cmake)
|
|
@@ -77,6 +156,8 @@ set(couchbase_cxx_client_FILES
|
|
|
77
156
|
core/agent_group.cxx
|
|
78
157
|
core/agent_group_config.cxx
|
|
79
158
|
core/analytics_query_options.cxx
|
|
159
|
+
core/analytics_stream.cxx
|
|
160
|
+
core/analytics_stream_component.cxx
|
|
80
161
|
core/app_telemetry_address.cxx
|
|
81
162
|
core/app_telemetry_meter.cxx
|
|
82
163
|
core/app_telemetry_reporter.cxx
|
|
@@ -87,14 +168,6 @@ set(couchbase_cxx_client_FILES
|
|
|
87
168
|
core/cluster_credentials.cxx
|
|
88
169
|
core/cluster_options.cxx
|
|
89
170
|
core/collections_component.cxx
|
|
90
|
-
core/columnar/backoff_calculator.cxx
|
|
91
|
-
core/columnar/columnar_agent.cxx
|
|
92
|
-
core/columnar/columnar_agent_config.cxx
|
|
93
|
-
core/columnar/columnar_error.cxx
|
|
94
|
-
core/columnar/error_codes.cxx
|
|
95
|
-
core/columnar/management_component.cxx
|
|
96
|
-
core/columnar/query_component.cxx
|
|
97
|
-
core/columnar/query_result.cxx
|
|
98
171
|
core/config_profiles.cxx
|
|
99
172
|
core/core_sdk_shim.cxx
|
|
100
173
|
core/crud_component.cxx
|
|
@@ -113,6 +186,7 @@ set(couchbase_cxx_client_FILES
|
|
|
113
186
|
core/impl/boolean_query.cxx
|
|
114
187
|
core/impl/bucket_manager.cxx
|
|
115
188
|
core/impl/collection.cxx
|
|
189
|
+
core/operations/document_get_replica.cxx
|
|
116
190
|
core/impl/collection_manager.cxx
|
|
117
191
|
core/impl/common_error_category.cxx
|
|
118
192
|
core/impl/configuration_profiles_registry.cxx
|
|
@@ -135,7 +209,6 @@ set(couchbase_cxx_client_FILES
|
|
|
135
209
|
core/impl/geo_bounding_box_query.cxx
|
|
136
210
|
core/impl/geo_distance_query.cxx
|
|
137
211
|
core/impl/geo_polygon_query.cxx
|
|
138
|
-
core/impl/get_replica.cxx
|
|
139
212
|
core/impl/internal_date_range_facet_result.cxx
|
|
140
213
|
core/impl/internal_error_context.cxx
|
|
141
214
|
core/impl/internal_numeric_range_facet_result.cxx
|
|
@@ -162,10 +235,14 @@ set(couchbase_cxx_client_FILES
|
|
|
162
235
|
core/impl/observe_seqno.cxx
|
|
163
236
|
core/impl/phrase_query.cxx
|
|
164
237
|
core/impl/prefix_query.cxx
|
|
238
|
+
core/impl/public_analytics_stream_result.cxx
|
|
165
239
|
core/impl/public_bucket.cxx
|
|
166
240
|
core/impl/public_cluster.cxx
|
|
167
241
|
core/impl/public_logger.cxx
|
|
242
|
+
core/impl/public_query_stream_result.cxx
|
|
168
243
|
core/impl/public_scan_result.cxx
|
|
244
|
+
core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx
|
|
245
|
+
core/impl/public_transaction_get_multi_result.cxx
|
|
169
246
|
core/impl/public_transaction_get_result.cxx
|
|
170
247
|
core/impl/query.cxx
|
|
171
248
|
core/impl/query_error_category.cxx
|
|
@@ -191,6 +268,7 @@ set(couchbase_cxx_client_FILES
|
|
|
191
268
|
core/impl/search_sort_id.cxx
|
|
192
269
|
core/impl/search_sort_score.cxx
|
|
193
270
|
core/impl/streaming_json_lexer_error_category.cxx
|
|
271
|
+
core/impl/wait_until_ready.cxx
|
|
194
272
|
core/impl/subdoc/array_add_unique.cxx
|
|
195
273
|
core/impl/subdoc/array_append.cxx
|
|
196
274
|
core/impl/subdoc/array_insert.cxx
|
|
@@ -222,7 +300,7 @@ set(couchbase_cxx_client_FILES
|
|
|
222
300
|
core/impl/wildcard_query.cxx
|
|
223
301
|
core/impl/crypto.cxx
|
|
224
302
|
core/impl/observability_recorder.cxx
|
|
225
|
-
core/
|
|
303
|
+
core/impl/transactions.cxx
|
|
226
304
|
core/io/dns_client.cxx
|
|
227
305
|
core/io/dns_config.cxx
|
|
228
306
|
core/io/http_parser.cxx
|
|
@@ -253,6 +331,7 @@ set(couchbase_cxx_client_FILES
|
|
|
253
331
|
core/metrics/logging_meter.cxx
|
|
254
332
|
core/metrics/meter_wrapper.cxx
|
|
255
333
|
core/n1ql_query_options.cxx
|
|
334
|
+
core/operations/analytics_response_parsing.cxx
|
|
256
335
|
core/operations/document_analytics.cxx
|
|
257
336
|
core/operations/document_append.cxx
|
|
258
337
|
core/operations/document_decrement.cxx
|
|
@@ -267,6 +346,7 @@ set(couchbase_cxx_client_FILES
|
|
|
267
346
|
core/operations/document_mutate_in.cxx
|
|
268
347
|
core/operations/document_prepend.cxx
|
|
269
348
|
core/operations/document_query.cxx
|
|
349
|
+
core/operations/query_response_parsing.cxx
|
|
270
350
|
core/operations/document_remove.cxx
|
|
271
351
|
core/operations/document_replace.cxx
|
|
272
352
|
core/operations/document_search.cxx
|
|
@@ -389,6 +469,8 @@ set(couchbase_cxx_client_FILES
|
|
|
389
469
|
core/protocol/cmd_upsert.cxx
|
|
390
470
|
core/protocol/frame_info_utils.cxx
|
|
391
471
|
core/protocol/status.cxx
|
|
472
|
+
core/query_stream.cxx
|
|
473
|
+
core/query_stream_component.cxx
|
|
392
474
|
core/range_scan_load_balancer.cxx
|
|
393
475
|
core/range_scan_options.cxx
|
|
394
476
|
core/range_scan_orchestrator.cxx
|
|
@@ -449,6 +531,11 @@ set(couchbase_cxx_client_FILES
|
|
|
449
531
|
core/cluster_label_listener.cxx
|
|
450
532
|
)
|
|
451
533
|
|
|
534
|
+
if(COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2)
|
|
535
|
+
# The Protostellar transport is compiled into the client library (see cmake/Protostellar.cmake).
|
|
536
|
+
list(APPEND couchbase_cxx_client_FILES ${couchbase_cxx_protostellar_TRANSPORT_FILES})
|
|
537
|
+
endif()
|
|
538
|
+
|
|
452
539
|
set(couchbase_cxx_client_LIBRARIES)
|
|
453
540
|
set(couchbase_cxx_client_DEFAULT_LIBRARY)
|
|
454
541
|
|
|
@@ -509,10 +596,9 @@ foreach(TARGET ${couchbase_cxx_client_LIBRARIES})
|
|
|
509
596
|
|
|
510
597
|
target_include_directories(
|
|
511
598
|
${TARGET} SYSTEM
|
|
512
|
-
PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/
|
|
513
|
-
$<BUILD_INTERFACE
|
|
514
|
-
$<BUILD_INTERFACE:$<TARGET_PROPERTY:
|
|
515
|
-
$<BUILD_INTERFACE:$<TARGET_PROPERTY:asio,INTERFACE_INCLUDE_DIRECTORIES>>)
|
|
599
|
+
PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/expected/include>
|
|
600
|
+
$<BUILD_INTERFACE:$<TARGET_PROPERTY:jsonsl,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>>
|
|
601
|
+
$<BUILD_INTERFACE:$<TARGET_PROPERTY:asio,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>>)
|
|
516
602
|
|
|
517
603
|
target_include_directories(${TARGET} PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
|
|
518
604
|
target_include_directories(${TARGET} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
@@ -535,6 +621,10 @@ foreach(TARGET ${couchbase_cxx_client_LIBRARIES})
|
|
|
535
621
|
if(COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY)
|
|
536
622
|
target_link_libraries(${TARGET} PRIVATE $<BUILD_INTERFACE:opentelemetry_api>)
|
|
537
623
|
endif()
|
|
624
|
+
if(COUCHBASE_CXX_CLIENT_BUILD_COUCHBASE2)
|
|
625
|
+
# Generated Protostellar stubs + gRPC/protobuf, consumed by core/protostellar/*.
|
|
626
|
+
target_link_libraries(${TARGET} PRIVATE $<BUILD_INTERFACE:couchbase_cxx_protostellar>)
|
|
627
|
+
endif()
|
|
538
628
|
|
|
539
629
|
if(HAVE_BACKTRACE)
|
|
540
630
|
target_link_libraries(${TARGET} PRIVATE ${PLATFORM_LIBRARIES})
|
|
@@ -586,10 +676,30 @@ if(COUCHBASE_CXX_CLIENT_BUILD_STATIC)
|
|
|
586
676
|
endif()
|
|
587
677
|
|
|
588
678
|
option(COUCHBASE_CXX_CLIENT_BUILD_TESTS "Build test programs" ${COUCHBASE_CXX_CLIENT_MASTER_PROJECT})
|
|
679
|
+
|
|
680
|
+
# CNG (Protostellar) tests use a hand-rolled framework (NOT Catch2), so they can be built
|
|
681
|
+
# independently of the main (Catch2) test suite. The framework itself links no client code; each
|
|
682
|
+
# test links only what it exercises (see test/cng/CMakeLists.txt).
|
|
683
|
+
option(COUCHBASE_CXX_CLIENT_BUILD_CNG_TESTS "Build CNG (Protostellar) tests"
|
|
684
|
+
${COUCHBASE_CXX_CLIENT_BUILD_TESTS})
|
|
685
|
+
|
|
686
|
+
# The hand-rolled framework both test trees build on, and its self-test. It precedes
|
|
687
|
+
# cmake/Testing.cmake so couchbase_add_test() is defined before test/CMakeLists.txt is read.
|
|
688
|
+
# Testing is enabled at the top level here so `ctest` from the build root discovers these even when
|
|
689
|
+
# the main (Catch2) suite is disabled and cmake/Testing.cmake was not included.
|
|
690
|
+
if(COUCHBASE_CXX_CLIENT_BUILD_TESTS OR COUCHBASE_CXX_CLIENT_BUILD_CNG_TESTS)
|
|
691
|
+
enable_testing()
|
|
692
|
+
include(cmake/TestFramework.cmake)
|
|
693
|
+
endif()
|
|
694
|
+
|
|
589
695
|
if(COUCHBASE_CXX_CLIENT_BUILD_TESTS)
|
|
590
696
|
include(cmake/Testing.cmake)
|
|
591
697
|
endif()
|
|
592
698
|
|
|
699
|
+
if(COUCHBASE_CXX_CLIENT_BUILD_CNG_TESTS)
|
|
700
|
+
add_subdirectory(test/cng)
|
|
701
|
+
endif()
|
|
702
|
+
|
|
593
703
|
option(COUCHBASE_CXX_CLIENT_BUILD_DOCS "Build API documentation" ${COUCHBASE_CXX_CLIENT_MASTER_PROJECT})
|
|
594
704
|
if(COUCHBASE_CXX_CLIENT_BUILD_DOCS)
|
|
595
705
|
include(cmake/Documentation.cmake)
|
|
@@ -600,7 +710,6 @@ if(COUCHBASE_CXX_CLIENT_BUILD_EXAMPLES)
|
|
|
600
710
|
add_subdirectory(examples)
|
|
601
711
|
endif()
|
|
602
712
|
|
|
603
|
-
option(COUCHBASE_CXX_CLIENT_BUILD_TOOLS "Build tools" ${COUCHBASE_CXX_CLIENT_MASTER_PROJECT})
|
|
604
713
|
if(COUCHBASE_CXX_CLIENT_BUILD_TOOLS)
|
|
605
714
|
add_subdirectory(tools)
|
|
606
715
|
endif()
|
|
@@ -25,13 +25,15 @@ url="https://docs.couchbase.com/cxx-sdk/current/hello-world/overview.html"
|
|
|
25
25
|
arch="all"
|
|
26
26
|
license="Apache-2.0"
|
|
27
27
|
depends=""
|
|
28
|
+
# The -dev subpackage installs the static library's CMake config, which runs find_dependency(ZLIB);
|
|
29
|
+
# a build dependency does not reach whoever installs that package, so zlib-dev is declared for it
|
|
30
|
+
# here as it is in the RPM and Debian manifests.
|
|
31
|
+
depends_dev="zlib-dev"
|
|
28
32
|
makedepends="
|
|
29
33
|
linux-headers
|
|
30
34
|
cmake
|
|
31
35
|
ninja
|
|
32
|
-
|
|
33
|
-
protobuf-dev
|
|
34
|
-
grpc-dev
|
|
36
|
+
zlib-dev
|
|
35
37
|
nlohmann-json
|
|
36
38
|
"
|
|
37
39
|
subpackages="${pkgname}-dev ${pkgname}-tools"
|
|
@@ -49,6 +51,7 @@ build() {
|
|
|
49
51
|
-DCOUCHBASE_CXX_CLIENT_PKGCONFIG_VERSION="${pkgver}" \
|
|
50
52
|
-DCOUCHBASE_CXX_CLIENT_INSTALL=ON \
|
|
51
53
|
-DCOUCHBASE_CXX_CLIENT_STATIC_BORINGSSL=ON \
|
|
54
|
+
-DCOUCHBASE_CXX_CLIENT_PACKAGE_BUILD=ON \
|
|
52
55
|
-DCOUCHBASE_CXX_CLIENT_BUILD_EXAMPLES=OFF \
|
|
53
56
|
-DCOUCHBASE_CXX_CLIENT_BUILD_TESTS=OFF \
|
|
54
57
|
-DCOUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY=ON \
|
|
@@ -60,11 +63,29 @@ build() {
|
|
|
60
63
|
|
|
61
64
|
tools() {
|
|
62
65
|
pkgdesc="${pkgdesc} (tools)"
|
|
63
|
-
depends="${pkgname}=${pkgver}-r${pkgrel}"
|
|
64
66
|
|
|
65
67
|
amove usr/bin
|
|
68
|
+
|
|
69
|
+
# cbc no longer depends on the library package and carries the SDK and taocpp code inside the
|
|
70
|
+
# binary, so the notices for that code have to ship with it. Copied under this subpackage's own
|
|
71
|
+
# documentation directory rather than shared with the base package, which is what the Debian
|
|
72
|
+
# packaging has to do -- dpkg rejects two packages owning one path even when the contents match.
|
|
73
|
+
# Whether apk would tolerate sharing was not established; a private directory needs no answer.
|
|
74
|
+
local _doc="${subpkgdir}/usr/share/doc/${subpkgname}"
|
|
75
|
+
mkdir -p "${_doc}/tao/json" "${_doc}/tao/pegtl"
|
|
76
|
+
cp "${pkgdir}/usr/share/doc/couchbase_cxx_client/LICENSE.txt" "${_doc}/"
|
|
77
|
+
cp "${pkgdir}/usr/share/doc/tao/json/LICENSE" "${_doc}/tao/json/"
|
|
78
|
+
cp "${pkgdir}/usr/share/doc/tao/pegtl/LICENSE" "${_doc}/tao/pegtl/"
|
|
79
|
+
# And the notices for the vendored dependencies compiled into cbc, which the base package
|
|
80
|
+
# receives from the install step but this subpackage does not.
|
|
81
|
+
cp -r "${pkgdir}/usr/share/doc/couchbase_cxx_client/third_party" "${_doc}/"
|
|
66
82
|
}
|
|
67
83
|
|
|
68
84
|
package() {
|
|
69
85
|
DESTDIR="${pkgdir}" cmake --install apk-build
|
|
86
|
+
# The vendored gRPC and curl install their headers, archives and pkg-config files regardless of
|
|
87
|
+
# the options that are supposed to gate them; cmake/GrpcProtobuf.cmake and
|
|
88
|
+
# cmake/ThirdPartyDependencies.cmake redirect all of it under this one prefix so it can be
|
|
89
|
+
# dropped in a single step. Nothing packaged here comes from it.
|
|
90
|
+
rm -rf "${pkgdir}/usr/vendored-not-installed"
|
|
70
91
|
}
|
|
@@ -31,12 +31,24 @@ function(bundle_static_library tgt_name bundled_tgt_name)
|
|
|
31
31
|
endfunction()
|
|
32
32
|
|
|
33
33
|
function(_recursively_collect_dependencies input_target)
|
|
34
|
-
|
|
34
|
+
# Both properties, not one. A concrete target's LINK_LIBRARIES holds what it links for itself,
|
|
35
|
+
# while INTERFACE_LINK_LIBRARIES holds what it imposes on whoever links IT -- and the second is
|
|
36
|
+
# exactly what a consumer of the installed archive inherits. cmake/DetectStandardFilesystem.cmake
|
|
37
|
+
# adds stdc++fs that way, so reading only the first would drop a library that is mandatory on
|
|
38
|
+
# older toolchains. An INTERFACE_LIBRARY has no LINK_LIBRARIES at all; get_target_property simply
|
|
39
|
+
# reports it absent and the loop below skips the sentinel.
|
|
40
|
+
set(public_dependencies)
|
|
35
41
|
get_target_property(_input_type ${input_target} TYPE)
|
|
36
|
-
if(${_input_type} STREQUAL "INTERFACE_LIBRARY")
|
|
37
|
-
|
|
42
|
+
if(NOT ${_input_type} STREQUAL "INTERFACE_LIBRARY")
|
|
43
|
+
get_target_property(_own_dependencies ${input_target} LINK_LIBRARIES)
|
|
44
|
+
if(_own_dependencies)
|
|
45
|
+
list(APPEND public_dependencies ${_own_dependencies})
|
|
46
|
+
endif()
|
|
47
|
+
endif()
|
|
48
|
+
get_target_property(_interface_dependencies ${input_target} INTERFACE_LINK_LIBRARIES)
|
|
49
|
+
if(_interface_dependencies)
|
|
50
|
+
list(APPEND public_dependencies ${_interface_dependencies})
|
|
38
51
|
endif()
|
|
39
|
-
get_target_property(public_dependencies ${input_target} ${_input_link_libraries})
|
|
40
52
|
foreach(candidate IN LISTS public_dependencies)
|
|
41
53
|
strip_build_interface("${candidate}" dependency)
|
|
42
54
|
if(TARGET ${dependency})
|
|
@@ -47,32 +59,152 @@ function(bundle_static_library tgt_name bundled_tgt_name)
|
|
|
47
59
|
get_target_property(_type ${dependency} TYPE)
|
|
48
60
|
if(${_type} STREQUAL "STATIC_LIBRARY")
|
|
49
61
|
list(APPEND static_libs ${dependency})
|
|
62
|
+
else()
|
|
63
|
+
get_target_property(_imported ${dependency} IMPORTED)
|
|
64
|
+
if(_type MATCHES "^(SHARED|MODULE|UNKNOWN)_LIBRARY$"
|
|
65
|
+
OR (_type STREQUAL "INTERFACE_LIBRARY" AND _imported))
|
|
66
|
+
# Its content stays outside the archive, so a consumer of the installed archive has to
|
|
67
|
+
# be told about it. Recorded, not archived.
|
|
68
|
+
#
|
|
69
|
+
# An IMPORTED interface library counts even though it contributes no objects: that is
|
|
70
|
+
# the shape pkg_check_modules(... IMPORTED_TARGET) produces, and dropping it would lose
|
|
71
|
+
# the link directories and options that come with it -- which is the whole reason
|
|
72
|
+
# cmake/OpenSSL.cmake falls back to pkg-config in the first place. An interface target
|
|
73
|
+
# defined in this build is a different thing: it carries headers, and whatever it links
|
|
74
|
+
# is reached by recursing through it.
|
|
75
|
+
#
|
|
76
|
+
# OBJECT libraries are never recorded: their objects are compiled straight into the
|
|
77
|
+
# target being archived.
|
|
78
|
+
list(APPEND external_libs ${dependency})
|
|
79
|
+
endif()
|
|
50
80
|
endif()
|
|
51
81
|
|
|
82
|
+
# Recurse into targets this build defines, and stop at imported ones.
|
|
83
|
+
#
|
|
84
|
+
# An imported target describes something already built elsewhere: whatever it needs comes
|
|
85
|
+
# back with it when the consumer calls find_dependency on the package that defines it, so
|
|
86
|
+
# naming its interface piecemeal adds nothing. Descending into one is actively harmful --
|
|
87
|
+
# the platform's gRPC drags in around a hundred and seventy absl:: interface targets, none
|
|
88
|
+
# of which a consumer has to name because linking gRPC::grpc++ supplies them all.
|
|
89
|
+
# An imported STATIC library is the exception: it gets archived like any other, so whatever
|
|
90
|
+
# it needs is now inside the bundle and its interface still has to be walked. Only imported
|
|
91
|
+
# targets that stay OUTSIDE the archive are left unexplored.
|
|
92
|
+
get_target_property(_dependency_imported ${dependency} IMPORTED)
|
|
93
|
+
if(_type STREQUAL "STATIC_LIBRARY")
|
|
94
|
+
set(_dependency_imported FALSE)
|
|
95
|
+
endif()
|
|
52
96
|
get_property(library_already_added GLOBAL PROPERTY _${tgt_name}_static_bundle_${dependency})
|
|
53
|
-
if(NOT library_already_added)
|
|
97
|
+
if(NOT library_already_added AND NOT _dependency_imported)
|
|
54
98
|
set_property(GLOBAL PROPERTY _${tgt_name}_static_bundle_${dependency} ON)
|
|
55
99
|
_recursively_collect_dependencies(${dependency})
|
|
56
100
|
endif()
|
|
101
|
+
elseif(dependency
|
|
102
|
+
AND NOT dependency MATCHES "NOTFOUND$"
|
|
103
|
+
AND NOT dependency MATCHES "^\\$<"
|
|
104
|
+
AND NOT dependency MATCHES "^-[^l]")
|
|
105
|
+
# A plain link item rather than a target -- bcrypt.lib, iphlpapi, m, rt, or an absolute path
|
|
106
|
+
# from find_library. These are exactly the dependencies that were repeatedly missed when the
|
|
107
|
+
# installed interface was maintained by hand, because they are contributed from wherever the
|
|
108
|
+
# subdirectory that needs them happens to be.
|
|
109
|
+
#
|
|
110
|
+
# Two things are not link items and are skipped: a generator expression, which cannot be
|
|
111
|
+
# evaluated here, and the "<var>-NOTFOUND" sentinel get_target_property returns for a target
|
|
112
|
+
# that has no link property at all, which would otherwise be published verbatim as
|
|
113
|
+
# -lpublic_dependencies-NOTFOUND.
|
|
114
|
+
list(APPEND external_libs ${dependency})
|
|
115
|
+
elseif(dependency MATCHES "^-[^l]")
|
|
116
|
+
# A link OPTION rather than a library -- enable_sanitizers() adds -fsanitize=... PUBLIC, and
|
|
117
|
+
# an archive built with it carries references into the sanitizer runtime that a consumer's
|
|
118
|
+
# link line must repeat. Kept apart from the libraries because the two are published
|
|
119
|
+
# differently: options as INTERFACE_LINK_OPTIONS and raw entries in Libs.private, libraries
|
|
120
|
+
# as -l names.
|
|
121
|
+
list(APPEND external_opts ${dependency})
|
|
57
122
|
endif()
|
|
58
123
|
endforeach()
|
|
59
124
|
set(static_libs
|
|
60
125
|
${static_libs}
|
|
61
126
|
PARENT_SCOPE)
|
|
127
|
+
set(external_libs
|
|
128
|
+
${external_libs}
|
|
129
|
+
PARENT_SCOPE)
|
|
130
|
+
set(external_opts
|
|
131
|
+
${external_opts}
|
|
132
|
+
PARENT_SCOPE)
|
|
62
133
|
endfunction()
|
|
63
134
|
|
|
64
135
|
_recursively_collect_dependencies(${tgt_name})
|
|
65
136
|
|
|
66
137
|
list(REMOVE_DUPLICATES static_libs)
|
|
138
|
+
if(external_libs)
|
|
139
|
+
list(REMOVE_DUPLICATES external_libs)
|
|
140
|
+
endif()
|
|
141
|
+
if(external_opts)
|
|
142
|
+
list(REMOVE_DUPLICATES external_opts)
|
|
143
|
+
endif()
|
|
144
|
+
# Published for cmake/Packaging.cmake, which turns it into the installed target's link interface
|
|
145
|
+
# and its pkg-config Libs.private, and warns about anything it does not already name.
|
|
146
|
+
set_property(GLOBAL PROPERTY ${bundled_tgt_name}_EXTERNAL_LIBS "${external_libs}")
|
|
147
|
+
set_property(GLOBAL PROPERTY ${bundled_tgt_name}_EXTERNAL_OPTS "${external_opts}")
|
|
67
148
|
|
|
68
149
|
set(bundled_tgt_full_name
|
|
69
150
|
${CMAKE_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${bundled_tgt_name}${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
70
151
|
|
|
71
|
-
|
|
152
|
+
# Selected on the platform before the compiler, because what matters here is which ar is on PATH,
|
|
153
|
+
# not who compiled the objects. Apple's ar comes from cctools and has no MRI mode -- no -M, no
|
|
154
|
+
# ADDLIB -- so on macOS the archives are unpacked and re-archived instead. Keying that branch on
|
|
155
|
+
# AppleClang alone left the MRI path selected for a macOS build driven by any other Clang, a
|
|
156
|
+
# Homebrew or MacPorts LLVM among them, where it cannot work.
|
|
157
|
+
if(APPLE)
|
|
158
|
+
find_program(find NAMES find REQUIRED)
|
|
159
|
+
|
|
160
|
+
set(AR_EXTRACT_DIR "${CMAKE_CURRENT_BINARY_DIR}/tmp_ar_extract")
|
|
161
|
+
set(EXTRACT_COMMANDS "")
|
|
162
|
+
foreach(tgt IN LISTS static_libs)
|
|
163
|
+
list(
|
|
164
|
+
APPEND EXTRACT_COMMANDS
|
|
165
|
+
COMMAND ${CMAKE_COMMAND} -E make_directory ${AR_EXTRACT_DIR}/${tgt}
|
|
166
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${AR_EXTRACT_DIR}/${tgt} ${CMAKE_AR} -x $<TARGET_FILE:${tgt}>)
|
|
167
|
+
endforeach()
|
|
168
|
+
|
|
169
|
+
add_custom_command(
|
|
170
|
+
OUTPUT ${bundled_tgt_full_name}
|
|
171
|
+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${AR_EXTRACT_DIR}
|
|
172
|
+
COMMAND ${CMAKE_COMMAND} -E make_directory ${AR_EXTRACT_DIR} ${EXTRACT_COMMANDS}
|
|
173
|
+
COMMAND ${find} ${AR_EXTRACT_DIR} -name *.o -exec ${CMAKE_AR} -rcs ${bundled_tgt_full_name} {} +
|
|
174
|
+
COMMAND ${CMAKE_AR} -s ${bundled_tgt_full_name}
|
|
175
|
+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${AR_EXTRACT_DIR}
|
|
176
|
+
DEPENDS ${tgt_name} ${static_libs}
|
|
177
|
+
COMMENT "Bundling ${bundled_tgt_name}"
|
|
178
|
+
VERBATIM)
|
|
179
|
+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(Clang|GNU)$")
|
|
72
180
|
file(WRITE ${CMAKE_BINARY_DIR}/${bundled_tgt_name}.ar.in "CREATE ${bundled_tgt_full_name}\n")
|
|
73
181
|
|
|
182
|
+
# GNU ar's MRI lexer does not accept '+' in a filename. binutils 2.35 (EL9) reads
|
|
183
|
+
# "ADDLIB .../libgrpc++.a" as the file ".../libgrpc" followed by the stray token "++" and fails
|
|
184
|
+
# with "libgrpc: No such file or directory"; 2.47 accepts it, so this only shows up on older
|
|
185
|
+
# toolchains. gRPC contributes libgrpc++.a and several siblings, so any archive whose name
|
|
186
|
+
# carries a '+' is staged under a '+'-free name just before ar runs. MRI needs nothing of that
|
|
187
|
+
# path but the name, so how it gets there does not matter -- except on Windows, which this
|
|
188
|
+
# branch also covers through MinGW, and where creating a symlink needs a privilege an ordinary
|
|
189
|
+
# account does not hold. Copy there and link everywhere else.
|
|
190
|
+
set(_bundle_staging ${CMAKE_BINARY_DIR}/bundle_staging)
|
|
191
|
+
set(_bundle_stage_commands COMMAND ${CMAKE_COMMAND} -E make_directory ${_bundle_staging})
|
|
192
|
+
if(WIN32)
|
|
193
|
+
set(_bundle_stage_verb copy)
|
|
194
|
+
else()
|
|
195
|
+
set(_bundle_stage_verb create_symlink)
|
|
196
|
+
endif()
|
|
197
|
+
|
|
74
198
|
foreach(tgt IN LISTS static_libs)
|
|
75
|
-
|
|
199
|
+
if(tgt MATCHES "\\+")
|
|
200
|
+
string(REPLACE "+" "_plus" _bundle_safe_name "${tgt}")
|
|
201
|
+
set(_bundle_staged_lib "${_bundle_staging}/lib${_bundle_safe_name}.a")
|
|
202
|
+
list(APPEND _bundle_stage_commands COMMAND ${CMAKE_COMMAND} -E ${_bundle_stage_verb}
|
|
203
|
+
$<TARGET_FILE:${tgt}> ${_bundle_staged_lib})
|
|
204
|
+
file(APPEND ${CMAKE_BINARY_DIR}/${bundled_tgt_name}.ar.in "ADDLIB ${_bundle_staged_lib}\n")
|
|
205
|
+
else()
|
|
206
|
+
file(APPEND ${CMAKE_BINARY_DIR}/${bundled_tgt_name}.ar.in "ADDLIB $<TARGET_FILE:${tgt}>\n")
|
|
207
|
+
endif()
|
|
76
208
|
endforeach()
|
|
77
209
|
|
|
78
210
|
file(APPEND ${CMAKE_BINARY_DIR}/${bundled_tgt_name}.ar.in "SAVE\n")
|
|
@@ -88,13 +220,12 @@ function(bundle_static_library tgt_name bundled_tgt_name)
|
|
|
88
220
|
set(ar_tool ${CMAKE_CXX_COMPILER_AR})
|
|
89
221
|
endif()
|
|
90
222
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
find_program(SED sed)
|
|
95
|
-
endif()
|
|
223
|
+
# GNU sed: -i takes no argument here. macOS never reaches this branch, so the BSD sed that
|
|
224
|
+
# needed gsed is out of scope.
|
|
225
|
+
find_program(SED sed REQUIRED)
|
|
96
226
|
|
|
97
227
|
add_custom_command(
|
|
228
|
+
${_bundle_stage_commands}
|
|
98
229
|
COMMAND ${SED} -i "s|${CMAKE_BINARY_DIR}/||g" ${bundled_tgt_name}.ar
|
|
99
230
|
COMMAND ${ar_tool} -M < ${bundled_tgt_name}.ar
|
|
100
231
|
OUTPUT ${bundled_tgt_full_name}
|
|
@@ -102,28 +233,6 @@ function(bundle_static_library tgt_name bundled_tgt_name)
|
|
|
102
233
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
103
234
|
COMMENT "Bundling ${bundled_tgt_name}"
|
|
104
235
|
VERBATIM)
|
|
105
|
-
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
|
106
|
-
find_program(find NAMES find REQUIRED)
|
|
107
|
-
|
|
108
|
-
set(AR_EXTRACT_DIR "${CMAKE_CURRENT_BINARY_DIR}/tmp_ar_extract")
|
|
109
|
-
set(EXTRACT_COMMANDS "")
|
|
110
|
-
foreach(tgt IN LISTS static_libs)
|
|
111
|
-
list(
|
|
112
|
-
APPEND EXTRACT_COMMANDS
|
|
113
|
-
COMMAND ${CMAKE_COMMAND} -E make_directory ${AR_EXTRACT_DIR}/${tgt}
|
|
114
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${AR_EXTRACT_DIR}/${tgt} ${CMAKE_AR} -x $<TARGET_FILE:${tgt}>)
|
|
115
|
-
endforeach()
|
|
116
|
-
|
|
117
|
-
add_custom_command(
|
|
118
|
-
OUTPUT ${bundled_tgt_full_name}
|
|
119
|
-
COMMAND ${CMAKE_COMMAND} -E rm -rf ${AR_EXTRACT_DIR}
|
|
120
|
-
COMMAND ${CMAKE_COMMAND} -E make_directory ${AR_EXTRACT_DIR} ${EXTRACT_COMMANDS}
|
|
121
|
-
COMMAND ${find} ${AR_EXTRACT_DIR} -name *.o -exec ${CMAKE_AR} -rcs ${bundled_tgt_full_name} {} +
|
|
122
|
-
COMMAND ${CMAKE_AR} -s ${bundled_tgt_full_name}
|
|
123
|
-
COMMAND ${CMAKE_COMMAND} -E rm -rf ${AR_EXTRACT_DIR}
|
|
124
|
-
DEPENDS ${tgt_name} ${static_libs}
|
|
125
|
-
COMMENT "Bundling ${bundled_tgt_name}"
|
|
126
|
-
VERBATIM)
|
|
127
236
|
elseif(MSVC)
|
|
128
237
|
get_filename_component(LINKER_DIR "${CMAKE_LINKER}" DIRECTORY)
|
|
129
238
|
find_program(
|