Blame SOURCES/99f8a10aec994a8957fbb6787768b444ef34d6a2.patch

cc39db
From 99f8a10aec994a8957fbb6787768b444ef34d6a2 Mon Sep 17 00:00:00 2001
cc39db
From: Esun Kim <veblush@google.com>
cc39db
Date: Tue, 10 Dec 2019 22:48:33 -0800
cc39db
Subject: [PATCH] Make gRPC podspec template more robust
cc39db
cc39db
---
cc39db
 gRPC-C++.podspec                     | 360 ++++++---------------------
cc39db
 gRPC-Core.podspec                    | 105 ++++----
cc39db
 templates/gRPC-C++.podspec.template  | 179 ++++++-------
cc39db
 templates/gRPC-Core.podspec.template | 132 +++++-----
cc39db
 4 files changed, 268 insertions(+), 508 deletions(-)
cc39db
cc39db
diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec
cc39db
index 5a9a2c0add2..3eafd3550d6 100644
cc39db
--- a/gRPC-C++.podspec
cc39db
+++ b/gRPC-C++.podspec
cc39db
@@ -19,7 +19,6 @@
cc39db
 # See the License for the specific language governing permissions and
cc39db
 # limitations under the License.
cc39db
 
cc39db
-
cc39db
 Pod::Spec.new do |s|
cc39db
   s.name     = 'gRPC-C++'
cc39db
   # TODO (mxyan): use version that match gRPC version when pod is stabilized
cc39db
@@ -65,6 +64,7 @@ Pod::Spec.new do |s|
cc39db
   }
cc39db
 
cc39db
   s.libraries = 'c++'
cc39db
+  s.compiler_flags = '-Wno-comma'
cc39db
 
cc39db
   s.default_subspecs = 'Interface', 'Implementation'
cc39db
 
cc39db
@@ -213,66 +213,9 @@ Pod::Spec.new do |s|
cc39db
     ss.header_mappings_dir = '.'
cc39db
     ss.dependency "#{s.name}/Interface", version
cc39db
     ss.dependency 'gRPC-Core', version
cc39db
+    abseil_version = '0.20190808.1'
cc39db
 
cc39db
     ss.source_files = 'include/grpcpp/impl/codegen/core_codegen.h',
cc39db
-                      'src/cpp/client/channel_cc.cc',
cc39db
-                      'src/cpp/client/client_context.cc',
cc39db
-                      'src/cpp/client/client_interceptor.cc',
cc39db
-                      'src/cpp/client/create_channel.cc',
cc39db
-                      'src/cpp/client/create_channel_internal.cc',
cc39db
-                      'src/cpp/client/create_channel_internal.h',
cc39db
-                      'src/cpp/client/create_channel_posix.cc',
cc39db
-                      'src/cpp/client/credentials_cc.cc',
cc39db
-                      'src/cpp/client/generic_stub.cc',
cc39db
-                      'src/cpp/client/insecure_credentials.cc',
cc39db
-                      'src/cpp/client/secure_credentials.cc',
cc39db
-                      'src/cpp/client/secure_credentials.h',
cc39db
-                      'src/cpp/codegen/codegen_init.cc',
cc39db
-                      'src/cpp/common/alarm.cc',
cc39db
-                      'src/cpp/common/auth_property_iterator.cc',
cc39db
-                      'src/cpp/common/channel_arguments.cc',
cc39db
-                      'src/cpp/common/channel_filter.cc',
cc39db
-                      'src/cpp/common/channel_filter.h',
cc39db
-                      'src/cpp/common/completion_queue_cc.cc',
cc39db
-                      'src/cpp/common/core_codegen.cc',
cc39db
-                      'src/cpp/common/resource_quota_cc.cc',
cc39db
-                      'src/cpp/common/rpc_method.cc',
cc39db
-                      'src/cpp/common/secure_auth_context.cc',
cc39db
-                      'src/cpp/common/secure_auth_context.h',
cc39db
-                      'src/cpp/common/secure_channel_arguments.cc',
cc39db
-                      'src/cpp/common/secure_create_auth_context.cc',
cc39db
-                      'src/cpp/common/tls_credentials_options.cc',
cc39db
-                      'src/cpp/common/tls_credentials_options_util.cc',
cc39db
-                      'src/cpp/common/tls_credentials_options_util.h',
cc39db
-                      'src/cpp/common/validate_service_config.cc',
cc39db
-                      'src/cpp/common/version_cc.cc',
cc39db
-                      'src/cpp/server/async_generic_service.cc',
cc39db
-                      'src/cpp/server/channel_argument_option.cc',
cc39db
-                      'src/cpp/server/create_default_thread_pool.cc',
cc39db
-                      'src/cpp/server/dynamic_thread_pool.cc',
cc39db
-                      'src/cpp/server/dynamic_thread_pool.h',
cc39db
-                      'src/cpp/server/external_connection_acceptor_impl.cc',
cc39db
-                      'src/cpp/server/external_connection_acceptor_impl.h',
cc39db
-                      'src/cpp/server/health/default_health_check_service.cc',
cc39db
-                      'src/cpp/server/health/default_health_check_service.h',
cc39db
-                      'src/cpp/server/health/health_check_service.cc',
cc39db
-                      'src/cpp/server/health/health_check_service_server_builder_option.cc',
cc39db
-                      'src/cpp/server/insecure_server_credentials.cc',
cc39db
-                      'src/cpp/server/secure_server_credentials.cc',
cc39db
-                      'src/cpp/server/secure_server_credentials.h',
cc39db
-                      'src/cpp/server/server_builder.cc',
cc39db
-                      'src/cpp/server/server_callback.cc',
cc39db
-                      'src/cpp/server/server_cc.cc',
cc39db
-                      'src/cpp/server/server_context.cc',
cc39db
-                      'src/cpp/server/server_credentials.cc',
cc39db
-                      'src/cpp/server/server_posix.cc',
cc39db
-                      'src/cpp/server/thread_pool_interface.h',
cc39db
-                      'src/cpp/thread_manager/thread_manager.cc',
cc39db
-                      'src/cpp/thread_manager/thread_manager.h',
cc39db
-                      'src/cpp/util/byte_buffer_cc.cc',
cc39db
-                      'src/cpp/util/status.cc',
cc39db
-                      'src/cpp/util/string_ref.cc',
cc39db
-                      'src/cpp/util/time_cc.cc',
cc39db
                       'src/core/ext/filters/client_channel/backend_metric.h',
cc39db
                       'src/core/ext/filters/client_channel/backup_poller.h',
cc39db
                       'src/core/ext/filters/client_channel/client_channel.h',
cc39db
@@ -628,6 +571,64 @@ Pod::Spec.new do |s|
cc39db
                       'src/core/tsi/transport_security.h',
cc39db
                       'src/core/tsi/transport_security_grpc.h',
cc39db
                       'src/core/tsi/transport_security_interface.h',
cc39db
+                      'src/cpp/client/channel_cc.cc',
cc39db
+                      'src/cpp/client/client_context.cc',
cc39db
+                      'src/cpp/client/client_interceptor.cc',
cc39db
+                      'src/cpp/client/create_channel.cc',
cc39db
+                      'src/cpp/client/create_channel_internal.cc',
cc39db
+                      'src/cpp/client/create_channel_internal.h',
cc39db
+                      'src/cpp/client/create_channel_posix.cc',
cc39db
+                      'src/cpp/client/credentials_cc.cc',
cc39db
+                      'src/cpp/client/generic_stub.cc',
cc39db
+                      'src/cpp/client/insecure_credentials.cc',
cc39db
+                      'src/cpp/client/secure_credentials.cc',
cc39db
+                      'src/cpp/client/secure_credentials.h',
cc39db
+                      'src/cpp/codegen/codegen_init.cc',
cc39db
+                      'src/cpp/common/alarm.cc',
cc39db
+                      'src/cpp/common/auth_property_iterator.cc',
cc39db
+                      'src/cpp/common/channel_arguments.cc',
cc39db
+                      'src/cpp/common/channel_filter.cc',
cc39db
+                      'src/cpp/common/channel_filter.h',
cc39db
+                      'src/cpp/common/completion_queue_cc.cc',
cc39db
+                      'src/cpp/common/core_codegen.cc',
cc39db
+                      'src/cpp/common/resource_quota_cc.cc',
cc39db
+                      'src/cpp/common/rpc_method.cc',
cc39db
+                      'src/cpp/common/secure_auth_context.cc',
cc39db
+                      'src/cpp/common/secure_auth_context.h',
cc39db
+                      'src/cpp/common/secure_channel_arguments.cc',
cc39db
+                      'src/cpp/common/secure_create_auth_context.cc',
cc39db
+                      'src/cpp/common/tls_credentials_options.cc',
cc39db
+                      'src/cpp/common/tls_credentials_options_util.cc',
cc39db
+                      'src/cpp/common/tls_credentials_options_util.h',
cc39db
+                      'src/cpp/common/validate_service_config.cc',
cc39db
+                      'src/cpp/common/version_cc.cc',
cc39db
+                      'src/cpp/server/async_generic_service.cc',
cc39db
+                      'src/cpp/server/channel_argument_option.cc',
cc39db
+                      'src/cpp/server/create_default_thread_pool.cc',
cc39db
+                      'src/cpp/server/dynamic_thread_pool.cc',
cc39db
+                      'src/cpp/server/dynamic_thread_pool.h',
cc39db
+                      'src/cpp/server/external_connection_acceptor_impl.cc',
cc39db
+                      'src/cpp/server/external_connection_acceptor_impl.h',
cc39db
+                      'src/cpp/server/health/default_health_check_service.cc',
cc39db
+                      'src/cpp/server/health/default_health_check_service.h',
cc39db
+                      'src/cpp/server/health/health_check_service.cc',
cc39db
+                      'src/cpp/server/health/health_check_service_server_builder_option.cc',
cc39db
+                      'src/cpp/server/insecure_server_credentials.cc',
cc39db
+                      'src/cpp/server/secure_server_credentials.cc',
cc39db
+                      'src/cpp/server/secure_server_credentials.h',
cc39db
+                      'src/cpp/server/server_builder.cc',
cc39db
+                      'src/cpp/server/server_callback.cc',
cc39db
+                      'src/cpp/server/server_cc.cc',
cc39db
+                      'src/cpp/server/server_context.cc',
cc39db
+                      'src/cpp/server/server_credentials.cc',
cc39db
+                      'src/cpp/server/server_posix.cc',
cc39db
+                      'src/cpp/server/thread_pool_interface.h',
cc39db
+                      'src/cpp/thread_manager/thread_manager.cc',
cc39db
+                      'src/cpp/thread_manager/thread_manager.h',
cc39db
+                      'src/cpp/util/byte_buffer_cc.cc',
cc39db
+                      'src/cpp/util/status.cc',
cc39db
+                      'src/cpp/util/string_ref.cc',
cc39db
+                      'src/cpp/util/time_cc.cc',
cc39db
                       'third_party/upb/upb/decode.h',
cc39db
                       'third_party/upb/upb/encode.h',
cc39db
                       'third_party/upb/upb/generated_util.h',
cc39db
@@ -638,235 +639,6 @@ Pod::Spec.new do |s|
cc39db
                       'third_party/upb/upb/upb.h'
cc39db
 
cc39db
     ss.private_header_files = 'include/grpcpp/impl/codegen/core_codegen.h',
cc39db
-                              'src/core/ext/filters/client_channel/backend_metric.h',
cc39db
-                              'src/core/ext/filters/client_channel/backup_poller.h',
cc39db
-                              'src/core/ext/filters/client_channel/client_channel.h',
cc39db
-                              'src/core/ext/filters/client_channel/client_channel_channelz.h',
cc39db
-                              'src/core/ext/filters/client_channel/client_channel_factory.h',
cc39db
-                              'src/core/ext/filters/client_channel/connector.h',
cc39db
-                              'src/core/ext/filters/client_channel/global_subchannel_pool.h',
cc39db
-                              'src/core/ext/filters/client_channel/health/health_check_client.h',
cc39db
-                              'src/core/ext/filters/client_channel/http_connect_handshaker.h',
cc39db
-                              'src/core/ext/filters/client_channel/http_proxy.h',
cc39db
-                              'src/core/ext/filters/client_channel/lb_policy.h',
cc39db
-                              'src/core/ext/filters/client_channel/lb_policy_factory.h',
cc39db
-                              'src/core/ext/filters/client_channel/lb_policy_registry.h',
cc39db
-                              'src/core/ext/filters/client_channel/local_subchannel_pool.h',
cc39db
-                              'src/core/ext/filters/client_channel/parse_address.h',
cc39db
-                              'src/core/ext/filters/client_channel/proxy_mapper.h',
cc39db
-                              'src/core/ext/filters/client_channel/proxy_mapper_registry.h',
cc39db
-                              'src/core/ext/filters/client_channel/resolver.h',
cc39db
-                              'src/core/ext/filters/client_channel/resolver_factory.h',
cc39db
-                              'src/core/ext/filters/client_channel/resolver_registry.h',
cc39db
-                              'src/core/ext/filters/client_channel/resolver_result_parsing.h',
cc39db
-                              'src/core/ext/filters/client_channel/resolving_lb_policy.h',
cc39db
-                              'src/core/ext/filters/client_channel/retry_throttle.h',
cc39db
-                              'src/core/ext/filters/client_channel/server_address.h',
cc39db
-                              'src/core/ext/filters/client_channel/service_config.h',
cc39db
-                              'src/core/ext/filters/client_channel/subchannel.h',
cc39db
-                              'src/core/ext/filters/client_channel/subchannel_interface.h',
cc39db
-                              'src/core/ext/filters/client_channel/subchannel_pool_interface.h',
cc39db
-                              'src/core/ext/filters/deadline/deadline_filter.h',
cc39db
-                              'src/core/ext/transport/inproc/inproc_transport.h',
cc39db
-                              'src/core/ext/upb-generated/gogoproto/gogo.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/api/annotations.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/api/http.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/any.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/descriptor.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/duration.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/empty.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/struct.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/timestamp.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/protobuf/wrappers.upb.h',
cc39db
-                              'src/core/ext/upb-generated/google/rpc/status.upb.h',
cc39db
-                              'src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h',
cc39db
-                              'src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h',
cc39db
-                              'src/core/ext/upb-generated/validate/validate.upb.h',
cc39db
-                              'src/core/lib/avl/avl.h',
cc39db
-                              'src/core/lib/backoff/backoff.h',
cc39db
-                              'src/core/lib/channel/channel_args.h',
cc39db
-                              'src/core/lib/channel/channel_stack.h',
cc39db
-                              'src/core/lib/channel/channel_stack_builder.h',
cc39db
-                              'src/core/lib/channel/channel_trace.h',
cc39db
-                              'src/core/lib/channel/channelz.h',
cc39db
-                              'src/core/lib/channel/channelz_registry.h',
cc39db
-                              'src/core/lib/channel/connected_channel.h',
cc39db
-                              'src/core/lib/channel/context.h',
cc39db
-                              'src/core/lib/channel/handshaker.h',
cc39db
-                              'src/core/lib/channel/handshaker_factory.h',
cc39db
-                              'src/core/lib/channel/handshaker_registry.h',
cc39db
-                              'src/core/lib/channel/status_util.h',
cc39db
-                              'src/core/lib/compression/algorithm_metadata.h',
cc39db
-                              'src/core/lib/compression/compression_args.h',
cc39db
-                              'src/core/lib/compression/compression_internal.h',
cc39db
-                              'src/core/lib/compression/message_compress.h',
cc39db
-                              'src/core/lib/compression/stream_compression.h',
cc39db
-                              'src/core/lib/compression/stream_compression_gzip.h',
cc39db
-                              'src/core/lib/compression/stream_compression_identity.h',
cc39db
-                              'src/core/lib/debug/stats.h',
cc39db
-                              'src/core/lib/debug/stats_data.h',
cc39db
-                              'src/core/lib/debug/trace.h',
cc39db
-                              'src/core/lib/gpr/alloc.h',
cc39db
-                              'src/core/lib/gpr/arena.h',
cc39db
-                              'src/core/lib/gpr/env.h',
cc39db
-                              'src/core/lib/gpr/murmur_hash.h',
cc39db
-                              'src/core/lib/gpr/spinlock.h',
cc39db
-                              'src/core/lib/gpr/string.h',
cc39db
-                              'src/core/lib/gpr/string_windows.h',
cc39db
-                              'src/core/lib/gpr/time_precise.h',
cc39db
-                              'src/core/lib/gpr/tls.h',
cc39db
-                              'src/core/lib/gpr/tls_gcc.h',
cc39db
-                              'src/core/lib/gpr/tls_msvc.h',
cc39db
-                              'src/core/lib/gpr/tls_pthread.h',
cc39db
-                              'src/core/lib/gpr/tmpfile.h',
cc39db
-                              'src/core/lib/gpr/useful.h',
cc39db
-                              'src/core/lib/gprpp/arena.h',
cc39db
-                              'src/core/lib/gprpp/atomic.h',
cc39db
-                              'src/core/lib/gprpp/debug_location.h',
cc39db
-                              'src/core/lib/gprpp/fork.h',
cc39db
-                              'src/core/lib/gprpp/global_config.h',
cc39db
-                              'src/core/lib/gprpp/global_config_custom.h',
cc39db
-                              'src/core/lib/gprpp/global_config_env.h',
cc39db
-                              'src/core/lib/gprpp/global_config_generic.h',
cc39db
-                              'src/core/lib/gprpp/host_port.h',
cc39db
-                              'src/core/lib/gprpp/inlined_vector.h',
cc39db
-                              'src/core/lib/gprpp/manual_constructor.h',
cc39db
-                              'src/core/lib/gprpp/map.h',
cc39db
-                              'src/core/lib/gprpp/memory.h',
cc39db
-                              'src/core/lib/gprpp/mpscq.h',
cc39db
-                              'src/core/lib/gprpp/optional.h',
cc39db
-                              'src/core/lib/gprpp/orphanable.h',
cc39db
-                              'src/core/lib/gprpp/ref_counted.h',
cc39db
-                              'src/core/lib/gprpp/ref_counted_ptr.h',
cc39db
-                              'src/core/lib/gprpp/string_view.h',
cc39db
-                              'src/core/lib/gprpp/sync.h',
cc39db
-                              'src/core/lib/gprpp/thd.h',
cc39db
-                              'src/core/lib/http/format_request.h',
cc39db
-                              'src/core/lib/http/httpcli.h',
cc39db
-                              'src/core/lib/http/parser.h',
cc39db
-                              'src/core/lib/iomgr/block_annotate.h',
cc39db
-                              'src/core/lib/iomgr/buffer_list.h',
cc39db
-                              'src/core/lib/iomgr/call_combiner.h',
cc39db
-                              'src/core/lib/iomgr/cfstream_handle.h',
cc39db
-                              'src/core/lib/iomgr/closure.h',
cc39db
-                              'src/core/lib/iomgr/combiner.h',
cc39db
-                              'src/core/lib/iomgr/dynamic_annotations.h',
cc39db
-                              'src/core/lib/iomgr/endpoint.h',
cc39db
-                              'src/core/lib/iomgr/endpoint_cfstream.h',
cc39db
-                              'src/core/lib/iomgr/endpoint_pair.h',
cc39db
-                              'src/core/lib/iomgr/error.h',
cc39db
-                              'src/core/lib/iomgr/error_cfstream.h',
cc39db
-                              'src/core/lib/iomgr/error_internal.h',
cc39db
-                              'src/core/lib/iomgr/ev_epoll1_linux.h',
cc39db
-                              'src/core/lib/iomgr/ev_epollex_linux.h',
cc39db
-                              'src/core/lib/iomgr/ev_poll_posix.h',
cc39db
-                              'src/core/lib/iomgr/ev_posix.h',
cc39db
-                              'src/core/lib/iomgr/exec_ctx.h',
cc39db
-                              'src/core/lib/iomgr/executor.h',
cc39db
-                              'src/core/lib/iomgr/executor/mpmcqueue.h',
cc39db
-                              'src/core/lib/iomgr/executor/threadpool.h',
cc39db
-                              'src/core/lib/iomgr/gethostname.h',
cc39db
-                              'src/core/lib/iomgr/grpc_if_nametoindex.h',
cc39db
-                              'src/core/lib/iomgr/internal_errqueue.h',
cc39db
-                              'src/core/lib/iomgr/iocp_windows.h',
cc39db
-                              'src/core/lib/iomgr/iomgr.h',
cc39db
-                              'src/core/lib/iomgr/iomgr_custom.h',
cc39db
-                              'src/core/lib/iomgr/iomgr_internal.h',
cc39db
-                              'src/core/lib/iomgr/iomgr_posix.h',
cc39db
-                              'src/core/lib/iomgr/is_epollexclusive_available.h',
cc39db
-                              'src/core/lib/iomgr/load_file.h',
cc39db
-                              'src/core/lib/iomgr/lockfree_event.h',
cc39db
-                              'src/core/lib/iomgr/logical_thread.h',
cc39db
-                              'src/core/lib/iomgr/nameser.h',
cc39db
-                              'src/core/lib/iomgr/polling_entity.h',
cc39db
-                              'src/core/lib/iomgr/pollset.h',
cc39db
-                              'src/core/lib/iomgr/pollset_custom.h',
cc39db
-                              'src/core/lib/iomgr/pollset_set.h',
cc39db
-                              'src/core/lib/iomgr/pollset_set_custom.h',
cc39db
-                              'src/core/lib/iomgr/pollset_set_windows.h',
cc39db
-                              'src/core/lib/iomgr/pollset_windows.h',
cc39db
-                              'src/core/lib/iomgr/port.h',
cc39db
-                              'src/core/lib/iomgr/resolve_address.h',
cc39db
-                              'src/core/lib/iomgr/resolve_address_custom.h',
cc39db
-                              'src/core/lib/iomgr/resource_quota.h',
cc39db
-                              'src/core/lib/iomgr/sockaddr.h',
cc39db
-                              'src/core/lib/iomgr/sockaddr_custom.h',
cc39db
-                              'src/core/lib/iomgr/sockaddr_posix.h',
cc39db
-                              'src/core/lib/iomgr/sockaddr_utils.h',
cc39db
-                              'src/core/lib/iomgr/sockaddr_windows.h',
cc39db
-                              'src/core/lib/iomgr/socket_factory_posix.h',
cc39db
-                              'src/core/lib/iomgr/socket_mutator.h',
cc39db
-                              'src/core/lib/iomgr/socket_utils.h',
cc39db
-                              'src/core/lib/iomgr/socket_utils_posix.h',
cc39db
-                              'src/core/lib/iomgr/socket_windows.h',
cc39db
-                              'src/core/lib/iomgr/sys_epoll_wrapper.h',
cc39db
-                              'src/core/lib/iomgr/tcp_client.h',
cc39db
-                              'src/core/lib/iomgr/tcp_client_posix.h',
cc39db
-                              'src/core/lib/iomgr/tcp_custom.h',
cc39db
-                              'src/core/lib/iomgr/tcp_posix.h',
cc39db
-                              'src/core/lib/iomgr/tcp_server.h',
cc39db
-                              'src/core/lib/iomgr/tcp_server_utils_posix.h',
cc39db
-                              'src/core/lib/iomgr/tcp_windows.h',
cc39db
-                              'src/core/lib/iomgr/time_averaged_stats.h',
cc39db
-                              'src/core/lib/iomgr/timer.h',
cc39db
-                              'src/core/lib/iomgr/timer_custom.h',
cc39db
-                              'src/core/lib/iomgr/timer_heap.h',
cc39db
-                              'src/core/lib/iomgr/timer_manager.h',
cc39db
-                              'src/core/lib/iomgr/udp_server.h',
cc39db
-                              'src/core/lib/iomgr/unix_sockets_posix.h',
cc39db
-                              'src/core/lib/iomgr/wakeup_fd_pipe.h',
cc39db
-                              'src/core/lib/iomgr/wakeup_fd_posix.h',
cc39db
-                              'src/core/lib/json/json.h',
cc39db
-                              'src/core/lib/json/json_common.h',
cc39db
-                              'src/core/lib/json/json_reader.h',
cc39db
-                              'src/core/lib/json/json_writer.h',
cc39db
-                              'src/core/lib/profiling/timers.h',
cc39db
-                              'src/core/lib/slice/b64.h',
cc39db
-                              'src/core/lib/slice/percent_encoding.h',
cc39db
-                              'src/core/lib/slice/slice_hash_table.h',
cc39db
-                              'src/core/lib/slice/slice_internal.h',
cc39db
-                              'src/core/lib/slice/slice_string_helpers.h',
cc39db
-                              'src/core/lib/slice/slice_utils.h',
cc39db
-                              'src/core/lib/slice/slice_weak_hash_table.h',
cc39db
-                              'src/core/lib/surface/api_trace.h',
cc39db
-                              'src/core/lib/surface/call.h',
cc39db
-                              'src/core/lib/surface/call_test_only.h',
cc39db
-                              'src/core/lib/surface/channel.h',
cc39db
-                              'src/core/lib/surface/channel_init.h',
cc39db
-                              'src/core/lib/surface/channel_stack_type.h',
cc39db
-                              'src/core/lib/surface/completion_queue.h',
cc39db
-                              'src/core/lib/surface/completion_queue_factory.h',
cc39db
-                              'src/core/lib/surface/event_string.h',
cc39db
-                              'src/core/lib/surface/init.h',
cc39db
-                              'src/core/lib/surface/lame_client.h',
cc39db
-                              'src/core/lib/surface/server.h',
cc39db
-                              'src/core/lib/surface/validate_metadata.h',
cc39db
-                              'src/core/lib/transport/bdp_estimator.h',
cc39db
-                              'src/core/lib/transport/byte_stream.h',
cc39db
-                              'src/core/lib/transport/connectivity_state.h',
cc39db
-                              'src/core/lib/transport/error_utils.h',
cc39db
-                              'src/core/lib/transport/http2_errors.h',
cc39db
-                              'src/core/lib/transport/metadata.h',
cc39db
-                              'src/core/lib/transport/metadata_batch.h',
cc39db
-                              'src/core/lib/transport/pid_controller.h',
cc39db
-                              'src/core/lib/transport/static_metadata.h',
cc39db
-                              'src/core/lib/transport/status_conversion.h',
cc39db
-                              'src/core/lib/transport/status_metadata.h',
cc39db
-                              'src/core/lib/transport/timeout_encoding.h',
cc39db
-                              'src/core/lib/transport/transport.h',
cc39db
-                              'src/core/lib/transport/transport_impl.h',
cc39db
-                              'src/core/lib/uri/uri_parser.h',
cc39db
-                              'src/cpp/client/create_channel_internal.h',
cc39db
-                              'src/cpp/client/secure_credentials.h',
cc39db
-                              'src/cpp/common/channel_filter.h',
cc39db
-                              'src/cpp/common/secure_auth_context.h',
cc39db
-                              'src/cpp/common/tls_credentials_options_util.h',
cc39db
-                              'src/cpp/server/dynamic_thread_pool.h',
cc39db
-                              'src/cpp/server/external_connection_acceptor_impl.h',
cc39db
-                              'src/cpp/server/health/default_health_check_service.h',
cc39db
-                              'src/cpp/server/secure_server_credentials.h',
cc39db
-                              'src/cpp/server/thread_pool_interface.h',
cc39db
-                              'src/cpp/thread_manager/thread_manager.h',
cc39db
                               'src/core/ext/filters/client_channel/backend_metric.h',
cc39db
                               'src/core/ext/filters/client_channel/backup_poller.h',
cc39db
                               'src/core/ext/filters/client_channel/client_channel.h',
cc39db
@@ -1222,6 +994,17 @@ Pod::Spec.new do |s|
cc39db
                               'src/core/tsi/transport_security.h',
cc39db
                               'src/core/tsi/transport_security_grpc.h',
cc39db
                               'src/core/tsi/transport_security_interface.h',
cc39db
+                              'src/cpp/client/create_channel_internal.h',
cc39db
+                              'src/cpp/client/secure_credentials.h',
cc39db
+                              'src/cpp/common/channel_filter.h',
cc39db
+                              'src/cpp/common/secure_auth_context.h',
cc39db
+                              'src/cpp/common/tls_credentials_options_util.h',
cc39db
+                              'src/cpp/server/dynamic_thread_pool.h',
cc39db
+                              'src/cpp/server/external_connection_acceptor_impl.h',
cc39db
+                              'src/cpp/server/health/default_health_check_service.h',
cc39db
+                              'src/cpp/server/secure_server_credentials.h',
cc39db
+                              'src/cpp/server/thread_pool_interface.h',
cc39db
+                              'src/cpp/thread_manager/thread_manager.h',
cc39db
                               'third_party/upb/upb/decode.h',
cc39db
                               'third_party/upb/upb/encode.h',
cc39db
                               'third_party/upb/upb/generated_util.h',
cc39db
@@ -1237,7 +1020,6 @@ Pod::Spec.new do |s|
cc39db
     ss.dependency "#{s.name}/Interface", version
cc39db
 
cc39db
     ss.source_files = 'include/grpcpp/impl/codegen/config_protobuf.h',
cc39db
-                      'include/grpcpp/impl/codegen/config_protobuf.h',
cc39db
                       'include/grpcpp/impl/codegen/proto_buffer_reader.h',
cc39db
                       'include/grpcpp/impl/codegen/proto_buffer_writer.h',
cc39db
                       'include/grpcpp/impl/codegen/proto_utils.h'
cc39db
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
cc39db
index 5b306628b20..ec4a29465de 100644
cc39db
--- a/gRPC-Core.podspec
cc39db
+++ b/gRPC-Core.podspec
cc39db
@@ -19,7 +19,6 @@
cc39db
 # See the License for the specific language governing permissions and
cc39db
 # limitations under the License.
cc39db
 
cc39db
-
cc39db
 Pod::Spec.new do |s|
cc39db
   s.name     = 'gRPC-Core'
cc39db
   version = '1.26.0'
cc39db
@@ -97,7 +96,7 @@ Pod::Spec.new do |s|
cc39db
   }
cc39db
 
cc39db
   s.default_subspecs = 'Interface', 'Implementation'
cc39db
-  s.compiler_flags = '-DGRPC_ARES=0'
cc39db
+  s.compiler_flags = '-DGRPC_ARES=0 -Wno-comma'
cc39db
   s.libraries = 'c++'
cc39db
 
cc39db
   # Like many other C libraries, gRPC-Core has its public headers under `include/<libname>/` and its
cc39db
@@ -123,40 +122,26 @@ Pod::Spec.new do |s|
cc39db
                       'include/grpc/grpc_security.h',
cc39db
                       'include/grpc/grpc_security_constants.h',
cc39db
                       'include/grpc/impl/codegen/atm.h',
cc39db
-                      'include/grpc/impl/codegen/atm.h',
cc39db
                       'include/grpc/impl/codegen/atm_gcc_atomic.h',
cc39db
-                      'include/grpc/impl/codegen/atm_gcc_atomic.h',
cc39db
-                      'include/grpc/impl/codegen/atm_gcc_sync.h',
cc39db
                       'include/grpc/impl/codegen/atm_gcc_sync.h',
cc39db
                       'include/grpc/impl/codegen/atm_windows.h',
cc39db
-                      'include/grpc/impl/codegen/atm_windows.h',
cc39db
                       'include/grpc/impl/codegen/byte_buffer.h',
cc39db
                       'include/grpc/impl/codegen/byte_buffer_reader.h',
cc39db
                       'include/grpc/impl/codegen/compression_types.h',
cc39db
                       'include/grpc/impl/codegen/connectivity_state.h',
cc39db
                       'include/grpc/impl/codegen/fork.h',
cc39db
-                      'include/grpc/impl/codegen/fork.h',
cc39db
-                      'include/grpc/impl/codegen/gpr_slice.h',
cc39db
                       'include/grpc/impl/codegen/gpr_slice.h',
cc39db
                       'include/grpc/impl/codegen/gpr_types.h',
cc39db
-                      'include/grpc/impl/codegen/gpr_types.h',
cc39db
                       'include/grpc/impl/codegen/grpc_types.h',
cc39db
                       'include/grpc/impl/codegen/log.h',
cc39db
-                      'include/grpc/impl/codegen/log.h',
cc39db
-                      'include/grpc/impl/codegen/port_platform.h',
cc39db
                       'include/grpc/impl/codegen/port_platform.h',
cc39db
                       'include/grpc/impl/codegen/propagation_bits.h',
cc39db
                       'include/grpc/impl/codegen/slice.h',
cc39db
                       'include/grpc/impl/codegen/status.h',
cc39db
                       'include/grpc/impl/codegen/sync.h',
cc39db
-                      'include/grpc/impl/codegen/sync.h',
cc39db
-                      'include/grpc/impl/codegen/sync_custom.h',
cc39db
                       'include/grpc/impl/codegen/sync_custom.h',
cc39db
                       'include/grpc/impl/codegen/sync_generic.h',
cc39db
-                      'include/grpc/impl/codegen/sync_generic.h',
cc39db
                       'include/grpc/impl/codegen/sync_posix.h',
cc39db
-                      'include/grpc/impl/codegen/sync_posix.h',
cc39db
-                      'include/grpc/impl/codegen/sync_windows.h',
cc39db
                       'include/grpc/impl/codegen/sync_windows.h',
cc39db
                       'include/grpc/load_reporting.h',
cc39db
                       'include/grpc/slice.h',
cc39db
@@ -186,6 +171,7 @@ Pod::Spec.new do |s|
cc39db
     ss.libraries = 'z'
cc39db
     ss.dependency "#{s.name}/Interface", version
cc39db
     ss.dependency 'BoringSSL-GRPC', '0.0.5'
cc39db
+    abseil_version = '0.20190808.1'
cc39db
     ss.compiler_flags = '-DGRPC_SHADOW_BORINGSSL_SYMBOLS'
cc39db
 
cc39db
     ss.source_files = 'src/core/ext/filters/census/grpc_context.cc',
cc39db
@@ -969,7 +955,6 @@ Pod::Spec.new do |s|
cc39db
                       'third_party/upb/upb/table.int.h',
cc39db
                       'third_party/upb/upb/upb.c',
cc39db
                       'third_party/upb/upb/upb.h'
cc39db
-
cc39db
     ss.private_header_files = 'src/core/ext/filters/client_channel/backend_metric.h',
cc39db
                               'src/core/ext/filters/client_channel/backup_poller.h',
cc39db
                               'src/core/ext/filters/client_channel/client_channel.h',
cc39db
@@ -1372,54 +1357,15 @@ Pod::Spec.new do |s|
cc39db
                       'test/core/end2end/data/server1_key.cc',
cc39db
                       'test/core/end2end/data/ssl_test_data.h',
cc39db
                       'test/core/end2end/data/test_root_cert.cc',
cc39db
+                      'test/core/end2end/end2end_test_utils.cc',
cc39db
+                      'test/core/end2end/end2end_tests.cc',
cc39db
+                      'test/core/end2end/end2end_tests.h',
cc39db
                       'test/core/end2end/fixtures/http_proxy_fixture.cc',
cc39db
                       'test/core/end2end/fixtures/http_proxy_fixture.h',
cc39db
                       'test/core/end2end/fixtures/local_util.cc',
cc39db
                       'test/core/end2end/fixtures/local_util.h',
cc39db
                       'test/core/end2end/fixtures/proxy.cc',
cc39db
                       'test/core/end2end/fixtures/proxy.h',
cc39db
-                      'test/core/iomgr/endpoint_tests.cc',
cc39db
-                      'test/core/iomgr/endpoint_tests.h',
cc39db
-                      'test/core/security/oauth2_utils.cc',
cc39db
-                      'test/core/security/oauth2_utils.h',
cc39db
-                      'test/core/util/cmdline.cc',
cc39db
-                      'test/core/util/cmdline.h',
cc39db
-                      'test/core/util/debugger_macros.cc',
cc39db
-                      'test/core/util/debugger_macros.h',
cc39db
-                      'test/core/util/fuzzer_util.cc',
cc39db
-                      'test/core/util/fuzzer_util.h',
cc39db
-                      'test/core/util/grpc_profiler.cc',
cc39db
-                      'test/core/util/grpc_profiler.h',
cc39db
-                      'test/core/util/histogram.cc',
cc39db
-                      'test/core/util/histogram.h',
cc39db
-                      'test/core/util/memory_counters.cc',
cc39db
-                      'test/core/util/memory_counters.h',
cc39db
-                      'test/core/util/mock_endpoint.cc',
cc39db
-                      'test/core/util/mock_endpoint.h',
cc39db
-                      'test/core/util/parse_hexstring.cc',
cc39db
-                      'test/core/util/parse_hexstring.h',
cc39db
-                      'test/core/util/passthru_endpoint.cc',
cc39db
-                      'test/core/util/passthru_endpoint.h',
cc39db
-                      'test/core/util/port.cc',
cc39db
-                      'test/core/util/port.h',
cc39db
-                      'test/core/util/port_isolated_runtime_environment.cc',
cc39db
-                      'test/core/util/port_server_client.cc',
cc39db
-                      'test/core/util/port_server_client.h',
cc39db
-                      'test/core/util/slice_splitter.cc',
cc39db
-                      'test/core/util/slice_splitter.h',
cc39db
-                      'test/core/util/subprocess.h',
cc39db
-                      'test/core/util/subprocess_windows.cc',
cc39db
-                      'test/core/util/test_config.cc',
cc39db
-                      'test/core/util/test_config.h',
cc39db
-                      'test/core/util/test_lb_policies.cc',
cc39db
-                      'test/core/util/test_lb_policies.h',
cc39db
-                      'test/core/util/tracer_util.cc',
cc39db
-                      'test/core/util/tracer_util.h',
cc39db
-                      'test/core/util/trickle_endpoint.cc',
cc39db
-                      'test/core/util/trickle_endpoint.h',
cc39db
-                      'test/core/end2end/end2end_test_utils.cc',
cc39db
-                      'test/core/end2end/end2end_tests.cc',
cc39db
-                      'test/core/end2end/end2end_tests.h',
cc39db
                       'test/core/end2end/tests/authority_not_supported.cc',
cc39db
                       'test/core/end2end/tests/bad_hostname.cc',
cc39db
                       'test/core/end2end/tests/bad_ping.cc',
cc39db
@@ -1498,7 +1444,46 @@ Pod::Spec.new do |s|
cc39db
                       'test/core/end2end/tests/trailing_metadata.cc',
cc39db
                       'test/core/end2end/tests/workaround_cronet_compression.cc',
cc39db
                       'test/core/end2end/tests/write_buffering.cc',
cc39db
-                      'test/core/end2end/tests/write_buffering_at_end.cc'
cc39db
+                      'test/core/end2end/tests/write_buffering_at_end.cc',
cc39db
+                      'test/core/iomgr/endpoint_tests.cc',
cc39db
+                      'test/core/iomgr/endpoint_tests.h',
cc39db
+                      'test/core/security/oauth2_utils.cc',
cc39db
+                      'test/core/security/oauth2_utils.h',
cc39db
+                      'test/core/util/cmdline.cc',
cc39db
+                      'test/core/util/cmdline.h',
cc39db
+                      'test/core/util/debugger_macros.cc',
cc39db
+                      'test/core/util/debugger_macros.h',
cc39db
+                      'test/core/util/fuzzer_util.cc',
cc39db
+                      'test/core/util/fuzzer_util.h',
cc39db
+                      'test/core/util/grpc_profiler.cc',
cc39db
+                      'test/core/util/grpc_profiler.h',
cc39db
+                      'test/core/util/histogram.cc',
cc39db
+                      'test/core/util/histogram.h',
cc39db
+                      'test/core/util/memory_counters.cc',
cc39db
+                      'test/core/util/memory_counters.h',
cc39db
+                      'test/core/util/mock_endpoint.cc',
cc39db
+                      'test/core/util/mock_endpoint.h',
cc39db
+                      'test/core/util/parse_hexstring.cc',
cc39db
+                      'test/core/util/parse_hexstring.h',
cc39db
+                      'test/core/util/passthru_endpoint.cc',
cc39db
+                      'test/core/util/passthru_endpoint.h',
cc39db
+                      'test/core/util/port.cc',
cc39db
+                      'test/core/util/port.h',
cc39db
+                      'test/core/util/port_isolated_runtime_environment.cc',
cc39db
+                      'test/core/util/port_server_client.cc',
cc39db
+                      'test/core/util/port_server_client.h',
cc39db
+                      'test/core/util/slice_splitter.cc',
cc39db
+                      'test/core/util/slice_splitter.h',
cc39db
+                      'test/core/util/subprocess.h',
cc39db
+                      'test/core/util/subprocess_windows.cc',
cc39db
+                      'test/core/util/test_config.cc',
cc39db
+                      'test/core/util/test_config.h',
cc39db
+                      'test/core/util/test_lb_policies.cc',
cc39db
+                      'test/core/util/test_lb_policies.h',
cc39db
+                      'test/core/util/tracer_util.cc',
cc39db
+                      'test/core/util/tracer_util.h',
cc39db
+                      'test/core/util/trickle_endpoint.cc',
cc39db
+                      'test/core/util/trickle_endpoint.h'
cc39db
   end
cc39db
 
cc39db
   # TODO (mxyan): Instead of this hack, add include path "third_party" to C core's include path?
cc39db
diff --git a/templates/gRPC-C++.podspec.template b/templates/gRPC-C++.podspec.template
cc39db
index 0a31cc5066b..ef0801c6735 100644
cc39db
--- a/templates/gRPC-C++.podspec.template
cc39db
+++ b/templates/gRPC-C++.podspec.template
cc39db
@@ -20,108 +20,84 @@
cc39db
   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
cc39db
   # See the License for the specific language governing permissions and
cc39db
   # limitations under the License.
cc39db
+  <%
cc39db
+  lib_maps = {lib.name: lib for lib in libs}
cc39db
+  filegroup_maps = {filegroup.name: filegroup for filegroup in filegroups}
cc39db
 
cc39db
-  <%!
cc39db
-  def grpc_lib_files(libs, expect_libs, groups):
cc39db
+  def ruby_multiline_list(files, indent):
cc39db
+    return (',\n' + indent*' ').join('\'%s\'' % f for f in files)
cc39db
+
cc39db
+  def is_absl_lib(target_name):
cc39db
+    return target_name.startswith("absl/")
cc39db
+
cc39db
+  def get_absl_spec_name(label):
cc39db
+    # e.g. absl/apple:banana -> abseil/apple/banana
cc39db
+    return "abseil/" + label[5:].replace(":", "/")
cc39db
+
cc39db
+  def lib_and_transitive_deps(lib):
cc39db
+    return list(sorted(set({lib} | lib_maps[lib].transitive_deps)))
cc39db
+
cc39db
+  def non_abseil_lib_and_transitive_deps(lib):
cc39db
+    return [l for l in lib_and_transitive_deps(lib) if not is_absl_lib(l)]
cc39db
+
cc39db
+  def list_abseil_specs(lib):
cc39db
+    # This returns a list of abseil specs which the given lib and
cc39db
+    # its non-abseil transitive dependencies depend on.
cc39db
+    # As a result, internal abseil libraries are excluded from the result.
cc39db
+    absl_specs = set()
cc39db
+    for lib_name in lib_and_transitive_deps(lib):
cc39db
+      if is_absl_lib(lib_name): continue
cc39db
+      for dep in lib_maps[lib_name].deps:
cc39db
+        if is_absl_lib(dep):
cc39db
+          absl_specs.add(get_absl_spec_name(dep))
cc39db
+    return list(sorted(absl_specs))
cc39db
+
cc39db
+  def list_lib_files(lib, fields):
cc39db
+    files = set()
cc39db
+    for lib_name in non_abseil_lib_and_transitive_deps(lib):
cc39db
+      lib = lib_maps[lib_name]
cc39db
+      for field in fields:
cc39db
+        files.update(lib.get(field, []))
cc39db
+    return list(sorted(files))
cc39db
+
cc39db
+  def list_filegroup_files(expect_filegroups, groups):
cc39db
     out = []
cc39db
-    for lib in libs:
cc39db
-      if lib.name in expect_libs:
cc39db
-        for group in groups:
cc39db
-          out += lib.get(group, [])
cc39db
-    return sorted(out)
cc39db
+    for filegroup_name in expect_filegroups:
cc39db
+      filegroup = filegroup_maps[filegroup_name]
cc39db
+      for group in groups:
cc39db
+        out += filegroup.get(group, [])
cc39db
+    return list(sorted(set(out)))
cc39db
 
cc39db
   def filter_grpcpp(files):
cc39db
-    return [file for file in files if not file.startswith("include/grpc++")]
cc39db
-
cc39db
-  grpc_libs = ("grpc", "gpr", "upb")
cc39db
-
cc39db
-  def grpc_private_files(libs):
cc39db
-    out = grpc_lib_files(libs, grpc_libs, ("headers", "src"))
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_private_headers(libs):
cc39db
-    out = grpc_lib_files(libs, grpc_libs, ("headers",))
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_public_headers(libs):
cc39db
-    out = grpc_lib_files(libs, grpc_libs, ("public_headers",))
cc39db
-    return out
cc39db
-
cc39db
-  def grpcpp_proto_files(filegroups):
cc39db
-    out = grpc_lib_files(filegroups, ("grpc++_codegen_proto", "grpc++_config_proto"), ("headers", "src", "public_headers"))
cc39db
-    excl_files = grpc_lib_files(filegroups, ("grpc++_codegen_base",), ("headers", "src", "public_headers"))
cc39db
-    out = [file for file in out if file not in excl_files]
cc39db
-    out = filter_grpcpp(out)
cc39db
-    return out
cc39db
-
cc39db
-  def grpcpp_private_files(libs, filegroups):
cc39db
-    out = grpc_lib_files(libs, ("grpc++",), ("headers", "src"))
cc39db
-    excl_files = grpc_private_files(libs)
cc39db
-
cc39db
+    return sorted([file for file in files if not file.startswith("include/grpc++")])
cc39db
+
cc39db
+  grpc_private_files = list_lib_files("grpc", ("headers", "src"))
cc39db
+  grpc_public_headers = list_lib_files("grpc", ("public_headers",))
cc39db
+  grpc_private_headers = list_lib_files("grpc", ("headers",))
cc39db
+
cc39db
+  grpcpp_proto_files = filter_grpcpp(
cc39db
+    set(list_filegroup_files(("grpc++_codegen_proto", "grpc++_config_proto"), ("headers", "src", "public_headers")))
cc39db
+    - set(list_filegroup_files(("grpc++_codegen_base",), ("headers", "src", "public_headers")))
cc39db
+  )
cc39db
+  grpcpp_private_files = filter_grpcpp(
cc39db
+    set(list_lib_files("grpc++", ("headers", "src")))
cc39db
+    - set(grpc_private_files)
cc39db
     # We exclude proto related files in this particular podspec so that we can provide a protobuf-independent lib
cc39db
-    excl_files += grpcpp_proto_files(filegroups)
cc39db
-    out = [file for file in out if file not in excl_files]
cc39db
-
cc39db
-    out = filter_grpcpp(out)
cc39db
-    return out
cc39db
-
cc39db
-  def grpcpp_private_headers(libs, filegroups):
cc39db
-    out = grpc_lib_files(libs, ("grpc++",), ("headers",))
cc39db
-    excl_files = grpc_private_headers(libs)
cc39db
-
cc39db
+    - set(grpcpp_proto_files)
cc39db
+  )
cc39db
+  grpcpp_private_headers = filter_grpcpp(
cc39db
+    set(list_lib_files("grpc++", ("headers",)))
cc39db
+    - set(grpc_private_headers)
cc39db
     # We exclude proto related files in this particular podspec so that we can provide a protobuf-independent lib
cc39db
-    excl_files = grpcpp_proto_files(filegroups)
cc39db
-    out = [file for file in out if file not in excl_files]
cc39db
-
cc39db
-    out = filter_grpcpp(out)
cc39db
-    return out
cc39db
-
cc39db
-  def grpcpp_public_headers(libs, filegroups):
cc39db
-    out = grpc_lib_files(libs, ("grpc++",), ("public_headers",))
cc39db
-    excl_files = grpc_public_headers(libs)
cc39db
-
cc39db
+    - set(grpcpp_proto_files)
cc39db
+  )
cc39db
+  grpcpp_public_headers = filter_grpcpp(
cc39db
+    set(list_lib_files("grpc++", ("public_headers",)))
cc39db
+    - set(grpc_public_headers)
cc39db
     # We exclude proto related files in this particular podspec so that we can provide a protobuf-independent lib
cc39db
-    excl_files += grpcpp_proto_files(filegroups)
cc39db
-
cc39db
-    out = [file for file in out if file not in excl_files]
cc39db
-
cc39db
-    out = filter_grpcpp(out)
cc39db
-
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_test_util_files(libs):
cc39db
-    out = grpc_lib_files(libs, ("grpc_test_util",), ("src", "headers"))
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_test_util_headers(libs):
cc39db
-    out = grpc_lib_files(libs, ("grpc_test_util",), ("headers",))
cc39db
-    return out
cc39db
-
cc39db
-  # Tests subspec is currently disabled since the tests currently use `grpc++` include style instead of `grpcpp`.
cc39db
-  # TODO (mxyan): enable Tests subspec after the inclusion style is updated in `test/` directory.
cc39db
-  def grpcpp_test_util_files(libs, filegroups):
cc39db
-    out = grpc_lib_files(libs, ("grpc++_test_util",), ("src", "headers"))
cc39db
-    excl_files = grpc_test_util_files(libs) + grpcpp_private_files(libs, filegroups)
cc39db
-
cc39db
-    # We exclude proto related files in this particular podspec so that we can provide a protobuf-independent lib
cc39db
-    excl_files += grpc_lib_files(filegroups, ("grpc++_codegen_proto", "grpc++_config_proto"), ("headers", "src"))
cc39db
-    excl_files += ["test/cpp/util/byte_buffer_proto_helper.cc",
cc39db
-                   "test/cpp/util/byte_buffer_proto_helper.h",
cc39db
-                   "test/cpp/end2end/test_service_impl.cc",
cc39db
-                   "test/cpp/end2end/test_service_impl.h"]
cc39db
-    excl_files += [file for file in out if file.endswith(".proto")]
cc39db
-
cc39db
-    out = [file for file in out if not file in excl_files]
cc39db
-
cc39db
-    # Since some C++ test files directly included private headers in C core, we intentionally add these header
cc39db
-    # files to this subspec
cc39db
-    out += grpc_test_util_headers(libs)
cc39db
-
cc39db
-    return out
cc39db
-
cc39db
-  def ruby_multiline_list(files, indent):
cc39db
-    return (',\n' + indent*' ').join('\'%s\'' % f for f in files)
cc39db
-
cc39db
+    - set(grpcpp_proto_files)
cc39db
+  )
cc39db
+  grpcpp_abseil_specs = list_abseil_specs("grpc++")
cc39db
   %>
cc39db
   Pod::Spec.new do |s|
cc39db
     s.name     = 'gRPC-C++'
cc39db
@@ -168,6 +144,7 @@
cc39db
     }
cc39db
 
cc39db
     s.libraries = 'c++'
cc39db
+    s.compiler_flags = '-Wno-comma'
cc39db
 
cc39db
     s.default_subspecs = 'Interface', 'Implementation'
cc39db
 
cc39db
@@ -179,24 +156,28 @@
cc39db
     s.subspec 'Interface' do |ss|
cc39db
       ss.header_mappings_dir = 'include/grpcpp'
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpcpp_public_headers(libs, filegroups), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpcpp_public_headers, 22)}
cc39db
     end
cc39db
 
cc39db
     s.subspec 'Implementation' do |ss|
cc39db
       ss.header_mappings_dir = '.'
cc39db
       ss.dependency "#{s.name}/Interface", version
cc39db
       ss.dependency 'gRPC-Core', version
cc39db
+      abseil_version = '0.20190808.1'
cc39db
+      % for abseil_spec in grpcpp_abseil_specs:
cc39db
+      ss.dependency '${abseil_spec}', abseil_version
cc39db
+      % endfor
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpcpp_private_files(libs, filegroups) + grpc_private_headers(libs), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(sorted(grpcpp_private_files + grpc_private_headers), 22)}
cc39db
 
cc39db
-      ss.private_header_files = ${ruby_multiline_list(grpcpp_private_headers(libs, filegroups) + grpc_private_headers(libs), 30)}
cc39db
+      ss.private_header_files = ${ruby_multiline_list(sorted(grpcpp_private_headers + grpc_private_headers), 30)}
cc39db
     end
cc39db
 
cc39db
     s.subspec 'Protobuf' do |ss|
cc39db
       ss.header_mappings_dir = 'include/grpcpp'
cc39db
       ss.dependency "#{s.name}/Interface", version
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpcpp_proto_files(filegroups), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpcpp_proto_files, 22)}
cc39db
     end
cc39db
 
cc39db
     s.subspec 'Cronet-Interface' do |ss|
cc39db
diff --git a/templates/gRPC-Core.podspec.template b/templates/gRPC-Core.podspec.template
cc39db
index 9bebbdf4097..847aabc41d7 100644
cc39db
--- a/templates/gRPC-Core.podspec.template
cc39db
+++ b/templates/gRPC-Core.podspec.template
cc39db
@@ -20,60 +20,70 @@
cc39db
   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
cc39db
   # See the License for the specific language governing permissions and
cc39db
   # limitations under the License.
cc39db
-
cc39db
-  <%!
cc39db
-  def grpc_lib_files(libs, expect_libs, groups):
cc39db
-    out = []
cc39db
-    for lib in libs:
cc39db
-      if lib.name in expect_libs:
cc39db
-        for group in groups:
cc39db
-          out += lib.get(group, [])
cc39db
-    return sorted(out)
cc39db
-
cc39db
-  grpc_libs = ("grpc", "gpr", "upb")
cc39db
-
cc39db
-  def grpc_private_files(libs):
cc39db
-    out = grpc_lib_files(libs, grpc_libs, ("headers", "src"))
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_public_headers(libs):
cc39db
-    out = grpc_lib_files(libs, grpc_libs, ("public_headers",))
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_private_headers(libs):
cc39db
-    out = grpc_lib_files(libs, grpc_libs, ("headers",))
cc39db
-    return out
cc39db
-
cc39db
-  def grpc_cronet_files(libs):
cc39db
-    out = grpc_lib_files(libs, ("grpc_cronet",), ("src", "headers"))
cc39db
-    excl = grpc_private_files(libs)
cc39db
-    excl += [
cc39db
-        # We do not need cronet dedicated plugin registry
cc39db
-        "src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc",
cc39db
-        # We do not need dummy cronet API for ObjC
cc39db
-        "src/core/ext/transport/cronet/transport/cronet_api_dummy.cc",
cc39db
-    ]
cc39db
-    return [file for file in out if not file in excl]
cc39db
-
cc39db
-  def grpc_cronet_public_headers(libs):
cc39db
-    out = grpc_lib_files(libs, ("grpc_cronet",), ("public_headers",))
cc39db
-    excl = grpc_public_headers(libs)
cc39db
-    return [file for file in out if not file in excl]
cc39db
-
cc39db
-  def grpc_test_util_files(libs):
cc39db
-    out = grpc_lib_files(libs, ("grpc_test_util",), ("src", "headers"))
cc39db
-    excl = grpc_private_files(libs)
cc39db
-    # Subprocess is not supported in tvOS and not needed by our tests.
cc39db
-    excl += ["test/core/util/subprocess_posix.cc"]
cc39db
-    return [file for file in out if not file in excl]
cc39db
-
cc39db
-  def end2end_tests_files(libs):
cc39db
-    out = grpc_lib_files(libs, ("end2end_tests",), ("src", "headers"))
cc39db
-    excl = grpc_private_files(libs)
cc39db
-    return [file for file in out if not file in excl]
cc39db
+  <%
cc39db
+  lib_maps = {lib.name: lib for lib in libs}
cc39db
 
cc39db
   def ruby_multiline_list(files, indent):
cc39db
     return (',\n' + indent*' ').join('\'%s\'' % f for f in files)
cc39db
+
cc39db
+  def is_absl_lib(target_name):
cc39db
+    return target_name.startswith("absl/")
cc39db
+
cc39db
+  def get_absl_spec_name(label):
cc39db
+    # e.g. absl/apple:banana -> abseil/apple/banana
cc39db
+    return "abseil/" + label[5:].replace(":", "/")
cc39db
+
cc39db
+  def lib_and_transitive_deps(lib):
cc39db
+    return list(sorted(set({lib} | lib_maps[lib].transitive_deps)))
cc39db
+
cc39db
+  def non_abseil_lib_and_transitive_deps(lib):
cc39db
+    return [l for l in lib_and_transitive_deps(lib) if not is_absl_lib(l)]
cc39db
+
cc39db
+  def list_abseil_specs(lib):
cc39db
+    # This returns a list of abseil specs which the given lib and
cc39db
+    # its non-abseil transitive dependencies depend on.
cc39db
+    # As a result, internal abseil libraries are excluded from the result.
cc39db
+    absl_specs = set()
cc39db
+    for lib_name in lib_and_transitive_deps(lib):
cc39db
+      if is_absl_lib(lib_name): continue
cc39db
+      for dep in lib_maps[lib_name].deps:
cc39db
+        if is_absl_lib(dep):
cc39db
+          absl_specs.add(get_absl_spec_name(dep))
cc39db
+    return list(sorted(absl_specs))
cc39db
+
cc39db
+  def list_lib_files(lib, fields):
cc39db
+    files = set()
cc39db
+    for lib_name in non_abseil_lib_and_transitive_deps(lib):
cc39db
+      lib = lib_maps[lib_name]
cc39db
+      for field in fields:
cc39db
+        files.update(lib.get(field, []))
cc39db
+    return list(sorted(files))
cc39db
+
cc39db
+  grpc_private_files = list_lib_files("grpc", ("headers", "src"))
cc39db
+  grpc_public_headers = list_lib_files("grpc", ("public_headers",))
cc39db
+  grpc_private_headers = list_lib_files("grpc", ("headers",))
cc39db
+  grpc_abseil_specs = list_abseil_specs("grpc")
cc39db
+
cc39db
+  grpc_cronet_files = list(sorted(
cc39db
+    set(list_lib_files("grpc_cronet", ("src", "headers")))
cc39db
+    - set(grpc_private_files)
cc39db
+    - set([
cc39db
+      # We do not need cronet dedicated plugin registry
cc39db
+      "src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc",
cc39db
+      # We do not need dummy cronet API for ObjC
cc39db
+      "src/core/ext/transport/cronet/transport/cronet_api_dummy.cc",
cc39db
+    ])))
cc39db
+  grpc_cronet_public_headers = list(sorted(
cc39db
+    set(list_lib_files("grpc_cronet", ("public_headers",)))
cc39db
+    - set(grpc_public_headers)))
cc39db
+
cc39db
+  grpc_test_util_files = list(sorted(
cc39db
+    set(list_lib_files("end2end_tests", ("src", "headers")))
cc39db
+    - set(grpc_private_files)
cc39db
+    - set([
cc39db
+      # Subprocess is not supported in tvOS and not needed by our tests.
cc39db
+      "test/core/util/subprocess_posix.cc",
cc39db
+    ])))
cc39db
   %>
cc39db
   Pod::Spec.new do |s|
cc39db
     s.name     = 'gRPC-Core'
cc39db
@@ -152,7 +162,7 @@
cc39db
     }
cc39db
 
cc39db
     s.default_subspecs = 'Interface', 'Implementation'
cc39db
-    s.compiler_flags = '-DGRPC_ARES=0'
cc39db
+    s.compiler_flags = '-DGRPC_ARES=0 -Wno-comma'
cc39db
     s.libraries = 'c++'
cc39db
 
cc39db
     # Like many other C libraries, gRPC-Core has its public headers under `include/<libname>/` and its
cc39db
@@ -168,18 +178,21 @@
cc39db
     s.subspec 'Interface' do |ss|
cc39db
       ss.header_mappings_dir = 'include/grpc'
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpc_public_headers(libs), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpc_public_headers, 22)}
cc39db
     end
cc39db
     s.subspec 'Implementation' do |ss|
cc39db
       ss.header_mappings_dir = '.'
cc39db
       ss.libraries = 'z'
cc39db
       ss.dependency "#{s.name}/Interface", version
cc39db
       ss.dependency 'BoringSSL-GRPC', '0.0.5'
cc39db
+      abseil_version = '0.20190808.1'
cc39db
+      % for abseil_spec in grpc_abseil_specs:
cc39db
+      ss.dependency '${abseil_spec}', abseil_version
cc39db
+      % endfor
cc39db
       ss.compiler_flags = '-DGRPC_SHADOW_BORINGSSL_SYMBOLS'
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpc_private_files(libs), 22)}
cc39db
-
cc39db
-      ss.private_header_files = ${ruby_multiline_list(grpc_private_headers(libs), 30)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpc_private_files, 22)}
cc39db
+      ss.private_header_files = ${ruby_multiline_list(grpc_private_headers, 30)}
cc39db
     end
cc39db
 
cc39db
     # CFStream is now default. Leaving this subspec only for compatibility purpose.
cc39db
@@ -189,7 +202,7 @@
cc39db
 
cc39db
     s.subspec 'Cronet-Interface' do |ss|
cc39db
       ss.header_mappings_dir = 'include/grpc'
cc39db
-      ss.source_files = ${ruby_multiline_list(grpc_cronet_public_headers(libs), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpc_cronet_public_headers, 22)}
cc39db
     end
cc39db
 
cc39db
     s.subspec 'Cronet-Implementation' do |ss|
cc39db
@@ -199,7 +212,7 @@
cc39db
       ss.dependency "#{s.name}/Implementation", version
cc39db
       ss.dependency "#{s.name}/Cronet-Interface", version
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpc_cronet_files(libs), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpc_cronet_files, 22)}
cc39db
     end
cc39db
 
cc39db
     s.subspec 'Tests' do |ss|
cc39db
@@ -208,8 +221,7 @@
cc39db
       ss.dependency "#{s.name}/Interface", version
cc39db
       ss.dependency "#{s.name}/Implementation", version
cc39db
 
cc39db
-      ss.source_files = ${ruby_multiline_list(grpc_test_util_files(libs), 22)},
cc39db
-                        ${ruby_multiline_list(end2end_tests_files(libs), 22)}
cc39db
+      ss.source_files = ${ruby_multiline_list(grpc_test_util_files, 22)}
cc39db
     end
cc39db
 
cc39db
     # TODO (mxyan): Instead of this hack, add include path "third_party" to C core's include path?