couchbase 3.8.2 → 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 +1 -1
- 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 +121 -55
- 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 +229 -42
- 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 +1 -2
- 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 +309 -301
- 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 +151 -21
- data/ext/couchbase/core/io/streams.hxx +48 -1
- 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/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 +108 -63
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +19 -2
- 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 +165 -72
- 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 +2 -2
- 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 +183 -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 +17 -0
- 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 +174 -42
- 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 +91 -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
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
# Find or build gRPC and Protobuf for the gRPC-based components (the couchbase2:// transport and the
|
|
2
|
+
# FIT performer).
|
|
3
|
+
#
|
|
4
|
+
# COUCHBASE_CXX_CLIENT_SYSTEM_GRPC selects where they come from:
|
|
5
|
+
#
|
|
6
|
+
# AUTO link the platform's packages where they exist, build from source where they do not
|
|
7
|
+
# ON require the platform's packages; a build that cannot use them is an error
|
|
8
|
+
# OFF always build from source
|
|
9
|
+
#
|
|
10
|
+
# AUTO chooses on presence, not on suitability: a platform gRPC that is present but unusable is an
|
|
11
|
+
# error under AUTO too, for the reason given at the protobuf floor below.
|
|
12
|
+
#
|
|
13
|
+
# The packages need OFF, which COUCHBASE_CXX_CLIENT_PACKAGE_BUILD selects: the platform's gRPC is
|
|
14
|
+
# linked against the platform's OpenSSL, while this project links BoringSSL statically
|
|
15
|
+
# (COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL), so shipping it would put two TLS stacks in one address
|
|
16
|
+
# space. A source build also decouples the artefact from the distribution's protobuf version: the
|
|
17
|
+
# .proto schemas use proto3 "optional", whose has_*() accessors protobuf only emits from 3.15.
|
|
18
|
+
#
|
|
19
|
+
# Everything else defaults to AUTO, because a source build of gRPC and its transitive dependencies
|
|
20
|
+
# costs far more than the rest of this project put together, and neither reason above applies to a
|
|
21
|
+
# build that is not going to be redistributed.
|
|
22
|
+
#
|
|
23
|
+
# This module MUST be included before OpenTelemetry so OTel's protobuf.cmake detects the
|
|
24
|
+
# already-available protobuf targets and reuses them rather than resolving a second copy.
|
|
25
|
+
|
|
26
|
+
include(FetchContent)
|
|
27
|
+
|
|
28
|
+
if(COUCHBASE_CXX_CLIENT_PACKAGE_BUILD)
|
|
29
|
+
set(_couchbase_cxx_client_system_grpc_default "OFF")
|
|
30
|
+
else()
|
|
31
|
+
set(_couchbase_cxx_client_system_grpc_default "AUTO")
|
|
32
|
+
endif()
|
|
33
|
+
set(COUCHBASE_CXX_CLIENT_SYSTEM_GRPC
|
|
34
|
+
"${_couchbase_cxx_client_system_grpc_default}"
|
|
35
|
+
CACHE STRING "Where gRPC/Protobuf come from: AUTO (platform packages where they exist), ON
|
|
36
|
+
(require them), OFF (always build from source)")
|
|
37
|
+
set_property(CACHE COUCHBASE_CXX_CLIENT_SYSTEM_GRPC PROPERTY STRINGS AUTO ON OFF)
|
|
38
|
+
|
|
39
|
+
# Normalise the value, and reject anything that is not one of the three.
|
|
40
|
+
#
|
|
41
|
+
# The STRINGS property above only fills the GUI drop-down; it rejects nothing. Every string CMake
|
|
42
|
+
# reads as true takes the ON branch below, so an unrecognised value -- a misspelt AUTO among them --
|
|
43
|
+
# would silently select the platform's TLS stack for a binary meant to ship its own. Boolean
|
|
44
|
+
# spellings are folded onto ON and OFF rather than refused, because two of the three values are
|
|
45
|
+
# already booleans and a caller who writes TRUE means ON.
|
|
46
|
+
string(TOUPPER "${COUCHBASE_CXX_CLIENT_SYSTEM_GRPC}" _couchbase_cxx_client_system_grpc)
|
|
47
|
+
if(_couchbase_cxx_client_system_grpc MATCHES "^(ON|TRUE|YES|Y|1)$")
|
|
48
|
+
set(_couchbase_cxx_client_system_grpc "ON")
|
|
49
|
+
elseif(_couchbase_cxx_client_system_grpc MATCHES "^(OFF|FALSE|NO|N|0)$")
|
|
50
|
+
set(_couchbase_cxx_client_system_grpc "OFF")
|
|
51
|
+
elseif(NOT _couchbase_cxx_client_system_grpc STREQUAL "AUTO")
|
|
52
|
+
message(FATAL_ERROR "COUCHBASE_CXX_CLIENT_SYSTEM_GRPC must be AUTO, ON or OFF, not "
|
|
53
|
+
"'${COUCHBASE_CXX_CLIENT_SYSTEM_GRPC}'.")
|
|
54
|
+
endif()
|
|
55
|
+
set(COUCHBASE_CXX_CLIENT_SYSTEM_GRPC
|
|
56
|
+
"${_couchbase_cxx_client_system_grpc}"
|
|
57
|
+
CACHE STRING "Where gRPC/Protobuf come from: AUTO (platform packages where they exist), ON
|
|
58
|
+
(require them), OFF (always build from source)" FORCE)
|
|
59
|
+
|
|
60
|
+
# The platform's packages are built against libstdc++, so a libc++ build cannot link them: the ABI
|
|
61
|
+
# mismatch surfaces as unresolved std:: symbols at link time.
|
|
62
|
+
set(_couchbase_cxx_client_libcxx FALSE)
|
|
63
|
+
if(CMAKE_CXX_FLAGS MATCHES "-stdlib=libc\\+\\+")
|
|
64
|
+
set(_couchbase_cxx_client_libcxx TRUE)
|
|
65
|
+
endif()
|
|
66
|
+
|
|
67
|
+
# AUTO is a string, and if() treats any string that is not a false constant as true, so it must be
|
|
68
|
+
# matched before the boolean branch rather than after it.
|
|
69
|
+
if(COUCHBASE_CXX_CLIENT_SYSTEM_GRPC STREQUAL "AUTO")
|
|
70
|
+
if(_couchbase_cxx_client_libcxx)
|
|
71
|
+
message(STATUS "Using libc++; skipping system gRPC to avoid an ABI mismatch")
|
|
72
|
+
else()
|
|
73
|
+
find_package(gRPC CONFIG QUIET)
|
|
74
|
+
endif()
|
|
75
|
+
elseif(COUCHBASE_CXX_CLIENT_SYSTEM_GRPC)
|
|
76
|
+
# Asked for explicitly: report what stops it rather than quietly building from source, which would
|
|
77
|
+
# ignore what the caller asked for.
|
|
78
|
+
if(_couchbase_cxx_client_libcxx)
|
|
79
|
+
message(
|
|
80
|
+
FATAL_ERROR
|
|
81
|
+
"COUCHBASE_CXX_CLIENT_SYSTEM_GRPC is ON, but this build uses -stdlib=libc++ and the platform's "
|
|
82
|
+
"gRPC is built against libstdc++. Set it to OFF to build gRPC from source.")
|
|
83
|
+
endif()
|
|
84
|
+
find_package(gRPC CONFIG QUIET)
|
|
85
|
+
if(NOT gRPC_FOUND)
|
|
86
|
+
message(
|
|
87
|
+
FATAL_ERROR
|
|
88
|
+
"COUCHBASE_CXX_CLIENT_SYSTEM_GRPC is ON but no gRPC package was found. Install grpc-devel and "
|
|
89
|
+
"grpc-plugins (protobuf >= 3.15), or set it to OFF to build gRPC from source.")
|
|
90
|
+
endif()
|
|
91
|
+
endif()
|
|
92
|
+
|
|
93
|
+
# The schemas use proto3 "optional", whose has_*() accessors protobuf emits only from 3.15. Applied
|
|
94
|
+
# as a floor here, an older platform package is named at configure time; accepted, it fails much
|
|
95
|
+
# later inside the generated code with nothing pointing at the version.
|
|
96
|
+
#
|
|
97
|
+
# Too old is an error under AUTO as well, rather than a fall back to the source build. gRPCConfig
|
|
98
|
+
# resolves Protobuf as a dependency, so the platform's protobuf::libprotobuf and protobuf::libprotoc
|
|
99
|
+
# exist from the moment gRPC is found, and an imported target cannot be withdrawn. A source build
|
|
100
|
+
# after that point dies in protobuf's own CMakeLists with "add_library cannot create ALIAS target
|
|
101
|
+
# protobuf::libprotobuf because another target with the same name already exists". Probing the
|
|
102
|
+
# version before looking for gRPC does not avoid it either: find_package(Protobuf) imports the same
|
|
103
|
+
# targets, which moves the collision onto every host carrying protobuf without gRPC.
|
|
104
|
+
if(gRPC_FOUND)
|
|
105
|
+
message(STATUS "Found system gRPC: ${gRPC_VERSION}")
|
|
106
|
+
set(protobuf_MODULE_COMPATIBLE ON CACHE BOOL "")
|
|
107
|
+
find_package(Protobuf 3.15 CONFIG QUIET)
|
|
108
|
+
if(NOT Protobuf_FOUND)
|
|
109
|
+
find_package(Protobuf 3.15 MODULE QUIET)
|
|
110
|
+
endif()
|
|
111
|
+
if(NOT Protobuf_FOUND)
|
|
112
|
+
message(
|
|
113
|
+
FATAL_ERROR
|
|
114
|
+
"The platform's gRPC ${gRPC_VERSION} was found, but its protobuf is older than 3.15 and does "
|
|
115
|
+
"not emit the has_*() accessors the schemas need. Set COUCHBASE_CXX_CLIENT_SYSTEM_GRPC=OFF "
|
|
116
|
+
"to build gRPC and protobuf from source.")
|
|
117
|
+
endif()
|
|
118
|
+
|
|
119
|
+
# Libraries are not enough: cmake/gRPC_Generate.cmake runs protoc with the gRPC C++ plugin, and
|
|
120
|
+
# distributions ship those compilers in their own packages (protobuf-compiler,
|
|
121
|
+
# protobuf-compiler-grpc / grpc-plugins) separate from the -dev packages that satisfy the
|
|
122
|
+
# find_package calls above. Without this check a build configures cleanly and then fails in code
|
|
123
|
+
# generation, where the missing package is much harder to recognise.
|
|
124
|
+
# Both generators name the TARGETS unconditionally -- cmake/gRPC_Generate.cmake runs
|
|
125
|
+
# "COMMAND protobuf::protoc" and lists both in DEPENDS -- so finding the executables is not enough
|
|
126
|
+
# on its own. Where only a program is found, it is wrapped in the imported target the generators
|
|
127
|
+
# expect; where neither exists, the build is refused here.
|
|
128
|
+
set(_missing_codegen)
|
|
129
|
+
if(NOT TARGET protobuf::protoc)
|
|
130
|
+
find_program(Protobuf_PROTOC_EXECUTABLE protoc)
|
|
131
|
+
if(Protobuf_PROTOC_EXECUTABLE)
|
|
132
|
+
add_executable(protobuf::protoc IMPORTED GLOBAL)
|
|
133
|
+
set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
|
|
134
|
+
else()
|
|
135
|
+
list(APPEND _missing_codegen "protoc")
|
|
136
|
+
endif()
|
|
137
|
+
endif()
|
|
138
|
+
if(NOT TARGET gRPC::grpc_cpp_plugin)
|
|
139
|
+
find_program(_grpc_cpp_plugin grpc_cpp_plugin)
|
|
140
|
+
if(_grpc_cpp_plugin)
|
|
141
|
+
add_executable(gRPC::grpc_cpp_plugin IMPORTED GLOBAL)
|
|
142
|
+
set_target_properties(gRPC::grpc_cpp_plugin PROPERTIES IMPORTED_LOCATION "${_grpc_cpp_plugin}")
|
|
143
|
+
else()
|
|
144
|
+
list(APPEND _missing_codegen "grpc_cpp_plugin")
|
|
145
|
+
endif()
|
|
146
|
+
endif()
|
|
147
|
+
if(_missing_codegen)
|
|
148
|
+
message(
|
|
149
|
+
FATAL_ERROR
|
|
150
|
+
"The platform's gRPC ${gRPC_VERSION} was found, but the code generator(s) it needs are not "
|
|
151
|
+
"installed: ${_missing_codegen}. Install the distribution's protobuf-compiler and gRPC "
|
|
152
|
+
"plugin packages, or set COUCHBASE_CXX_CLIENT_SYSTEM_GRPC=OFF to build them from source.")
|
|
153
|
+
endif()
|
|
154
|
+
endif()
|
|
155
|
+
|
|
156
|
+
if(NOT gRPC_FOUND)
|
|
157
|
+
message(STATUS "Building gRPC and protobuf from source")
|
|
158
|
+
|
|
159
|
+
# CMake 4.x removed compatibility with cmake_minimum_required < 3.5.
|
|
160
|
+
# Several gRPC submodules (c-ares, protobuf/utf8_range) have old minimum
|
|
161
|
+
# versions that would cause hard errors without this policy escape hatch.
|
|
162
|
+
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.27")
|
|
163
|
+
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
|
|
164
|
+
endif()
|
|
165
|
+
|
|
166
|
+
# Determine which submodules gRPC needs.
|
|
167
|
+
#
|
|
168
|
+
# The list is part of CPM's cache key: a different submodule set produces a different hash and
|
|
169
|
+
# therefore a different third_party_cache directory, so it must be IDENTICAL on every platform
|
|
170
|
+
# that should hit the cache the source tarball ships. That is why third_party/zlib is fetched
|
|
171
|
+
# unconditionally even though only Windows *uses* it (gRPC_ZLIB_PROVIDER below stays "package"
|
|
172
|
+
# elsewhere -- fetching is cheap, the provider switch decides whether it is built). gRPC's bundled
|
|
173
|
+
# zlib has an fdopen macro in zutil.h that conflicts with newer macOS SDK headers, hence system
|
|
174
|
+
# zlib everywhere it exists.
|
|
175
|
+
# Hiding gRPC, protobuf, abseil, re2 and c-ares keeps them out of libcouchbase_cxx_client's
|
|
176
|
+
# dynamic symbol table, where an application linking its own protobuf or gRPC would otherwise
|
|
177
|
+
# interpose on ours at load time. That is what a shipped library needs, so it follows
|
|
178
|
+
# COUCHBASE_CXX_CLIENT_PACKAGE_BUILD.
|
|
179
|
+
#
|
|
180
|
+
# It must NOT be the default, for the same reason the generated stubs are not hidden by default.
|
|
181
|
+
# Hidden symbols cannot be preempted, so an executable linking BOTH the shared client and anything
|
|
182
|
+
# that pulls in gRPC -- every CNG test does, through couchbase_cxx_protostellar -- ends up with a
|
|
183
|
+
# second gRPC beside the one inside the .so. Two ExecCtx thread-locals and two closure lists in one
|
|
184
|
+
# process crash in grpc_closure_list_append, which is what the tsan leg showed across ten tests:
|
|
185
|
+
# it is the only leg that builds gRPC from source, so the only one where the duplicate is real.
|
|
186
|
+
if(COUCHBASE_CXX_CLIENT_PACKAGE_BUILD)
|
|
187
|
+
set(_grpc_visibility_options "CMAKE_C_VISIBILITY_PRESET hidden" "CMAKE_CXX_VISIBILITY_PRESET hidden")
|
|
188
|
+
else()
|
|
189
|
+
set(_grpc_visibility_options)
|
|
190
|
+
endif()
|
|
191
|
+
|
|
192
|
+
set(_GRPC_SUBMODULES
|
|
193
|
+
"third_party/re2"
|
|
194
|
+
"third_party/abseil-cpp"
|
|
195
|
+
"third_party/protobuf"
|
|
196
|
+
"third_party/cares/cares"
|
|
197
|
+
"third_party/zlib"
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# If the project already has BoringSSL targets (from cmake/OpenSSL.cmake),
|
|
201
|
+
# reuse them instead of letting gRPC build a second copy.
|
|
202
|
+
if(TARGET ssl AND TARGET crypto)
|
|
203
|
+
# Pre-set gRPC's internal SSL variables so ssl.cmake can be skipped
|
|
204
|
+
set(_gRPC_SSL_LIBRARIES ssl crypto CACHE INTERNAL "")
|
|
205
|
+
get_target_property(_boring_include ssl INTERFACE_INCLUDE_DIRECTORIES)
|
|
206
|
+
if(_boring_include)
|
|
207
|
+
set(_gRPC_SSL_INCLUDE_DIR "${_boring_include}" CACHE INTERNAL "")
|
|
208
|
+
else()
|
|
209
|
+
set(_gRPC_SSL_INCLUDE_DIR "" CACHE INTERNAL "")
|
|
210
|
+
endif()
|
|
211
|
+
set(gRPC_SSL_PROVIDER "" CACHE STRING "" FORCE)
|
|
212
|
+
elseif(TARGET PkgConfig::PKG_CONFIG_OPENSSL)
|
|
213
|
+
# OpenSSL was found via pkg-config (when CMake's find_package(OpenSSL) returned an unusable setup).
|
|
214
|
+
# Reuse PkgConfig::PKG_CONFIG_OPENSSL directly so gRPC links the exact same OpenSSL library.
|
|
215
|
+
set(_gRPC_SSL_LIBRARIES PkgConfig::PKG_CONFIG_OPENSSL CACHE INTERNAL "")
|
|
216
|
+
set(gRPC_SSL_PROVIDER "" CACHE STRING "" FORCE)
|
|
217
|
+
else()
|
|
218
|
+
# No project-provided BoringSSL or pkg-config OpenSSL; point gRPC at the OpenSSL package.
|
|
219
|
+
find_package(OpenSSL REQUIRED)
|
|
220
|
+
set(gRPC_SSL_PROVIDER "package" CACHE STRING "" FORCE)
|
|
221
|
+
endif()
|
|
222
|
+
|
|
223
|
+
set(gRPC_INSTALL OFF CACHE BOOL "" FORCE)
|
|
224
|
+
# gRPC emits install() rules that gRPC_INSTALL does not gate -- etc/roots.pem, its headers, its
|
|
225
|
+
# pkg-config files. Vendored, those stage into our install tree, where they are files no package
|
|
226
|
+
# owns: rpmbuild fails the build over them, and a DEB would ship gRPC's headers next to ours.
|
|
227
|
+
# Point every gRPC install destination at one throwaway prefix instead, which the RPM and DEB
|
|
228
|
+
# install steps delete in a single line. The alternative -- deleting each path -- silently grows a
|
|
229
|
+
# new leak every time gRPC adds a rule.
|
|
230
|
+
foreach(_grpc_install_dir BINDIR LIBDIR INCLUDEDIR CMAKEDIR SHAREDIR)
|
|
231
|
+
set(gRPC_INSTALL_${_grpc_install_dir}
|
|
232
|
+
"${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}/${_grpc_install_dir}"
|
|
233
|
+
CACHE STRING "" FORCE)
|
|
234
|
+
endforeach()
|
|
235
|
+
set(gRPC_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
236
|
+
# gRPC's CMakeLists downloads xds/envoy-api/googleapis/opencensus-proto archives from the
|
|
237
|
+
# grpc-bazel-mirror at configure time when their third_party/ directories do not exist. None of
|
|
238
|
+
# the gRPC targets built here need them: a fresh git clone leaves empty submodule-placeholder
|
|
239
|
+
# directories that suppress the download, but a source tarball carries files only, so the
|
|
240
|
+
# placeholders vanish and the download fires. Disabling it keeps from-tarball builds offline.
|
|
241
|
+
set(gRPC_DOWNLOAD_ARCHIVES OFF CACHE BOOL "" FORCE)
|
|
242
|
+
# gRPC's systemd support defaults to AUTO, which links libsystemd whenever the build host happens
|
|
243
|
+
# to have systemd-devel installed. That makes the artefact's dependencies a property of the build
|
|
244
|
+
# machine rather than of the source, and it breaks executables linking the static client, which do
|
|
245
|
+
# not inherit the -lsystemd that the shared library records. It provides only socket activation
|
|
246
|
+
# (sd_listen_fds) for gRPC servers, which nothing here uses.
|
|
247
|
+
set(gRPC_USE_SYSTEMD "OFF" CACHE STRING "" FORCE)
|
|
248
|
+
set(gRPC_BUILD_GRPC_CPP_PLUGIN ON CACHE BOOL "" FORCE)
|
|
249
|
+
set(gRPC_BUILD_GRPC_CSHARP_PLUGIN OFF CACHE BOOL "" FORCE)
|
|
250
|
+
set(gRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN OFF CACHE BOOL "" FORCE)
|
|
251
|
+
set(gRPC_BUILD_GRPC_PHP_PLUGIN OFF CACHE BOOL "" FORCE)
|
|
252
|
+
set(gRPC_BUILD_GRPC_NODE_PLUGIN OFF CACHE BOOL "" FORCE)
|
|
253
|
+
set(gRPC_BUILD_GRPC_PYTHON_PLUGIN OFF CACHE BOOL "" FORCE)
|
|
254
|
+
set(gRPC_BUILD_GRPC_RUBY_PLUGIN OFF CACHE BOOL "" FORCE)
|
|
255
|
+
if(WIN32)
|
|
256
|
+
set(gRPC_ZLIB_PROVIDER "module" CACHE STRING "" FORCE)
|
|
257
|
+
else()
|
|
258
|
+
set(gRPC_ZLIB_PROVIDER "package" CACHE STRING "" FORCE)
|
|
259
|
+
endif()
|
|
260
|
+
set(gRPC_RE2_PROVIDER "module" CACHE STRING "" FORCE)
|
|
261
|
+
set(RE2_BUILD_TESTING OFF CACHE BOOL "" FORCE)
|
|
262
|
+
set(gRPC_PROTOBUF_PROVIDER "module" CACHE STRING "" FORCE)
|
|
263
|
+
set(gRPC_PROTOBUF_PACKAGE_TYPE "CONFIG" CACHE STRING "" FORCE)
|
|
264
|
+
set(gRPC_ABSL_PROVIDER "module" CACHE STRING "" FORCE)
|
|
265
|
+
set(gRPC_CARES_PROVIDER "module" CACHE STRING "" FORCE)
|
|
266
|
+
set(protobuf_INSTALL OFF CACHE BOOL "" FORCE)
|
|
267
|
+
set(protobuf_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
268
|
+
set(protobuf_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
|
269
|
+
set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "" FORCE)
|
|
270
|
+
|
|
271
|
+
# Fetched via CPM, NOT raw FetchContent, so the source-tarball machinery captures it: packaging
|
|
272
|
+
# configures with CPM_DOWNLOAD_ALL + CPM_USE_NAMED_CACHE_DIRECTORIES and harvests
|
|
273
|
+
# CPM_SOURCE_CACHE into the tarball's third_party_cache/, and from-tarball builds
|
|
274
|
+
# (cmake/TarballRelease.cmake) point CPM back at it. FetchContent populates into the build tree
|
|
275
|
+
# instead, which packaging deletes -- so gRPC would be re-cloned from github.com on every
|
|
276
|
+
# from-tarball build, and an offline build would simply fail. CPM forwards the GIT_* arguments to
|
|
277
|
+
# FetchContent underneath, so fetch semantics are unchanged; only the source location differs.
|
|
278
|
+
#
|
|
279
|
+
# gRPC v1.65.x is the last series that ships protobuf 3.x which is compatible with the protobuf
|
|
280
|
+
# version opentelemetry-cpp 1.23 expects.
|
|
281
|
+
# https://github.com/grpc/grpc/releases
|
|
282
|
+
cpmaddpackage(
|
|
283
|
+
NAME
|
|
284
|
+
grpc
|
|
285
|
+
VERSION
|
|
286
|
+
1.65.5
|
|
287
|
+
GIT_REPOSITORY
|
|
288
|
+
"https://github.com/grpc/grpc.git"
|
|
289
|
+
GIT_TAG
|
|
290
|
+
v1.65.5
|
|
291
|
+
GIT_SHALLOW
|
|
292
|
+
TRUE
|
|
293
|
+
GIT_SUBMODULES
|
|
294
|
+
${_GRPC_SUBMODULES}
|
|
295
|
+
OPTIONS
|
|
296
|
+
# Send every install rule these projects declare into a throwaway prefix. gRPC's own rules are
|
|
297
|
+
# not gated by gRPC_INSTALL, and re2's are not gated at all -- it installs its headers, its
|
|
298
|
+
# archive and its CMake package unconditionally -- while c-ares additionally installs adig,
|
|
299
|
+
# ahost and acountry into bindir. Left alone they land in our install tree as files no package
|
|
300
|
+
# owns, which fails rpmbuild outright and would put gRPC's headers in the DEB beside ours.
|
|
301
|
+
# Redirecting the GNUInstallDirs variables catches all of them at once, including submodules
|
|
302
|
+
# added later; CPM applies OPTIONS as ordinary variables scoped to this package, so the
|
|
303
|
+
# project's own install destinations are unaffected.
|
|
304
|
+
"CMAKE_INSTALL_BINDIR ${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}/bin"
|
|
305
|
+
"CMAKE_INSTALL_LIBDIR ${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}/lib"
|
|
306
|
+
"CMAKE_INSTALL_INCLUDEDIR ${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}/include"
|
|
307
|
+
"CMAKE_INSTALL_DATADIR ${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}/share"
|
|
308
|
+
"CMAKE_INSTALL_DATAROOTDIR ${COUCHBASE_CXX_CLIENT_VENDORED_INSTALL_JUNK_DIR}/share"
|
|
309
|
+
# c-ares builds three command line tools that nothing here uses and that only exist to be
|
|
310
|
+
# installed into bindir.
|
|
311
|
+
"CARES_BUILD_TOOLS OFF"
|
|
312
|
+
${_grpc_visibility_options}
|
|
313
|
+
"CMAKE_POSITION_INDEPENDENT_CODE ON")
|
|
314
|
+
|
|
315
|
+
# Compile all fetched gRPC, Protobuf, Abseil, upb, re2 targets with the project's sanitizer
|
|
316
|
+
# flags so that all translation units agree on struct layouts, member definitions, and TSan
|
|
317
|
+
# instrumentation (mirroring commit be6fb44f9 / CXXCBC-917 for couchbase_cxx_protostellar).
|
|
318
|
+
if(LIST_OF_SANITIZERS AND NOT "${LIST_OF_SANITIZERS}" STREQUAL "")
|
|
319
|
+
function(couchbase_get_targets_recursively out_var dir)
|
|
320
|
+
get_property(_targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS)
|
|
321
|
+
get_property(_subdirs DIRECTORY "${dir}" PROPERTY SUBDIRECTORIES)
|
|
322
|
+
foreach(_subdir IN LISTS _subdirs)
|
|
323
|
+
couchbase_get_targets_recursively(_sub_targets "${_subdir}")
|
|
324
|
+
list(APPEND _targets ${_sub_targets})
|
|
325
|
+
endforeach()
|
|
326
|
+
set(${out_var} "${_targets}" PARENT_SCOPE)
|
|
327
|
+
endfunction()
|
|
328
|
+
|
|
329
|
+
couchbase_get_targets_recursively(_fetched_targets "${grpc_SOURCE_DIR}")
|
|
330
|
+
foreach(_fetched_target IN LISTS _fetched_targets)
|
|
331
|
+
get_target_property(_target_type ${_fetched_target} TYPE)
|
|
332
|
+
if(_target_type STREQUAL "STATIC_LIBRARY"
|
|
333
|
+
OR _target_type STREQUAL "SHARED_LIBRARY"
|
|
334
|
+
OR _target_type STREQUAL "OBJECT_LIBRARY"
|
|
335
|
+
OR _target_type STREQUAL "EXECUTABLE")
|
|
336
|
+
target_compile_options(${_fetched_target} PRIVATE -fsanitize=${LIST_OF_SANITIZERS})
|
|
337
|
+
target_link_options(${_fetched_target} PRIVATE -fsanitize=${LIST_OF_SANITIZERS})
|
|
338
|
+
if("thread" IN_LIST SANITIZERS
|
|
339
|
+
AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
|
|
340
|
+
AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0.0")
|
|
341
|
+
target_compile_options(${_fetched_target} PRIVATE -Wno-error=tsan)
|
|
342
|
+
endif()
|
|
343
|
+
endif()
|
|
344
|
+
endforeach()
|
|
345
|
+
endif()
|
|
346
|
+
|
|
347
|
+
# Abseil-cpp bundled with gRPC v1.65.5 has a bug in its randen HWAES compile
|
|
348
|
+
# options on Apple ARM64: CMake's option deduplication strips the second
|
|
349
|
+
# -Xarch_x86_64 prefix, leaving -msse4.1 unscoped, which causes a hard error
|
|
350
|
+
# on newer AppleClang (16+). Fix by replacing the incorrectly deduped flags
|
|
351
|
+
# with properly SHELL:-prefixed versions on the affected targets.
|
|
352
|
+
# See https://github.com/abseil/abseil-cpp/pull/1710
|
|
353
|
+
#
|
|
354
|
+
# After CMake deduplication the compile options are stored as individual list
|
|
355
|
+
# elements (e.g. "-Xarch_x86_64;-maes;-msse4.1;...") rather than as
|
|
356
|
+
# space-joined pairs, so we must remove them one by one.
|
|
357
|
+
# Both absl_random_internal_randen_hwaes and absl_random_internal_randen_hwaes_impl
|
|
358
|
+
# use ABSL_RANDOM_RANDEN_COPTS and need this fix.
|
|
359
|
+
if(APPLE)
|
|
360
|
+
foreach(_randen_target absl_random_internal_randen_hwaes absl_random_internal_randen_hwaes_impl)
|
|
361
|
+
if(TARGET ${_randen_target})
|
|
362
|
+
get_target_property(_randen_opts ${_randen_target} COMPILE_OPTIONS)
|
|
363
|
+
if(_randen_opts)
|
|
364
|
+
list(REMOVE_ITEM _randen_opts
|
|
365
|
+
"-Xarch_x86_64"
|
|
366
|
+
"-maes"
|
|
367
|
+
"-msse4.1"
|
|
368
|
+
"-Xarch_arm64"
|
|
369
|
+
"-march=armv8-a+crypto"
|
|
370
|
+
"-Wno-unused-command-line-argument"
|
|
371
|
+
)
|
|
372
|
+
list(APPEND _randen_opts
|
|
373
|
+
"SHELL:-Xarch_x86_64 -maes"
|
|
374
|
+
"SHELL:-Xarch_x86_64 -msse4.1"
|
|
375
|
+
"SHELL:-Xarch_arm64 -march=armv8-a+crypto"
|
|
376
|
+
"-Wno-unused-command-line-argument"
|
|
377
|
+
)
|
|
378
|
+
set_target_properties(${_randen_target} PROPERTIES COMPILE_OPTIONS "${_randen_opts}")
|
|
379
|
+
endif()
|
|
380
|
+
endif()
|
|
381
|
+
endforeach()
|
|
382
|
+
endif()
|
|
383
|
+
|
|
384
|
+
# OpenTelemetry's cmake/protobuf.cmake checks gRPC_PROVIDER to detect
|
|
385
|
+
# whether gRPC fetched protobuf as a submodule. When that variable is set
|
|
386
|
+
# (and != "find_package") and TARGET libprotobuf exists, OTel reuses the
|
|
387
|
+
# existing protobuf instead of fetching its own copy via FetchContent.
|
|
388
|
+
# Also ensure grpc_SOURCE_DIR is visible: OTel's cmake/protobuf.cmake reads the protobuf version
|
|
389
|
+
# from ${grpc_SOURCE_DIR}/third_party/protobuf/version.json. gRPC has no version.json of its own.
|
|
390
|
+
if(TARGET protobuf::libprotobuf)
|
|
391
|
+
set(Protobuf_FOUND TRUE CACHE BOOL "" FORCE)
|
|
392
|
+
set(gRPC_PROVIDER "fetch_content" CACHE STRING "" FORCE)
|
|
393
|
+
FetchContent_GetProperties(grpc)
|
|
394
|
+
|
|
395
|
+
# When protobuf is built from source, protoc has no built-in path to
|
|
396
|
+
# well-known .proto files (google/protobuf/timestamp.proto etc.).
|
|
397
|
+
# Set PROTOBUF_IMPORT_DIRS so protobuf_Generate.cmake and gRPC_Generate.cmake
|
|
398
|
+
# add the necessary -I flag when invoking protoc.
|
|
399
|
+
set(PROTOBUF_IMPORT_DIRS "${grpc_SOURCE_DIR}/third_party/protobuf/src" CACHE STRING "" FORCE)
|
|
400
|
+
|
|
401
|
+
# With WITH_OTLP_GRPC, OTel's cmake/grpc.cmake finds this gRPC through the grpc-config.cmake
|
|
402
|
+
# redirect and sets gRPC_PROVIDER to "find_package", so its protobuf.cmake runs
|
|
403
|
+
# find_package(Protobuf) instead. That resolves a platform protobuf where one is installed, or
|
|
404
|
+
# fetches a second copy whose targets collide with these. This empty package config makes the
|
|
405
|
+
# CONFIG search succeed on the targets that already exist. ThirdPartyDependencies.cmake passes
|
|
406
|
+
# it to OpenTelemetry alone, as a package option, so no other find_package(Protobuf) sees it.
|
|
407
|
+
set(COUCHBASE_CXX_CLIENT_BUNDLED_PROTOBUF_DIR "${CMAKE_BINARY_DIR}/cmake/protobuf-from-grpc")
|
|
408
|
+
file(WRITE "${COUCHBASE_CXX_CLIENT_BUNDLED_PROTOBUF_DIR}/protobuf-config.cmake"
|
|
409
|
+
"# protobuf::libprotobuf and protobuf::protoc are defined by gRPC's bundled protobuf.\n")
|
|
410
|
+
endif()
|
|
411
|
+
|
|
412
|
+
if(TARGET grpc++ AND NOT TARGET gRPC::grpc++)
|
|
413
|
+
add_library(gRPC::grpc++ ALIAS grpc++)
|
|
414
|
+
endif()
|
|
415
|
+
if(TARGET grpc_cpp_plugin AND NOT TARGET gRPC::grpc_cpp_plugin)
|
|
416
|
+
add_executable(gRPC::grpc_cpp_plugin ALIAS grpc_cpp_plugin)
|
|
417
|
+
endif()
|
|
418
|
+
|
|
419
|
+
foreach(_target grpc++ grpc_cpp_plugin)
|
|
420
|
+
if(TARGET ${_target})
|
|
421
|
+
set_target_properties(${_target} PROPERTIES
|
|
422
|
+
POSITION_INDEPENDENT_CODE ON
|
|
423
|
+
CXX_CLANG_TIDY ""
|
|
424
|
+
CXX_INCLUDE_WHAT_YOU_USE "")
|
|
425
|
+
endif()
|
|
426
|
+
endforeach()
|
|
427
|
+
|
|
428
|
+
if(TARGET libprotobuf)
|
|
429
|
+
set_target_properties(libprotobuf PROPERTIES
|
|
430
|
+
POSITION_INDEPENDENT_CODE ON
|
|
431
|
+
CXX_CLANG_TIDY ""
|
|
432
|
+
CXX_INCLUDE_WHAT_YOU_USE "")
|
|
433
|
+
endif()
|
|
434
|
+
|
|
435
|
+
# gRPC unconditionally defines several library targets we do not link
|
|
436
|
+
# against (the couchbase2 transport and the fit_performer tool consume only
|
|
437
|
+
# gRPC::grpc++ and gRPC::grpc_cpp_plugin). Because gRPC's CMakeLists has no
|
|
438
|
+
# per-library opt-out and the subdirectory is added without
|
|
439
|
+
# EXCLUDE_FROM_ALL, every target ends up in the Visual Studio ALL_BUILD
|
|
440
|
+
# and gets compiled on Windows. grpc_unsecure alone is a ~300-source
|
|
441
|
+
# near-duplicate of gRPC without TLS; combined with the admin/auth
|
|
442
|
+
# extras below this is ~15 minutes of pointless compile per Windows
|
|
443
|
+
# build. Marking each EXCLUDE_FROM_ALL removes them from ALL_BUILD
|
|
444
|
+
# while leaving the targets defined, so anything that does
|
|
445
|
+
# transitively need one is still pulled in by CMake on demand.
|
|
446
|
+
foreach(_unused_grpc_target
|
|
447
|
+
grpc_unsecure
|
|
448
|
+
grpc++_unsecure
|
|
449
|
+
grpc++_alts
|
|
450
|
+
grpc++_reflection
|
|
451
|
+
grpcpp_channelz
|
|
452
|
+
grpc_authorization_provider)
|
|
453
|
+
if(TARGET ${_unused_grpc_target})
|
|
454
|
+
set_target_properties(${_unused_grpc_target} PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
|
455
|
+
endif()
|
|
456
|
+
endforeach()
|
|
457
|
+
endif()
|
|
458
|
+
|
|
459
|
+
# gRPC's headers are not clean under this project's warning set: <grpcpp/...> trips
|
|
460
|
+
# -Wold-style-cast, -Wsign-conversion and -Wgcc-compat, and with -Werror that is a hard failure in
|
|
461
|
+
# any translation unit including them.
|
|
462
|
+
#
|
|
463
|
+
# It bites on the built-from-source path: the include directories are ordinary -I entries, so every
|
|
464
|
+
# warning applies. Platform packages instead put the headers under a system prefix, where the
|
|
465
|
+
# compiler treats them as system headers for free.
|
|
466
|
+
#
|
|
467
|
+
# fit_performer sidesteps this by turning its own warnings off wholesale (/W0 or -w plus
|
|
468
|
+
# COMPILE_WARNING_AS_ERROR OFF). That is not an option for couchbase_cxx_client, which compiles
|
|
469
|
+
# core/protostellar/*.cxx and must keep full warnings on its own code, so the fix belongs on the
|
|
470
|
+
# dependency: mark the interface include directories SYSTEM, exactly as is done for spdlog.
|
|
471
|
+
#
|
|
472
|
+
# Marking gRPC::grpc++ is sufficient and abseil/protobuf/boringssl need no separate handling --
|
|
473
|
+
# both clang and gcc propagate system-ness down the include stack, so a header reached from a system
|
|
474
|
+
# header is itself treated as one. Verified: with grpc-src/include as -I, <grpcpp/grpcpp.h> emits 26
|
|
475
|
+
# errors across grpcpp and abseil-cpp; with it as -isystem and every other third-party directory
|
|
476
|
+
# left as -I, zero.
|
|
477
|
+
foreach(_grpc_system_target gRPC::grpc++ gRPC::grpc protobuf::libprotobuf)
|
|
478
|
+
if(TARGET ${_grpc_system_target})
|
|
479
|
+
declare_system_library(${_grpc_system_target})
|
|
480
|
+
endif()
|
|
481
|
+
endforeach()
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
option(COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL "Rely on application to link OpenSSL library" FALSE)
|
|
2
|
+
|
|
3
|
+
# The pkg-config module both fallbacks below ask for, named once because cmake/Packaging.cmake has to
|
|
4
|
+
# request the same one in the installed package config: a consumer that resolves a different module
|
|
5
|
+
# than the archive was built against gets a different TLS installation, quietly.
|
|
6
|
+
set(COUCHBASE_CXX_CLIENT_OPENSSL_PKGCONFIG_MODULE
|
|
7
|
+
"openssl11"
|
|
8
|
+
CACHE STRING "pkg-config module used when find_package(OpenSSL) is unusable")
|
|
2
9
|
option(COUCHBASE_CXX_CLIENT_USE_HOMEBREW_TO_DETECT_OPENSSL "Use homebrew to determine OpenSSL root directory" TRUE)
|
|
3
10
|
option(COUCHBASE_CXX_CLIENT_USE_SCOOP_TO_DETECT_OPENSSL "Use scoop to determine OpenSSL root directory" TRUE)
|
|
4
11
|
option(COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL "Build and statically link BoringSSL library" FALSE)
|
|
@@ -115,7 +122,7 @@ else()
|
|
|
115
122
|
REQUIRED
|
|
116
123
|
IMPORTED_TARGET
|
|
117
124
|
GLOBAL
|
|
118
|
-
|
|
125
|
+
${COUCHBASE_CXX_CLIENT_OPENSSL_PKGCONFIG_MODULE})
|
|
119
126
|
if(PKG_CONFIG_OPENSSL_FOUND)
|
|
120
127
|
message(STATUS "PKG_CONFIG_OPENSSL_VERSION: ${PKG_CONFIG_OPENSSL_VERSION}")
|
|
121
128
|
message(STATUS "PKG_CONFIG_OPENSSL_INCLUDE_DIRS: ${PKG_CONFIG_OPENSSL_INCLUDE_DIRS}")
|
|
@@ -134,7 +141,7 @@ else()
|
|
|
134
141
|
REQUIRED
|
|
135
142
|
IMPORTED_TARGET
|
|
136
143
|
GLOBAL
|
|
137
|
-
|
|
144
|
+
${COUCHBASE_CXX_CLIENT_OPENSSL_PKGCONFIG_MODULE})
|
|
138
145
|
if(PKG_CONFIG_OPENSSL_FOUND)
|
|
139
146
|
message(STATUS "PKG_CONFIG_OPENSSL_VERSION: ${PKG_CONFIG_OPENSSL_VERSION}")
|
|
140
147
|
message(STATUS "PKG_CONFIG_OPENSSL_INCLUDE_DIRS: ${PKG_CONFIG_OPENSSL_INCLUDE_DIRS}")
|
|
@@ -257,7 +264,7 @@ foreach(CERTIFICATE ${CERTIFICATES})
|
|
|
257
264
|
${CERTIFICATE})
|
|
258
265
|
file(APPEND ${CA_BUNDLE_CPP_FILE}
|
|
259
266
|
" certificate{ R\"(${CMAKE_MATCH_1})\",
|
|
260
|
-
R\"(${CMAKE_MATCH_2})\" },
|
|
267
|
+
R\"(${CMAKE_MATCH_2})\", },
|
|
261
268
|
|
|
262
269
|
")
|
|
263
270
|
endforeach()
|