Merge updates from master

This commit is contained in:
Repository mirror & CI
2023-08-21 20:01:38 +00:00
6 changed files with 1184 additions and 2 deletions

View File

@@ -0,0 +1,501 @@
https://bugs.gentoo.org/912775
https://github.com/protobuf-c/protobuf-c/issues/679
https://github.com/protobuf-c/protobuf-c/issues/544
https://github.com/protobuf-c/protobuf-c/pull/673
From ad48868dfe77592c4bacf936ade208f384a26b09 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Sun, 2 Jul 2023 17:48:18 -0400
Subject: [PATCH 1/7] protoc-c: Remove GOOGLE_DISALLOW_EVIL_CONSTRUCTORS macro
invocations
protobuf has removed the definition of this macro as of commit
1595417dd3859bbff7d3d61ad0b6e39044d47489, so the invocation of this
macro in protobuf-c breaks the build when building agaist the protobuf
22.x or 23.x series.
Simply removing the macro invocations seems to be safe and doesn't break
the build on Debian's protobuf 3.21.12 nor Debian's protobuf 3.6.1.3.
---
protoc-c/c_bytes_field.h | 2 --
protoc-c/c_enum.h | 2 --
protoc-c/c_enum_field.h | 2 --
protoc-c/c_extension.h | 2 --
protoc-c/c_field.h | 5 -----
protoc-c/c_file.h | 2 --
protoc-c/c_generator.h | 3 ---
protoc-c/c_message.h | 2 --
protoc-c/c_message_field.h | 4 ----
protoc-c/c_primitive_field.h | 4 ----
protoc-c/c_service.h | 2 --
protoc-c/c_string_field.h | 2 --
12 files changed, 32 deletions(-)
diff --git a/protoc-c/c_bytes_field.h b/protoc-c/c_bytes_field.h
index bf873f0f..df91ef73 100644
--- a/protoc-c/c_bytes_field.h
+++ b/protoc-c/c_bytes_field.h
@@ -87,8 +87,6 @@ class BytesFieldGenerator : public FieldGenerator {
private:
std::map<std::string, std::string> variables_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(BytesFieldGenerator);
};
diff --git a/protoc-c/c_enum.h b/protoc-c/c_enum.h
index 9c34b697..089c3366 100644
--- a/protoc-c/c_enum.h
+++ b/protoc-c/c_enum.h
@@ -106,8 +106,6 @@ class EnumGenerator {
private:
const EnumDescriptor* descriptor_;
std::string dllexport_decl_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumGenerator);
};
} // namespace c
diff --git a/protoc-c/c_enum_field.h b/protoc-c/c_enum_field.h
index 3f8c005d..e0c96adf 100644
--- a/protoc-c/c_enum_field.h
+++ b/protoc-c/c_enum_field.h
@@ -85,8 +85,6 @@ class EnumFieldGenerator : public FieldGenerator {
private:
std::map<std::string, std::string> variables_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumFieldGenerator);
};
diff --git a/protoc-c/c_extension.h b/protoc-c/c_extension.h
index 95413885..bda0bc55 100644
--- a/protoc-c/c_extension.h
+++ b/protoc-c/c_extension.h
@@ -98,8 +98,6 @@ class ExtensionGenerator {
const FieldDescriptor* descriptor_;
std::string type_traits_;
std::string dllexport_decl_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ExtensionGenerator);
};
} // namespace c
diff --git a/protoc-c/c_field.h b/protoc-c/c_field.h
index 3cad35d3..623a872e 100644
--- a/protoc-c/c_field.h
+++ b/protoc-c/c_field.h
@@ -103,9 +103,6 @@ class FieldGenerator {
const std::string &type_macro,
const std::string &descriptor_addr) const;
const FieldDescriptor *descriptor_;
-
- private:
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldGenerator);
};
// Convenience class which constructs FieldGenerators for a Descriptor.
@@ -121,8 +118,6 @@ class FieldGeneratorMap {
std::unique_ptr<std::unique_ptr<FieldGenerator>[]> field_generators_;
static FieldGenerator* MakeGenerator(const FieldDescriptor* field);
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldGeneratorMap);
};
} // namespace c
diff --git a/protoc-c/c_file.h b/protoc-c/c_file.h
index 8dfd8ba0..db1866cd 100644
--- a/protoc-c/c_file.h
+++ b/protoc-c/c_file.h
@@ -103,8 +103,6 @@ class FileGenerator {
std::unique_ptr<std::unique_ptr<EnumGenerator>[]> enum_generators_;
std::unique_ptr<std::unique_ptr<ServiceGenerator>[]> service_generators_;
std::unique_ptr<std::unique_ptr<ExtensionGenerator>[]> extension_generators_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator);
};
} // namespace c
diff --git a/protoc-c/c_generator.h b/protoc-c/c_generator.h
index ac1ffafe..b8b44aaa 100644
--- a/protoc-c/c_generator.h
+++ b/protoc-c/c_generator.h
@@ -93,9 +93,6 @@ class PROTOC_C_EXPORT CGenerator : public CodeGenerator {
const std::string& parameter,
OutputDirectory* output_directory,
std::string* error) const;
-
- private:
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CGenerator);
};
} // namespace c
diff --git a/protoc-c/c_message.h b/protoc-c/c_message.h
index ea1c3ab3..0d8c6440 100644
--- a/protoc-c/c_message.h
+++ b/protoc-c/c_message.h
@@ -136,8 +136,6 @@ class MessageGenerator {
std::unique_ptr<std::unique_ptr<MessageGenerator>[]> nested_generators_;
std::unique_ptr<std::unique_ptr<EnumGenerator>[]> enum_generators_;
std::unique_ptr<std::unique_ptr<ExtensionGenerator>[]> extension_generators_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageGenerator);
};
} // namespace c
diff --git a/protoc-c/c_message_field.h b/protoc-c/c_message_field.h
index 39b8d999..e485921a 100644
--- a/protoc-c/c_message_field.h
+++ b/protoc-c/c_message_field.h
@@ -82,10 +82,6 @@ class MessageFieldGenerator : public FieldGenerator {
void GenerateDescriptorInitializer(io::Printer* printer) const;
std::string GetDefaultValue(void) const;
void GenerateStaticInit(io::Printer* printer) const;
-
- private:
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageFieldGenerator);
};
diff --git a/protoc-c/c_primitive_field.h b/protoc-c/c_primitive_field.h
index a9eb893b..aa7079f9 100644
--- a/protoc-c/c_primitive_field.h
+++ b/protoc-c/c_primitive_field.h
@@ -82,10 +82,6 @@ class PrimitiveFieldGenerator : public FieldGenerator {
void GenerateDescriptorInitializer(io::Printer* printer) const;
std::string GetDefaultValue(void) const;
void GenerateStaticInit(io::Printer* printer) const;
-
- private:
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(PrimitiveFieldGenerator);
};
} // namespace c
diff --git a/protoc-c/c_service.h b/protoc-c/c_service.h
index 27125a60..b51472f9 100644
--- a/protoc-c/c_service.h
+++ b/protoc-c/c_service.h
@@ -100,8 +100,6 @@ class ServiceGenerator {
const ServiceDescriptor* descriptor_;
std::map<std::string, std::string> vars_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ServiceGenerator);
};
} // namespace c
diff --git a/protoc-c/c_string_field.h b/protoc-c/c_string_field.h
index 513cea75..b3a1a7ff 100644
--- a/protoc-c/c_string_field.h
+++ b/protoc-c/c_string_field.h
@@ -87,8 +87,6 @@ class StringFieldGenerator : public FieldGenerator {
private:
std::map<std::string, std::string> variables_;
-
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StringFieldGenerator);
};
From 7b90330bff40ab555bb3f0c5ee43ae208a275104 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Sun, 2 Jul 2023 19:35:43 -0400
Subject: [PATCH 2/7] Use GOOGLE_LOG(FATAL) instead of GOOGLE_LOG(DFATAL)
Looking at where these identifiers are ultimately defined [0], it looks
like "DFATAL" means either "ERROR" or "FATAL" depending on whether
NDEBUG is defined. However, looking at the actual code sites in protoc-c
where DFATAL is used, it's not clear why we couldn't just use FATAL
unconditionally.
This is aimed at supporting newer versions of protobuf where the DFATAL
identifier apparently no longer exists.
[0] https://github.com/protocolbuffers/protobuf/blob/v21.12/src/google/protobuf/stubs/logging.h#L61-L65
---
protoc-c/c_message.cc | 4 ++--
protoc-c/c_primitive_field.cc | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/protoc-c/c_message.cc b/protoc-c/c_message.cc
index 37e8bf8b..af2974ca 100755
--- a/protoc-c/c_message.cc
+++ b/protoc-c/c_message.cc
@@ -499,7 +499,7 @@ GenerateMessageDescriptor(io::Printer* printer, bool gen_init) {
// NOTE: not supported by protobuf
vars["maybe_static"] = "";
vars["field_dv_ctype"] = "{ ... }";
- GOOGLE_LOG(DFATAL) << "Messages can't have default values!";
+ GOOGLE_LOG(FATAL) << "Messages can't have default values!";
break;
case FieldDescriptor::CPPTYPE_STRING:
if (fd->type() == FieldDescriptor::TYPE_BYTES || opt.string_as_bytes())
@@ -521,7 +521,7 @@ GenerateMessageDescriptor(io::Printer* printer, bool gen_init) {
break;
}
default:
- GOOGLE_LOG(DFATAL) << "Unknown CPPTYPE";
+ GOOGLE_LOG(FATAL) << "Unknown CPPTYPE";
break;
}
if (!already_defined)
diff --git a/protoc-c/c_primitive_field.cc b/protoc-c/c_primitive_field.cc
index 6990893f..1727af38 100644
--- a/protoc-c/c_primitive_field.cc
+++ b/protoc-c/c_primitive_field.cc
@@ -143,7 +143,7 @@ std::string PrimitiveFieldGenerator::GetDefaultValue() const
case FieldDescriptor::CPPTYPE_BOOL:
return descriptor_->default_value_bool() ? "1" : "0";
default:
- GOOGLE_LOG(DFATAL) << "unexpected CPPTYPE in c_primitive_field";
+ GOOGLE_LOG(FATAL) << "unexpected CPPTYPE in c_primitive_field";
return "UNEXPECTED_CPPTYPE";
}
}
From 8d334a7204d98874cbf970cb96ab0c7b52e06695 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Sun, 2 Jul 2023 19:42:19 -0400
Subject: [PATCH 3/7] Work around GOOGLE_* changes in protobuf >= 22.0
According to the protobuf migration guide as of June 2023 [0], protobuf
22.0 (aka 4.22.0) took a dependency on something called "abseil" and as
a result the "stubs" have been removed. This apparently caused all the
uses of GOOGLE_* identifiers in protoc-c to fail when building against
newer versions of protobuf.
This commit introduces compatibility definitions when building against
protobuf >= 4.22.0 so that protobuf-c can build against older and newer
versions of protobuf.
[0] https://web.archive.org/web/20230611151200/https://protobuf.dev/support/migration/#abseil
---
protoc-c/c_helpers.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/protoc-c/c_helpers.h b/protoc-c/c_helpers.h
index 7598a4e1..adc7ee21 100644
--- a/protoc-c/c_helpers.h
+++ b/protoc-c/c_helpers.h
@@ -178,6 +178,16 @@ inline int FieldSyntax(const FieldDescriptor* field) {
#endif
}
+// Work around changes in protobuf >= 22.x without breaking compilation against
+// older protobuf versions.
+#if GOOGLE_PROTOBUF_VERSION >= 4022000
+# define GOOGLE_ARRAYSIZE ABSL_ARRAYSIZE
+# define GOOGLE_CHECK_EQ ABSL_CHECK_EQ
+# define GOOGLE_CHECK_EQ ABSL_CHECK_EQ
+# define GOOGLE_DCHECK_GE ABSL_DCHECK_GE
+# define GOOGLE_LOG ABSL_LOG
+#endif
+
} // namespace c
} // namespace compiler
} // namespace protobuf
From 23d2246e0f6ebfc69232ab29b6c6325d8009d1f7 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Sun, 2 Jul 2023 19:48:17 -0400
Subject: [PATCH 4/7] configure.ac: Require C++17 when building against
protobuf >= 4.22.0
It's unclear from looking at the online protobuf documentation whether
C++14 or C++17 is now required when building against newer versions of
protobuf (or perhaps I'm looking in the wrong place), but experimentally
it did not work for me with C++14.
This commit rewrites the versioned PKG_CHECK_MODULES checks in
configure.ac to enforce the following policies:
* Require protobuf >= 2.6.0.
* On protobuf >= 3.0.0, require C++11.
* On protobuf >= 4.22.0, require C++17.
---
configure.ac | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/configure.ac b/configure.ac
index 94d01dca..fa024b6a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,12 +76,26 @@ AC_ARG_ENABLE([protoc],
if test "x$enable_protoc" != "xno"; then
AC_LANG_PUSH([C++])
- AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
-
- PKG_CHECK_MODULES([protobuf], [protobuf >= 3.0.0],
- [proto3_supported=yes],
- [PKG_CHECK_MODULES([protobuf], [protobuf >= 2.6.0])]
- )
+ # PKG_CHECK_MODULES(prefix, list-of-modules, action-if-found, action-if-not-found)
+ PKG_CHECK_MODULES(
+ [protobuf],
+ [protobuf >= 4.22.0],
+ [
+ proto3_supported=yes
+ AX_CXX_COMPILE_STDCXX(17, noext, mandatory)
+ ],
+ [
+ PKG_CHECK_MODULES(
+ [protobuf],
+ [protobuf >= 3.0.0],
+ [
+ proto3_supported=yes
+ AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
+ ],
+ [
+ PKG_CHECK_MODULES([protobuf], [protobuf >= 2.6.0])
+ ])
+ ])
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$save_CPPFLAGS $protobuf_CFLAGS"
From 1937ba946b0a7a62c0f534e60f4d4799d7e0daed Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Sun, 2 Jul 2023 22:57:57 -0400
Subject: [PATCH 5/7] protoc-c: Use FileDescriptorLegacy to obtain proto syntax
version on protobuf >= 23.0
Use the newer "legacy" way of determining whether a file descriptor is
using proto2 or proto3 syntax on protobuf >= 23.0.
Based on
https://github.com/protobuf-c/protobuf-c/pull/556/commits/66574f3fd85a205eb7c90b790477d5415364209e
but continues to support older versions of protobuf.
Unfortunately, since this is a "deprecated", "legacy" API it'll probably
disappear in about five seconds.
---
protoc-c/c_file.cc | 4 ++++
protoc-c/c_helpers.h | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/protoc-c/c_file.cc b/protoc-c/c_file.cc
index 59c1824e..d211a3da 100644
--- a/protoc-c/c_file.cc
+++ b/protoc-c/c_file.cc
@@ -119,7 +119,11 @@ void FileGenerator::GenerateHeader(io::Printer* printer) {
int min_header_version = 1000000;
#if defined(HAVE_PROTO3)
+# if GOOGLE_PROTOBUF_VERSION >= 4023000
+ if (FileDescriptorLegacy(file_).syntax() == FileDescriptorLegacy::SYNTAX_PROTO3) {
+# else
if (file_->syntax() == FileDescriptor::SYNTAX_PROTO3) {
+#endif
min_header_version = 1003000;
}
#endif
diff --git a/protoc-c/c_helpers.h b/protoc-c/c_helpers.h
index adc7ee21..055528bf 100644
--- a/protoc-c/c_helpers.h
+++ b/protoc-c/c_helpers.h
@@ -70,6 +70,10 @@
#include <protobuf-c/protobuf-c.pb.h>
#include <google/protobuf/io/printer.h>
+#if GOOGLE_PROTOBUF_VERSION >= 4023000
+# include <google/protobuf/descriptor_legacy.h>
+#endif
+
namespace google {
namespace protobuf {
namespace compiler {
@@ -172,7 +176,11 @@ int compare_name_indices_by_name(const void*, const void*);
// This wrapper is needed to be able to compile against protobuf2.
inline int FieldSyntax(const FieldDescriptor* field) {
#ifdef HAVE_PROTO3
+# if GOOGLE_PROTOBUF_VERSION >= 4023000
+ return FileDescriptorLegacy(field->file()).syntax() == FileDescriptorLegacy::SYNTAX_PROTO3 ? 3 : 2;
+# else
return field->file()->syntax() == FileDescriptor::SYNTAX_PROTO3 ? 3 : 2;
+# endif
#else
return 2;
#endif
From 7582b6e7d640636bf24c0f9dd2b386ed6fd41919 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Sun, 2 Jul 2023 22:58:48 -0400
Subject: [PATCH 6/7] cmake: Require C++17
Newer versions of protobuf apparently don't build with older versions of
the C++ standard.
---
build-cmake/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build-cmake/CMakeLists.txt b/build-cmake/CMakeLists.txt
index 95f561c0..c71dd899 100644
--- a/build-cmake/CMakeLists.txt
+++ b/build-cmake/CMakeLists.txt
@@ -96,7 +96,7 @@ if (MSVC AND NOT BUILD_SHARED_LIBS)
endif (MSVC AND NOT BUILD_SHARED_LIBS)
IF(BUILD_PROTOC)
-SET(CMAKE_CXX_STANDARD 11)
+SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_EXTENSIONS OFF)
ADD_CUSTOM_COMMAND(OUTPUT protobuf-c/protobuf-c.pb.cc protobuf-c/protobuf-c.pb.h
From 5b0661f1e8a0e03f75cc6f53b8d42507e95403c9 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Mon, 3 Jul 2023 01:10:28 -0400
Subject: [PATCH 7/7] configure.ac: Require C++17
There are some recent reports of strange build failures that might have
been fixed by compiling in C++17 mode, so it might be a good idea to use
C++17 in general, and not just when building against very recent
protobuf versions.
Since it looks like we've lost protobuf < 3.0.0 support, configure.ac
can be simplified a bit if we just use C++17 by default.
---
configure.ac | 23 ++---------------------
1 file changed, 2 insertions(+), 21 deletions(-)
diff --git a/configure.ac b/configure.ac
index fa024b6a..586ac3c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,27 +75,8 @@ AC_ARG_ENABLE([protoc],
AS_HELP_STRING([--disable-protoc], [Disable building protoc_c (also disables tests)]))
if test "x$enable_protoc" != "xno"; then
AC_LANG_PUSH([C++])
-
- # PKG_CHECK_MODULES(prefix, list-of-modules, action-if-found, action-if-not-found)
- PKG_CHECK_MODULES(
- [protobuf],
- [protobuf >= 4.22.0],
- [
- proto3_supported=yes
- AX_CXX_COMPILE_STDCXX(17, noext, mandatory)
- ],
- [
- PKG_CHECK_MODULES(
- [protobuf],
- [protobuf >= 3.0.0],
- [
- proto3_supported=yes
- AX_CXX_COMPILE_STDCXX(11, noext, mandatory)
- ],
- [
- PKG_CHECK_MODULES([protobuf], [protobuf >= 2.6.0])
- ])
- ])
+ AX_CXX_COMPILE_STDCXX(17, noext, mandatory)
+ PKG_CHECK_MODULES([protobuf], [protobuf >= 3.0.0], [proto3_supported=yes])
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$save_CPPFLAGS $protobuf_CFLAGS"

View File

@@ -0,0 +1,56 @@
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit autotools multilib-minimal
MY_PV="${PV/_/-}"
MY_P="${PN}-${MY_PV}"
DESCRIPTION="Protocol Buffers implementation in C"
HOMEPAGE="https://github.com/protobuf-c/protobuf-c"
SRC_URI="https://github.com/${PN}/${PN}/releases/download/v${MY_PV}/${MY_P}.tar.gz"
S="${WORKDIR}/${MY_P}"
LICENSE="BSD-2"
# Subslot == SONAME version
SLOT="0/1.0.0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
IUSE="static-libs test"
RESTRICT="!test? ( test )"
BDEPEND="
>=dev-libs/protobuf-3:0
virtual/pkgconfig
"
DEPEND=">=dev-libs/protobuf-3:0=[${MULTILIB_USEDEP}]"
RDEPEND="${DEPEND}"
PATCHES=(
"${FILESDIR}"/${PN}-1.4.0-include-path.patch
"${FILESDIR}"/${P}-protobuf-22.patch
)
src_prepare() {
default
if ! use test; then
eapply "${FILESDIR}"/${PN}-1.3.0-no-build-tests.patch
fi
eautoreconf
}
multilib_src_configure() {
local myeconfargs=(
$(use_enable static-libs static)
)
ECONF_SOURCE="${S}" econf "${myeconfargs[@]}"
}
multilib_src_install_all() {
find "${ED}" -name '*.la' -type f -delete || die
einstalldocs
}

View File

@@ -19,7 +19,7 @@ SRC_URI="https://github.com/draios/sysdig/archive/${PV}.tar.gz -> ${P}.tar.gz
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64 x86"
KEYWORDS="~amd64 ~x86"
IUSE="+modules"
REQUIRED_USE="${LUA_REQUIRED_USE}"
@@ -45,7 +45,15 @@ DEPEND="${RDEPEND}
PDEPEND="modules? ( =dev-util/scap-driver-${PV}* )"
src_prepare() {
sed -i -e 's:-ggdb::' CMakeLists.txt || die
# manually apply patch to falcosecurity-libs dependency
pushd "${WORKDIR}" && \
eapply -p0 "${FILESDIR}/${PV}-libs-gcc13.patch" && \
popd
# force C++14 standard for libs & main
sed -i -e 's:-std=c++0x:-std=c++14:' "${WORKDIR}"/libs-${LIBS_COMMIT}/cmake/modules/CompilerFlags.cmake || die
sed -i -e 's:-std=c++0x:-std=c++14:' -e 's:-ggdb::' CMakeLists.txt || die
cmake_src_prepare
}

View File

@@ -0,0 +1,584 @@
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{9..11} )
inherit flag-o-matic java-pkg-opt-2 java-ant-2 cmake-multilib python-r1 toolchain-funcs
DESCRIPTION="A collection of algorithms and sample code for various computer vision problems"
HOMEPAGE="https://opencv.org"
TINY_DNN_PV="1.0.0a3"
SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz
dnnsamples? ( https://dev.gentoo.org/~amynka/snap/${PN}-3.4.0-res10_300x300-caffeemodel.tar.gz )
download? ( https://github.com/rossbridger/opencv-extdep/archive/4.4.0.tar.gz -> ${PN}-4.4.0_extdep.tar.gz )
contrib? (
https://github.com/${PN}/${PN}_contrib/archive/${PV}.tar.gz -> ${P}_contrib.tar.gz
contribdnn? ( https://dev.gentoo.org/~amynka/snap/${PN}-3.4.0-face_landmark_model.tar.gz )
contribxfeatures2d? ( https://dev.gentoo.org/~amynka/snap/vgg_boostdesc-3.2.0.tar.gz )
)"
LICENSE="Apache-2.0"
SLOT="0/${PV}" # subslot = libopencv* soname version
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
IUSE="contrib contribcvv contribdnn contribfreetype contribhdf contribovis contribsfm contribxfeatures2d cuda debug dnnsamples download +eigen examples +features2d ffmpeg gdal gflags glog gphoto2 gstreamer gtk3 ieee1394 jpeg jpeg2k lapack lto opencl openexr opengl openmp opencvapps png +python qt5 tesseract testprograms threads tiff vaapi v4l vtk webp xine"
# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications
ARM_CPU_FEATURES=(
cpu_flags_arm_neon:NEON
cpu_flags_arm_vfpv3:VFPV3
)
PPC_CPU_FEATURES=(
cpu_flags_ppc_vsx:VSX
cpu_flags_ppc_vsx3:VSX3
)
X86_CPU_FEATURES_RAW=(
avx:AVX
avx2:AVX2
avx512f:AVX_512F
f16c:FP16
fma3:FMA3
popcnt:POPCNT
sse:SSE
sse2:SSE2
sse3:SSE3
ssse3:SSSE3
sse4_1:SSE4_1
sse4_2:SSE4_2
)
X86_CPU_FEATURES=( ${X86_CPU_FEATURES_RAW[@]/#/cpu_flags_x86_} )
CPU_FEATURES_MAP=(
${ARM_CPU_FEATURES[@]}
${PPC_CPU_FEATURES[@]}
${X86_CPU_FEATURES[@]}
)
IUSE="${IUSE} ${CPU_FEATURES_MAP[@]%:*}"
# OpenGL needs gtk or Qt installed to activate, otherwise build system
# will silently disable it Wwithout the user knowing, which defeats the
# purpose of the opengl use flag.
# cuda needs contrib, bug #701712
REQUIRED_USE="
cpu_flags_x86_avx2? ( cpu_flags_x86_f16c )
cpu_flags_x86_f16c? ( cpu_flags_x86_avx )
cuda? ( contrib
tesseract? ( opencl ) )
dnnsamples? ( examples )
gflags? ( contrib )
glog? ( contrib )
contribcvv? ( contrib qt5 )
contribdnn? ( contrib )
contribfreetype? ( contrib )
contribhdf? ( contrib )
contribovis? ( contrib )
contribsfm? ( contrib eigen gflags glog )
contribxfeatures2d? ( contrib download )
examples? ( contribdnn )
java? ( python )
opengl? ( qt5 )
python? ( ${PYTHON_REQUIRED_USE} )
tesseract? ( contrib )
?? ( gtk3 qt5 )"
# The following logic is intrinsic in the build system, but we do not enforce
# it on the useflags since this just blocks emerging pointlessly:
# openmp? ( !threads )
RDEPEND="
app-arch/bzip2[${MULTILIB_USEDEP}]
dev-libs/protobuf:=[${MULTILIB_USEDEP}]
sys-libs/zlib[${MULTILIB_USEDEP}]
cuda? ( dev-util/nvidia-cuda-toolkit:0= )
contribhdf? ( sci-libs/hdf5:= )
contribfreetype? (
media-libs/freetype:2[${MULTILIB_USEDEP}]
media-libs/harfbuzz:=[${MULTILIB_USEDEP}]
)
contribovis? ( dev-games/ogre:0/1.12 )
ffmpeg? ( media-video/ffmpeg:0=[${MULTILIB_USEDEP}] )
gdal? ( sci-libs/gdal:= )
gflags? ( dev-cpp/gflags:=[${MULTILIB_USEDEP}] )
glog? ( dev-cpp/glog:=[${MULTILIB_USEDEP}] )
gphoto2? ( media-libs/libgphoto2:=[${MULTILIB_USEDEP}] )
gstreamer? (
media-libs/gstreamer:1.0[${MULTILIB_USEDEP}]
media-libs/gst-plugins-base:1.0[${MULTILIB_USEDEP}]
)
gtk3? (
dev-libs/glib:2[${MULTILIB_USEDEP}]
x11-libs/gtk+:3[${MULTILIB_USEDEP}]
)
ieee1394? (
media-libs/libdc1394:=[${MULTILIB_USEDEP}]
sys-libs/libraw1394[${MULTILIB_USEDEP}]
)
java? ( >=virtual/jre-1.8:* )
jpeg? ( media-libs/libjpeg-turbo:=[${MULTILIB_USEDEP}] )
jpeg2k? ( media-libs/openjpeg:2=[${MULTILIB_USEDEP}] )
lapack? (
virtual/cblas
>=virtual/lapack-3.10
)
opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
openexr? (
dev-libs/imath:=
media-libs/openexr:=
)
opengl? (
virtual/opengl[${MULTILIB_USEDEP}]
virtual/glu[${MULTILIB_USEDEP}]
)
png? ( media-libs/libpng:0=[${MULTILIB_USEDEP}] )
python? (
${PYTHON_DEPS}
dev-python/numpy[${PYTHON_USEDEP}]
)
qt5? (
dev-qt/qtgui:5=
dev-qt/qtwidgets:5=
dev-qt/qttest:5=
dev-qt/qtconcurrent:5=
opengl? ( dev-qt/qtopengl:5= )
)
tesseract? ( app-text/tesseract[opencl=,${MULTILIB_USEDEP}] )
threads? ( dev-cpp/tbb:=[${MULTILIB_USEDEP}] )
tiff? ( media-libs/tiff:=[${MULTILIB_USEDEP}] )
v4l? ( >=media-libs/libv4l-0.8.3[${MULTILIB_USEDEP}] )
vaapi? ( media-libs/libva[${MULTILIB_USEDEP}] )
vtk? ( sci-libs/vtk[rendering] )
webp? ( media-libs/libwebp:=[${MULTILIB_USEDEP}] )
xine? ( media-libs/xine-lib )"
DEPEND="${RDEPEND}
eigen? ( >=dev-cpp/eigen-3.3.8-r1:3 )
java? ( >=virtual/jdk-1.8:* )"
BDEPEND="virtual/pkgconfig"
MULTILIB_WRAPPED_HEADERS=(
# [opencv4]
/usr/include/opencv4/opencv2/cvconfig.h
/usr/include/opencv4/opencv2/opencv_modules.hpp
# [cudev]
/usr/include/opencv4/opencv2/cudaarithm.hpp
/usr/include/opencv4/opencv2/cudabgsegm.hpp
/usr/include/opencv4/opencv2/cudacodec.hpp
/usr/include/opencv4/opencv2/cudafeatures2d.hpp
/usr/include/opencv4/opencv2/cudafilters.hpp
/usr/include/opencv4/opencv2/cudaimgproc.hpp
/usr/include/opencv4/opencv2/cudalegacy.hpp
/usr/include/opencv4/opencv2/cudalegacy/NCVBroxOpticalFlow.hpp
/usr/include/opencv4/opencv2/cudalegacy/NCVHaarObjectDetection.hpp
/usr/include/opencv4/opencv2/cudalegacy/NCV.hpp
/usr/include/opencv4/opencv2/cudalegacy/NCVPyramid.hpp
/usr/include/opencv4/opencv2/cudalegacy/NPP_staging.hpp
/usr/include/opencv4/opencv2/cudaobjdetect.hpp
/usr/include/opencv4/opencv2/cudaoptflow.hpp
/usr/include/opencv4/opencv2/cudastereo.hpp
/usr/include/opencv4/opencv2/cudawarping.hpp
/usr/include/opencv4/opencv2/cudev/block/block.hpp
/usr/include/opencv4/opencv2/cudev/block/detail/reduce.hpp
/usr/include/opencv4/opencv2/cudev/block/detail/reduce_key_val.hpp
/usr/include/opencv4/opencv2/cudev/block/dynamic_smem.hpp
/usr/include/opencv4/opencv2/cudev/block/reduce.hpp
/usr/include/opencv4/opencv2/cudev/block/scan.hpp
/usr/include/opencv4/opencv2/cudev/block/vec_distance.hpp
/usr/include/opencv4/opencv2/cudev/common.hpp
/usr/include/opencv4/opencv2/cudev/expr/binary_func.hpp
/usr/include/opencv4/opencv2/cudev/expr/binary_op.hpp
/usr/include/opencv4/opencv2/cudev/expr/color.hpp
/usr/include/opencv4/opencv2/cudev/expr/deriv.hpp
/usr/include/opencv4/opencv2/cudev/expr/expr.hpp
/usr/include/opencv4/opencv2/cudev/expr/per_element_func.hpp
/usr/include/opencv4/opencv2/cudev/expr/reduction.hpp
/usr/include/opencv4/opencv2/cudev/expr/unary_func.hpp
/usr/include/opencv4/opencv2/cudev/expr/unary_op.hpp
/usr/include/opencv4/opencv2/cudev/expr/warping.hpp
/usr/include/opencv4/opencv2/cudev/functional/color_cvt.hpp
/usr/include/opencv4/opencv2/cudev/functional/detail/color_cvt.hpp
/usr/include/opencv4/opencv2/cudev/functional/functional.hpp
/usr/include/opencv4/opencv2/cudev/functional/tuple_adapter.hpp
/usr/include/opencv4/opencv2/cudev/grid/copy.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/copy.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/histogram.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/integral.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/minmaxloc.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/pyr_down.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/pyr_up.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/reduce.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/reduce_to_column.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/reduce_to_row.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/split_merge.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/transform.hpp
/usr/include/opencv4/opencv2/cudev/grid/detail/transpose.hpp
/usr/include/opencv4/opencv2/cudev/grid/histogram.hpp
/usr/include/opencv4/opencv2/cudev/grid/integral.hpp
/usr/include/opencv4/opencv2/cudev/grid/pyramids.hpp
/usr/include/opencv4/opencv2/cudev/grid/reduce.hpp
/usr/include/opencv4/opencv2/cudev/grid/reduce_to_vec.hpp
/usr/include/opencv4/opencv2/cudev/grid/split_merge.hpp
/usr/include/opencv4/opencv2/cudev/grid/transform.hpp
/usr/include/opencv4/opencv2/cudev/grid/transpose.hpp
/usr/include/opencv4/opencv2/cudev.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/constant.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/deriv.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/detail/gpumat.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/extrapolation.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/glob.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/gpumat.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/interpolation.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/lut.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/mask.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/remap.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/resize.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/texture.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/traits.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/transform.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/warping.hpp
/usr/include/opencv4/opencv2/cudev/ptr2d/zip.hpp
/usr/include/opencv4/opencv2/cudev/util/atomic.hpp
/usr/include/opencv4/opencv2/cudev/util/detail/tuple.hpp
/usr/include/opencv4/opencv2/cudev/util/detail/type_traits.hpp
/usr/include/opencv4/opencv2/cudev/util/limits.hpp
/usr/include/opencv4/opencv2/cudev/util/saturate_cast.hpp
/usr/include/opencv4/opencv2/cudev/util/simd_functions.hpp
/usr/include/opencv4/opencv2/cudev/util/tuple.hpp
/usr/include/opencv4/opencv2/cudev/util/type_traits.hpp
/usr/include/opencv4/opencv2/cudev/util/vec_math.hpp
/usr/include/opencv4/opencv2/cudev/util/vec_traits.hpp
/usr/include/opencv4/opencv2/cudev/warp/detail/reduce.hpp
/usr/include/opencv4/opencv2/cudev/warp/detail/reduce_key_val.hpp
/usr/include/opencv4/opencv2/cudev/warp/reduce.hpp
/usr/include/opencv4/opencv2/cudev/warp/scan.hpp
/usr/include/opencv4/opencv2/cudev/warp/shuffle.hpp
/usr/include/opencv4/opencv2/cudev/warp/warp.hpp
# [contrib_cvv]
/usr/include/opencv4/opencv2/cvv/call_meta_data.hpp
/usr/include/opencv4/opencv2/cvv/cvv.hpp
/usr/include/opencv4/opencv2/cvv/debug_mode.hpp
/usr/include/opencv4/opencv2/cvv/dmatch.hpp
/usr/include/opencv4/opencv2/cvv/filter.hpp
/usr/include/opencv4/opencv2/cvv/final_show.hpp
/usr/include/opencv4/opencv2/cvv.hpp
/usr/include/opencv4/opencv2/cvv/show_image.hpp
# [contrib_hdf]
/usr/include/opencv4/opencv2/hdf/hdf5.hpp
/usr/include/opencv4/opencv2/hdf.hpp
# [contrib_ovis]
/usr/include/opencv4/opencv2/ovis.hpp
# [contrib_sfm]
/usr/include/opencv4/opencv2/sfm.hpp
/usr/include/opencv4/opencv2/sfm/conditioning.hpp
/usr/include/opencv4/opencv2/sfm/fundamental.hpp
/usr/include/opencv4/opencv2/sfm/io.hpp
/usr/include/opencv4/opencv2/sfm/numeric.hpp
/usr/include/opencv4/opencv2/sfm/projection.hpp
/usr/include/opencv4/opencv2/sfm/reconstruct.hpp
/usr/include/opencv4/opencv2/sfm/robust.hpp
/usr/include/opencv4/opencv2/sfm/simple_pipeline.hpp
/usr/include/opencv4/opencv2/sfm/triangulation.hpp
# [vtk]
/usr/include/opencv4/opencv2/viz.hpp
/usr/include/opencv4/opencv2/viz/types.hpp
/usr/include/opencv4/opencv2/viz/viz3d.hpp
/usr/include/opencv4/opencv2/viz/vizcore.hpp
/usr/include/opencv4/opencv2/viz/widget_accessor.hpp
/usr/include/opencv4/opencv2/viz/widgets.hpp
)
PATCHES=(
"${FILESDIR}"/${PN}-3.4.0-disable-download.patch
"${FILESDIR}"/${PN}-3.4.1-cuda-add-relaxed-constexpr.patch
"${FILESDIR}"/${PN}-4.1.2-opencl-license.patch
"${FILESDIR}"/${PN}-4.4.0-disable-native-cpuflag-detect.patch
"${FILESDIR}"/${PN}-4.5.0-link-with-cblas-for-lapack.patch
"${FILESDIR}"/${PN}-4.6.0-fix-build-examples.patch # bug 830163, pending upstream PR #22245
)
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
java-pkg-opt-2_pkg_setup
}
src_prepare() {
# https://bugs.gentoo.org/838274
replace-flags -O3 -O2
cmake_src_prepare
# remove bundled stuff
rm -r 3rdparty || die "Removing 3rd party components failed"
sed -e '/add_subdirectory(.*3rdparty.*)/ d' \
-i CMakeLists.txt cmake/*cmake || die
if use dnnsamples; then
mv "${WORKDIR}/res10_300x300_ssd_iter_140000.caffemodel" "${WORKDIR}/${P}/samples/dnn/" || die
fi
if use contrib; then
cd "${WORKDIR}/${PN}_contrib-${PV}" || die
if use contribxfeatures2d; then
mv "${WORKDIR}"/*.i "${WORKDIR}/${PN}_contrib-${PV}"/modules/xfeatures2d/src/ || die
fi
fi
if use download; then
mv "${WORKDIR}/${PN}-extdep-4.4.0" "${WORKDIR}/${P}/.cache/" || die
fi
java-pkg-opt-2_src_prepare
# this really belongs in src_prepare() too
JAVA_ANT_ENCODING="iso-8859-1"
# set encoding so even this cmake build will pick it up.
export ANT_OPTS+=" -Dfile.encoding=iso-8859-1"
java-ant-2_src_configure
}
multilib_src_configure() {
# please dont sort here, order is the same as in CMakeLists.txt
GLOBALCMAKEARGS=(
# for protobuf
-DCMAKE_CXX_STANDARD=14
# Optional 3rd party components
# ===================================================
-DENABLE_DOWNLOAD=$(usex download)
-DWITH_QUIRC=OFF # Do not have dependencies
-DWITH_1394=$(usex ieee1394)
# -DWITH_AVFOUNDATION=OFF # IOS
-DWITH_VTK=$(multilib_native_usex vtk)
-DWITH_EIGEN=$(usex eigen)
-DWITH_VFW=OFF # Video windows support
-DWITH_FFMPEG=$(usex ffmpeg)
-DWITH_GSTREAMER=$(usex gstreamer)
-DWITH_GSTREAMER_0_10=OFF # Don't want this
-DWITH_GTK=$(usex gtk3)
-DWITH_GTK_2_X=OFF # only want gtk3 nowadays
-DWITH_IPP=OFF
# Jasper was removed from tree because of security problems.
# Upstream were/are making progress. We use openjpeg instead.
# bug 734284
-DWITH_JASPER=OFF
-DWITH_JPEG=$(usex jpeg)
-DWITH_OPENJPEG=$(usex jpeg2k)
-DWITH_WEBP=$(usex webp)
-DWITH_OPENEXR=$(multilib_native_usex openexr)
-DWITH_OPENGL=$(usex opengl)
-DWITH_OPENVX=OFF
-DWITH_OPENNI=OFF # Not packaged
-DWITH_OPENNI2=OFF # Not packaged
-DWITH_PNG=$(usex png)
-DWITH_GDCM=OFF
-DWITH_PVAPI=OFF
-DWITH_GIGEAPI=OFF
-DWITH_ARAVIS=OFF
-DWITH_QT=$(multilib_native_usex qt5 5 OFF)
-DWITH_WIN32UI=OFF # Windows only
# -DWITH_QUICKTIME=OFF
# -DWITH_QTKIT=OFF
-DWITH_TBB=$(usex threads)
-DWITH_OPENMP=$(usex openmp)
-DWITH_CSTRIPES=OFF
-DWITH_PTHREADS_PF=ON
-DWITH_TIFF=$(usex tiff)
-DWITH_UNICAP=OFF # Not packaged
-DWITH_V4L=$(usex v4l)
-DWITH_LIBV4L=$(usex v4l)
# -DWITH_DSHOW=ON # direct show supp
-DWITH_MSMF=OFF
-DWITH_XIMEA=OFF # Windows only
-DWITH_XINE=$(multilib_native_usex xine)
-DWITH_CLP=OFF
-DWITH_OPENCL=$(usex opencl)
-DWITH_OPENCL_SVM=OFF
-DWITH_OPENCLAMDFFT=$(usex opencl)
-DWITH_OPENCLAMDBLAS=$(usex opencl)
-DWITH_DIRECTX=OFF
-DWITH_INTELPERC=OFF
-DWITH_IPP_A=OFF
-DWITH_MATLAB=OFF
-DWITH_VA=$(usex vaapi)
-DWITH_VA_INTEL=$(usex vaapi)
-DWITH_GDAL=$(multilib_native_usex gdal)
-DWITH_GPHOTO2=$(usex gphoto2)
-DWITH_LAPACK=$(multilib_native_usex lapack)
-DWITH_ITT=OFF # 3dparty libs itt_notify
# ===================================================
# CUDA build components: nvidia-cuda-toolkit takes care of GCC version
# ===================================================
-DWITH_CUDA=$(multilib_native_usex cuda)
-DWITH_CUBLAS=$(multilib_native_usex cuda)
-DWITH_CUFFT=$(multilib_native_usex cuda)
-DWITH_NVCUVID=OFF
# -DWITH_NVCUVID=$(usex cuda)
-DCUDA_NPP_LIBRARY_ROOT_DIR=$(usex cuda "${EPREFIX}/opt/cuda" "")
# ===================================================
# OpenCV build components
# ===================================================
-DBUILD_SHARED_LIBS=ON
-DBUILD_JAVA=$(multilib_native_usex java) # Ant needed, no compile flag
-DBUILD_ANDROID_EXAMPLES=OFF
-DBUILD_opencv_apps=$(usex opencvapps ON OFF)
-DBUILD_DOCS=OFF # Doesn't install anyways.
-DBUILD_EXAMPLES=$(multilib_native_usex examples)
-DBUILD_PERF_TESTS=OFF
-DBUILD_TESTS=$(multilib_native_usex testprograms)
-DBUILD_WITH_DEBUG_INFO=$(usex debug)
# -DBUILD_WITH_STATIC_CRT=OFF
-DBUILD_WITH_DYNAMIC_IPP=OFF
-DBUILD_FAT_JAVA_LIB=OFF
# -DBUILD_ANDROID_SERVICE=OFF
-DBUILD_CUDA_STUBS=$(multilib_native_usex cuda)
-DOPENCV_EXTRA_MODULES_PATH=$(usex contrib "${WORKDIR}/opencv_contrib-${PV}/modules" "")
# ===================================================
# OpenCV installation options
# ===================================================
-DINSTALL_CREATE_DISTRIB=OFF
-DINSTALL_C_EXAMPLES=$(multilib_native_usex examples)
-DINSTALL_TESTS=$(multilib_native_usex testprograms)
-DINSTALL_PYTHON_EXAMPLES=$(multilib_native_usex examples)
# -DINSTALL_ANDROID_EXAMPLES=OFF
-DINSTALL_TO_MANGLED_PATHS=OFF
-DOPENCV_GENERATE_PKGCONFIG=ON
# opencv uses both ${CMAKE_INSTALL_LIBDIR} and ${LIB_SUFFIX}
# to set its destination libdir
-DLIB_SUFFIX=
# ===================================================
# OpenCV build options
# ===================================================
-DENABLE_CCACHE=OFF
# bug 733796, but PCH is a risky game in CMake anyway
-DENABLE_PRECOMPILED_HEADERS=OFF
-DENABLE_SOLUTION_FOLDERS=OFF
-DENABLE_PROFILING=OFF
-DENABLE_COVERAGE=OFF
-DHAVE_opencv_java=$(multilib_native_usex java YES NO)
-DENABLE_NOISY_WARNINGS=OFF
-DOPENCV_WARNINGS_ARE_ERRORS=OFF
-DENABLE_IMPL_COLLECTION=OFF
-DENABLE_INSTRUMENTATION=OFF
-DGENERATE_ABI_DESCRIPTOR=OFF
-DDOWNLOAD_EXTERNAL_TEST_DATA=OFF
-DENABLE_LTO=$(usex lto)
# ===================================================
# things we want to be hard off or not yet figured out
# ===================================================
-DBUILD_PACKAGE=OFF
# ===================================================
# Not building protobuf but update files bug #631418
# ===================================================
-DBUILD_PROTOBUF=OFF
-DPROTOBUF_UPDATE_FILES=ON
# ===================================================
# things we want to be hard enabled not worth useflag
# ===================================================
-DCMAKE_SKIP_RPATH=ON
-DOPENCV_DOC_INSTALL_PATH=
-DBUILD_opencv_features2d=$(usex features2d ON OFF)
)
# ==================================================
# cpu flags, should solve 633900
#===================================================
local CPU_BASELINE=""
for i in "${CPU_FEATURES_MAP[@]}" ; do
if [[ ${ABI} != x86 || ${i%:*} != "cpu_flags_x86_avx2" ]]; then # workaround for Bug 747163
use ${i%:*} && CPU_BASELINE="${CPU_BASELINE}${i#*:};"
fi
done
GLOBALCMAKEARGS+=(
-DOPENCV_CPU_OPT_IMPLIES_IGNORE=ON
-DCPU_BASELINE=${CPU_BASELINE}
-DCPU_DISPATCH=
)
# ===================================================
# OpenCV Contrib Modules
# ===================================================
if use contrib; then
GLOBALCMAKEARGS+=(
-DBUILD_opencv_dnn=$(usex contribdnn ON OFF)
-DTINYDNN_ROOT="${WORKDIR}/tiny-dnn-${TINY_DNN_PV}"
-DBUILD_opencv_dnns_easily_fooled=OFF
-DBUILD_opencv_xfeatures2d=$(usex contribxfeatures2d ON OFF)
-DBUILD_opencv_cvv=$(usex contribcvv ON OFF)
-DBUILD_opencv_hdf=$(multilib_native_usex contribhdf ON OFF)
-DBUILD_opencv_sfm=$(usex contribsfm ON OFF)
-DBUILD_opencv_freetype=$(usex contribfreetype ON OFF)
-DBUILD_opencv_ovis=$(usex contribovis ON OFF)
)
if multilib_is_native_abi; then
GLOBALCMAKEARGS+=(
-DCMAKE_DISABLE_FIND_PACKAGE_Tesseract=$(usex !tesseract)
)
else
GLOBALCMAKEARGS+=(
-DCMAKE_DISABLE_FIND_PACKAGE_Tesseract=ON
)
fi
fi
# workaround for bug 413429
tc-export CC CXX
local mycmakeargs=(
${GLOBALCMAKEARGS[@]}
-DPYTHON_EXECUTABLE=OFF
-DINSTALL_PYTHON_EXAMPLES=OFF
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python3=OFF
)
cmake_src_configure
# Copy face_land_model to ${CMAKE_BINARY_DIR}/${OPENCV_TEST_DATA_INSTALL_PATH}
# TODO patch ocv_download to copy files into destination dirs
if use contribdnn; then
mkdir -p "${BUILD_DIR}"/share/OpenCV/testdata/cv/face/ || die
cp "${WORKDIR}"/face_landmark_model.dat "${BUILD_DIR}"/share/OpenCV/testdata/cv/face/ || die
fi
}
python_module_compile() {
local BUILD_DIR="${orig_BUILD_DIR}"
local mycmakeargs=( ${GLOBALCMAKEARGS[@]} )
# Set all python variables to load the correct Gentoo paths
mycmakeargs+=(
# python_setup alters PATH and sets this as wrapper
# to the correct interpreter we are building for
-DPYTHON_DEFAULT_EXECUTABLE=${EPYTHON}
-DINSTALL_PYTHON_EXAMPLES=$(usex examples)
)
# Regenerate cache file. Can't use rebuild_cache as it won't
# have the Gentoo specific options.
rm CMakeCache.txt || die "rm failed"
cmake_src_configure
cmake_src_compile
cmake_src_install
# Remove compiled binary so new version compiles
# Avoid conflicts with new module builds as build system doesn't
# really support it.
rm -r modules/python3 || die "rm failed"
python_optimize "${ED}"/$(python_get_sitedir)
}
multilib_src_install() {
cmake_src_install
# Build and install the python modules for all targets
if multilib_is_native_abi && use python; then
local orig_BUILD_DIR="${BUILD_DIR}"
python_foreach_impl python_module_compile
fi
}

View File

@@ -0,0 +1,29 @@
https://github.com/grpc/grpc/pull/33361
From 117dc80eb43021dd5619023ef6d02d0d6ec7ae7a Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
Date: Wed, 7 Jun 2023 13:06:49 +0800
Subject: [PATCH] [Build] fix `gRPCConfig.cmake`
Without this change, calling `find_package(gRPC REQUIRED)` errors out
with
CMake Error at /opt/homebrew/lib/cmake/grpc/gRPCConfig.cmake:8 (find_dependency):
Unknown CMake command "find_dependency".
The issue is that `find_dependency` is provided by the
`CMakeFindDependencyMacro` module[^1], so we need to `include` it before
use.
[^1]: https://cmake.org/cmake/help/v3.26/module/CMakeFindDependencyMacro.html
--- a/cmake/protobuf.cmake
+++ b/cmake/protobuf.cmake
@@ -86,6 +86,6 @@ elseif(gRPC_PROTOBUF_PROVIDER STREQUAL "package")
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE})
endif()
endif()
- set(_gRPC_FIND_PROTOBUF "find_dependency(Protobuf CONFIG)")
+ set(_gRPC_FIND_PROTOBUF "include(CMakeFindDependencyMacro)\nfind_dependency(Protobuf CONFIG)")
endif()
endif()

View File

@@ -43,6 +43,10 @@ RESTRICT="test"
S="${WORKDIR}/${PN}-${MY_PV}"
PATCHES=(
"${FILESDIR}"/${PN}-1.57.0-fix-cmake.patch
)
soversion_check() {
local core_sover cpp_sover
# extract quoted number. line we check looks like this: 'set(gRPC_CPP_SOVERSION "1.37")'