aboutsummaryrefslogtreecommitdiff
path: root/src/google/protobuf/compiler/cpp/cpp_file.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/google/protobuf/compiler/cpp/cpp_file.cc')
-rw-r--r--src/google/protobuf/compiler/cpp/cpp_file.cc34
1 files changed, 6 insertions, 28 deletions
diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc
index 70b434dd..6487979f 100644
--- a/src/google/protobuf/compiler/cpp/cpp_file.cc
+++ b/src/google/protobuf/compiler/cpp/cpp_file.cc
@@ -59,7 +59,8 @@ FileGenerator::FileGenerator(const FileDescriptor* file,
service_generators_(
new scoped_ptr<ServiceGenerator>[file->service_count()]),
extension_generators_(
- new scoped_ptr<ExtensionGenerator>[file->extension_count()]) {
+ new scoped_ptr<ExtensionGenerator>[file->extension_count()]),
+ dllexport_decl_(dllexport_decl) {
for (int i = 0; i < file->message_type_count(); i++) {
message_generators_[i].reset(
@@ -146,11 +147,13 @@ void FileGenerator::GenerateHeader(io::Printer* printer) {
// declare it to be a friend of each class.
printer->Print(
"\n"
- "// Internal implementation detail -- do not call this.\n"
+ "// Internal implementation detail -- do not call these.\n"
+ "void $dllexport_decl$ $builddescriptorsname$();\n"
"void $builddescriptorsname$_AssignGlobalDescriptors(\n"
" ::google::protobuf::FileDescriptor* file);\n"
"\n",
- "builddescriptorsname", GlobalBuildDescriptorsName(file_->name()));
+ "builddescriptorsname", GlobalBuildDescriptorsName(file_->name()),
+ "dllexport_decl", dllexport_decl_);
// Generate forward declarations of classes.
for (int i = 0; i < file_->message_type_count(); i++) {
@@ -235,31 +238,6 @@ void FileGenerator::GenerateSource(io::Printer* printer) {
"#include <google/protobuf/wire_format_inl.h>\n",
"basename", StripProto(file_->name()));
- // For each dependency, write a prototype for that dependency's
- // BuildDescriptors() function. We don't expose these in the header because
- // they are internal implementation details, and since this is generated code
- // we don't have the usual risks involved with declaring external functions
- // within a .cc file.
- for (int i = 0; i < file_->dependency_count(); i++) {
- const FileDescriptor* dependency = file_->dependency(i);
- // Open the dependency's namespace.
- vector<string> dependency_package_parts;
- SplitStringUsing(dependency->package(), ".", &dependency_package_parts);
- for (int i = 0; i < dependency_package_parts.size(); i++) {
- printer->Print("namespace $name$ { ",
- "name", dependency_package_parts[i]);
- }
- // Declare its BuildDescriptors() function.
- printer->Print(
- "void $function$();",
- "function", GlobalBuildDescriptorsName(dependency->name()));
- // Close the namespace.
- for (int i = 0; i < dependency_package_parts.size(); i++) {
- printer->Print(" }");
- }
- printer->Print("\n");
- }
-
GenerateNamespaceOpeners(printer);
printer->Print(