diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-06-11 19:01:12 +0200 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-06-12 20:36:01 +0200 |
commit | abdd4cf0e5ab5f26b366d9ab86644ebaacd85624 (patch) | |
tree | 3723f8ad44c01cce906c7aaf481345407616a88f /japanese | |
parent | net-mgmt/netbox: Update to 3.5.3 (diff) |
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
Diffstat (limited to 'japanese')
-rw-r--r-- | japanese/zinnia/Makefile | 2 | ||||
-rw-r--r-- | japanese/zinnia/files/patch-svm.cpp | 24 |
2 files changed, 25 insertions, 1 deletions
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 <vector> + #include <cmath> + #include <algorithm> ++#include <random> + #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]; |