Merge pull request #19733 from Tony1023/protos

Changing Cocoapods-style proto imports to Bazel style
pull/19784/head
Muxi Yan 6 years ago committed by GitHub
commit 4a15cfb0b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      src/compiler/objective_c_generator_helpers.h
  2. 60
      src/compiler/objective_c_plugin.cc
  3. 5
      src/objective-c/examples/InterceptorSample/InterceptorSample/ViewController.m
  4. 5
      src/objective-c/examples/InterceptorSample/Podfile
  5. 40
      src/objective-c/examples/RemoteTestClient/RemoteTest.podspec
  6. 2
      src/objective-c/examples/RemoteTestClient/test.proto
  7. 5
      src/objective-c/examples/Sample/Podfile
  8. 5
      src/objective-c/examples/Sample/Sample/ViewController.m
  9. 6
      src/objective-c/tests/InteropTests/InteropTests.m
  10. 6
      src/objective-c/tests/InteropTests/InteropTestsMultipleChannels.m
  11. 6
      src/objective-c/tests/MacTests/StressTests.m
  12. 12
      src/objective-c/tests/RemoteTestClient/RemoteTest.podspec
  13. 2
      src/objective-c/tests/RemoteTestClient/test.proto
  14. 2
      src/objective-c/tests/UnitTests/APIv2Tests.m
  15. 2
      src/objective-c/tests/UnitTests/GRPCClientTests.m
  16. 3
      tools/run_tests/run_tests.py

@ -45,6 +45,16 @@ inline ::grpc::string LocalImport(const ::grpc::string& import) {
return ::grpc::string("#import \"" + import + "\"\n");
}
inline ::grpc::string FrameworkImport(const ::grpc::string& import,
const ::grpc::string& framework) {
// Flattens the directory structure: grab the file name only
std::size_t pos = import.rfind("/");
// If pos is npos, pos + 1 is 0, which gives us the entire string,
// so there's no need to check that
::grpc::string filename = import.substr(pos + 1, import.size() - (pos + 1));
return ::grpc::string("#import <" + framework + "/" + filename + ">\n");
}
inline ::grpc::string SystemImport(const ::grpc::string& import) {
return ::grpc::string("#import <" + import + ">\n");
}

@ -29,6 +29,7 @@
using ::google::protobuf::compiler::objectivec::
IsProtobufLibraryBundledProtoFile;
using ::google::protobuf::compiler::objectivec::ProtobufLibraryFrameworkName;
using ::grpc_objective_c_generator::FrameworkImport;
using ::grpc_objective_c_generator::LocalImport;
using ::grpc_objective_c_generator::PreprocIfElse;
using ::grpc_objective_c_generator::PreprocIfNot;
@ -37,11 +38,16 @@ using ::grpc_objective_c_generator::SystemImport;
namespace {
inline ::grpc::string ImportProtoHeaders(
const grpc::protobuf::FileDescriptor* dep, const char* indent) {
const grpc::protobuf::FileDescriptor* dep, const char* indent,
const ::grpc::string& framework) {
::grpc::string header = grpc_objective_c_generator::MessageHeaderName(dep);
if (!IsProtobufLibraryBundledProtoFile(dep)) {
return indent + LocalImport(header);
if (framework.empty()) {
return indent + LocalImport(header);
} else {
return indent + FrameworkImport(header, framework);
}
}
::grpc::string base_name = header;
@ -74,6 +80,28 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
return true;
}
::grpc::string framework;
std::vector<::grpc::string> params_list =
grpc_generator::tokenize(parameter, ",");
for (auto param_str = params_list.begin(); param_str != params_list.end();
++param_str) {
std::vector<::grpc::string> param =
grpc_generator::tokenize(*param_str, "=");
if (param[0] == "generate_for_named_framework") {
if (param.size() != 2) {
*error =
grpc::string("Format: generate_for_named_framework=<Framework>");
return false;
} else if (param[1].empty()) {
*error = grpc::string(
"Name of framework cannot be empty for parameter: ") +
param[0];
return false;
}
framework = param[1];
}
}
static const ::grpc::string kNonNullBegin = "NS_ASSUME_NONNULL_BEGIN\n";
static const ::grpc::string kNonNullEnd = "NS_ASSUME_NONNULL_END\n";
static const ::grpc::string kProtocolOnly = "GPB_GRPC_PROTOCOL_ONLY";
@ -86,7 +114,12 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
{
// Generate .pbrpc.h
::grpc::string imports = LocalImport(file_name + ".pbobjc.h");
::grpc::string imports;
if (framework.empty()) {
imports = LocalImport(file_name + ".pbobjc.h");
} else {
imports = FrameworkImport(file_name + ".pbobjc.h", framework);
}
::grpc::string system_imports = SystemImport("ProtoRPC/ProtoService.h") +
SystemImport("ProtoRPC/ProtoRPC.h") +
@ -106,7 +139,8 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
::grpc::string class_imports;
for (int i = 0; i < file->dependency_count(); i++) {
class_imports += ImportProtoHeaders(file->dependency(i), " ");
class_imports +=
ImportProtoHeaders(file->dependency(i), " ", framework);
}
::grpc::string ng_protocols;
@ -141,14 +175,22 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
{
// Generate .pbrpc.m
::grpc::string imports = LocalImport(file_name + ".pbrpc.h") +
LocalImport(file_name + ".pbobjc.h") +
SystemImport("ProtoRPC/ProtoRPC.h") +
SystemImport("RxLibrary/GRXWriter+Immediate.h");
::grpc::string imports;
if (framework.empty()) {
imports = LocalImport(file_name + ".pbrpc.h") +
LocalImport(file_name + ".pbobjc.h") +
SystemImport("ProtoRPC/ProtoRPC.h") +
SystemImport("RxLibrary/GRXWriter+Immediate.h");
} else {
imports = FrameworkImport(file_name + ".pbrpc.h", framework) +
FrameworkImport(file_name + ".pbobjc.h", framework) +
SystemImport("ProtoRPC/ProtoRPC.h") +
SystemImport("RxLibrary/GRXWriter+Immediate.h");
}
::grpc::string class_imports;
for (int i = 0; i < file->dependency_count(); i++) {
class_imports += ImportProtoHeaders(file->dependency(i), "");
class_imports += ImportProtoHeaders(file->dependency(i), "", framework);
}
::grpc::string definitions;

@ -19,8 +19,13 @@
#import "ViewController.h"
#import <GRPCClient/GRPCCall.h>
#if USE_FRAMEWORKS
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
#else
#import "src/objective-c/examples/RemoteTestClient/Messages.pbobjc.h"
#import "src/objective-c/examples/RemoteTestClient/Test.pbrpc.h"
#endif
#import "CacheInterceptor.h"

@ -2,6 +2,11 @@ platform :ios, '8.0'
install! 'cocoapods', :deterministic_uuids => false
# Default to use framework, so that providing no 'FRAMEWORK' env parameter works consistently
# for all Samples, specifically because Swift only supports framework.
# Only effective for examples/
use_frameworks! if ENV['FRAMEWORKS'] != 'NO'
ROOT_DIR = '../../../..'
target 'InterceptorSample' do

@ -20,25 +20,42 @@ Pod::Spec.new do |s|
well_known_types_dir = "#{repo_root}/third_party/protobuf/src"
plugin = "#{bin_dir}/grpc_objective_c_plugin"
s.prepare_command = <<-CMD
#{protoc} \
--plugin=protoc-gen-grpc=#{plugin} \
--objc_out=. \
--grpc_out=. \
-I . \
-I #{well_known_types_dir} \
*.proto
CMD
# Since we switched to importing full path, -I needs to be set to the directory
# from which the imported file can be found, which is the grpc's root here
if ENV['FRAMEWORKS'] != 'NO' then
s.user_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'USE_FRAMEWORKS=1' }
s.prepare_command = <<-CMD
# Cannot find file if using *.proto. Maybe files' paths must match the -I flags
#{protoc} \
--plugin=protoc-gen-grpc=#{plugin} \
--objc_out=. \
--grpc_out=generate_for_named_framework=#{s.name}:. \
--objc_opt=generate_for_named_framework=#{s.name} \
-I #{repo_root} \
-I #{well_known_types_dir} \
#{repo_root}/src/objective-c/examples/RemoteTestClient/*.proto
CMD
else
s.prepare_command = <<-CMD
#{protoc} \
--plugin=protoc-gen-grpc=#{plugin} \
--objc_out=. \
--grpc_out=. \
-I #{repo_root} \
-I #{well_known_types_dir} \
#{repo_root}/src/objective-c/examples/RemoteTestClient/*.proto
CMD
end
s.subspec 'Messages' do |ms|
ms.source_files = '*.pbobjc.{h,m}'
ms.source_files = 'src/objective-c/examples/RemoteTestClient/*.pbobjc.{h,m}'
ms.header_mappings_dir = '.'
ms.requires_arc = false
ms.dependency 'Protobuf'
end
s.subspec 'Services' do |ss|
ss.source_files = '*.pbrpc.{h,m}'
ss.source_files = 'src/objective-c/examples/RemoteTestClient/*.pbrpc.{h,m}'
ss.header_mappings_dir = '.'
ss.requires_arc = true
ss.dependency 'gRPC-ProtoRPC'
@ -51,4 +68,5 @@ Pod::Spec.new do |s|
# This is needed by all pods that depend on gRPC-RxLibrary:
'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
}
end

@ -17,7 +17,7 @@
syntax = "proto3";
import "google/protobuf/empty.proto";
import "messages.proto";
import "src/objective-c/examples/RemoteTestClient/messages.proto";
package grpc.testing;

@ -3,7 +3,10 @@ platform :ios, '8.0'
install! 'cocoapods', :deterministic_uuids => false
use_frameworks! if ENV['FRAMEWORKS'] == 'YES'
# Default to use framework, so that providing no 'FRAMEWORK' env parameter works consistently
# for all Samples, specifically because Swift only supports framework.
# Only effective for examples/
use_frameworks! if ENV['FRAMEWORKS'] != 'NO'
# Location of gRPC's repo root relative to this file.
GRPC_LOCAL_SRC = '../../../..'

@ -20,8 +20,13 @@
#import <GRPCClient/GRPCCall.h>
#import <ProtoRPC/ProtoMethod.h>
#if USE_FRAMEWORKS
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
#else
#import "src/objective-c/examples/RemoteTestClient/Messages.pbobjc.h"
#import "src/objective-c/examples/RemoteTestClient/Test.pbrpc.h"
#endif
#import <RxLibrary/GRXWriteable.h>
#import <RxLibrary/GRXWriter+Immediate.h>

@ -30,13 +30,13 @@
#import <GRPCClient/GRPCInterceptor.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import <ProtoRPC/ProtoRPC.h>
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
#import <RxLibrary/GRXBufferedPipe.h>
#import <RxLibrary/GRXWriter+Immediate.h>
#import <grpc/grpc.h>
#import <grpc/support/log.h>
#import "src/objective-c/tests/RemoteTestClient/Messages.pbobjc.h"
#import "src/objective-c/tests/RemoteTestClient/Test.pbobjc.h"
#import "src/objective-c/tests/RemoteTestClient/Test.pbrpc.h"
#import "../ConfigureCronet.h"
#import "InteropTestsBlockCallbacks.h"

@ -21,10 +21,10 @@
#ifdef GRPC_COMPILE_WITH_CRONET
#import <Cronet/Cronet.h>
#endif
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
#import <RxLibrary/GRXBufferedPipe.h>
#import "src/objective-c/tests/RemoteTestClient/Messages.pbobjc.h"
#import "src/objective-c/tests/RemoteTestClient/Test.pbobjc.h"
#import "src/objective-c/tests/RemoteTestClient/Test.pbrpc.h"
#import "../ConfigureCronet.h"
#import "InteropTestsBlockCallbacks.h"

@ -21,13 +21,13 @@
#import <GRPCClient/GRPCCall+Tests.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import <ProtoRPC/ProtoRPC.h>
#import <RemoteTest/Messages.pbobjc.h>
#import <RemoteTest/Test.pbobjc.h>
#import <RemoteTest/Test.pbrpc.h>
#import <RxLibrary/GRXBufferedPipe.h>
#import <RxLibrary/GRXWriter+Immediate.h>
#import <grpc/grpc.h>
#import <grpc/support/log.h>
#import "src/objective-c/tests/RemoteTestClient/Messages.pbobjc.h"
#import "src/objective-c/tests/RemoteTestClient/Test.pbobjc.h"
#import "src/objective-c/tests/RemoteTestClient/Test.pbrpc.h"
#define TEST_TIMEOUT 32

@ -27,9 +27,9 @@ Pod::Spec.new do |s|
--plugin=protoc-gen-grpc=#{plugin} \
--objc_out=. \
--grpc_out=. \
-I . \
-I #{repo_root} \
-I #{well_known_types_dir} \
*.proto
#{repo_root}/src/objective-c/tests/RemoteTestClient/*.proto
else
# protoc was not found bin_dir, use installed version instead
(>&2 echo "\nWARNING: Using installed version of protoc. It might be incompatible with gRPC")
@ -38,21 +38,21 @@ Pod::Spec.new do |s|
--plugin=protoc-gen-grpc=#{plugin} \
--objc_out=. \
--grpc_out=. \
-I . \
-I #{repo_root} \
-I #{well_known_types_dir} \
*.proto
#{repo_root}/src/objective-c/tests/RemoteTestClient/*.proto
fi
CMD
s.subspec "Messages" do |ms|
ms.source_files = "*.pbobjc.{h,m}"
ms.source_files = "src/objective-c/tests/RemoteTestClient/*.pbobjc.{h,m}"
ms.header_mappings_dir = "."
ms.requires_arc = false
ms.dependency "Protobuf"
end
s.subspec "Services" do |ss|
ss.source_files = "*.pbrpc.{h,m}"
ss.source_files = "src/objective-c/tests/RemoteTestClient/*.pbrpc.{h,m}"
ss.header_mappings_dir = "."
ss.requires_arc = true
ss.dependency "gRPC-ProtoRPC"

@ -17,7 +17,7 @@
syntax = "proto3";
import "google/protobuf/empty.proto";
import "messages.proto";
import "src/objective-c/tests/RemoteTestClient/messages.proto";
package grpc.testing;

@ -18,8 +18,8 @@
#import <GRPCClient/GRPCCall.h>
#import <ProtoRPC/ProtoMethod.h>
#import <RemoteTest/Messages.pbobjc.h>
#import <XCTest/XCTest.h>
#import "src/objective-c/tests/RemoteTestClient/Messages.pbobjc.h"
#include <grpc/grpc.h>
#include <grpc/support/port_platform.h>

@ -26,10 +26,10 @@
#import <GRPCClient/GRPCCall.h>
#import <GRPCClient/internal_testing/GRPCCall+InternalTests.h>
#import <ProtoRPC/ProtoMethod.h>
#import <RemoteTest/Messages.pbobjc.h>
#import <RxLibrary/GRXBufferedPipe.h>
#import <RxLibrary/GRXWriteable.h>
#import <RxLibrary/GRXWriter+Immediate.h>
#import "src/objective-c/tests/RemoteTestClient/Messages.pbobjc.h"
#include <netinet/in.h>

@ -1066,7 +1066,8 @@ class ObjCLanguage(object):
cpu_cost=1e6,
environ={
'SCHEME': 'Sample',
'EXAMPLE_PATH': 'src/objective-c/examples/Sample'
'EXAMPLE_PATH': 'src/objective-c/examples/Sample',
'FRAMEWORKS': 'NO'
}))
out.append(
self.config.job_spec(

Loading…
Cancel
Save