Browse Source

Merge pull request #402 from thomasvl/objc_on_win

Getting the ObjC generator building on Windows.
Paul Yang 10 years ago
parent
commit
c3480926f9

+ 1 - 1
objectivec/DevTools/check_version_stamps.sh

@@ -25,7 +25,7 @@ readonly ConstantName=GOOGLE_PROTOBUF_OBJC_GEN_VERSION
 readonly PluginSrc="${ProtoRootDir}/src/google/protobuf/compiler/objectivec/objectivec_file.cc"
 readonly PluginVersion=$( \
     cat "${PluginSrc}" \
-        | sed -n -e "s:const int32_t ${ConstantName} = \([0-9]*\);:\1:p"
+        | sed -n -e "s:const int32 ${ConstantName} = \([0-9]*\);:\1:p"
 )
 
 if [[ -z "${PluginVersion}" ]] ; then

+ 0 - 1
src/google/protobuf/compiler/objectivec/objectivec_extension.cc

@@ -77,7 +77,6 @@ ExtensionGenerator::ExtensionGenerator(const string& root_class_name,
 ExtensionGenerator::~ExtensionGenerator() {}
 
 void ExtensionGenerator::GenerateMembersHeader(io::Printer* printer) {
-  WriteClassNameToClassList(root_class_and_method_name_);
   if (IsFiltered()) {
     printer->Print("// $filter_reason$\n\n", "filter_reason", filter_reason_);
     return;

+ 1 - 5
src/google/protobuf/compiler/objectivec/objectivec_field.cc

@@ -39,10 +39,6 @@
 #include <google/protobuf/stubs/common.h>
 #include <google/protobuf/stubs/strutil.h>
 
-#ifndef htonl
-#include <netinet/in.h>
-#endif
-
 namespace google {
 namespace protobuf {
 namespace compiler {
@@ -107,7 +103,7 @@ void SetCommonFieldVariables(const FieldDescriptor* descriptor,
   string field_options = descriptor->options().SerializeAsString();
   // Must convert to a standard byte order for packing length into
   // a cstring.
-  uint32_t length = htonl(field_options.length());
+  uint32 length = ghtonl(field_options.length());
   if (length > 0) {
     string bytes((const char*)&length, sizeof(length));
     bytes.append(field_options);

+ 4 - 3
src/google/protobuf/compiler/objectivec/objectivec_file.cc

@@ -40,13 +40,14 @@
 #include <google/protobuf/stubs/strutil.h>
 #include <sstream>
 
+namespace google {
+namespace protobuf {
+
 // This is also found in GPBBootstrap.h, and needs to be kept in sync.  It
 // is the version check done to ensure generated code works with the current
 // runtime being used.
-const int32_t GOOGLE_PROTOBUF_OBJC_GEN_VERSION = 30000;
+const int32 GOOGLE_PROTOBUF_OBJC_GEN_VERSION = 30000;
 
-namespace google {
-namespace protobuf {
 namespace compiler {
 namespace objectivec {
 FileGenerator::FileGenerator(const FileDescriptor *file)

+ 0 - 4
src/google/protobuf/compiler/objectivec/objectivec_generator.cc

@@ -82,10 +82,6 @@ bool ObjectiveCGenerator::Generate(const FileDescriptor* file,
     file_generator.GenerateSource(&printer);
   }
 
-  if (!WriteClassList(error)) {
-    return false;
-  }
-
   return true;
 }
 

+ 10 - 79
src/google/protobuf/compiler/objectivec/objectivec_helpers.cc

@@ -28,12 +28,6 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include <arpa/inet.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <unistd.h>
-
 #include <fstream>
 #include <iostream>
 #include <sstream>
@@ -46,14 +40,6 @@
 #include <google/protobuf/descriptor.pb.h>
 #include <google/protobuf/stubs/strutil.h>
 
-#ifndef htonl
-#include <netinet/in.h>
-#endif
-
-#ifndef O_EXLOCK
-#include <sys/file.h>
-#endif
-
 // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
 // error case, so it seem to be ok to use as a back door for errors.
 
@@ -65,7 +51,6 @@ namespace objectivec {
 namespace {
 
 hash_set<string> gClassWhitelist;
-stringstream gClassListStream;
 
 // islower()/isupper()/tolower()/toupper() change based on locale.
 
@@ -754,7 +739,7 @@ string DefaultValue(const FieldDescriptor* field) {
 
         // Must convert to a standard byte order for packing length into
         // a cstring.
-        uint32_t length = htonl(default_string.length());
+        uint32 length = ghtonl(default_string.length());
         string bytes((const char*)&length, sizeof(length));
         bytes.append(default_string);
         return "(NSData*)\"" + CEscape(bytes) + "\"";
@@ -809,60 +794,6 @@ string BuildCommentsString(const SourceLocation& location) {
   return final_comments;
 }
 
-bool WriteClassList(string* error) {
-  const char* file_name = getenv("GPB_CLASSLIST_PATH");
-  if (file_name != NULL) {
-#ifndef O_EXLOCK
-    int fd = open(file_name, O_WRONLY | O_APPEND | O_CREAT,
-                  (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH));
-#else
-    int fd = open(file_name, O_WRONLY | O_APPEND | O_EXLOCK | O_CREAT,
-                  (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH));
-#endif
-    if (fd == -1) {
-      if (error != NULL) {
-        stringstream err_stream;
-        err_stream << endl << file_name << ":0:0: error:"
-                   << "Unable to open (" << errno << ")";
-        *error = err_stream.str();
-      }
-      return false;
-    }
-#ifndef O_EXLOCK
-    if (flock(fd, LOCK_EX) < 0) {
-      if (error != NULL) {
-        stringstream err_stream;
-        err_stream << endl << file_name << ":0:0: error:"
-                   << "Unable to lock (" << errno << ")";
-        *error = err_stream.str();
-      }
-      return false;
-    }
-#endif
-    // Need a local to hold the list so the cstring stays valid for the
-    // write call.
-    const string& class_list_str = gClassListStream.str();
-    int write_out = write(fd, class_list_str.c_str(), class_list_str.length());
-    int close_out = close(fd);
-    if (write_out == -1 || close_out == -1) {
-      if (error != NULL) {
-        stringstream err_stream;
-        err_stream << endl << file_name << ":0:0: error:"
-                   << "Unable to write (" << errno << ")";
-        *error = err_stream.str();
-      }
-      return false;
-    }
-  }
-  return true;
-}
-
-void WriteClassNameToClassList(const string& name) {
-  if (gClassListStream.good()) {
-    gClassListStream << name << '\n';
-  }
-}
-
 bool InitializeClassWhitelist(string* error) {
   const char* env_var_value = getenv("GPB_OBJC_CLASS_WHITELIST_PATHS");
   if (env_var_value == NULL) {
@@ -917,7 +848,7 @@ bool FilterClass(const string& name) {
   return gClassWhitelist.size() > 0;
 }
 
-void TextFormatDecodeData::AddString(int32_t key,
+void TextFormatDecodeData::AddString(int32 key,
                                      const string& input_for_decode,
                                      const string& desired_output) {
   for (vector<DataEntry>::const_iterator i = entries_.begin();
@@ -973,14 +904,14 @@ class DecodeDataBuilder {
   }
 
  private:
-  static const uint8_t kAddUnderscore = 0b10000000;
+  static const uint8 kAddUnderscore = 0x80;
 
-  static const uint8_t kOpAsIs = 0b00000000;
-  static const uint8_t kOpFirstUpper = 0b01000000;
-  static const uint8_t kOpFirstLower = 0b00100000;
-  static const uint8_t kOpAllUpper = 0b01100000;
+  static const uint8 kOpAsIs        = 0x00;
+  static const uint8 kOpFirstUpper  = 0x40;
+  static const uint8 kOpFirstLower  = 0x20;
+  static const uint8 kOpAllUpper    = 0x60;
 
-  static const int kMaxSegmentLen = 0b00011111;
+  static const int kMaxSegmentLen     = 0x1f;
 
   void AddChar(const char desired) {
     ++segment_len_;
@@ -988,7 +919,7 @@ class DecodeDataBuilder {
   }
 
   void Push() {
-    uint8_t op = (op_ | segment_len_);
+    uint8 op = (op_ | segment_len_);
     if (need_underscore_) op |= kAddUnderscore;
     if (op != 0) {
       decode_data_ += (char)op;
@@ -1020,7 +951,7 @@ class DecodeDataBuilder {
 
   bool need_underscore_;
   bool is_all_upper_;
-  uint8_t op_;
+  uint8 op_;
   int segment_len_;
 
   string decode_data_;

+ 2 - 5
src/google/protobuf/compiler/objectivec/objectivec_helpers.h

@@ -142,9 +142,6 @@ string BuildFlagsString(const vector<string>& strings);
 
 string BuildCommentsString(const SourceLocation& location);
 
-bool WriteClassList(string* error);
-void WriteClassNameToClassList(const string& name);
-
 bool InitializeClassWhitelist(string* error);
 bool FilterClass(const string& name);
 
@@ -154,7 +151,7 @@ class TextFormatDecodeData {
  public:
   TextFormatDecodeData() {}
 
-  void AddString(int32_t key, const string& input_for_decode,
+  void AddString(int32 key, const string& input_for_decode,
                  const string& desired_output);
   size_t num_entries() const { return entries_.size(); }
   string Data() const;
@@ -165,7 +162,7 @@ class TextFormatDecodeData {
  private:
   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormatDecodeData);
 
-  typedef std::pair<int32_t, string> DataEntry;
+  typedef std::pair<int32, string> DataEntry;
   vector<DataEntry> entries_;
 };
 

+ 2 - 2
src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc

@@ -150,7 +150,7 @@ TEST(ObjCHelper, TextFormatDecodeData_RawStrings) {
 
   EXPECT_EQ(4, decode_data.num_entries());
 
-  uint8_t expected_data[] = {
+  uint8 expected_data[] = {
       0x4,
       0x1, 0x0, 'z', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'I', 'J', 0x0,
       0x3, 0x0, 'a', 'b', 'c', 'd', 'e', 'z', 'g', 'h', 'I', 'J', 0x0,
@@ -175,7 +175,7 @@ TEST(ObjCHelper, TextFormatDecodeData_ByteCodes) {
 
   EXPECT_EQ(5, decode_data.num_entries());
 
-  uint8_t expected_data[] = {
+  uint8 expected_data[] = {
       0x5,
       // All as is (00 op)
       0x1,  0x0A, 0x0,

+ 3 - 2
src/google/protobuf/compiler/objectivec/objectivec_message.cc

@@ -119,6 +119,9 @@ int OrderGroupForFieldDescriptor(const FieldDescriptor* descriptor) {
     case FieldDescriptor::TYPE_BOOL:
       return 1;
   }
+
+  GOOGLE_LOG(FATAL) << "Can't get here.";
+  return 0;
 }
 
 struct FieldOrderingByStorageSize {
@@ -303,8 +306,6 @@ void MessageGenerator::GenerateMessageHeader(io::Printer* printer) {
     return;
   }
 
-  WriteClassNameToClassList(class_name_);
-
   if (IsFiltered()) {
     printer->Print("// $filter_reason$\n\n",
                    "filter_reason", filter_reason_);

+ 6 - 1
src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc

@@ -76,6 +76,9 @@ const char* PrimitiveTypeName(const FieldDescriptor* descriptor) {
     case OBJECTIVECTYPE_MESSAGE:
       return NULL;
   }
+
+  GOOGLE_LOG(FATAL) << "Can't get here.";
+  return NULL;
 }
 
 const char* PrimitiveArrayTypeName(const FieldDescriptor* descriptor) {
@@ -104,6 +107,9 @@ const char* PrimitiveArrayTypeName(const FieldDescriptor* descriptor) {
     case OBJECTIVECTYPE_MESSAGE:
       return "";  // Want NSArray
   }
+
+  GOOGLE_LOG(FATAL) << "Can't get here.";
+  return NULL;
 }
 
 void SetPrimitiveVariables(const FieldDescriptor* descriptor,
@@ -155,7 +161,6 @@ void RepeatedPrimitiveFieldGenerator::FinishInitialization(void) {
   }
 }
 
-
 }  // namespace objectivec
 }  // namespace compiler
 }  // namespace protobuf

+ 96 - 0
vsprojects/libprotoc.vcproj

@@ -371,6 +371,54 @@
       <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_message.h"></File>
       <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_params.h"></File>
       <File RelativePath="..\src\google\protobuf\compiler\javanano\javanano_primitive_field.h"></File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum_field.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_extension.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_field.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_file.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_generator.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_helpers.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_map_field.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message_field.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_oneof.h"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_primitive_field.h"
+        >
+      </File>
       <File
         RelativePath="..\src\google\protobuf\compiler\python\python_generator.h"
         >
@@ -635,6 +683,54 @@
         RelativePath="..\src\google\protobuf\compiler\javanano\javanano_primitive_field.cc"
         >
       </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_enum_field.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_extension.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_field.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_file.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_generator.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_helpers.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_map_field.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_message_field.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_oneof.cc"
+        >
+      </File>
+      <File
+        RelativePath="..\src\google\protobuf\compiler\objectivec\objectivec_primitive_field.cc"
+        >
+      </File>
       <File
         RelativePath="..\src\google\protobuf\compiler\plugin.cc"
         >