Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nlopt for openSUSE:Factory checked in at 2026-02-24 15:39:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nlopt (Old) and /work/SRC/openSUSE:Factory/.nlopt.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nlopt" Tue Feb 24 15:39:47 2026 rev:24 rq:1334594 version:2.10.1 Changes: -------- --- /work/SRC/openSUSE:Factory/nlopt/nlopt.changes 2025-05-26 18:41:59.943707445 +0200 +++ /work/SRC/openSUSE:Factory/.nlopt.new.1977/nlopt.changes 2026-02-24 15:40:30.015143804 +0100 @@ -1,0 +2,11 @@ +Wed Feb 18 17:30:28 UTC 2026 - Atri Bhattacharya <[email protected]> + +- Update to version 2.10.1: + * Fixed octave 10.x build [gh#stevengj/nlopt#616]. + * Fixed slsqp constraints count [gh#stevengj/nlopt#598]. + * Fixed build with libstdc++ debug iterators + [gh#stevengj/nlopt#627]. + * Fixed PRAXIS evaluations count [gh#stevengj/nlopt#606]. +- Drop nlopt-dont-force-cxx-standard.patch: upstreamed. + +------------------------------------------------------------------- Old: ---- nlopt-2.10.0.tar.gz nlopt-dont-force-cxx-standard.patch New: ---- nlopt-2.10.1.tar.gz ----------(Old B)---------- Old: * Fixed PRAXIS evaluations count [gh#stevengj/nlopt#606]. - Drop nlopt-dont-force-cxx-standard.patch: upstreamed. ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nlopt.spec ++++++ --- /var/tmp/diff_new_pack.wfyhZA/_old 2026-02-24 15:40:30.767175025 +0100 +++ /var/tmp/diff_new_pack.wfyhZA/_new 2026-02-24 15:40:30.771175191 +0100 @@ -1,7 +1,7 @@ # # spec file for package nlopt # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -33,14 +33,12 @@ %endif Name: nlopt%{?psuffix} -Version: 2.10.0 +Version: 2.10.1 Release: 0 Summary: A library for nonlinear optimization License: LGPL-2.1-or-later URL: https://nlopt.readthedocs.io/en/latest/ Source0: https://github.com/stevengj/nlopt/archive/v%{version}.tar.gz#/%{pname}-%{version}.tar.gz -# PATCH-FIX-UPSTREAM nlopt-dont-force-cxx-standard.patch gh#stevengj/nlopt#597 [email protected] -- Do not force c++11 standard; this allows building octave bindings against octave 10+ -Patch0: nlopt-dont-force-cxx-standard.patch BuildRequires: cmake BuildRequires: fdupes BuildRequires: gcc%{?gcc_ver}-c++ ++++++ nlopt-2.10.0.tar.gz -> nlopt-2.10.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/.github/workflows/build.yml new/nlopt-2.10.1/.github/workflows/build.yml --- old/nlopt-2.10.0/.github/workflows/build.yml 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/.github/workflows/build.yml 2026-02-09 21:30:18.000000000 +0100 @@ -4,7 +4,7 @@ linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build run: | sudo apt-get update -y && sudo apt-get install python3-dev python3-numpy guile-3.0-dev octave-dev cmake gfortran g++-mingw-w64-x86-64 gfortran-mingw-w64-x86-64 @@ -20,7 +20,7 @@ macos: runs-on: macos-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build run: | brew install swig guile @@ -31,8 +31,8 @@ windows: runs-on: windows-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 with: python-version: '3.12' - name: Build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/.readthedocs.yaml new/nlopt-2.10.1/.readthedocs.yaml --- old/nlopt-2.10.0/.readthedocs.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/nlopt-2.10.1/.readthedocs.yaml 2026-02-09 21:30:18.000000000 +0100 @@ -0,0 +1,13 @@ +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.12" + +mkdocs: + configuration: mkdocs.yml + +python: + install: + - requirements: doc/requirements.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/CMakeLists.txt new/nlopt-2.10.1/CMakeLists.txt --- old/nlopt-2.10.0/CMakeLists.txt 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/CMakeLists.txt 2026-02-09 21:30:18.000000000 +0100 @@ -12,7 +12,7 @@ # Benoit Scherrer, 2010 CRL, Harvard Medical School # Copyright (c) 2008-2009 Children's Hospital Boston #============================================================================== -cmake_minimum_required (VERSION 3.15) +cmake_minimum_required (VERSION 3.18) set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type") @@ -22,7 +22,7 @@ # version set (NLOPT_MAJOR_VERSION "2") set (NLOPT_MINOR_VERSION "10") -set (NLOPT_BUGFIX_VERSION "0") +set (NLOPT_BUGFIX_VERSION "1") set (NLOPT_VERSION_STRING ${NLOPT_MAJOR_VERSION}.${NLOPT_MINOR_VERSION}.${NLOPT_BUGFIX_VERSION}) message (STATUS "NLopt version ${NLOPT_VERSION_STRING}") @@ -64,24 +64,10 @@ set (CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${NLOPT_INSTALL_LIBDIR} CACHE PATH "rpath") set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "use link path") -if(POLICY CMP0042) - # Set MACOSX_RPATH to ON - cmake_policy(SET CMP0042 NEW) -endif() - -if (POLICY CMP0086) - # UseSWIG honors SWIG_MODULE_NAME via -module flag - cmake_policy(SET CMP0086 NEW) -endif () - include (CheckIncludeFiles) include (CheckFunctionExists) include (CheckTypeSize) -include (CheckCCompilerFlag) -include (CheckCXXSymbolExists) include (CheckCSourceCompiles) -include (CheckCXXCompilerFlag) -include (CheckLibraryExists) #============================================================================== # COMPILATION CHECKINGS and CONFIGURATION GENERATION @@ -108,10 +94,9 @@ check_type_size ("unsigned int" SIZEOF_UNSIGNED_INT) check_type_size ("unsigned long" SIZEOF_UNSIGNED_LONG) -check_library_exists ("m" sqrt "" HAVE_LIBM) -if (HAVE_LIBM) - set (M_LIBRARY m) - set (LIBS_PRIVATE "-l${M_LIBRARY}") +find_library(M_LIBRARY m) +if (M_LIBRARY) + set (LIBS_PRIVATE "-lm") endif() if (NOT DEFINED HAVE_FPCLASSIFY) @@ -143,20 +128,6 @@ endforeach() endif () - -if (NLOPT_CXX OR NLOPT_PYTHON OR NLOPT_GUILE OR NLOPT_OCTAVE OR NLOPT_JAVA) - check_cxx_symbol_exists (__cplusplus ciso646 SYSTEM_HAS_CXX) - if (SYSTEM_HAS_CXX) - set (CMAKE_CXX_STANDARD 11) # set the standard to C++11 but do not require it - - if (NLOPT_CXX) - set (CMAKE_CXX_STANDARD_REQUIRED ON) # if we build C++ API, we do need C++11 - endif () - else() - message (FATAL_ERROR "The compiler doesn't support CXX.") - endif () -endif () - #============================================================================== # CREATE nlopt_config.h #============================================================================== @@ -258,9 +229,14 @@ target_include_directories(${nlopt_lib} PRIVATE src/algs/luksan) target_compile_definitions (${nlopt_lib} PRIVATE NLOPT_LUKSAN) endif () -target_link_libraries (${nlopt_lib} ${M_LIBRARY}) +if (M_LIBRARY) + target_link_libraries (${nlopt_lib} ${M_LIBRARY}) +endif () set_target_properties (${nlopt_lib} PROPERTIES SOVERSION ${SO_MAJOR}) set_target_properties (${nlopt_lib} PROPERTIES VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_PATCH}") +if (NLOPT_CXX) + target_compile_features (${nlopt_lib} PUBLIC cxx_lambdas) +endif () #============================================================================== # INCLUDE DIRECTORIES @@ -324,16 +300,12 @@ endif () if (NLOPT_PYTHON) - if (CMAKE_VERSION VERSION_LESS 3.18) - find_package (Python 3.6 COMPONENTS Interpreter Development NumPy) + option (NLOPT_PYTHON_SABI "Use Python stable ABI" OFF) + if (NLOPT_PYTHON_SABI AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.26) + find_package (Python 3.6 COMPONENTS Interpreter Development.SABIModule NumPy) + add_library (Python::Module ALIAS Python::SABIModule) else () - option (NLOPT_PYTHON_SABI "Use Python stable ABI" OFF) - if (NLOPT_PYTHON_SABI AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.26) - find_package (Python 3.6 COMPONENTS Interpreter Development.SABIModule NumPy) - add_library (Python::Module ALIAS Python::SABIModule) - else () - find_package (Python 3.6 COMPONENTS Interpreter Development.Module NumPy) - endif () + find_package (Python 3.6 COMPONENTS Interpreter Development.Module NumPy) endif () endif () diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/NEWS.md new/nlopt-2.10.1/NEWS.md --- old/nlopt-2.10.0/NEWS.md 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/NEWS.md 2026-02-09 21:30:18.000000000 +0100 @@ -1,5 +1,17 @@ # NLopt Release Notes +## NLopt 2.10.1 + +9 February 2026 + +* Fixed octave 10.x build ([#616]). + +* Fixed slsqp constraints count ([#598]). + +* Fixed build with libstdc++ debug iterators ([#627]). + +* Fixed PRAXIS evaluations count ([#606]). + ## NLopt 2.10 4 February 2025 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/doc/docs/NLopt_Algorithms.md new/nlopt-2.10.1/doc/docs/NLopt_Algorithms.md --- old/nlopt-2.10.0/doc/docs/NLopt_Algorithms.md 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/doc/docs/NLopt_Algorithms.md 2026-02-09 21:30:18.000000000 +0100 @@ -53,10 +53,21 @@ The DIRECT and DIRECT-L algorithms start by rescaling the bound constraints to a hypercube, which gives all dimensions equal weight in the search procedure. If your dimensions do *not* have equal weight, e.g. if you have a "long and skinny" search space and your function varies at about the same speed in all directions, it may be better to use unscaled variants of these algorthms, which are specified as `NLOPT_GN_DIRECT_NOSCAL`, `NLOPT_GN_DIRECT_L_NOSCAL`, and `NLOPT_GN_DIRECT_L_RAND_NOSCAL`, respectively. However, the unscaled variations make the most sense (if any) with the original DIRECT algorithm, since the design of DIRECT-L to some extent relies on the search region being a hypercube (which causes the subdivided hyperrectangles to have only a small set of side lengths). +The `NLOPT_GN_DIRECT*` algorithms supports the following internal parameter, which can be specified using the [`nlopt_set_param` API](NLopt_Reference.md#algorithm-specific-parameters): + +* `magic_eps` (defaults to `0`) "Jones' epsilon parameter". + Finally, NLopt also includes separate implementations based on the [original Fortran code](http://www4.ncsu.edu/~ctk/SOFTWARE/DIRECTv204.tar.gz) by Gablonsky et al. (1998-2001), which are specified as `NLOPT_GN_ORIG_DIRECT` and `NLOPT_GN_ORIG_DIRECT_L`. These implementations have a number of hard-coded limitations on things like the number of function evaluations; I removed several of these limitations, but some remain. On the other hand, there seem to be slight differences between these implementations and mine; most of the time, the performance is roughly similar, but occasionally Gablonsky's implementation will do significantly better than mine or vice versa. Most of the above algorithms only handle bound constraints, and in fact require finite bound constraints (they are not applicable to unconstrained problems). They do not handle arbitrary nonlinear constraints. However, the `ORIG` versions by Gablonsky et al. include some support for arbitrary nonlinear inequality constraints. +The `NLOPT_GN_ORIG_DIRECT*` algorithms supports the following internal parameter, which can be specified using the [`nlopt_set_param` API](NLopt_Reference.md#algorithm-specific-parameters): + +* `magic_eps` (defaults to `0`) "Jones' epsilon parameter". +* `magic_eps_abs` (defaults to `0`) "absolute version of Jones' epsilon parameter". +* `sigma_reltol` (defaults to `-1`) "relative tolerance on hypercube measure". +* `fglobal_reltol` (defaults to `0`) "relative tolerance on how close we should find fglobal". + ### Controlled Random Search (CRS) with local mutation My implementation of the "controlled random search" (CRS) algorithm (in particular, the CRS2 variant) with the "local mutation" modification, as defined by: @@ -346,7 +357,7 @@ This algorithm in NLopt (specified by NLOPT_LD_LBFGS), is based on a Fortran implementation of the low-storage BFGS algorithm written by Prof. Ladislav Luksan, and graciously posted online under the GNU LGPL at: -- <http://www.uivt.cas.cz/~luksan/subroutines.html> +- <http://www.cs.cas.cz/~luksan/subroutines.html> The original L-BFGS algorithm, based on variable-metric updates via Strang recurrences, was described by the papers: @@ -365,7 +376,7 @@ This algorithm in NLopt, is based on a Fortran implementation of a preconditioned inexact truncated Newton algorithm written by Prof. Ladislav Luksan, and graciously posted online under the GNU LGPL at: -- <http://www.uivt.cas.cz/~luksan/subroutines.html> +- <http://www.cs.cas.cz/~luksan/subroutines.html> NLopt includes several variations of this algorithm by Prof. Luksan. First, a variant preconditioned by the low-storage BFGS algorithm with steepest-descent restarting, specified as `NLOPT_LD_TNEWTON_PRECOND_RESTART`. Second, simplified versions `NLOPT_LD_TNEWTON_PRECOND` (same without restarting), `NLOPT_LD_TNEWTON_RESTART` (same without preconditioning), and `NLOPT_LD_TNEWTON` (same without restarting or preconditioning). @@ -386,7 +397,7 @@ This algorithm in NLopt, is based on a Fortran implementation of a shifted limited-memory variable-metric algorithm by Prof. Ladislav Luksan, and graciously posted online under the GNU LGPL at: -- <http://www.uivt.cas.cz/~luksan/subroutines.html> +- <http://www.cs.cas.cz/~luksan/subroutines.html> There are two variations of this algorithm: `NLOPT_LD_VAR2`, using a rank-2 method, and `NLOPT_LD_VAR1`, using a rank-1 method. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/doc/docs/NLopt_License_and_Copyright.md new/nlopt-2.10.1/doc/docs/NLopt_License_and_Copyright.md --- old/nlopt-2.10.0/doc/docs/NLopt_License_and_Copyright.md 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/doc/docs/NLopt_License_and_Copyright.md 2026-02-09 21:30:18.000000000 +0100 @@ -4,7 +4,7 @@ The NLopt library is under the [GNU Lesser General Public License](https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License) (LGPL), and the copyrights are owned by a variety of authors. -In general, the different code in NLopt comes from different sources, and have a variety of licenses. For example, all of the *new* code we wrote for NLopt is under the [MIT License](https://en.wikipedia.org/wiki/MIT_License) (which imposes essentially no practical restrictions, and is hence compatible with the LGPL). The *combination* of all of this software is under the conjunction of the license terms, and in particular they are limited by the most restrictive of the licenses for the portions, which in this case is the LGPL. (The other portions of NLopt are under LGPL-compatible, less-restrictive licenses like the MIT license. So, if you remove the LGPL portions, which are currently code [by Ladislav Luksan](http://www.uivt.cas.cz/~luksan/subroutines.html), the remainder reverts to a looser license.) +In general, the different code in NLopt comes from different sources, and have a variety of licenses. For example, all of the *new* code we wrote for NLopt is under the [MIT License](https://en.wikipedia.org/wiki/MIT_License) (which imposes essentially no practical restrictions, and is hence compatible with the LGPL). The *combination* of all of this software is under the conjunction of the license terms, and in particular they are limited by the most restrictive of the licenses for the portions, which in this case is the LGPL. (The other portions of NLopt are under LGPL-compatible, less-restrictive licenses like the MIT license. So, if you remove the LGPL portions, which are currently code [by Ladislav Luksan](http://www.cs.cas.cz/~luksan/subroutines.html), the remainder reverts to a looser license.) New code written for NLopt, including tutorial code at [NLopt Tutorial](NLopt_Tutorial.md), is Copyright © 2007-2020 Massachusetts Institute of Technology and other authors, and comes with **no warranty**: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/doc/docs/index.md new/nlopt-2.10.1/doc/docs/index.md --- old/nlopt-2.10.0/doc/docs/index.md 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/doc/docs/index.md 2026-02-09 21:30:18.000000000 +0100 @@ -23,14 +23,15 @@ Download and installation ------------------------- -Version 2.7.1 of NLopt is the latest version available from GitHub: +Version 2.10.1 of NLopt is the latest version available from GitHub: -- [v2.7.1.tar.gz](https://github.com/stevengj/nlopt/archive/v2.7.1.tar.gz) +- [v2.10.1.tar.gz](https://github.com/stevengj/nlopt/archive/refs/tags/v2.10.1.tar.gz) -See the [NLopt release notes](https://github.com/stevengj/nlopt/blob/master/NEWS.md) for the release history. NLopt is designed to be installed on any Unix-like system (GNU/Linux is fine) with a C compiler, using the standard +See the [NLopt release notes](https://github.com/stevengj/nlopt/blob/master/NEWS.md) for the release history. +NLopt is designed to be installed on any Unix-like system (GNU/Linux is fine) with a C compiler, using the standard ``` -cmake . && make && sudo make install +cmake . && make && sudo make install ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/mkdocs.yml new/nlopt-2.10.1/mkdocs.yml --- old/nlopt-2.10.0/mkdocs.yml 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/mkdocs.yml 2026-02-09 21:30:18.000000000 +0100 @@ -36,6 +36,7 @@ - Python reference: NLopt_Python_Reference.md - Guile reference: NLopt_Guile_Reference.md - R reference: NLopt_R_Reference.md + - Java reference: NLopt_Java_Reference.md - Deprecated API reference: NLopt_Deprecated_API_Reference.md - NLopt algorithms: - NLopt algorithms: NLopt_Algorithms.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/algs/ags/solver.cc new/nlopt-2.10.1/src/algs/ags/solver.cc --- old/nlopt-2.10.0/src/algs/ags/solver.cc 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/algs/ags/solver.cc 2026-02-09 21:30:18.000000000 +0100 @@ -341,7 +341,7 @@ } } -void NLPSolver::UpdateAllH(std::set<Interval*>::iterator iterator) +void NLPSolver::UpdateAllH(std::set<Interval*, ags::CompareIntervals>::iterator iterator) { Interval* pInterval = *iterator; if (pInterval->pl.idx < 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/algs/ags/solver.hpp new/nlopt-2.10.1/src/algs/ags/solver.hpp --- old/nlopt-2.10.0/src/algs/ags/solver.hpp 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/algs/ags/solver.hpp 2026-02-09 21:30:18.000000000 +0100 @@ -79,7 +79,7 @@ void InitDataStructures(); void ClearDataStructures(); - void UpdateAllH(std::set<Interval*>::iterator); + void UpdateAllH(std::set<Interval*, ags::CompareIntervals>::iterator); void UpdateH(double newValue, int index); double CalculateR(Interval*) const; double GetNextPointCoordinate(Interval*) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/algs/neldermead/nldrmd.c new/nlopt-2.10.1/src/algs/neldermead/nldrmd.c --- old/nlopt-2.10.0/src/algs/neldermead/nldrmd.c 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/algs/neldermead/nldrmd.c 2026-02-09 21:30:18.000000000 +0100 @@ -32,7 +32,7 @@ Richardson and Kuester (1973), as mentioned below. */ /* heuristic "strategy" constants: */ -static const double alpha = 1, beta = 0.5, gamm = 2, delta = 0.5; +static const double ALPHA = 1, BETA = 0.5, GAMMA = 2, DELTA = 0.5; /* sort order in red-black tree: keys [f(x), x] are sorted by f(x) */ static int simplex_compare(double *k1, double *k2) @@ -228,14 +228,14 @@ } /* reflection */ - if (!reflectpt(n, xcur, c, alpha, xh, lb, ub)) { + if (!reflectpt(n, xcur, c, ALPHA, xh, lb, ub)) { ret=NLOPT_XTOL_REACHED; goto done; } fr = f(n, xcur, NULL, f_data); CHECK_EVAL(xcur, fr); if (fr < fl) { /* new best point, expand simplex */ - if (!reflectpt(n, xh, c, gamm, xh, lb, ub)) { + if (!reflectpt(n, xh, c, GAMMA, xh, lb, ub)) { ret=NLOPT_XTOL_REACHED; goto done; } fh = f(n, xh, NULL, f_data); @@ -251,7 +251,7 @@ } else { /* new worst point, contract */ double fc; - if (!reflectpt(n,xcur,c, fh <= fr ? -beta : beta, xh, lb,ub)) { + if (!reflectpt(n,xcur,c, fh <= fr ? -BETA : BETA, xh, lb,ub)) { ret=NLOPT_XTOL_REACHED; goto done; } fc = f(n, xcur, NULL, f_data); @@ -266,7 +266,7 @@ for (i = 0; i < n+1; ++i) { double *pt = pts + i * (n+1); if (pt+1 != xl) { - if (!reflectpt(n,pt+1, xl,-delta,pt+1, lb,ub)) { + if (!reflectpt(n,pt+1, xl,-DELTA,pt+1, lb,ub)) { ret = NLOPT_XTOL_REACHED; goto done; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/algs/praxis/praxis.c new/nlopt-2.10.1/src/algs/praxis/praxis.c --- old/nlopt-2.10.0/src/algs/praxis/praxis.c 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/algs/praxis/praxis.c 2026-02-09 21:30:18.000000000 +0100 @@ -291,6 +291,7 @@ } global_1.fx = (*f)(n, &x[1], f_data); ++global_1.nf; + ++ *(stop->nevals_p); /* .....MINIMIZE ALONG THE "NON-CONJUGATE" DIRECTIONS V(*,K),...,V(*,N) */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/algs/slsqp/slsqp.c new/nlopt-2.10.1/src/algs/slsqp/slsqp.c --- old/nlopt-2.10.0/src/algs/slsqp/slsqp.c 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/algs/slsqp/slsqp.c 2026-02-09 21:30:18.000000000 +0100 @@ -2459,6 +2459,11 @@ unsigned max_cdim; int want_grad = 1; + if (ptot > n) { + nlopt_stop_msg(stop, "slsqp: more equality constraints than variables"); + return NLOPT_INVALID_ARGS; + } + max_cdim = MAX2(nlopt_max_constraint_dim(m, fc), nlopt_max_constraint_dim(p, h)); length_work(&len_w, &len_jw, mpi, pi, ni); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/octave/CMakeLists.txt new/nlopt-2.10.1/src/octave/CMakeLists.txt --- old/nlopt-2.10.0/src/octave/CMakeLists.txt 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/octave/CMakeLists.txt 2026-02-09 21:30:18.000000000 +0100 @@ -6,13 +6,6 @@ matlab_add_mex (NAME nlopt_optimize-mex SRC nlopt_optimize-mex.c OUTPUT_NAME nlopt_optimize LINK_TO ${nlopt_lib}) target_include_directories (nlopt_optimize-mex PRIVATE ${PROJECT_SOURCE_DIR}/src/api) - if (CMAKE_VERSION VERSION_LESS 3.14.0) - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - message("Forcing mexFunction visibility to default") - set_target_properties(nlopt_optimize-mex PROPERTIES COMPILE_FLAGS "-fvisibility=default") - endif() - endif() - if (NLOPT_CXX) set_target_properties (nlopt_optimize-mex PROPERTIES LINKER_LANGUAGE CXX) endif () @@ -42,6 +35,10 @@ octave_add_oct (nlopt_optimize SOURCES nlopt_optimize-oct.cc ${CMAKE_CURRENT_BINARY_DIR}/nlopt_optimize_usage.h LINK_LIBRARIES ${nlopt_lib}) target_include_directories (nlopt_optimize PRIVATE ${OCTAVE_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/src/api) + if (OCTAVE_VERSION_MAJOR GREATER 10) + target_compile_features(nlopt_optimize PRIVATE cxx_std_17) + endif() + if (NOT DEFINED INSTALL_OCT_DIR) file (RELATIVE_PATH INSTALL_OCT_DIR ${OCTAVE_ROOT_DIR} ${OCTAVE_OCT_SITE_DIR}) endif () diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/src/swig/CMakeLists.txt new/nlopt-2.10.1/src/swig/CMakeLists.txt --- old/nlopt-2.10.0/src/swig/CMakeLists.txt 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/src/swig/CMakeLists.txt 2026-02-09 21:30:18.000000000 +0100 @@ -1,7 +1,3 @@ - -if (POLICY CMP0078) - cmake_policy(SET CMP0078 NEW) -endif () # clean up old generated source files before running SWIG, useful for Java set(UseSWIG_MODULE_VERSION 2) include (UseSWIG) @@ -21,11 +17,10 @@ include_directories (${NLOPT_PRIVATE_INCLUDE_DIRS}) set_source_files_properties (nlopt.i PROPERTIES CPLUSPLUS ON) -if (Python_NumPy_FOUND) +if (Python_NumPy_FOUND AND NLOPT_CXX) set (SWIG_MODULE_nlopt_python_EXTRA_DEPS nlopt-python.i numpy.i generate-cpp) - # swig_add_module is deprecated swig_add_library (nlopt_python LANGUAGE python SOURCES nlopt.i OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/python OUTFILE_DIR ${CMAKE_CURRENT_BINARY_DIR}) @@ -46,12 +41,11 @@ endif () -if (GUILE_FOUND) +if (GUILE_FOUND AND NLOPT_CXX) set (SWIG_MODULE_nlopt_guile_EXTRA_DEPS nlopt-guile.i generate-cpp) set (CMAKE_SWIG_FLAGS -scmstub) - # swig_add_module is deprecated swig_add_library (nlopt_guile LANGUAGE guile SOURCES nlopt.i OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/guile OUTFILE_DIR ${CMAKE_CURRENT_BINARY_DIR}) @@ -74,14 +68,13 @@ endif () -if (JNI_FOUND AND Java_FOUND AND SWIG_FOUND) +if (JNI_FOUND AND Java_FOUND AND SWIG_FOUND AND NLOPT_CXX) include (UseJava) set (SWIG_MODULE_nlopt_java_EXTRA_DEPS nlopt-java.i generate-cpp) set (CMAKE_SWIG_FLAGS -package nlopt) - # swig_add_module is deprecated # OUTPUT_DIR is ${CMAKE_CURRENT_BINARY_DIR}/java/ + the -package above (with # any '.' replaced by '/'). It must also match the GLOB in glob_java.cmake. swig_add_library (nlopt_java LANGUAGE java SOURCES nlopt.i diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nlopt-2.10.0/test/CMakeLists.txt new/nlopt-2.10.1/test/CMakeLists.txt --- old/nlopt-2.10.0/test/CMakeLists.txt 2025-02-04 19:29:30.000000000 +0100 +++ new/nlopt-2.10.1/test/CMakeLists.txt 2026-02-09 21:30:18.000000000 +0100 @@ -1,28 +1,26 @@ add_custom_target (tests) macro(NLOPT_add_cpp_test test_name) - add_executable (${test_name} ${test_name}.cxx) - target_link_libraries (${test_name} ${nlopt_lib}) - add_dependencies (tests ${test_name}) - target_include_directories (${test_name} PRIVATE ${NLOPT_PRIVATE_INCLUDE_DIRS}) - foreach(arg IN ITEMS ${ARGN}) - add_test (NAME check_${test_name}_${arg} COMMAND ${test_name} ${arg}) - if (CMAKE_HOST_SYSTEM_NAME MATCHES Windows) - set_tests_properties (check_${test_name}_${arg} - PROPERTIES ENVIRONMENT "PATH=${PROJECT_BINARY_DIR}\\${CMAKE_BUILD_TYPE};$ENV{PATH}") # to load dll - endif () - endforeach() + if (NLOPT_CXX) + add_executable (${test_name} ${test_name}.cxx) + target_link_libraries (${test_name} ${nlopt_lib}) + add_dependencies (tests ${test_name}) + target_include_directories (${test_name} PRIVATE ${NLOPT_PRIVATE_INCLUDE_DIRS}) + foreach(arg IN ITEMS ${ARGN}) + add_test (NAME check_${test_name}_${arg} COMMAND ${test_name} ${arg}) + if (CMAKE_HOST_SYSTEM_NAME MATCHES Windows) + set_tests_properties (check_${test_name}_${arg} + PROPERTIES ENVIRONMENT "PATH=${PROJECT_BINARY_DIR}\\${CMAKE_BUILD_TYPE};$ENV{PATH}") # to load dll + endif () + endforeach() + endif () endmacro() NLOPT_add_cpp_test(t_tutorial 24 25 31 40) NLOPT_add_cpp_test(cpp_functor 0) NLOPT_add_cpp_test(t_fbound 0) NLOPT_add_cpp_test(t_except 1 0) - NLOPT_add_cpp_test(t_bounded 0 1 2 3 4 5 6 7 8 19 35 42 43) -if (NOT NLOPT_CXX) - set_tests_properties (check_t_bounded_8 check_t_bounded_43 PROPERTIES DISABLED TRUE) -endif () # have to add timer.c and mt19937ar.c as symbols are declared extern set (testopt_sources testfuncs.c testfuncs.h testopt.c ${PROJECT_SOURCE_DIR}/src/util/timer.c ${PROJECT_SOURCE_DIR}/src/util/mt19937ar.c) @@ -58,7 +56,7 @@ endif () # Check if LUKSAN targets are available. if (NOT NLOPT_LUKSAN) - set (list_of_algorithms_requiring_luksan 10 11 12 13 14 15 16 17) + set (list_of_algorithms_requiring_luksan 10 11 12 13 14 15 16 17 18) if (algo_index IN_LIST list_of_algorithms_requiring_luksan) set_tests_properties (testopt_algo${algo_index}_obj${obj_index} PROPERTIES DISABLED TRUE) endif() @@ -67,7 +65,7 @@ endforeach () endforeach () -if (Python_NumPy_FOUND AND (SWIG_FOUND OR (EXISTS ${PROJECT_SOURCE_DIR}/src/swig/nlopt-python.cpp))) +if (TARGET nlopt_python) set (PYINSTALLCHECK_ENVIRONMENT "LD_LIBRARY_PATH=${PROJECT_BINARY_DIR}/src/swig" "PYTHONPATH=$<SHELL_PATH:${PROJECT_BINARY_DIR}/src/swig/python;${PROJECT_BINARY_DIR}/src/swig>" ) @@ -85,7 +83,7 @@ # The binding itself should also compile with more ancient Java versions that # have already reached their end of life, but it is not worth uglifying the test # code for them, because people will then cargo-cult the legacy boilerplate. -if (JNI_FOUND AND Java_FOUND AND SWIG_FOUND AND NOT Java_VERSION VERSION_LESS 1.8) +if (TARGET nlopt_java AND NOT Java_VERSION VERSION_LESS 1.8) include (UseJava) add_jar (t_java SOURCES t_java.java INCLUDE_JARS nlopt_jar ENTRY_POINT t_java) get_property (t_java_jar TARGET t_java PROPERTY JAR_FILE) @@ -100,15 +98,15 @@ endforeach() endif () -if (OCTAVE_FOUND) +if (TARGET nlopt_optimize) add_test (NAME test_octave COMMAND ${OCTAVE_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/t_octave.m ${PROJECT_SOURCE_DIR}/src/octave ${PROJECT_BINARY_DIR}/src/octave) endif () -if (MATLAB_FOUND) +if (TARGET nlopt_optimize-mex) add_test (NAME test_matlab COMMAND ${Matlab_MAIN_PROGRAM} -nodesktop -nosplash -r "addpath('${PROJECT_SOURCE_DIR}/src/octave'); addpath('${PROJECT_BINARY_DIR}/src/octave'); try; run('${CMAKE_CURRENT_SOURCE_DIR}/t_matlab.m'); catch; exit(1); end; quit") endif () -if (GUILE_FOUND AND (SWIG_FOUND OR (EXISTS ${PROJECT_SOURCE_DIR}/src/swig/nlopt-guile.cpp))) +if (TARGET nlopt_guile) set (GUILECHECK_ENVIRONMENT "LD_LIBRARY_PATH=${PROJECT_BINARY_DIR}/src/swig" "GUILE_LOAD_PATH=$<SHELL_PATH:${PROJECT_BINARY_DIR}/src/swig/guile;${PROJECT_BINARY_DIR}/src/swig>" "GUILE_AUTO_COMPILE=0")
