|  | @@ -54,14 +54,16 @@ namespace {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class ImportWriter {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  | -  ImportWriter() {}
 | 
	
		
			
				|  |  | +  ImportWriter(const Options& options) : options_(options) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void AddFile(const FileGenerator* file);
 | 
	
		
			
				|  |  |    void Print(io::Printer *printer) const;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |   private:
 | 
	
		
			
				|  |  | +  const Options options_;
 | 
	
		
			
				|  |  |    vector<string> protobuf_framework_imports_;
 | 
	
		
			
				|  |  |    vector<string> protobuf_non_framework_imports_;
 | 
	
		
			
				|  |  | +  vector<string> other_framework_imports_;
 | 
	
		
			
				|  |  |    vector<string> other_imports_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -72,6 +74,10 @@ void ImportWriter::AddFile(const FileGenerator* file) {
 | 
	
		
			
				|  |  |      protobuf_framework_imports_.push_back(
 | 
	
		
			
				|  |  |          FilePathBasename(file_descriptor) + extension);
 | 
	
		
			
				|  |  |      protobuf_non_framework_imports_.push_back(file->Path() + extension);
 | 
	
		
			
				|  |  | +  } else if (!options_.generate_for_named_framework.empty()) {
 | 
	
		
			
				|  |  | +    other_framework_imports_.push_back(
 | 
	
		
			
				|  |  | +        options_.generate_for_named_framework + "/" +
 | 
	
		
			
				|  |  | +        FilePathBasename(file_descriptor) + extension);
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      other_imports_.push_back(file->Path() + extension);
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -81,6 +87,8 @@ void ImportWriter::Print(io::Printer *printer) const {
 | 
	
		
			
				|  |  |    assert(protobuf_non_framework_imports_.size() ==
 | 
	
		
			
				|  |  |           protobuf_framework_imports_.size());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  bool add_blank_line = false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    if (protobuf_framework_imports_.size() > 0) {
 | 
	
		
			
				|  |  |      const string framework_name(ProtobufLibraryFrameworkName);
 | 
	
		
			
				|  |  |      const string cpp_symbol(ProtobufFrameworkImportSymbol(framework_name));
 | 
	
	
		
			
				|  | @@ -106,12 +114,29 @@ void ImportWriter::Print(io::Printer *printer) const {
 | 
	
		
			
				|  |  |      printer->Print(
 | 
	
		
			
				|  |  |          "#endif\n");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (other_imports_.size() > 0) {
 | 
	
		
			
				|  |  | +    add_blank_line = true;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (other_framework_imports_.size() > 0) {
 | 
	
		
			
				|  |  | +    if (add_blank_line) {
 | 
	
		
			
				|  |  |        printer->Print("\n");
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    for (vector<string>::const_iterator iter = other_framework_imports_.begin();
 | 
	
		
			
				|  |  | +         iter != other_framework_imports_.end(); ++iter) {
 | 
	
		
			
				|  |  | +      printer->Print(
 | 
	
		
			
				|  |  | +          " #import <$header$>\n",
 | 
	
		
			
				|  |  | +          "header", *iter);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    add_blank_line = true;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    if (other_imports_.size() > 0) {
 | 
	
		
			
				|  |  | +    if (add_blank_line) {
 | 
	
		
			
				|  |  | +      printer->Print("\n");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      for (vector<string>::const_iterator iter = other_imports_.begin();
 | 
	
		
			
				|  |  |           iter != other_imports_.end(); ++iter) {
 | 
	
		
			
				|  |  |        printer->Print(
 | 
	
	
		
			
				|  | @@ -156,7 +181,7 @@ FileGenerator::~FileGenerator() {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void FileGenerator::GenerateHeader(io::Printer *printer) {
 | 
	
		
			
				|  |  | -  PrintFilePreamble(printer, "GPBProtocolBuffers.h");
 | 
	
		
			
				|  |  | +  PrintFileRuntimePreamble(printer, "GPBProtocolBuffers.h");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Add some verification that the generated code matches the source the
 | 
	
		
			
				|  |  |    // code is being compiled with.
 | 
	
	
		
			
				|  | @@ -170,7 +195,7 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // #import any headers for "public imports" in the proto file.
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  | -    ImportWriter import_writer;
 | 
	
		
			
				|  |  | +    ImportWriter import_writer(options_);
 | 
	
		
			
				|  |  |      const vector<FileGenerator *> &dependency_generators = DependencyGenerators();
 | 
	
		
			
				|  |  |      for (vector<FileGenerator *>::const_iterator iter =
 | 
	
		
			
				|  |  |               dependency_generators.begin();
 | 
	
	
		
			
				|  | @@ -273,10 +298,10 @@ void FileGenerator::GenerateHeader(io::Printer *printer) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void FileGenerator::GenerateSource(io::Printer *printer) {
 | 
	
		
			
				|  |  |    // #import the runtime support.
 | 
	
		
			
				|  |  | -  PrintFilePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h");
 | 
	
		
			
				|  |  | +  PrintFileRuntimePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  | -    ImportWriter import_writer;
 | 
	
		
			
				|  |  | +    ImportWriter import_writer(options_);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // #import the header for this proto file.
 | 
	
		
			
				|  |  |      import_writer.AddFile(this);
 | 
	
	
		
			
				|  | @@ -471,7 +496,10 @@ const vector<FileGenerator *> &FileGenerator::DependencyGenerators() {
 | 
	
		
			
				|  |  |    return dependency_generators_;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void FileGenerator::PrintFilePreamble(
 | 
	
		
			
				|  |  | +// Helper to print the import of the runtime support at the top of generated
 | 
	
		
			
				|  |  | +// files. This currently only supports the runtime coming from a framework
 | 
	
		
			
				|  |  | +// as defined by the official CocoaPod.
 | 
	
		
			
				|  |  | +void FileGenerator::PrintFileRuntimePreamble(
 | 
	
		
			
				|  |  |      io::Printer* printer, const string& header_to_import) const {
 | 
	
		
			
				|  |  |    printer->Print(
 | 
	
		
			
				|  |  |        "// Generated by the protocol buffer compiler.  DO NOT EDIT!\n"
 |