|
|
|
@ -214,7 +214,17 @@ FileGenerator::~FileGenerator() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FileGenerator::GenerateHeader(io::Printer *printer) { |
|
|
|
|
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers.h"); |
|
|
|
|
std::set<string> headers; |
|
|
|
|
// Generated files bundled with the library get minimal imports, everything
|
|
|
|
|
// else gets the wrapper so everything is usable.
|
|
|
|
|
if (IsProtobufLibraryBundledProtoFile(file_)) { |
|
|
|
|
headers.insert("GPBRootObject.h"); |
|
|
|
|
headers.insert("GPBMessage.h"); |
|
|
|
|
headers.insert("GPBDescriptor.h"); |
|
|
|
|
} else { |
|
|
|
|
headers.insert("GPBProtocolBuffers.h"); |
|
|
|
|
} |
|
|
|
|
PrintFileRuntimePreamble(printer, headers); |
|
|
|
|
|
|
|
|
|
// Add some verification that the generated code matches the source the
|
|
|
|
|
// code is being compiled with.
|
|
|
|
@ -337,7 +347,9 @@ void FileGenerator::GenerateHeader(io::Printer *printer) { |
|
|
|
|
|
|
|
|
|
void FileGenerator::GenerateSource(io::Printer *printer) { |
|
|
|
|
// #import the runtime support.
|
|
|
|
|
PrintFileRuntimePreamble(printer, "GPBProtocolBuffers_RuntimeSupport.h"); |
|
|
|
|
std::set<string> headers; |
|
|
|
|
headers.insert("GPBProtocolBuffers_RuntimeSupport.h"); |
|
|
|
|
PrintFileRuntimePreamble(printer, headers); |
|
|
|
|
|
|
|
|
|
// Enums use atomic in the generated code, so add the system import as needed.
|
|
|
|
|
if (FileContainsEnums(file_)) { |
|
|
|
@ -566,7 +578,7 @@ void FileGenerator::GenerateSource(io::Printer *printer) { |
|
|
|
|
// 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 { |
|
|
|
|
io::Printer* printer, const std::set<string>& headers_to_import) const { |
|
|
|
|
printer->Print( |
|
|
|
|
"// Generated by the protocol buffer compiler. DO NOT EDIT!\n" |
|
|
|
|
"// source: $filename$\n" |
|
|
|
@ -575,6 +587,7 @@ void FileGenerator::PrintFileRuntimePreamble( |
|
|
|
|
|
|
|
|
|
const string framework_name(ProtobufLibraryFrameworkName); |
|
|
|
|
const string cpp_symbol(ProtobufFrameworkImportSymbol(framework_name)); |
|
|
|
|
|
|
|
|
|
printer->Print( |
|
|
|
|
"// This CPP symbol can be defined to use imports that match up to the framework\n" |
|
|
|
|
"// imports needed when using CocoaPods.\n" |
|
|
|
@ -582,15 +595,31 @@ void FileGenerator::PrintFileRuntimePreamble( |
|
|
|
|
" #define $cpp_symbol$ 0\n" |
|
|
|
|
"#endif\n" |
|
|
|
|
"\n" |
|
|
|
|
"#if $cpp_symbol$\n" |
|
|
|
|
" #import <$framework_name$/$header$>\n" |
|
|
|
|
"#else\n" |
|
|
|
|
" #import \"$header$\"\n" |
|
|
|
|
"#if $cpp_symbol$\n", |
|
|
|
|
"cpp_symbol", cpp_symbol); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (std::set<string>::const_iterator iter = headers_to_import.begin(); |
|
|
|
|
iter != headers_to_import.end(); ++iter) { |
|
|
|
|
printer->Print( |
|
|
|
|
" #import <$framework_name$/$header$>\n", |
|
|
|
|
"header", *iter, |
|
|
|
|
"framework_name", framework_name); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
printer->Print( |
|
|
|
|
"#else\n"); |
|
|
|
|
|
|
|
|
|
for (std::set<string>::const_iterator iter = headers_to_import.begin(); |
|
|
|
|
iter != headers_to_import.end(); ++iter) { |
|
|
|
|
printer->Print( |
|
|
|
|
" #import \"$header$\"\n", |
|
|
|
|
"header", *iter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
printer->Print( |
|
|
|
|
"#endif\n" |
|
|
|
|
"\n", |
|
|
|
|
"cpp_symbol", cpp_symbol, |
|
|
|
|
"header", header_to_import, |
|
|
|
|
"framework_name", framework_name); |
|
|
|
|
"\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace objectivec
|
|
|
|
|