Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openbabel for openSUSE:Factory checked in at 2025-04-22 17:28:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openbabel (Old) and /work/SRC/openSUSE:Factory/.openbabel.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openbabel" Tue Apr 22 17:28:09 2025 rev:40 rq:1271202 version:3.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/openbabel/openbabel.changes 2025-03-14 23:53:36.708428756 +0100 +++ /work/SRC/openSUSE:Factory/.openbabel.new.30101/openbabel.changes 2025-04-22 17:28:55.128684230 +0200 @@ -1,0 +2,14 @@ +Sat Apr 19 17:05:53 UTC 2025 - Friedrich Haubensak <hs...@mail.de> + +- Add openbabel-cmake-4.patch and openbabel-cmake-4-exports.patch + to fix cmake-4 failures + +------------------------------------------------------------------- +Sat Apr 19 15:44:17 UTC 2025 - Friedrich Haubensak <hs...@mail.de> + +- Add patches from upstream to fix compiler deprecation warnings + * openbabel-3.1.1-std-binary-function.patch, + * openbabel-3.1.1-std-bind1st.patch, + * openbabel-3.1.1-std-bind2nd.patch + +------------------------------------------------------------------- New: ---- openbabel-3.1.1-std-binary-function.patch openbabel-3.1.1-std-bind1st.patch openbabel-3.1.1-std-bind2nd.patch openbabel-cmake-4-exports.patch openbabel-cmake-4.patch BETA DEBUG BEGIN: New:- Add patches from upstream to fix compiler deprecation warnings * openbabel-3.1.1-std-binary-function.patch, * openbabel-3.1.1-std-bind1st.patch, New: * openbabel-3.1.1-std-binary-function.patch, * openbabel-3.1.1-std-bind1st.patch, * openbabel-3.1.1-std-bind2nd.patch New: * openbabel-3.1.1-std-bind1st.patch, * openbabel-3.1.1-std-bind2nd.patch New: - Add openbabel-cmake-4.patch and openbabel-cmake-4-exports.patch to fix cmake-4 failures New: - Add openbabel-cmake-4.patch and openbabel-cmake-4-exports.patch to fix cmake-4 failures BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openbabel.spec ++++++ --- /var/tmp/diff_new_pack.WlDJMB/_old 2025-04-22 17:28:55.840714129 +0200 +++ /var/tmp/diff_new_pack.WlDJMB/_new 2025-04-22 17:28:55.844714298 +0200 @@ -46,6 +46,16 @@ Patch3: openbabel-3.1.1-gcc-12.patch # PATCH-FIX-UPSTREAM openbabel-3.1.1-wx-stl-compat.patch -- Fix build with wxWidgets using STL (gh#openbabel/openbabel!2527) Patch4: openbabel-3.1.1-wx-stl-compat.patch +# PATCH-FIX-UPSTREAM openbabel-3.1.1-std-binary-function.patch -- part of github.com/openbabel/openbabel/pull/2464 +Patch5: openbabel-3.1.1-std-binary-function.patch +# PATCH-FIX-UPSTREAM openbabel-3.1.1-std-bind1st.patch -- github.com/openbabel/openbabel/pull/2001 +Patch6: openbabel-3.1.1-std-bind1st.patch +# PATCH-FIX-UPSTREAM openbabel-3.1.1-std-bind2nd.patch -- github.com/openbabel/openbabel/pull/2569 +Patch7: openbabel-3.1.1-std-bind2nd.patch +# PATCH-FIX-UPSTREAM openbabel-cmake-4.patch -- github.com/openbabel/openbabel/pull/2784 +Patch8: openbabel-cmake-4.patch +# ensure previous cmake behaviour to fix test failures +Patch9: openbabel-cmake-4-exports.patch BuildRequires: cmake >= 3.1 BuildRequires: gcc-c++ BuildRequires: inchi-devel >= 1.04 ++++++ openbabel-3.1.1-std-binary-function.patch ++++++ github.com/openbabel/openbabel/issues/2461 github.com/openbabel/openbabel/pull/2464 pull/2464 committed as github.com/openbabel/openbabel/commit/b59ba6d; only use first commit of pull/2464 here, this is github.com/openbabel/openbabel/commit/e2f9cca, adapted to opensuse source tree (no kekulize.h): >From e2f9cca93219e180bc814eada74b05ed7fba2f70 Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima <e-k...@users.noreply.github.com> Date: Mon, 25 Apr 2022 11:55:17 +0900 Subject: [PATCH] refactor: do not use `std::binary_function`, which is removed in C++17 fix #2461 --- include/openbabel/inchiformat.h | 1 - include/openbabel/plugin.h | 2 +- scripts/openbabel-R.i | 7 ------- scripts/openbabel-csharp.i | 7 ------- scripts/openbabel-java.i | 7 ------- scripts/openbabel-perl.i | 7 ------- scripts/openbabel-php.i | 7 ------- scripts/openbabel-python.i | 7 ------- scripts/openbabel-ruby.i | 7 ------- src/ops/sort.cpp | 2 +- 10 files changed, 2 insertions(+), 52 deletions(-) diff --git a/include/openbabel/inchiformat.h b/include/openbabel/inchiformat.h index 9e2db80549..0033a22766 100644 --- a/include/openbabel/inchiformat.h +++ b/include/openbabel/inchiformat.h @@ -131,7 +131,6 @@ class InChIFormat : public OBMoleculeFormat // and "CH4" is less than "C2H6" // and "CH4" is less than "ClH" (hydrogen chloride) struct InchiLess - : public std::binary_function<const std::string&, const std::string&, bool> { bool operator()(const std::string& s1, const std::string& s2) const { diff --git a/include/openbabel/plugin.h b/include/openbabel/plugin.h index 9f1b1efd72..16c235fa3c 100644 --- a/include/openbabel/plugin.h +++ b/include/openbabel/plugin.h @@ -38,7 +38,7 @@ namespace OpenBabel ///@{ /// @brief Case insensitive string comparison for PluginMapType key. -struct OBERROR CharPtrLess : public std::binary_function<const char*,const char*, bool> +struct OBERROR CharPtrLess { bool operator()(const char* p1,const char* p2) const { return strcasecmp(p1,p2)<0; } diff --git a/scripts/openbabel-R.i b/scripts/openbabel-R.i index 0a655f168b..b6b4c6ccc6 100644 --- a/scripts/openbabel-R.i +++ b/scripts/openbabel-R.i @@ -293,13 +293,6 @@ CAST_GENERICDATA_TO(VirtualBond) %include <openbabel/chains.h> %include <openbabel/typer.h> - -// To avoid warning in plugin.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/scripts/openbabel-csharp.i b/scripts/openbabel-csharp.i index df323504af..77d9d15701 100644 --- a/scripts/openbabel-csharp.i +++ b/scripts/openbabel-csharp.i @@ -831,13 +831,6 @@ CAST_GENERICDATA_TO(VirtualBond); %include <openbabel/chains.h> %include <openbabel/typer.h> - -// To avoid warning in plugin.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/scripts/openbabel-java.i b/scripts/openbabel-java.i index c88f3c5e16..2e525e2ab3 100644 --- a/scripts/openbabel-java.i +++ b/scripts/openbabel-java.i @@ -249,13 +249,6 @@ CAST_GENERICDATA_TO(VirtualBond) %include <openbabel/chains.h> %include <openbabel/typer.h> - -// To avoid warning in plugin.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/scripts/openbabel-perl.i b/scripts/openbabel-perl.i index 0dbc69342d..b06a50cda1 100644 --- a/scripts/openbabel-perl.i +++ b/scripts/openbabel-perl.i @@ -194,13 +194,6 @@ CAST_GENERICDATA_TO(VirtualBond) %import <openbabel/chains.h> %import <openbabel/typer.h> - -// To avoid warning in oberror.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(Dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/scripts/openbabel-php.i b/scripts/openbabel-php.i index 6d2346bc34..83ee9c6354 100644 --- a/scripts/openbabel-php.i +++ b/scripts/openbabel-php.i @@ -226,13 +226,6 @@ CAST_GENERICDATA_TO(VirtualBond) %include <openbabel/chains.h> %include <openbabel/typer.h> - -// To avoid warning in plugin.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/scripts/openbabel-python.i b/scripts/openbabel-python.i index 2d361e8ebb..7ddde52b72 100644 --- a/scripts/openbabel-python.i +++ b/scripts/openbabel-python.i @@ -267,13 +267,6 @@ CAST_GENERICDATA_TO(SquarePlanarStereo) %include <openbabel/chains.h> %include <openbabel/typer.h> - -// To avoid warning in plugin.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/scripts/openbabel-ruby.i b/scripts/openbabel-ruby.i index 6bdfd6b86b..0e5afcb536 100644 --- a/scripts/openbabel-ruby.i +++ b/scripts/openbabel-ruby.i @@ -215,13 +215,6 @@ CAST_GENERICDATA_TO(SquarePlanarStereo) %import <openbabel/chains.h> %import <openbabel/typer.h> - -// To avoid warning in oberror.h about "Nothing known about std::binary_function" -namespace std { - template <T1, T2, T3> - class binary_function {}; -} -%template(Dummy) std::binary_function <const char *, const char *, bool>; %include <openbabel/plugin.h> // To avoid warning in oberror.h about "Nothing known about std::stringbuf" diff --git a/src/ops/sort.cpp b/src/ops/sort.cpp index 38e052487a..79aa7b88c1 100644 --- a/src/ops/sort.cpp +++ b/src/ops/sort.cpp @@ -29,7 +29,7 @@ namespace OpenBabel { template<class T> -struct Order : public std::binary_function<std::pair<OBBase*,T>, std::pair<OBBase*,T>, bool> +struct Order { Order(OBDescriptor* pDesc, bool rev) : _pDesc(pDesc), _rev(rev){} bool operator()(std::pair<OBBase*,T> p1, std::pair<OBBase*,T> p2) const ++++++ openbabel-3.1.1-std-bind1st.patch ++++++ github.com/openbabel/openbabel/pull/2001 github.com/openbabel/openbabel/commit/90df8dd >From 90df8ddbd622b91c027e469d2df8c0570f7dc645 Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima <e-k...@users.noreply.github.com> Date: Wed, 3 Aug 2022 23:10:11 +0900 Subject: [PATCH] Remove deprecated std::bind1st and std::binder1st (#2001) --- src/formats/povrayformat.cpp | 4 ++-- src/stereo/perception.cpp | 16 +++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/formats/povrayformat.cpp b/src/formats/povrayformat.cpp index 0cd50f6b10..214a24e924 100644 --- a/src/formats/povrayformat.cpp +++ b/src/formats/povrayformat.cpp @@ -523,7 +523,7 @@ namespace OpenBabel /* ---- Add a pigment - statement for start-atom of bond ---- */ bond_type = bond->GetBeginAtom() -> GetType(); - bond_type.erase(remove_if(bond_type.begin(), bond_type.end(), bind1st(equal_to<char>(), '.')), bond_type.end()); + bond_type.erase(remove(bond_type.begin(), bond_type.end(), '.'), bond_type.end()); ofs << "\t pigment{color Color_" << bond_type << "}" << endl; @@ -584,7 +584,7 @@ namespace OpenBabel /* ---- Add a pigment - statement for end-atom of bond i ---- */ bond_type = bond->GetEndAtom() -> GetType(); - bond_type.erase(remove_if(bond_type.begin(), bond_type.end(), bind1st(equal_to<char>(), '.')), bond_type.end()); + bond_type.erase(remove(bond_type.begin(), bond_type.end(), '.'), bond_type.end()); ofs << "\t pigment{color Color_" << bond_type diff --git a/src/stereo/perception.cpp b/src/stereo/perception.cpp index 7c9fcc3484..f25bfcf813 100644 --- a/src/stereo/perception.cpp +++ b/src/stereo/perception.cpp @@ -2969,9 +2969,6 @@ namespace OpenBabel { } void StereoRefToImplicit(OBMol& mol, OBStereo::Ref atomId) { - // The following is for use in replace_if(...) below - const std::binder1st<std::equal_to<OBStereo::Ref> > equal_to_atomId = std::bind1st (equal_to<OBStereo::Ref>(), atomId); - std::vector<OBGenericData*> vdata = mol.GetAllData(OBGenericDataType::StereoData); for (std::vector<OBGenericData*>::iterator data = vdata.begin(); data != vdata.end(); ++data) { OBStereo::Type datatype = ((OBStereoBase*)*data)->GetType(); @@ -2987,23 +2984,20 @@ namespace OpenBabel { if (datatype == OBStereo::CisTrans) { OBCisTransStereo *ct = dynamic_cast<OBCisTransStereo*>(*data); OBCisTransStereo::Config ct_cfg = ct->GetConfig(); - replace_if(ct_cfg.refs.begin(), ct_cfg.refs.end(), equal_to_atomId, (OBStereo::Ref) OBStereo::ImplicitRef); + replace(ct_cfg.refs.begin(), ct_cfg.refs.end(), atomId, (OBStereo::Ref) OBStereo::ImplicitRef); ct->SetConfig(ct_cfg); } else if (datatype == OBStereo::Tetrahedral) { OBTetrahedralStereo *ts = dynamic_cast<OBTetrahedralStereo*>(*data); OBTetrahedralStereo::Config ts_cfg = ts->GetConfig(); if (ts_cfg.from == atomId) ts_cfg.from = OBStereo::ImplicitRef; - replace_if(ts_cfg.refs.begin(), ts_cfg.refs.end(), equal_to_atomId, (OBStereo::Ref) OBStereo::ImplicitRef); + replace(ts_cfg.refs.begin(), ts_cfg.refs.end(), atomId, (OBStereo::Ref) OBStereo::ImplicitRef); ts->SetConfig(ts_cfg); } } } void ImplicitRefToStereo(OBMol& mol, OBStereo::Ref centerId, OBStereo::Ref newId) { - // The following is for use in replace_if(...) below - const std::binder1st<std::equal_to<OBStereo::Ref> > equal_to_implicitRef = std::bind1st (equal_to<OBStereo::Ref>(), (OBStereo::Ref) OBStereo::ImplicitRef); - std::vector<OBGenericData*> vdata = mol.GetAllData(OBGenericDataType::StereoData); for (std::vector<OBGenericData*>::iterator data = vdata.begin(); data != vdata.end(); ++data) { OBStereo::Type datatype = ((OBStereoBase*)*data)->GetType(); @@ -3022,9 +3016,9 @@ namespace OpenBabel { if (ct_cfg.begin == centerId || ct_cfg.end == centerId) { // Assumption: the first two refs are on the begin atom, the last two on the end atom if (ct_cfg.begin == centerId) - replace_if(ct_cfg.refs.begin(), ct_cfg.refs.begin()+2, equal_to_implicitRef, (OBStereo::Ref) newId); + replace(ct_cfg.refs.begin(), ct_cfg.refs.begin()+2, (OBStereo::Ref) OBStereo::ImplicitRef, (OBStereo::Ref) newId); if (ct_cfg.end == centerId) - replace_if(ct_cfg.refs.begin()+2, ct_cfg.refs.end(), equal_to_implicitRef, (OBStereo::Ref) newId); + replace(ct_cfg.refs.begin()+2, ct_cfg.refs.end(), (OBStereo::Ref) OBStereo::ImplicitRef, (OBStereo::Ref) newId); ct->SetConfig(ct_cfg); } } @@ -3033,7 +3027,7 @@ namespace OpenBabel { OBTetrahedralStereo::Config ts_cfg = ts->GetConfig(); if (ts_cfg.center == centerId) { if (ts_cfg.from == OBStereo::ImplicitRef) ts_cfg.from = newId; - replace_if(ts_cfg.refs.begin(), ts_cfg.refs.end(), equal_to_implicitRef, (OBStereo::Ref) newId); + replace(ts_cfg.refs.begin(), ts_cfg.refs.end(), (OBStereo::Ref) OBStereo::ImplicitRef, (OBStereo::Ref) newId); ts->SetConfig(ts_cfg); } } ++++++ openbabel-3.1.1-std-bind2nd.patch ++++++ github.com/openbabel/openbabel/pull/2569 github.com/openbabel/openbabel/commit/f827a72 >From f33412937390b2b0d0c0e91a1ed1274e1dd24157 Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima <e-k...@users.noreply.github.com> Date: Mon, 30 Jan 2023 07:40:37 +0900 Subject: [PATCH] refactor: remove deprecated std::bind2nd c.f. #2001 --- src/confsearch.cpp | 4 ++-- src/formats/fchkformat.cpp | 8 ++++---- src/formats/vaspformat.cpp | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/confsearch.cpp b/src/confsearch.cpp index 5e6cc2d1e8..5f85a8ff2f 100644 --- a/src/confsearch.cpp +++ b/src/confsearch.cpp @@ -131,7 +131,7 @@ namespace OpenBabel const double arr[] = {3.0, 2.0, 1.5, 1.0, 0.5, 0.25}; std::vector<double> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) ); - vec.erase(std::remove_if(vec.begin(), vec.end(), std::bind2nd(std::less<double>(), (cutoff + 0.1) )), vec.end()); + vec.erase(std::remove_if(vec.begin(), vec.end(), [=](double v) { return v < cutoff + 0.1; }), vec.end()); vec.push_back(cutoff); levels = vec; @@ -443,7 +443,7 @@ int OBForceField::DiverseConfGen(double rmsd, unsigned int nconfs, double energy UpdateConformersFromTree(&_mol, _energies, &divposes, verbose); // Add back the energy offset - transform(_energies.begin(), _energies.end(), _energies.begin(), bind2nd(std::plus<double>(), energy_offset)); + transform(_energies.begin(), _energies.end(), _energies.begin(), [=](double e) { return e + energy_offset; }); // Clean up delete [] store_initial; diff --git a/src/formats/fchkformat.cpp b/src/formats/fchkformat.cpp index 886e073623..cf334f9a86 100644 --- a/src/formats/fchkformat.cpp +++ b/src/formats/fchkformat.cpp @@ -665,16 +665,16 @@ namespace OpenBabel no atom numbers < 0 or > Natoms */ if (NBond.end() != find_if(NBond.begin(), NBond.end(), - bind2nd(less_equal<int>(), 0)) || + [](int i) { return i <= 0; }) || NBond.end() != find_if(NBond.begin(), NBond.end(), - bind2nd(greater<int>(), MxBond)) || + [=](int i) { return i > MxBond; }) || IBond.end() != find_if(IBond.begin(), IBond.end(), - bind2nd(less<int>(), 0)) || + [](int i) { return i < 0; }) || IBond.end() != find_if(IBond.begin(), IBond.end(), - bind2nd(greater<int>(), Natoms))) + [=](int i) { return i > Natoms; })) { error_msg << "Invalid connectivity : check the \"NBond\" and/or" << " \"IBond\" section(s)."; diff --git a/src/formats/vaspformat.cpp b/src/formats/vaspformat.cpp index 1c8aaa6d4f..376b533a12 100644 --- a/src/formats/vaspformat.cpp +++ b/src/formats/vaspformat.cpp @@ -534,7 +534,7 @@ namespace OpenBabel { for (size_t natom = 0; natom < pmol->NumAtoms(); ++natom) { const vector3 dxyz = currXyz[natom] - prevXyz[natom]; vector3::const_iterator iter = std::find_if(dxyz.begin(), dxyz.end(), - std::bind2nd(std::not_equal_to<double>(), 0.0)); + [](double v) { return v != 0.0; }); if (iter != dxyz.end()) dipGrad[natom].SetRow(iter - dxyz.begin(), (currDm - prevDm) / *iter); } @@ -588,7 +588,7 @@ namespace OpenBabel { if (max != 0.0) { // Normalize std::transform(Intensities.begin(), Intensities.end(), Intensities.begin(), - std::bind2nd(std::divides<double>(), max / 100.0)); + [=](double v) { return v / (max / 100.0); }); } else { Intensities.clear(); } ++++++ openbabel-cmake-4-exports.patch ++++++ policy CMP0065 (enable link flags such that symbols are exported from executables) was added in cmake version 3.4, set to OLD by default, and removed in cmake version 4 ensure the OLD linking behaviour for test_runner to fix test failures --- a/test/CMakeLists.txt 2020-05-08 17:38:02.000000000 +0200 +++ b/test/CMakeLists.txt 2025-04-19 18:30:34.700723621 +0200 @@ -148,6 +148,7 @@ endif() add_executable(test_runner ${srclist} obtest.cpp) +set_target_properties(test_runner PROPERTIES ENABLE_EXPORTS TRUE) target_link_libraries(test_runner ${libs}) if(NOT BUILD_SHARED AND NOT BUILD_MIXED) set_target_properties(test_runner PROPERTIES LINK_SEARCH_END_STATIC TRUE) ++++++ openbabel-cmake-4.patch ++++++ cf. https://github.com/openbabel/openbabel/pull/2784 --- a/CMakeLists.txt 2020-05-08 17:38:02.000000000 +0200 +++ b/CMakeLists.txt 2025-04-16 16:30:45.258797826 +0200 @@ -1,6 +1,6 @@ -# Please ensure that any changes remain compliant with 3.1. +# Please ensure that any changes remain compliant with 3.10. if(NOT EMBED_OPENBABEL) - cmake_minimum_required(VERSION 3.1) + cmake_minimum_required(VERSION 3.10) endif() project(openbabel) @@ -10,9 +10,6 @@ if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) - if(POLICY CMP0042) - cmake_policy(SET CMP0042 OLD) - endif() endif() include (CheckCXXCompilerFlag) --- a/doc/examples/static_executable/CMakeLists.txt 2020-05-08 17:38:02.000000000 +0200 +++ b/doc/examples/static_executable/CMakeLists.txt 2025-04-16 16:30:45.258797826 +0200 @@ -25,7 +25,7 @@ # # This line is required for cmake backwards compatibility. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.10) # Name of your project project(myproject) --- a/scripts/CMakeLists.txt 2020-05-08 17:38:02.000000000 +0200 +++ b/scripts/CMakeLists.txt 2025-04-16 16:30:45.258797826 +0200 @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6.0) +cmake_minimum_required(VERSION 3.10) # Library versioning (used in Mac Python bindings)x set(SOVERSION 4)