Made Objective C plugin build without error
diff --git a/Makefile b/Makefile
index 4e99231..22235b7 100644
--- a/Makefile
+++ b/Makefile
@@ -456,7 +456,7 @@
.SECONDARY = %.pb.h %.pb.cc
-PROTOC_PLUGINS = $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(BINDIR)/$(CONFIG)/grpc_python_plugin $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
+PROTOC_PLUGINS = $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin $(BINDIR)/$(CONFIG)/grpc_python_plugin $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
ifeq ($(DEP_MISSING),)
all: static shared plugins
dep_error:
@@ -632,6 +632,7 @@
generic_end2end_test: $(BINDIR)/$(CONFIG)/generic_end2end_test
grpc_cli: $(BINDIR)/$(CONFIG)/grpc_cli
grpc_cpp_plugin: $(BINDIR)/$(CONFIG)/grpc_cpp_plugin
+grpc_objective_c_plugin: $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin
grpc_python_plugin: $(BINDIR)/$(CONFIG)/grpc_python_plugin
grpc_ruby_plugin: $(BINDIR)/$(CONFIG)/grpc_ruby_plugin
interop_client: $(BINDIR)/$(CONFIG)/interop_client
@@ -2266,6 +2267,8 @@
$(Q) $(INSTALL) -d $(prefix)/bin
$(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_cpp_plugin $(prefix)/bin/grpc_cpp_plugin
$(Q) $(INSTALL) -d $(prefix)/bin
+ $(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin $(prefix)/bin/grpc_objective_c_plugin
+ $(Q) $(INSTALL) -d $(prefix)/bin
$(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_python_plugin $(prefix)/bin/grpc_python_plugin
$(Q) $(INSTALL) -d $(prefix)/bin
$(Q) $(INSTALL) $(BINDIR)/$(CONFIG)/grpc_ruby_plugin $(prefix)/bin/grpc_ruby_plugin
@@ -3615,6 +3618,7 @@
LIBGRPC_PLUGIN_SUPPORT_SRC = \
src/compiler/cpp_generator.cc \
+ src/compiler/objective_c_generator.cc \
src/compiler/python_generator.cc \
src/compiler/ruby_generator.cc \
@@ -3649,6 +3653,7 @@
endif
$(OBJDIR)/$(CONFIG)/src/compiler/cpp_generator.o:
+$(OBJDIR)/$(CONFIG)/src/compiler/objective_c_generator.o:
$(OBJDIR)/$(CONFIG)/src/compiler/python_generator.o:
$(OBJDIR)/$(CONFIG)/src/compiler/ruby_generator.o:
@@ -8331,6 +8336,36 @@
endif
+GRPC_OBJECTIVE_C_PLUGIN_SRC = \
+ src/compiler/objective_c_plugin.cc \
+
+GRPC_OBJECTIVE_C_PLUGIN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_OBJECTIVE_C_PLUGIN_SRC))))
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/grpc_objective_c_plugin: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/grpc_objective_c_plugin: $(PROTOBUF_DEP) $(GRPC_OBJECTIVE_C_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a
+ $(E) "[HOSTLD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(HOST_LDXX) $(HOST_LDFLAGS) $(GRPC_OBJECTIVE_C_PLUGIN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a $(HOST_LDLIBSXX) $(HOST_LDLIBS_PROTOC) $(HOST_LDLIBS) $(HOST_LDLIBS_PROTOC) -o $(BINDIR)/$(CONFIG)/grpc_objective_c_plugin
+
+endif
+
+$(OBJDIR)/$(CONFIG)/src/compiler/objective_c_plugin.o: $(LIBDIR)/$(CONFIG)/libgrpc_plugin_support.a
+
+deps_grpc_objective_c_plugin: $(GRPC_OBJECTIVE_C_PLUGIN_OBJS:.o=.dep)
+
+ifneq ($(NO_DEPS),true)
+-include $(GRPC_OBJECTIVE_C_PLUGIN_OBJS:.o=.dep)
+endif
+
+
GRPC_PYTHON_PLUGIN_SRC = \
src/compiler/python_plugin.cc \
diff --git a/build.json b/build.json
index 06adfee..890a538 100644
--- a/build.json
+++ b/build.json
@@ -514,6 +514,8 @@
"src/compiler/cpp_generator.h",
"src/compiler/cpp_generator_helpers.h",
"src/compiler/generator_helpers.h",
+ "src/compiler/objective_c_generator.h",
+ "src/compiler/objective_c_generator_helpers.h",
"src/compiler/python_generator.h",
"src/compiler/ruby_generator.h",
"src/compiler/ruby_generator_helpers-inl.h",
@@ -522,6 +524,7 @@
],
"src": [
"src/compiler/cpp_generator.cc",
+ "src/compiler/objective_c_generator.cc",
"src/compiler/python_generator.cc",
"src/compiler/ruby_generator.cc"
],
@@ -1818,6 +1821,18 @@
"secure": "no"
},
{
+ "name": "grpc_objective_c_plugin",
+ "build": "protoc",
+ "language": "c++",
+ "src": [
+ "src/compiler/objective_c_plugin.cc"
+ ],
+ "deps": [
+ "grpc_plugin_support"
+ ],
+ "secure": "no"
+ },
+ {
"name": "grpc_python_plugin",
"build": "protoc",
"language": "c++",
diff --git a/src/compiler/generator_helpers.h b/src/compiler/generator_helpers.h
index 2a3366a..374e137 100644
--- a/src/compiler/generator_helpers.h
+++ b/src/compiler/generator_helpers.h
@@ -95,7 +95,7 @@
}
}
-inline grpc::string CapitalizeFirstLetter(grpc::string str) {
+inline grpc::string CapitalizeFirstLetter(grpc::string s) {
if (s.empty()) {
return s;
}
diff --git a/src/compiler/objective_c_generator.cc b/src/compiler/objective_c_generator.cc
index 41ffabe..c68c9c3 100644
--- a/src/compiler/objective_c_generator.cc
+++ b/src/compiler/objective_c_generator.cc
@@ -47,8 +47,8 @@
const grpc::protobuf::MethodDescriptor *method,
std::map<grpc::string, grpc::string> *vars) {
(*vars)["method_name"] = method->name();
- (*vars)["request_type"] = PrefixedName(method->input_type());
- (*vars)["response_type"] = PrefixedName(method->output_type());
+ (*vars)["request_type"] = PrefixedName(method->input_type()->name());
+ (*vars)["response_type"] = PrefixedName(method->output_type()->name());
if (method->server_streaming()) {
printer->Print("// When the response stream finishes, the handler is "
@@ -56,7 +56,7 @@
} else {
printer->Print("// The handler is only called once.\n\n");
}
- printer->Print(vars, "- (id<GRXLiveSource>)$method_name$WithRequest:"
+ printer->Print(*vars, "- (id<GRXLiveSource>)$method_name$WithRequest:"
"($request_type$)request completionHandler:(void(^)"
"($response_type$ *, NSError *))handler");
}
@@ -65,9 +65,9 @@
const grpc::protobuf::MethodDescriptor *method,
std::map<grpc::string, grpc::string> *vars) {
(*vars)["method_name"] = method->name();
- (*vars)["request_type"] = PrefixedName(method->input_type());
+ (*vars)["request_type"] = PrefixedName(method->input_type()->name());
- printer->Print(vars, "- (id<GRXLiveSource>)$method_name$WithRequest:"
+ printer->Print(*vars, "- (id<GRXLiveSource>)$method_name$WithRequest:"
"($request_type$)request delegate:(id<GRXSink>)delegate");
}
@@ -75,11 +75,79 @@
const grpc::protobuf::MethodDescriptor *method,
std::map<grpc::string, grpc::string> *vars) {
(*vars)["method_name"] = method->name();
- printer->Print(vars, "- (GRXSource *)$method_name$WithRequest:"
+ printer->Print(*vars, "- (GRXSource *)$method_name$WithRequest:"
"(id<GRXSource>)request");
}
-grpc::string GetHeader(const grpc::protobuf::ServiceDescriptor *service
+void PrintSourceMethodSimpleBlock(grpc::protobuf::io::Printer *printer,
+ const grpc::protobuf::MethodDescriptor *method,
+ std::map<grpc::string, grpc::string> *vars) {
+ PrintSimpleBlockSignature(printer, method, vars);
+
+ (*vars)["method_name"] = method->name();
+ printer->Print(" {\n");
+ printer->Indent();
+ printer->Print(*vars, "return [[self $method_name$WithRequest:request] "
+ "connectHandler:^(id value, NSError *error) {\n");
+ printer->Indent();
+ printer->Print("handler(value, error);\n");
+ printer->Outdent();
+ printer->Print("}];\n");
+ printer->Outdent();
+ printer->Print("}\n");
+}
+
+void PrintSourceMethodSimpleDelegate(grpc::protobuf::io::Printer *printer,
+ const grpc::protobuf::MethodDescriptor *method,
+ std::map<grpc::string, grpc::string> *vars) {
+ PrintSimpleDelegateSignature(printer, method, vars);
+
+ (*vars)["method_name"] = method->name();
+ printer->Print(" {\n");
+ printer->Indent();
+ printer->Print(*vars, "return [[self $method_name$WithRequest:request]"
+ "connectToSink:delegate];\n");
+ printer->Outdent();
+ printer->Print("}\n");
+}
+
+void PrintSourceMethodAdvanced(grpc::protobuf::io::Printer *printer,
+ const grpc::protobuf::MethodDescriptor *method,
+ std::map<grpc::string, grpc::string> *vars) {
+ PrintAdvancedSignature(printer, method, vars);
+
+ (*vars)["method_name"] = method->name();
+ printer->Print(" {\n");
+ printer->Indent();
+ printer->Print(*vars, "return [self $method_name$WithRequest:request "
+ "client:[self newClient]];\n");
+ printer->Outdent();
+ printer->Print("}\n");
+}
+
+void PrintSourceMethodHandler(grpc::protobuf::io::Printer *printer,
+ const grpc::protobuf::MethodDescriptor *method,
+ std::map<grpc::string, grpc::string> *vars) {
+ (*vars)["method_name"] = method->name();
+ (*vars)["response_type"] = PrefixedName(method->output_type()->name());
+ (*vars)["caps_name"] = grpc_generator::CapitalizeFirstLetter(method->name());
+
+ printer->Print(*vars, "- (GRXSource *)$method_name$WithRequest:"
+ "(id<GRXSource>)request client:(PBgRPCClient *)client {\n");
+ printer->Indent();
+ printer->Print(*vars,
+ "return [self responseWithMethod:$@\"$caps_name\"\n");
+ printer->Print(*vars,
+ " class:[$response_type$ class]\n");
+ printer->Print(" request:request\n");
+ printer->Print(" client:client];\n");
+ printer->Outdent();
+ printer->Print("}\n");
+}
+
+}
+
+grpc::string GetHeader(const grpc::protobuf::ServiceDescriptor *service,
const grpc::string message_header) {
grpc::string output;
grpc::protobuf::io::StringOutputStream output_stream(&output);
@@ -88,7 +156,7 @@
printer.Print("#import \"PBgRPCClient.h\"\n");
printer.Print("#import \"PBStub.h\"\n");
vars["message_header"] = message_header;
- printer.Print(&vars, "#import \"$message_header$\"\n\n");
+ printer.Print(vars, "#import \"$message_header$\"\n\n");
printer.Print("@protocol GRXSource\n");
printer.Print("@class GRXSource\n\n");
vars["service_name"] = service->name();
@@ -114,89 +182,23 @@
printer.Print("\n");
printer.Print("@end\n\n");
printer.Print("// Basic stub that only does marshalling and parsing\n");
- printer.Print(&vars, "@interface $service_name$Stub :"
+ printer.Print(vars, "@interface $service_name$Stub :"
" PBStub<$service_name$Stub>\n");
printer.Print("- (instancetype)initWithHost:(NSString *)host;\n");
printer.Print("@end\n");
return output;
}
-void PrintSourceMethodSimpleBlock(grpc::protobuf::io::Printer *printer,
- const grpc::protobuf::MethodDescriptor *method,
- std::map<grpc::string, grpc::string> *vars) {
- PrintSimpleBlockSignature(printer, method, vars);
-
- (*vars)["method_name"] = method->name();
- printer->Print(" {\n");
- printer->Indent();
- printer->Print(vars, "return [[self $method_name$WithRequest:request] "
- "connectHandler:^(id value, NSError *error) {\n");
- printer->Indent();
- printer->Print("handler(value, error);\n");
- printer->Outdent();
- printer->Print("}];\n");
- printer->Outdent();
- printer->Print("}\n");
-}
-
-void PrintSourceMethodSimpleDelegate(grpc::protobuf::io::Printer *printer,
- const grpc::protobuf::MethodDescriptor *method,
- std::map<grpc::string, grpc::string> *vars) {
- PrintSimpleDelegateSignature(printer, method, vars);
-
- (*vars)["method_name"] = method->name();
- printer->Print(" {\n");
- printer->Indent();
- printer->Print(vars, "return [[self $method_name$WithRequest:request]"
- "connectToSink:delegate];\n");
- printer->Outdent();
- printer->Print("}\n");
-}
-
-void PrintSourceMethodAdvanced(grpc::protobuf::io::Printer *printer,
- const grpc::protobuf::MethodDescriptor *method,
- std::map<grpc::string, grpc::string> *vars) {
- PrintAdvancedSignature(printer, method, vars);
-
- (*vars)["method_name"] = method->name();
- printer->Print(" {\n");
- printer->Indent();
- printer->Print(vars, "return [self $method_name$WithRequest:request "
- "client:[self newClient]];\n");
- printer->Outdent();
- printer->Print("}\n");
-}
-
-void PrintSourceMethodHandler(grpc::protobuf::io::Printer *printer,
- const grpc::protobuf::MethodDescriptor *method,
- std::map<grpc::string, grpc::string> *vars) {
- (*vars)["method_name"] = method->name();
- (*vars)["response_type"] = PrefixedName(method->output_type());
- (*vars)["caps_name"] = grpc_generator::CapitalizeFirstLetter(method->name());
-
- printer->Print(vars, "- (GRXSource *)$method_name$WithRequest:"
- "(id<GRXSource>)request client:(PBgRPCClient *)client {\n");
- printer->Indent();
- printer->Print(vars,
- "return [self responseWithMethod:$@\"$caps_name\"\n");
- printer->Print(vars,
- " class:[$response_type$ class]\n");
- printer->Print(" request:request\n");
- printer->Print(" client:client];\n");
- printer->Outdent();
- printer->Print("}\n");
-}
-
grpc::string GetSource(const grpc::protobuf::ServiceDescriptor *service) {
grpc::string output;
grpc::protobuf::io::StringOutputStream output_stream(&output);
grpc::protobuf::io::Printer printer(&output_stream, '$');
std::map<grpc::string, grpc::string> vars;
vars["service_name"] = service->name();
- printer.Print(&vars, "#import \"$service_name$Stub.pb.h\"\n");
+ printer.Print(vars, "#import \"$service_name$Stub.pb.h\"\n");
printer.Print("#import \"PBGeneratedMessage+GRXSource.h\"\n\n");
vars["full_name"] = service->full_name();
- printer.Print(&vars,
+ printer.Print(vars,
"static NSString *const kInterface = @\"$full_name$\";\n");
printer.Print("@implementation $service_name$Stub\n\n");
printer.Print("- (instancetype)initWithHost:(NSString *)host {\n");
diff --git a/src/compiler/objective_c_generator.h b/src/compiler/objective_c_generator.h
index bea63f5..93c730b 100644
--- a/src/compiler/objective_c_generator.h
+++ b/src/compiler/objective_c_generator.h
@@ -38,7 +38,7 @@
namespace grpc_objective_c_generator {
-grpc::string GetHeader(const grpc::protobuf::ServiceDescriptor *service
+grpc::string GetHeader(const grpc::protobuf::ServiceDescriptor *service,
const grpc::string message_header);
grpc::string GetSource(const grpc::protobuf::ServiceDescriptor *service);
diff --git a/src/compiler/objective_c_generator_helpers.h b/src/compiler/objective_c_generator_helpers.h
index 0c2ece8..6a7c139 100644
--- a/src/compiler/objective_c_generator_helpers.h
+++ b/src/compiler/objective_c_generator_helpers.h
@@ -43,7 +43,7 @@
const grpc::string prefix = "PBG";
inline grpc::string MessageHeaderName(const grpc::protobuf::FileDescriptor *file) {
- return FileNameInUpperCase(file) + ".pb.h";
+ return grpc_generator::FileNameInUpperCamel(file) + ".pb.h";
}
inline grpc::string StubFileName(grpc::string service_name) {
diff --git a/src/compiler/objective_c_plugin.cc b/src/compiler/objective_c_plugin.cc
index 4d4146b..eebce0c 100644
--- a/src/compiler/objective_c_plugin.cc
+++ b/src/compiler/objective_c_plugin.cc
@@ -56,21 +56,24 @@
for (int i = 0; i < file->service_count(); i++) {
const grpc::protobuf::ServiceDescriptor *service = file->service(i);
- grpc::sring file_name = grpc_objective_c_generator::StubFileName(
+ grpc::string file_name = grpc_objective_c_generator::StubFileName(
service->name());
// Generate .pb.h
- grpc::string header_code = grpc_objective_c_generator::GetHeader(service);
+ grpc::string header_code = grpc_objective_c_generator::GetHeader(
+ service, grpc_objective_c_generator::MessageHeaderName(file));
std::unique_ptr<grpc::protobuf::io::ZeroCopyOutputStream> header_output(
context->Open(file_name + ".pb.h"));
- grpc::protobuf::io::CodedOutputStream header_coded_out(output.get());
+ grpc::protobuf::io::CodedOutputStream header_coded_out(
+ header_output.get());
header_coded_out.WriteRaw(header_code.data(), header_code.size());
// Generate .pb.m
grpc::string source_code = grpc_objective_c_generator::GetSource(service);
std::unique_ptr<grpc::protobuf::io::ZeroCopyOutputStream> source_output(
context->Open(file_name + ".pb.m"));
- grpc::protobuf::io::CodedOutputStream source_coded_out(output.get());
+ grpc::protobuf::io::CodedOutputStream source_coded_out(
+ source_output.get());
source_coded_out.WriteRaw(source_code.data(), source_code.size());
}