Merge pull request #402 from thomasvl/objc_on_win
Getting the ObjC generator building on Windows.
This commit is contained in:
commit
c3480926f9
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -82,10 +82,6 @@ bool ObjectiveCGenerator::Generate(const FileDescriptor* file,
|
||||
file_generator.GenerateSource(&printer);
|
||||
}
|
||||
|
||||
if (!WriteClassList(error)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -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_;
|
||||
|
@ -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_;
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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_);
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
>
|
||||
|
Loading…
Reference in New Issue
Block a user