From patchwork Thu Jul 20 10:57:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Santos X-Patchwork-Id: 791563 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=busybox.net (client-ip=140.211.166.138; helo=whitealder.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xCrTS0Dnlz9s75 for ; Thu, 20 Jul 2017 20:57:46 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 3E1CD890C1; Thu, 20 Jul 2017 10:57:44 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7kTdDcXqasdI; Thu, 20 Jul 2017 10:57:42 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by whitealder.osuosl.org (Postfix) with ESMTP id 99B8E88F47; Thu, 20 Jul 2017 10:57:42 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id 312091C0674 for ; Thu, 20 Jul 2017 10:57:41 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 2CFCE3095C for ; Thu, 20 Jul 2017 10:57:41 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CuxfZ70a+PP8 for ; Thu, 20 Jul 2017 10:57:39 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail.datacom.ind.br (mx.datacom.ind.br [177.66.5.10]) by silver.osuosl.org (Postfix) with ESMTPS id 14C0530516 for ; Thu, 20 Jul 2017 10:57:38 +0000 (UTC) Received: from mail.datacom.ind.br (localhost [127.0.0.1]) by mail.datacom.ind.br (Postfix) with ESMTPS id D5A1A1904EB9; Thu, 20 Jul 2017 07:55:31 -0300 (BRT) Received: from localhost (localhost [127.0.0.1]) by mail.datacom.ind.br (Postfix) with ESMTP id C37B41904E84; Thu, 20 Jul 2017 07:55:31 -0300 (BRT) Received: from mail.datacom.ind.br ([127.0.0.1]) by localhost (mail.datacom.ind.br [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id gjxbQUGNFQAT; Thu, 20 Jul 2017 07:55:31 -0300 (BRT) Received: from pedeld202344.datacom.net (pedeld202344.datacom.net [10.0.120.87]) by mail.datacom.ind.br (Postfix) with ESMTPSA id 9B7F31904E60; Thu, 20 Jul 2017 07:55:31 -0300 (BRT) From: Carlos Santos To: buildroot@buildroot.org Date: Thu, 20 Jul 2017 07:57:26 -0300 Message-Id: <1500548246-25269-1-git-send-email-casantos@datacom.ind.br> X-Mailer: git-send-email 2.7.5 In-Reply-To: <20170719223906.764e5ccf@windsurf> References: <20170719223906.764e5ccf@windsurf> Cc: Thomas Petazzoni Subject: [Buildroot] [PATCH v2 (2017.05.x)] protobuf: don't download patch from Github X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Patches downloaded from Github are not stable, so bring them in the tree. Signed-off-by: Carlos Santos --- package/protobuf/0001-Fix-freebsd-build.patch | 145 ++++++++++++++++++++++++++ package/protobuf/protobuf.hash | 1 - package/protobuf/protobuf.mk | 2 - 3 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 package/protobuf/0001-Fix-freebsd-build.patch diff --git a/package/protobuf/0001-Fix-freebsd-build.patch b/package/protobuf/0001-Fix-freebsd-build.patch new file mode 100644 index 0000000..96ce511 --- /dev/null +++ b/package/protobuf/0001-Fix-freebsd-build.patch @@ -0,0 +1,145 @@ +From 416f90939d4de58fe1a4e2489120010313183291 Mon Sep 17 00:00:00 2001 +From: Feng Xiao +Date: Tue, 14 Mar 2017 23:12:52 +0000 +Subject: [PATCH] Fix freebsd build. + +It turns out system headers included by generated plugin.pb.h file already contains +major/minor macro definitions when built on FreeBSD and we need to add #undefs to +the generated header file. + +This change also fixes another compile error regarding EXPECT_DEATH on FreeBSD. + +Signed-off-by: Carlos Santos +--- + src/google/protobuf/compiler/cpp/cpp_file.cc | 46 +++++++++++++++++++++++ + src/google/protobuf/compiler/cpp/cpp_file.h | 9 +++++ + src/google/protobuf/compiler/plugin.pb.h | 6 +++ + src/google/protobuf/stubs/stringpiece_unittest.cc | 2 + + 4 files changed, 63 insertions(+) + +diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc +index 0e5e2f1..f2e013c 100644 +--- a/src/google/protobuf/compiler/cpp/cpp_file.cc ++++ b/src/google/protobuf/compiler/cpp/cpp_file.cc +@@ -54,6 +54,39 @@ namespace google { + namespace protobuf { + namespace compiler { + namespace cpp { ++namespace { ++// The list of names that are defined as macros on some platforms. We need to ++// #undef them for the generated code to compile. ++const char* kMacroNames[] = {"major", "minor"}; ++ ++bool IsMacroName(const string& name) { ++ // Just do a linear search as the number of elements is very small. ++ for (int i = 0; i < GOOGLE_ARRAYSIZE(kMacroNames); ++i) { ++ if (name == kMacroNames[i]) return true; ++ } ++ return false; ++} ++ ++void CollectMacroNames(const Descriptor* message, vector* names) { ++ for (int i = 0; i < message->field_count(); ++i) { ++ const FieldDescriptor* field = message->field(i); ++ if (IsMacroName(field->name())) { ++ names->push_back(field->name()); ++ } ++ } ++ for (int i = 0; i < message->nested_type_count(); ++i) { ++ CollectMacroNames(message->nested_type(i), names); ++ } ++} ++ ++void CollectMacroNames(const FileDescriptor* file, vector* names) { ++ for (int i = 0; i < file->message_type_count(); ++i) { ++ CollectMacroNames(file->message_type(i), names); ++ } ++} ++ ++ ++} // namespace + + // =================================================================== + +@@ -103,10 +136,23 @@ FileGenerator::FileGenerator(const FileDescriptor* file, const Options& options) + + FileGenerator::~FileGenerator() {} + ++void FileGenerator::GenerateMacroUndefs(io::Printer* printer) { ++ vector names_to_undef; ++ CollectMacroNames(file_, &names_to_undef); ++ for (int i = 0; i < names_to_undef.size(); ++i) { ++ printer->Print( ++ "#ifdef $name$\n" ++ "#undef $name$\n" ++ "#endif\n", ++ "name", names_to_undef[i]); ++ } ++} ++ + void FileGenerator::GenerateHeader(io::Printer* printer) { + printer->Print( + "// @@protoc_insertion_point(includes)\n"); + ++ GenerateMacroUndefs(printer); + + GenerateForwardDeclarations(printer); + +diff --git a/src/google/protobuf/compiler/cpp/cpp_file.h b/src/google/protobuf/compiler/cpp/cpp_file.h +index 25d6eab..e3fbb96 100644 +--- a/src/google/protobuf/compiler/cpp/cpp_file.h ++++ b/src/google/protobuf/compiler/cpp/cpp_file.h +@@ -133,6 +133,15 @@ class FileGenerator { + + void GenerateProto2NamespaceEnumSpecializations(io::Printer* printer); + ++ // Sometimes the names we use in a .proto file happen to be defined as macros ++ // on some platforms (e.g., macro/minor used in plugin.proto are defined as ++ // macros in sys/types.h on FreeBSD and a few other platforms). To make the ++ // generated code compile on these platforms, we either have to undef the ++ // macro for these few platforms, or rename the field name for all platforms. ++ // Since these names are part of protobuf public API, renaming is generally ++ // a breaking change so we prefer the #undef approach. ++ void GenerateMacroUndefs(io::Printer* printer); ++ + const FileDescriptor* file_; + const Options options_; + +diff --git a/src/google/protobuf/compiler/plugin.pb.h b/src/google/protobuf/compiler/plugin.pb.h +index 1b91dac..d6afb21 100644 +--- a/src/google/protobuf/compiler/plugin.pb.h ++++ b/src/google/protobuf/compiler/plugin.pb.h +@@ -30,6 +30,12 @@ + #include + #include + // @@protoc_insertion_point(includes) ++#ifdef major ++#undef major ++#endif ++#ifdef minor ++#undef minor ++#endif + namespace google { + namespace protobuf { + class DescriptorProto; +diff --git a/src/google/protobuf/stubs/stringpiece_unittest.cc b/src/google/protobuf/stubs/stringpiece_unittest.cc +index a52d81f..a6a8759 100644 +--- a/src/google/protobuf/stubs/stringpiece_unittest.cc ++++ b/src/google/protobuf/stubs/stringpiece_unittest.cc +@@ -783,11 +783,13 @@ TEST(FindOneCharTest, EdgeCases) { + EXPECT_EQ(StringPiece::npos, a.rfind('x')); + } + ++#ifdef PROTOBUF_HAS_DEATH_TEST + #ifndef NDEBUG + TEST(NonNegativeLenTest, NonNegativeLen) { + EXPECT_DEATH(StringPiece("xyz", -1), "len >= 0"); + } + #endif // ndef DEBUG ++#endif // PROTOBUF_HAS_DEATH_TEST + + } // namespace + } // namespace protobuf +-- +2.7.5 + diff --git a/package/protobuf/protobuf.hash b/package/protobuf/protobuf.hash index 8c2ade3..9ec6bc7 100644 --- a/package/protobuf/protobuf.hash +++ b/package/protobuf/protobuf.hash @@ -1,3 +1,2 @@ # Locally calculated sha256 51d773e4297238b282eaa4c1dd317099675b12eef2b414732b851c00459225c6 protobuf-cpp-3.2.0.tar.gz -sha256 da80c39838515913633f4cbd875fdd4ad711be95c83a50ff5096b9f1254033b3 416f90939d4de58fe1a4e2489120010313183291.patch diff --git a/package/protobuf/protobuf.mk b/package/protobuf/protobuf.mk index 2cd10eb..bd36ee4 100644 --- a/package/protobuf/protobuf.mk +++ b/package/protobuf/protobuf.mk @@ -23,8 +23,6 @@ endif PROTOBUF_INSTALL_STAGING = YES -PROTOBUF_PATCH = https://github.com/google/protobuf/commit/416f90939d4de58fe1a4e2489120010313183291.patch - ifeq ($(BR2_PACKAGE_ZLIB),y) PROTOBUF_DEPENDENCIES += zlib endif