From abdd4cf0e5ab5f26b366d9ab86644ebaacd85624 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Sun, 11 Jun 2023 19:01:12 +0200 Subject: [PATCH] japanese/zinnia: fix build with clang 16 Since clang 16 (and gcc 11) the default C++ standard is now gnu++17. Because japanese/zinnia's build infrastructure does not explicitly set its C++ standard, this leads to an error: svm.cpp:50:10: error: no member named 'random_shuffle' in namespace 'std' std::random_shuffle(index.begin(), index.begin() + active_size); ~~~~~^ This is because std::random_shuffle has been removed from C++17. An suitable replacement is std::shuffle, using a std::random_device in combination with std::mt19937 as the random number engine. PR: 271953 Approved by: fernape MFH: 2023Q2 --- japanese/zinnia/Makefile | 2 +- japanese/zinnia/files/patch-svm.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 japanese/zinnia/files/patch-svm.cpp diff --git a/japanese/zinnia/Makefile b/japanese/zinnia/Makefile index 6eb5bcfa93e3..99b677574cde 100644 --- a/japanese/zinnia/Makefile +++ b/japanese/zinnia/Makefile @@ -1,6 +1,6 @@ PORTNAME= zinnia PORTVERSION= 0.06 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= japanese MASTER_SITES= SF diff --git a/japanese/zinnia/files/patch-svm.cpp b/japanese/zinnia/files/patch-svm.cpp new file mode 100644 index 000000000000..d37a3003bab6 --- /dev/null +++ b/japanese/zinnia/files/patch-svm.cpp @@ -0,0 +1,24 @@ +--- svm.cpp.orig 2009-04-05 11:40:29 UTC ++++ svm.cpp +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + #include "feature.h" + + namespace zinnia { +@@ -44,10 +45,12 @@ bool svm_train(size_t l, + } + + static const size_t kMaxIteration = 2000; ++ std::random_device device; ++ std::mt19937 engine(device()); + for (size_t iter = 0; iter < kMaxIteration; ++iter) { + double PGmax_new = -kINF; + double PGmin_new = kINF; +- std::random_shuffle(index.begin(), index.begin() + active_size); ++ std::shuffle(index.begin(), index.begin() + active_size, engine); + + for (size_t s = 0; s < active_size; ++s) { + const size_t i = index[s];