Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package Ipopt for openSUSE:Factory checked 
in at 2025-08-10 22:20:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/Ipopt (Old)
 and      /work/SRC/openSUSE:Factory/.Ipopt.new.1085 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "Ipopt"

Sun Aug 10 22:20:45 2025 rev:24 rq:1298607 version:3.14.19

Changes:
--------
--- /work/SRC/openSUSE:Factory/Ipopt/Ipopt.changes      2025-05-03 
21:02:07.173551546 +0200
+++ /work/SRC/openSUSE:Factory/.Ipopt.new.1085/Ipopt.changes    2025-08-10 
22:20:49.051764347 +0200
@@ -1,0 +2,40 @@
+Mon Aug  4 14:47:33 UTC 2025 - Atri Bhattacharya <[email protected]>
+
+- Update to version 3.14.19:
+  * Only Windows specific changes.
+- Changes from version 3.14.18:
+  - Restricted workaround for using Pardiso to Intel MKL 2025.0.x.
+    Intel MKL 2025.1.0 has the corresponding issue fixed
+    [gh#coin-or/Ipopt#799].
+  - Fixed that Jipopt::finalize_solution did not store final
+    objective value correctly [gh#coin-or/Ipopt#820].
+  - Instead, the value of the last iterate evaluation was
+    returned, which was often the same.
+  - Added IpoptApplication::Version() (C++ interface),
+    GetIpoptVersion (C interface), and Ipopt::GetVersion() (Java
+    interface) to retrieve version of Ipopt library
+    [gh#coin-or/Ipopt#824].
+  - Fixed possible missing initialization of delta_x and delta_s
+    in PDPerturbationHandler in case ConsiderNewSystem failed
+    [gh#coin-or/Ipopt#834].
+  - Undefine max if defined after include of windows.h in
+    IpUtils.cpp [gh#coin-or/Ipopt#834].
+  - Added missing initialization of Filter Acceptor in case
+    restoration phase is called when the fallback mechanism of
+    BacktrackingLinearSearch has been activated
+    [gh#coin-or/Ipopt#834,gh#coin-or/Ipopt#837].
+  - If this happened in the first iteration, it led to the use of
+    uninitialized values.
+  - Added missing return if symbolic factorization with MA57
+    (ma57ad, ma57as) failed [gh#coin-or/Ipopt#834].
+  - Fixed application of scaling when computing violations of
+    inequality constraints in TNLP::get_curr_violations(). Added
+    OrigIpoptNLP::d_space().
+  - Fixed signature of call to MKL's Pardiso: the DPARM argument
+    does not exist in this version of Pardiso.
+- Use %ldconfig_scriptlets macro instead of post(un) ldconfig
+  scripts.
+- Install doc files as part of %install and run fdupes on them to
+  link up duplicated files.
+
+-------------------------------------------------------------------

Old:
----
  Ipopt-3.14.17.tar.gz

New:
----
  Ipopt-3.14.19.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ Ipopt.spec ++++++
--- /var/tmp/diff_new_pack.5o0zWg/_old  2025-08-10 22:20:49.679790428 +0200
+++ /var/tmp/diff_new_pack.5o0zWg/_new  2025-08-10 22:20:49.679790428 +0200
@@ -19,7 +19,7 @@
 %define sover 3
 %define shlib libipopt%{sover}
 Name:           Ipopt
-Version:        3.14.17
+Version:        3.14.19
 Release:        0
 Summary:        A software package for large-scale nonlinear optimization 
methods
 License:        EPL-2.0
@@ -99,24 +99,27 @@
   rm %{buildroot}%{_docdir}/%{name}/${f}
 done
 
+# Install doc files here so that duplicates can be cleaned up using %%fdupes
+mkdir -p %{buildroot}%{_docdir}/%{name}
+cp -r doc/html %{buildroot}%{_docdir}/%{name}/
+
 find %{buildroot} -type f -name "*.la" -delete -print
 
-%fdupes %{buildroot}%{_datadir}/coin/doc
+%fdupes %{buildroot}%{_docdir}/%{name}/
 
 %check
 %make_build test
 
-%post -n %{shlib} -p /sbin/ldconfig
-%postun -n %{shlib} -p /sbin/ldconfig
+%ldconfig_scriptlets -n %{shlib}
 
 %files -n %{shlib}
 %{_libdir}/*.so.%{sover}*
 
 %files devel
 %doc README.md AUTHORS ChangeLog.md
-%doc doc/html
+%doc %{_docdir}/%{name}
 %license LICENSE
-%{_includedir}/*
+%{_includedir}/coin-or/
 %{_libdir}/*.so
 %{_libdir}/pkgconfig/ipopt.pc
 

++++++ Ipopt-3.14.17.tar.gz -> Ipopt-3.14.19.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/ChangeLog.md 
new/Ipopt-releases-3.14.19/ChangeLog.md
--- old/Ipopt-releases-3.14.17/ChangeLog.md     2024-12-14 14:40:06.000000000 
+0100
+++ new/Ipopt-releases-3.14.19/ChangeLog.md     2025-07-30 11:38:01.000000000 
+0200
@@ -7,6 +7,32 @@
 
 ## 3.14
 
+### 3.14.19 (2025-07-30)
+
+- Fixed call to `getenv_s` on Windows, introduced with 3.14.17.
+  This invalid use of this call made the Pardiso interfaces unusable on 
Windows.
+
+### 3.14.18 (2025-07-28)
+
+- Restricted workaround for using Pardiso to Intel MKL 2025.0.x.
+  Intel MKL 2025.1.0 has the corresponding issue fixed. [#799]
+- Fixed that Jipopt::finalize_solution did not store final objective value 
correctly
+  [#820, by Kevin Kofler]. Instead, the value of the last iterate evaluation 
was returned,
+  which was often the same.
+- Added IpoptApplication::Version() (C++ interface), GetIpoptVersion (C 
interface), and
+  Ipopt::GetVersion() (Java interface) to retrieve version of Ipopt library 
[#824].
+- Fixed possible missing initialization of delta_x and delta_s in 
PDPerturbationHandler
+  in case ConsiderNewSystem failed [#834].
+- Undefine `max` if defined after include of windows.h in IpUtils.cpp [#834].
+- Added missing initialization of Filter Acceptor in case restoration phase is 
called
+  when the fallback mechanism of BacktrackingLinearSearch has been activated 
[#834,#837].
+  If this happened in the first iteration, it led to the use of uninitialized 
values.
+- Added missing return if symbolic factorization with MA57 (ma57ad, ma57as) 
failed [#834].
+- Fixed application of scaling when computing violations of inequality 
constraints in
+  `TNLP::get_curr_violations()`. Added `OrigIpoptNLP::d_space()`.
+- Fixed signature of call to MKL's Pardiso: the DPARM argument does not exist 
in this
+  version of Pardiso.
+
 ### 3.14.17 (2024-12-14)
 
 - Added `Ipopt::RegisterInterruptHandler()` and 
`Ipopt::UnregisterInterruptHandler()`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/LICENSE 
new/Ipopt-releases-3.14.19/LICENSE
--- old/Ipopt-releases-3.14.17/LICENSE  2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/LICENSE  2025-07-30 11:38:01.000000000 +0200
@@ -258,3 +258,20 @@
 under this Agreement are reserved. Nothing in this Agreement is intended
 to be enforceable by any entity that is not a Contributor or Recipient.
 No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following 
+Secondary Licenses when the conditions for such availability set forth 
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/README.md 
new/Ipopt-releases-3.14.19/README.md
--- old/Ipopt-releases-3.14.17/README.md        2024-12-14 14:40:06.000000000 
+0100
+++ new/Ipopt-releases-3.14.19/README.md        2025-07-30 11:38:01.000000000 
+0200
@@ -4,7 +4,7 @@
 Introduction
 ------------
 
-Ipopt (Interior Point OPTimizer, pronounced eye-pea-Opt) is a software package 
for large-scale [nonlinear 
optimization](http://wiki.mcs.anl.gov/NEOS/index.php/Nonlinear_Programming_FAQ).
+Ipopt (Interior Point OPTimizer, pronounced eye-pea-Opt) is a software package 
for large-scale [nonlinear 
optimization](https://en.wikipedia.org/wiki/Nonlinear_programming).
 It is designed to find (local) solutions of mathematical optimization problems 
of the form
 
 $$\begin{align}
@@ -111,7 +111,7 @@
 Some precompiled binaries of Ipopt are also available:
 
 - **[Ipopt releases page](https://github.com/coin-or/Ipopt/releases)** 
provides libraries and executables for Windows
-- 
**[JuliaBinaryWrappers](https://github.com/JuliaBinaryWrappers/Ipopt_jll.jl/releases)**
 provides libraries and executables; 
[libHSL](https://licences.stfc.ac.uk/products/Software/HSL/LibHSL) provides 
prebuild HSL libraries
+- 
**[JuliaBinaryWrappers](https://github.com/JuliaBinaryWrappers/Ipopt_jll.jl/releases)**
 provides libraries and executables (see also [notes on 
BLAS/LAPACK](https://github.com/jump-dev/Ipopt.jl#blas-and-lapack); 
[libHSL](https://licences.stfc.ac.uk/products/Software/HSL/LibHSL) provides 
prebuild HSL libraries
 - **[IDEAS](https://github.com/IDAES/idaes-ext/releases)** provides 
executables; these executables include HSL solvers
 
 Getting Help
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/configure 
new/Ipopt-releases-3.14.19/configure
--- old/Ipopt-releases-3.14.17/configure        2024-12-14 14:40:06.000000000 
+0100
+++ new/Ipopt-releases-3.14.19/configure        2025-07-30 11:38:01.000000000 
+0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for Ipopt 3.14.17.
+# Generated by GNU Autoconf 2.72 for Ipopt 3.14.19.
 #
 # Report bugs to <https://github.com/coin-or/Ipopt/issues/new>.
 #
@@ -620,8 +620,8 @@
 # Identity of this package.
 PACKAGE_NAME='Ipopt'
 PACKAGE_TARNAME='ipopt'
-PACKAGE_VERSION='3.14.17'
-PACKAGE_STRING='Ipopt 3.14.17'
+PACKAGE_VERSION='3.14.19'
+PACKAGE_STRING='Ipopt 3.14.19'
 PACKAGE_BUGREPORT='https://github.com/coin-or/Ipopt/issues/new'
 PACKAGE_URL='https://github.com/coin-or/Ipopt'
 
@@ -1496,7 +1496,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures Ipopt 3.14.17 to adapt to many kinds of systems.
+'configure' configures Ipopt 3.14.19 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1567,7 +1567,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Ipopt 3.14.17:";;
+     short | recursive ) echo "Configuration of Ipopt 3.14.19:";;
    esac
   cat <<\_ACEOF
 
@@ -1770,7 +1770,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Ipopt configure 3.14.17
+Ipopt configure 3.14.19
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2607,7 +2607,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Ipopt $as_me 3.14.17, which was
+It was created by Ipopt $as_me 3.14.19, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4478,7 +4478,7 @@
 
 
 
-printf "%s\n" "#define IPOPT_VERSION \"3.14.17\"" >>confdefs.h
+printf "%s\n" "#define IPOPT_VERSION \"3.14.19\"" >>confdefs.h
 
 
 printf "%s\n" "#define IPOPT_VERSION_MAJOR 3" >>confdefs.h
@@ -4487,7 +4487,7 @@
 printf "%s\n" "#define IPOPT_VERSION_MINOR 14" >>confdefs.h
 
 
-printf "%s\n" "#define IPOPT_VERSION_RELEASE 17" >>confdefs.h
+printf "%s\n" "#define IPOPT_VERSION_RELEASE 19" >>confdefs.h
 
 
 
@@ -4560,7 +4560,7 @@
 
 # Define the identity of the package.
  PACKAGE='ipopt'
- VERSION='3.14.17'
+ VERSION='3.14.19'
 
 
 # Some tools Automake needs.
@@ -24442,9 +24442,9 @@
 
 
 
-  LT_LDFLAGS="$LT_LDFLAGS -version-number 3:14:17"
-       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libtool version info: 
-version-number 3:14:17" >&5
-printf "%s\n" "$as_me: libtool version info: -version-number 3:14:17" >&6;}
+  LT_LDFLAGS="$LT_LDFLAGS -version-number 3:14:19"
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: libtool version info: 
-version-number 3:14:19" >&5
+printf "%s\n" "$as_me: libtool version info: -version-number 3:14:19" >&6;}
 
 
   LT_LDFLAGS="$LT_LDFLAGS -no-undefined"
@@ -30314,7 +30314,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Ipopt $as_me 3.14.17, which was
+This file was extended by Ipopt $as_me 3.14.19, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -30387,7 +30387,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-Ipopt config.status 3.14.17
+Ipopt config.status 3.14.19
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/configure.ac 
new/Ipopt-releases-3.14.19/configure.ac
--- old/Ipopt-releases-3.14.17/configure.ac     2024-12-14 14:40:06.000000000 
+0100
+++ new/Ipopt-releases-3.14.19/configure.ac     2025-07-30 11:38:01.000000000 
+0200
@@ -8,7 +8,7 @@
 #                       Names and other basic things                        #
 #############################################################################
 
-AC_INIT([Ipopt],[3.14.17],[https://github.com/coin-or/Ipopt/issues/new],[],[https://github.com/coin-or/Ipopt])
+AC_INIT([Ipopt],[3.14.19],[https://github.com/coin-or/Ipopt/issues/new],[],[https://github.com/coin-or/Ipopt])
 
 AC_COPYRIGHT([
 Copyright 2004, 2011 International Business Machines and others.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/contrib/sIPOPT/AmplSolver/SensAmplTNLP.cpp 
new/Ipopt-releases-3.14.19/contrib/sIPOPT/AmplSolver/SensAmplTNLP.cpp
--- old/Ipopt-releases-3.14.17/contrib/sIPOPT/AmplSolver/SensAmplTNLP.cpp       
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/contrib/sIPOPT/AmplSolver/SensAmplTNLP.cpp       
2025-07-30 11:38:01.000000000 +0200
@@ -295,9 +295,8 @@
       //exc.ReportException(*jnlst_);
       // const std::string exc_mess = exc.Message();
       const std::string exc_mess = exc.Message();
-      jnlst_->Printf(J_WARNING, J_INITIALIZATION, "    WARNING: Will not run 
sIPOPT "
-                     "because of incorrect AMPL suffix!\n"
-                     "      Message: %s\n\n", exc_mess.c_str());
+      jnlst_->Printf(J_WARNING, J_INITIALIZATION, "    WARNING: Will not run 
sIPOPT because of incorrect AMPL suffix!\n"
+                                                  "      Message: %s\n\n", 
exc_mess.c_str());
       options_->SetStringValue("sens_internal_abort", "yes");
       bool ignore_suffix_error;
       options_->GetBoolValue("ignore_suffix_error", ignore_suffix_error, "");
@@ -319,9 +318,8 @@
    catch( SUFFIX_EMPTY& exc )
    {
       const std::string exc_mess = exc.Message();
-      jnlst_->Printf(J_WARNING, J_INITIALIZATION, "    WARNING: Will not run 
reduced hessian computation "
-                     "because of incorrect AMPL suffix!\n"
-                     "      Message: %s\n\n", exc_mess.c_str());
+      jnlst_->Printf(J_WARNING, J_INITIALIZATION, "    WARNING: Will not run 
reduced hessian computation because of incorrect AMPL suffix!\n"
+                                                  "      Message: %s\n\n", 
exc_mess.c_str());
       options_->SetStringValue("sens_internal_abort", "yes");
       bool ignore_suffix_error;
       options_->GetBoolValue("ignore_suffix_error", ignore_suffix_error, "");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/contrib/sIPOPT/src/SensApplication.cpp 
new/Ipopt-releases-3.14.19/contrib/sIPOPT/src/SensApplication.cpp
--- old/Ipopt-releases-3.14.17/contrib/sIPOPT/src/SensApplication.cpp   
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/contrib/sIPOPT/src/SensApplication.cpp   
2025-07-30 11:38:01.000000000 +0200
@@ -192,10 +192,9 @@
    {
       if( n_sens_steps_ <= 0 )
       {
-         jnlst_->Printf(J_WARNING, J_MAIN, "\n"
-                        "The run_sens option was set to true, but the 
specified\n"
-                        "number of sensitivity steps was set to zero.\n"
-                        "Computation is aborted.\n\n");
+         jnlst_->Printf(J_WARNING, J_MAIN, "\nThe run_sens option was set to 
true, but the specified\n"
+                                           "number of sensitivity steps was 
set to zero.\n"
+                                           "Computation is aborted.\n\n");
       }
    }
 
@@ -272,15 +271,13 @@
 
       if( compute_red_hessian_ && redhess_internal_abort )
       {
-         jnlst_->Printf(J_WARNING, J_MAIN, "\nReduced hessian was not computed 
"
-                        "because an error occurred.\n"
-                        "See exception message above for details.\n\n");
+         jnlst_->Printf(J_WARNING, J_MAIN, "\nReduced hessian was not computed 
because an error occurred.\n"
+                                           "See exception message above for 
details.\n\n");
       }
       if( run_sens_ && sens_internal_abort )
       {
-         jnlst_->Printf(J_WARNING, J_MAIN, "\nsIPOPT was not called "
-                        "because an error occurred.\n"
-                        "See exception message above for details.\n\n");
+         jnlst_->Printf(J_WARNING, J_MAIN, "\nsIPOPT was not called because an 
error occurred.\n"
+                                           "See exception message above for 
details.\n\n");
       }
 
       ip_nlp_->FinalizeSolution(status, *ip_data_->curr()->x(), *zL, *zU, *c, 
*d, *yc, *yd, obj, GetRawPtr(ip_data_),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/contrib/sIPOPT/src/SensReducedHessianCalculator.cpp 
new/Ipopt-releases-3.14.19/contrib/sIPOPT/src/SensReducedHessianCalculator.cpp
--- 
old/Ipopt-releases-3.14.17/contrib/sIPOPT/src/SensReducedHessianCalculator.cpp  
    2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/contrib/sIPOPT/src/SensReducedHessianCalculator.cpp  
    2025-07-30 11:38:01.000000000 +0200
@@ -64,10 +64,10 @@
    if( have_x_scaling || have_c_scaling || have_d_scaling )
    {
       Jnlst().Printf(J_WARNING, J_MAIN, "\n"
-                     
"-------------------------------------------------------------------------------\n"
-                     "                              *** WARNING ***\n"
-                     
"-------------------------------------------------------------------------------\n"
-                     "You are using the reduced hessian feature with scaling 
of\n");
+                                        
"-------------------------------------------------------------------------------\n"
+                                        "                              *** 
WARNING ***\n"
+                                        
"-------------------------------------------------------------------------------\n"
+                                        "You are using the reduced hessian 
feature with scaling of\n");
       if( have_x_scaling )
       {
          Jnlst().Printf(J_WARNING, J_MAIN, "*** variables\n");
@@ -81,9 +81,9 @@
          Jnlst().Printf(J_WARNING, J_MAIN, "*** inequality constraints\n");
       }
       Jnlst().Printf(J_WARNING, J_MAIN, "enabled.\n"
-                     "A correct unscaled solution of the reduced hessian 
cannot be guaranteed in this\n"
-                     "case. Please consider rerunning with scaling turned 
off.\n"
-                     
"-------------------------------------------------------------------------------\n\n");
+                                        "A correct unscaled solution of the 
reduced hessian cannot be guaranteed in this\n"
+                                        "case. Please consider rerunning with 
scaling turned off.\n"
+                                        
"-------------------------------------------------------------------------------\n\n");
 
    }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/doc/main.dox 
new/Ipopt-releases-3.14.19/doc/main.dox
--- old/Ipopt-releases-3.14.17/doc/main.dox     2024-12-14 14:40:06.000000000 
+0100
+++ new/Ipopt-releases-3.14.19/doc/main.dox     2025-07-30 11:38:01.000000000 
+0200
@@ -280,7 +280,7 @@
 
     Modern, light-weight (~1k loc), **Eigen**-based <strong>C++</strong> 
interface to %Ipopt and Snopt.
 
--   [IPyOpt](https://gitlab.com/g-braeunlich/ipyopt)
+-   [ipyopt](https://gitlab.com/ipyopt-devs/ipyopt)
 
     Interfacing %Ipopt from **Python**.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/doc/output.dox 
new/Ipopt-releases-3.14.19/doc/output.dox
--- old/Ipopt-releases-3.14.17/doc/output.dox   2024-12-14 14:40:06.000000000 
+0100
+++ new/Ipopt-releases-3.14.19/doc/output.dox   2025-07-30 11:38:01.000000000 
+0200
@@ -76,8 +76,8 @@
     | N   | penalty value updated in merit function method w/ second order 
correction |
     | R   | Restoration phase just started |
     | w   | in watchdog procedure |
-    | s   | step accepted in soft restoration phase |
-    | t/T | tiny step accepted without line search |
+    | s/S | step accepted in soft restoration phase (S: original backtracking 
globalization also satisfied) |
+    | t/T | tiny step accepted without line search (T: two consecutive tiny 
steps) |
     | r   | some previous iterate restored |
 
 - ls:  The number of backtracking line search steps (does not include
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/examples/ScalableProblems/RegisteredTNLP.hpp 
new/Ipopt-releases-3.14.19/examples/ScalableProblems/RegisteredTNLP.hpp
--- old/Ipopt-releases-3.14.17/examples/ScalableProblems/RegisteredTNLP.hpp     
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/examples/ScalableProblems/RegisteredTNLP.hpp     
2025-07-30 11:38:01.000000000 +0200
@@ -16,7 +16,7 @@
 {
 public:
    RegisteredTNLP()
-   : interrupted_(false)
+      : interrupted_(false)
    { }
 
    /** Initialize internal parameters.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/examples/hs071_java/HS071.java 
new/Ipopt-releases-3.14.19/examples/hs071_java/HS071.java
--- old/Ipopt-releases-3.14.17/examples/hs071_java/HS071.java   2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/examples/hs071_java/HS071.java   2025-07-30 
11:38:01.000000000 +0200
@@ -395,6 +395,11 @@
       // Create the problem
       HS071 hs071 = new HS071();
 
+      // Get and print the Ipopt version
+      int version[] = new int[3];
+      hs071.getVersion(version);
+      System.out.println("Ipopt version: " + version[0] + "." + version[1] + 
"." + version[2]);
+
       // Set some options
       // hs071.setNumericOption("tol",1E-7);
       // hs071.setStringOption("nlp_scaling_method","user-scaling");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/Inexact/IpIterativePardisoSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/Inexact/IpIterativePardisoSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/Inexact/IpIterativePardisoSolverInterface.cpp
      2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/Inexact/IpIterativePardisoSolverInterface.cpp
      2025-07-30 11:38:01.000000000 +0200
@@ -220,7 +220,9 @@
       int num_procs = 1;
 #ifdef IPOPT_HAS_GETENV_S
       char var[10];
-      if( getenv_s(NULL, var, sizeof(var), "OMP_NUM_THREADS") == 0 )
+      int required_size;
+      getenv_s(&required_size, var, sizeof(var), "OMP_NUM_THREADS");
+      if( required_size > 0 )
 #else
       char* var = getenv("OMP_NUM_THREADS");
       if( var != NULL )
@@ -398,7 +400,9 @@
 )
 {
 #ifdef IPOPT_HAS_GETENV_S
-   if( getenv_s(NULL, NULL, 0, "IPOPT_WRITE_MAT") == 0 )
+   size_t required_size;
+   getenv_s(&required_size, NULL, 0, "IPOPT_WRITE_MAT");
+   if( required_size > 0 )
 #else
    if( getenv("IPOPT_WRITE_MAT") )
 #endif
@@ -411,7 +415,7 @@
 
 #ifdef IPOPT_HAS_GETENV_S
       char mat_pref[32];
-      if( getenv_s(NULL, mat_pref, sizeof(mat_pref), "IPOPT_WRITE_PREFIX") != 
0 )
+      if( getenv_s(&required_size, mat_pref, sizeof(mat_pref), 
"IPOPT_WRITE_PREFIX") != 0 )
       {
          memcpy(mat_pref, "mat-ipopt", 10);
       }
@@ -455,7 +459,8 @@
 
    /* additional matrix format */
 #ifdef IPOPT_HAS_GETENV_S
-   if( getenv_s(NULL, NULL, 0, "IPOPT_WRITE_MAT_MTX") == 0 )
+   getenv_s(&required_size, NULL, 0, "IPOPT_WRITE_MAT_MTX");
+   if( required_size > 0 )
 #else
    if( getenv("IPOPT_WRITE_MAT_MTX") )
 #endif
@@ -468,7 +473,7 @@
 
 #ifdef IPOPT_HAS_GETENV_S
       char mat_pref[32];
-      if( getenv_s(NULL, mat_pref, sizeof(mat_pref), "IPOPT_WRITE_PREFIX") != 
0 )
+      if( getenv_s(&required_size, mat_pref, sizeof(mat_pref), 
"IPOPT_WRITE_PREFIX") != 0 )
       {
          memcpy(mat_pref, "mat-ipopt", 10);
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/IpBacktrackingLineSearch.cpp 
new/Ipopt-releases-3.14.19/src/Algorithm/IpBacktrackingLineSearch.cpp
--- old/Ipopt-releases-3.14.17/src/Algorithm/IpBacktrackingLineSearch.cpp       
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Algorithm/IpBacktrackingLineSearch.cpp       
2025-07-30 11:38:01.000000000 +0200
@@ -321,13 +321,23 @@
                          "We are in an emergency mode, but no restoration 
phase or other fall back is available.");
       }
       fallback_activated_ = false; // reset the flag
+
+      // in order to init the line search for the acceptor next, we need a 
delta to calculate reference_gradBarrTDelta_
+      // since likely we are here because this has failed in 
PDSearchDirCalculator::ComputeSearchDirection(), we set a new delta now
+      SmartPtr<IteratesVector> delta = 
IpData().curr()->MakeNewIteratesVector(true);
+      delta->Set(0.0);
+      IpData().set_delta(delta);
    }
    else
    {
-      // Initialize the acceptor for this backtracking line search
-      acceptor_->InitThisLineSearch(in_watchdog_);
       actual_delta = IpData().delta()->MakeNewContainer();
    }
+   // Initialize the acceptor for this backtracking line search
+   // this was originally only done if fallback_activated_ was not true, i.e., 
if we were not going into restoration phase
+   // however, if the fallback is activated, we may go to the restoration 
phase below, which calls acceptor_->PrepareRestoPhaseStart()
+   // below, which calls FilterLSAcceptor::AugmentFilter(), which needs to 
have reference_barr_ and reference_theta_ initialized
+   // so we call InitThisLineSearch also in this case now
+   acceptor_->InitThisLineSearch(in_watchdog_);
 
    if( start_with_resto_ )
    {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/IpFilterLSAcceptor.cpp 
new/Ipopt-releases-3.14.19/src/Algorithm/IpFilterLSAcceptor.cpp
--- old/Ipopt-releases-3.14.17/src/Algorithm/IpFilterLSAcceptor.cpp     
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Algorithm/IpFilterLSAcceptor.cpp     
2025-07-30 11:38:01.000000000 +0200
@@ -23,6 +23,7 @@
 
 FilterLSAcceptor::FilterLSAcceptor(const SmartPtr<PDSystemSolver>& pd_solver)
    :
+   reference_initialized_(false),
    filter_(2),
    pd_solver_(pd_solver)
 {
@@ -265,6 +266,7 @@
       reference_barr_ = watchdog_barr_;
       reference_gradBarrTDelta_ = watchdog_gradBarrTDelta_;
    }
+   reference_initialized_ = true;
    filter_.Print(Jnlst());
 }
 
@@ -297,6 +299,8 @@
    DBG_START_METH("FilterLSAcceptor::AugmentFilter",
                   dbg_verbosity);
 
+   DBG_ASSERT(reference_initialized_);
+
    Number phi_add = reference_barr_ - gamma_phi_ * reference_theta_;
    Number theta_add = (1. - gamma_theta_) * reference_theta_;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/IpFilterLSAcceptor.hpp 
new/Ipopt-releases-3.14.19/src/Algorithm/IpFilterLSAcceptor.hpp
--- old/Ipopt-releases-3.14.17/src/Algorithm/IpFilterLSAcceptor.hpp     
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Algorithm/IpFilterLSAcceptor.hpp     
2025-07-30 11:38:01.000000000 +0200
@@ -290,6 +290,10 @@
     *  respect to which progress is to be made
     */
    Number reference_gradBarrTDelta_;
+   /** Whether reference_theta_, reference_barr_, reference_gradBarrTDelta_
+    *  have been initialized by a call to InitThisLineSearch().
+    */
+   bool reference_initialized_;
    /** Constraint violation at reference point */
    Number watchdog_theta_;
    /** Barrier objective function at reference point */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/IpOrigIpoptNLP.cpp 
new/Ipopt-releases-3.14.19/src/Algorithm/IpOrigIpoptNLP.cpp
--- old/Ipopt-releases-3.14.17/src/Algorithm/IpOrigIpoptNLP.cpp 2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Algorithm/IpOrigIpoptNLP.cpp 2025-07-30 
11:38:01.000000000 +0200
@@ -312,8 +312,7 @@
                         && IsValid(jac_d_space_) && IsValid(h_space_) && 
IsValid(scaled_jac_c_space_) && IsValid(scaled_jac_d_space_)
                         && IsValid(scaled_h_space_));
 
-      DBG_ASSERT(retValue && "Model cannot return null vector or matrix 
prototypes or spaces,"
-                 " please return zero length vectors instead");
+      DBG_ASSERT(retValue && "Model cannot return null vector or matrix 
prototypes or spaces, please return zero length vectors instead");
    }
    else
    {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/IpOrigIpoptNLP.hpp 
new/Ipopt-releases-3.14.19/src/Algorithm/IpOrigIpoptNLP.hpp
--- old/Ipopt-releases-3.14.17/src/Algorithm/IpOrigIpoptNLP.hpp 2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Algorithm/IpOrigIpoptNLP.hpp 2025-07-30 
11:38:01.000000000 +0200
@@ -282,6 +282,12 @@
    {
       return x_space_;
    }
+
+   /// @since 3.14.18
+   virtual SmartPtr<const VectorSpace> d_space() const
+   {
+      return d_space_;
+   }
    ///@}
 
    /** Accessor method for vector/matrix spaces pointers */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/IpPDPerturbationHandler.cpp 
new/Ipopt-releases-3.14.19/src/Algorithm/IpPDPerturbationHandler.cpp
--- old/Ipopt-releases-3.14.17/src/Algorithm/IpPDPerturbationHandler.cpp        
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Algorithm/IpPDPerturbationHandler.cpp        
2025-07-30 11:38:01.000000000 +0200
@@ -216,6 +216,9 @@
    }
    delta_d = delta_d_curr_ = delta_c;
 
+   delta_x = 0.;
+   delta_s = 0.;
+
    if( hess_degenerate_ == DEGENERATE )
    {
       delta_x_curr_ = 0.;
@@ -226,11 +229,6 @@
          return false;
       }
    }
-   else
-   {
-      delta_x = 0.;
-      delta_s = delta_x;
-   }
 
    delta_x_curr_ = delta_x;
    delta_s_curr_ = delta_s;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpMa27TSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpMa27TSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpMa27TSolverInterface.cpp
   2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpMa27TSolverInterface.cpp
   2025-07-30 11:38:01.000000000 +0200
@@ -197,8 +197,7 @@
    options.GetNumericValue("ma27_pivtol", pivtol_, prefix);
    if( options.GetNumericValue("ma27_pivtolmax", pivtolmax_, prefix) )
    {
-      ASSERT_EXCEPTION(pivtolmax_ >= pivtol_, OPTION_INVALID, "Option 
\"ma27_pivtolmax\": This value must be between "
-                       "ma27_pivtol and 1.");
+      ASSERT_EXCEPTION(pivtolmax_ >= pivtol_, OPTION_INVALID, "Option 
\"ma27_pivtolmax\": This value must be between ma27_pivtol and 1.");
    }
    else
    {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpMa57TSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpMa57TSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpMa57TSolverInterface.cpp
   2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpMa57TSolverInterface.cpp
   2025-07-30 11:38:01.000000000 +0200
@@ -332,8 +332,7 @@
    options.GetNumericValue("ma57_pivtol", pivtol_, prefix);
    if( options.GetNumericValue("ma57_pivtolmax", pivtolmax_, prefix) )
    {
-      ASSERT_EXCEPTION(pivtolmax_ >= pivtol_, OPTION_INVALID, "Option 
\"pivtolmax\": This value must be between "
-                       "pivtol and 1.");
+      ASSERT_EXCEPTION(pivtolmax_ >= pivtol_, OPTION_INVALID, "Option 
\"pivtolmax\": This value must be between pivtol and 1.");
    }
    else if( pivtol_ > pivtolmax_ )
    {
@@ -576,6 +575,7 @@
    {
       Jnlst().Printf(J_ERROR, J_LINEAR_ALGEBRA,
                      "*** Error from MA57AD *** INFO(0) = %" 
IPOPT_INDEX_FORMAT "\n", wd_info_[0]);
+      return SYMSOLVER_FATAL_ERROR;
    }
 
    wd_lfact_ = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
   2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
   2025-07-30 11:38:01.000000000 +0200
@@ -198,8 +198,7 @@
    options.GetNumericValue("mumps_pivtol", pivtol_, prefix);
    if( options.GetNumericValue("mumps_pivtolmax", pivtolmax_, prefix) )
    {
-      ASSERT_EXCEPTION(pivtolmax_ >= pivtol_, OPTION_INVALID, "Option 
\"mumps_pivtolmax\": This value must be between "
-                       "mumps_pivtol and 1.");
+      ASSERT_EXCEPTION(pivtolmax_ >= pivtol_, OPTION_INVALID, "Option 
\"mumps_pivtolmax\": This value must be between mumps_pivtol and 1.");
    }
    else
    {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.cpp
      2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.cpp
      2025-07-30 11:38:01.000000000 +0200
@@ -47,8 +47,7 @@
       const ipindex*   MSGLVL,
       ipnumber*        B,
       ipnumber*        X,
-      ipindex*         E,
-      ipnumber*        DPARM
+      ipindex*         E
    );
 
 #ifndef IPOPT_NO_MKLVERSIONCHECK
@@ -90,7 +89,6 @@
 
    PT_ = new void* [64];
    IPARM_ = new Index[64];
-   DPARM_ = new Number[64];
 }
 
 PardisoMKLSolverInterface::~PardisoMKLSolverInterface()
@@ -108,13 +106,12 @@
       Index idmy = 0;
       Number ddmy = 0.;
       IPOPT_LAPACK_FUNC(pardiso, PARDISO)(PT_, &MAXFCT_, &MNUM_, &MTYPE_, 
&PHASE, &N, &ddmy, &idmy, &idmy, &idmy, &NRHS, IPARM_, &MSGLVL_, &ddmy,
-                                          &ddmy, &ERROR, DPARM_);
+                                          &ddmy, &ERROR);
       DBG_ASSERT(ERROR == 0);
    }
 
    delete[] PT_;
    delete[] IPARM_;
-   delete[] DPARM_;
    delete[] a_;
 }
 
@@ -225,7 +222,7 @@
       Index idmy = 0;
       Number ddmy = 0.;
       IPOPT_LAPACK_FUNC(pardiso, PARDISO)(PT_, &MAXFCT_, &MNUM_, &MTYPE_, 
&PHASE, &N, &ddmy, &idmy, &idmy, &idmy, &NRHS, IPARM_, &MSGLVL_, &ddmy,
-                                          &ddmy, &ERROR, DPARM_);
+                                          &ddmy, &ERROR);
       DBG_ASSERT(ERROR == 0);
    }
 
@@ -265,6 +262,7 @@
 
    // MKL 2025.0.1 does not work correctly with IPARM_[20] = 3 and IPARM_[7] > 0
    // workaround: change to IPARM_[20] = 1 (the default)
+   // MKL 2025.1.0 has this fixed
    // https://github.com/coin-or/Ipopt/issues/799
    // 
https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Pardiso-bunch-kaufman-pivoting-option-3-different-in-MKL-2025-0/m-p/1648273
 #ifndef IPOPT_NO_MKLVERSIONCHECK
@@ -272,7 +270,7 @@
    {
       MKLVersion mklver;
       MKL_Get_Version(&mklver);
-      if( mklver.MajorVersion >= 2025 )
+      if( mklver.MajorVersion == 2025 && mklver.UpdateVersion == 0 )
       {
          IPARM_[20] = 1;
          Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA,
@@ -393,7 +391,9 @@
 )
 {
 #ifdef IPOPT_HAS_GETENV_S
-   if( getenv_s(NULL, NULL, 0, "IPOPT_WRITE_MAT") == 0 )
+   size_t required_size;
+   getenv_s(&required_size, NULL, 0, "IPOPT_WRITE_MAT");
+   if( required_size > 0 )
 #else
    if( getenv("IPOPT_WRITE_MAT") )
 #endif
@@ -406,7 +406,7 @@
 
 #ifdef IPOPT_HAS_GETENV_S
       char mat_pref[32];
-      if( getenv_s(NULL, mat_pref, sizeof(mat_pref), "IPOPT_WRITE_PREFIX") != 
0 )
+      if( getenv_s(&required_size, mat_pref, sizeof(mat_pref), 
"IPOPT_WRITE_PREFIX") != 0 )
       {
          memcpy(mat_pref, "mat-ipopt", 10);
       }
@@ -450,7 +450,8 @@
 
    /* additional matrix format */
 #ifdef IPOPT_HAS_GETENV_S
-   if( getenv_s(NULL, NULL, 0, "IPOPT_WRITE_MAT_MTX") == 0 )
+   getenv_s(&required_size, NULL, 0, "IPOPT_WRITE_MAT_MTX");
+   if( required_size > 0 )
 #else
    if( getenv("IPOPT_WRITE_MAT_MTX") )
 #endif
@@ -463,7 +464,7 @@
 
 #ifdef IPOPT_HAS_GETENV_S
       char mat_pref[32];
-      if( getenv_s(NULL, mat_pref, sizeof(mat_pref), "IPOPT_WRITE_PREFIX") != 
0 )
+      if( getenv_s(&required_size, mat_pref, sizeof(mat_pref), 
"IPOPT_WRITE_PREFIX") != 0 )
       {
          memcpy(mat_pref, "mat-ipopt", 10);
       }
@@ -526,7 +527,7 @@
                         "Calling Pardiso for symbolic factorization 
(PHASE=%d).\n", PHASE);
          IPOPT_LAPACK_FUNC(pardiso, PARDISO)(PT_, &MAXFCT_, &MNUM_, &MTYPE_,
                                              &PHASE, &N, a_, ia, ja, &PERM,
-                                             &NRHS, IPARM_, &MSGLVL_, &B, &X, 
&ERROR, DPARM_);
+                                             &NRHS, IPARM_, &MSGLVL_, &B, &X, 
&ERROR);
          if( HaveIpData() )
          {
             IpData().TimingStats().LinearSystemSymbolicFactorization().End();
@@ -580,7 +581,7 @@
 
       IPOPT_LAPACK_FUNC(pardiso, PARDISO)(PT_, &MAXFCT_, &MNUM_, &MTYPE_,
                                           &PHASE, &N, a_, ia, ja, &PERM,
-                                          &NRHS, IPARM_, &MSGLVL_, &B, &X, 
&ERROR, DPARM_);
+                                          &NRHS, IPARM_, &MSGLVL_, &B, &X, 
&ERROR);
       if( HaveIpData() )
       {
          IpData().TimingStats().LinearSystemFactorization().End();
@@ -720,21 +721,7 @@
       rhs_vals[i] = ORIG_RHS[i];
    }
    IPOPT_LAPACK_FUNC(pardiso, PARDISO)(PT_, &MAXFCT_, &MNUM_, &MTYPE_, &PHASE, 
&N, a_, ia, ja, &PERM, &NRHS, IPARM_, &MSGLVL_, rhs_vals, X,
-                                       &ERROR, DPARM_);
-
-   if( ERROR <= -100 && ERROR >= -102 )
-   {
-      Jnlst().Printf(J_WARNING, J_LINEAR_ALGEBRA,
-                     "Iterative solver in Pardiso did not converge (ERROR = %" 
IPOPT_INDEX_FORMAT ")\n", ERROR);
-      Jnlst().Printf(J_WARNING, J_LINEAR_ALGEBRA,
-                     "  Decreasing drop tolerances from DPARM_[4] = %e and 
DPARM_[5] = %e\n", DPARM_[4], DPARM_[5]);
-      PHASE = 23;
-      DPARM_[4] /= 2.0;
-      DPARM_[5] /= 2.0;
-      Jnlst().Printf(J_WARNING, J_LINEAR_ALGEBRA,
-                     "                               to DPARM_[4] = %e and 
DPARM_[5] = %e\n", DPARM_[4], DPARM_[5]);
-      ERROR = 0;
-   }
+                                       &ERROR);
 
    delete[] X;
    delete[] ORIG_RHS;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.hpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.hpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.hpp
      2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpPardisoMKLSolverInterface.hpp
      2025-07-30 11:38:01.000000000 +0200
@@ -165,8 +165,6 @@
    Index MTYPE_;
    /** Parameter and info array for Pardiso. */
    Index* IPARM_;
-   /** Parameter and info array for Pardiso. */
-   Number* DPARM_;
    /** Message level. */
    Index MSGLVL_;
    ///@}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpPardisoSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpPardisoSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpPardisoSolverInterface.cpp
 2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpPardisoSolverInterface.cpp
 2025-07-30 11:38:01.000000000 +0200
@@ -405,7 +405,9 @@
       // Obtain the numbers of processors from the value of OMP_NUM_THREADS
 #ifdef IPOPT_HAS_GETENV_S
       char var[10];
-      if( getenv_s(NULL, var, sizeof(var), "OMP_NUM_THREADS") == 0 )
+      size_t required_size;
+      getenv_s(&required_size, var, sizeof(var), "OMP_NUM_THREADS");
+      if( required_size > 0 )
 #else
       char* var = getenv("OMP_NUM_THREADS");
       if( var != NULL )
@@ -603,7 +605,9 @@
 )
 {
 #ifdef IPOPT_HAS_GETENV_S
-   if( getenv_s(NULL, NULL, 0, "IPOPT_WRITE_MAT") == 0 )
+   size_t required_size;
+   getenv_s(&required_size, NULL, 0, "IPOPT_WRITE_MAT");
+   if( required_size > 0 )
 #else
    if( getenv("IPOPT_WRITE_MAT") )
 #endif
@@ -616,7 +620,7 @@
 
 #ifdef IPOPT_HAS_GETENV_S
       char mat_pref[32];
-      if( getenv_s(NULL, mat_pref, sizeof(mat_pref), "IPOPT_WRITE_PREFIX") != 
0 )
+      if( getenv_s(&required_size, mat_pref, sizeof(mat_pref), 
"IPOPT_WRITE_PREFIX") != 0 )
       {
          memcpy(mat_pref, "mat-ipopt", 10);
       }
@@ -660,7 +664,8 @@
 
    /* additional matrix format */
 #ifdef IPOPT_HAS_GETENV_S
-   if( getenv_s(NULL, NULL, 0, "IPOPT_WRITE_MAT_MTX") == 0 )
+   getenv_s(&required_size, NULL, 0, "IPOPT_WRITE_MAT_MTX");
+   if( required_size > 0 )
 #else
    if( getenv("IPOPT_WRITE_MAT_MTX") )
 #endif
@@ -673,7 +678,7 @@
 
 #ifdef IPOPT_HAS_GETENV_S
       char mat_pref[32];
-      if( getenv_s(NULL, mat_pref, sizeof(mat_pref), "IPOPT_WRITE_PREFIX") != 
0 )
+      if( getenv_s(&required_size, mat_pref, sizeof(mat_pref), 
"IPOPT_WRITE_PREFIX") != 0 )
       {
          memcpy(mat_pref, "mat-ipopt", 10);
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpSpralSolverInterface.cpp
 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpSpralSolverInterface.cpp
--- 
old/Ipopt-releases-3.14.17/src/Algorithm/LinearSolvers/IpSpralSolverInterface.cpp
   2024-12-14 14:40:06.000000000 +0100
+++ 
new/Ipopt-releases-3.14.19/src/Algorithm/LinearSolvers/IpSpralSolverInterface.cpp
   2025-07-30 11:38:01.000000000 +0200
@@ -375,16 +375,14 @@
             switch_[i] = SWITCH_AT_START;
             scaling_type_ = scaling_val_[i];
             current_level_ = i;
-            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: Enabled "
-                           "scaling level %d on initialization\n", 
current_level_);
+            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: Enabled 
scaling level %d on initialization\n", current_level_);
          }
          else if( switch_val[i] == "at_start_reuse" )
          {
             switch_[i] = SWITCH_AT_START_REUSE;
             scaling_type_ = scaling_val_[i];
             current_level_ = i;
-            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: Enabled "
-                           "scaling level %d on initialization\n", 
current_level_);
+            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: Enabled 
scaling level %d on initialization\n", current_level_);
          }
          else if( switch_val[i] == "on_demand" )
          {
@@ -464,17 +462,13 @@
    // Correct scaling and ordering if necessary.
    if( control_.ordering == 2 && control_.scaling != 3 )
    {
-      Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In SpralSolverInterface, "
-                     "matching-based ordering was used, but matching-based 
scaling was "
-                     "not. Setting scaling using the matching-based 
ordering.\n");
+      Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In SpralSolverInterface, 
matching-based ordering was used, but matching-based scaling was not. Setting 
scaling using the matching-based ordering.\n");
       control_.scaling = scaling_type_ = 3;
    }
 
    if( control_.ordering != 2 && control_.scaling == 3 )
    {
-      Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In SpralSolverInterface, "
-                     "matching-based scaling was used, but matching-based 
ordering was "
-                     "not. Setting ordering using the matching-based 
algorithm.\n");
+      Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In SpralSolverInterface, 
matching-based scaling was used, but matching-based ordering was not. Setting 
ordering using the matching-based algorithm.\n");
       control_.ordering = 2;
    }
 
@@ -498,8 +492,7 @@
 
       if( info.flag < 0 )
       {
-         Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::InitializeStructure: "
-                        "Unhandled error. info.flag = %d.\n", info.flag);
+         Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::InitializeStructure: Unhandled error. info.flag = %d.\n", 
info.flag);
          return SYMSOLVER_FATAL_ERROR;
       }
    }
@@ -556,15 +549,13 @@
 
          if ( info.flag == 6 || info.flag == -5 )
          {
-            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: "
-                           "Singular system, estimated rank %d of %d\n", 
info.matrix_rank, ndim_);
+            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: Singular system, estimated rank %d of 
%d\n", info.matrix_rank, ndim_);
             return SYMSOLVER_SINGULAR;
          }
 
          if ( info.flag < 0 )
          {
-            Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: "
-                           "Unhandled error. info.flag = %d.\n", info.flag);
+            Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: Unhandled error. info.flag = %d.\n", 
info.flag);
             return SYMSOLVER_FATAL_ERROR;
          }
       }
@@ -578,29 +569,24 @@
 
       spral_ssids_factor_ptr32(false, ia, ja, val_, scaling_, akeep_, &fkeep_, 
&control_, &info);
 
-      Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: delays %d, nfactor 
%" PRId64 ", "
-                     "nflops %" PRId64 ", maxfront %d\n", info.num_delay, 
info.num_factor, info.num_flops,
-                     info.maxfront);
+      Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: delays %d, nfactor 
%" PRId64 ", nflops %" PRId64 ", maxfront %d\n", info.num_delay, 
info.num_factor, info.num_flops, info.maxfront);
 
       if( HaveIpData() )
       {
          IpData().TimingStats().LinearSystemFactorization().End();
          Number t2 = 
IpData().TimingStats().LinearSystemFactorization().TotalWallclockTime();
-         Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, 
"SpralSolverInterface::Factorization: "
-                        "spral_factor_solve took %10.3f\n", t2 - t1);
+         Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, 
"SpralSolverInterface::Factorization: spral_factor_solve took %10.3f\n", t2 - 
t1);
       }
 
       if( info.flag == 7 || info.flag == 6 || info.flag == -5 )
       {
-         Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: "
-                        "Singular system, estimated rank %d of %d\n", 
info.matrix_rank, ndim_);
+         Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: Singular system, estimated rank %d of 
%d\n", info.matrix_rank, ndim_);
          return SYMSOLVER_SINGULAR;
       }
 
       if( info.flag < 0 )
       {
-         Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: "
-                        "Unhandled error. info.flag = %d.\n", info.flag);
+         Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: Unhandled error. info.flag = %d.\n", 
info.flag);
          if( info.flag == -53 )
          {
             Jnlst().Printf(J_STRONGWARNING, J_LINEAR_ALGEBRA, "Maybe one 
forgot to set environment variable OMP_CANCELLATION to TRUE.\n");
@@ -657,8 +643,7 @@
                   // Number of delays has signficantly increased, so trigger.
                   current_level_ = i;
                   scaling_type_ = scaling_val_[i];
-                  Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: "
-                                 "Enabling scaling %d due to excess delays\n", 
i);
+                  Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: 
Enabling scaling %d due to excess delays\n", i);
                   rescale_ = true;
                }
 
@@ -668,8 +653,7 @@
 
       if( check_NegEVals && info.num_neg != numberOfNegEVals )
       {
-         Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: "
-                        "info.num_neg = %d, but numberOfNegEVals = %" 
IPOPT_INDEX_FORMAT "\n", info.num_neg, numberOfNegEVals);
+         Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "In 
SpralSolverInterface::Factorization: info.num_neg = %d, but numberOfNegEVals = 
%" IPOPT_INDEX_FORMAT "\n", info.num_neg, numberOfNegEVals);
          return SYMSOLVER_WRONG_INERTIA;
       }
 
@@ -720,8 +704,7 @@
             rescale_ = true;
             current_level_ = i;
             scaling_type_ = scaling_val_[i];
-            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: Enabling 
scaling "
-                           "%d due to failure of iterative refinement\n", 
current_level_);
+            Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "SPRAL: Enabling 
scaling %d due to failure of iterative refinement\n", current_level_);
             break;
          default:
             ;
@@ -734,8 +717,7 @@
    }
 
    pivtol_changed_ = true;
-   Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "Increasing pivot tolerance "
-                  "for SPRAL from %7.2e ", control_.u);
+   Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "Increasing pivot tolerance 
for SPRAL from %7.2e ", control_.u);
    control_.u = Min(umax_, std::pow(control_.u, 0.75));
    Jnlst().Printf(J_DETAILED, J_LINEAR_ALGEBRA, "to %7.2e.\n", control_.u);
    return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/src/Common/IpJournalist.cpp 
new/Ipopt-releases-3.14.19/src/Common/IpJournalist.cpp
--- old/Ipopt-releases-3.14.17/src/Common/IpJournalist.cpp      2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Common/IpJournalist.cpp      2025-07-30 
11:38:01.000000000 +0200
@@ -524,8 +524,8 @@
 
       if( n >= (int)sizeof(buffer_) )
       {
-         char* bigmsg = new char[n+1];
-         vsnprintf(bigmsg, (size_t) n+1, pformat, ap);
+         char* bigmsg = new char[n + 1];
+         vsnprintf(bigmsg, (size_t) n + 1, pformat, ap);
          bigmsg[n] = '\0';
          *os_ << bigmsg;
       }
@@ -533,7 +533,7 @@
       {
          if( n < 0 )
          {
-            buffer_[sizeof(buffer_)-1] = '\0';
+            buffer_[sizeof(buffer_) -1] = '\0';
          }
          *os_ << buffer_;
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/src/Common/IpRegOptions.cpp 
new/Ipopt-releases-3.14.19/src/Common/IpRegOptions.cpp
--- old/Ipopt-releases-3.14.17/src/Common/IpRegOptions.cpp      2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Common/IpRegOptions.cpp      2025-07-30 
11:38:01.000000000 +0200
@@ -289,8 +289,7 @@
       jnlst.Printf(J_SUMMARY, J_DOCUMENTATION,
                    "\\end{itemize}\n");
    }
-   jnlst.Printf(J_SUMMARY, J_DOCUMENTATION, ""
-                "\n");
+   jnlst.Printf(J_SUMMARY, J_DOCUMENTATION, "\n");
 }
 
 void RegisteredOption::MakeValidLatexString(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/src/Common/IpUtils.cpp 
new/Ipopt-releases-3.14.19/src/Common/IpUtils.cpp
--- old/Ipopt-releases-3.14.17/src/Common/IpUtils.cpp   2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Common/IpUtils.cpp   2025-07-30 
11:38:01.000000000 +0200
@@ -51,6 +51,9 @@
    '#define small char' */
 #undef small
 #endif
+#ifdef max
+#undef max
+#endif
 #define TWO_TO_THE_THIRTYTWO 4294967296.0
 #define DELTA_EPOCH_IN_SECS  11644473600.0
 inline double IpCoinGetTimeOfDay()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Common/config_ipopt_default.h 
new/Ipopt-releases-3.14.19/src/Common/config_ipopt_default.h
--- old/Ipopt-releases-3.14.17/src/Common/config_ipopt_default.h        
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Common/config_ipopt_default.h        
2025-07-30 11:38:01.000000000 +0200
@@ -5,7 +5,7 @@
 /***************************************************************************/
 
 /* Version number of project */
-#define IPOPT_VERSION "3.14.17"
+#define IPOPT_VERSION "3.14.19"
 
 /* Major Version number of project */
 #define IPOPT_VERSION_MAJOR 3
@@ -14,7 +14,7 @@
 #define IPOPT_VERSION_MINOR 14
 
 /* Release Version number of project */
-#define IPOPT_VERSION_RELEASE 17
+#define IPOPT_VERSION_RELEASE 19
 
 /* Define to the C type corresponding to Fortran INTEGER
  * @deprecated Use ipindex instead.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Interfaces/IpIpoptApplication.cpp 
new/Ipopt-releases-3.14.19/src/Interfaces/IpIpoptApplication.cpp
--- old/Ipopt-releases-3.14.17/src/Interfaces/IpIpoptApplication.cpp    
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/IpIpoptApplication.cpp    
2025-07-30 11:38:01.000000000 +0200
@@ -1047,4 +1047,15 @@
    IpoptAlgorithm::print_copyright_message(*jnlst_);
 }
 
+void IpoptApplication::Version(
+   int& major,
+   int& minor,
+   int& release
+)
+{
+   major = IPOPT_VERSION_MAJOR;
+   minor = IPOPT_VERSION_MINOR;
+   release = IPOPT_VERSION_RELEASE;
+}
+
 } // namespace Ipopt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Interfaces/IpIpoptApplication.hpp 
new/Ipopt-releases-3.14.19/src/Interfaces/IpIpoptApplication.hpp
--- old/Ipopt-releases-3.14.17/src/Interfaces/IpIpoptApplication.hpp    
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/IpIpoptApplication.hpp    
2025-07-30 11:38:01.000000000 +0200
@@ -265,11 +265,23 @@
    );
 
    /** Method to register all Ipopt options. */
-   static void
-   RegisterAllIpoptOptions(
+   static void RegisterAllIpoptOptions(
       const SmartPtr<RegisteredOptions>& roptions
    );
 
+   /** Return version of Ipopt library.
+    *
+    * Gives the value of IPOPT_VERSION_MAJOR, IPOPT_VERSION_MINOR, and 
IPOPT_VERSION_RELEASE
+    * that were used when the Ipopt library was build.
+    *
+    * @since 3.14.18
+    */
+   static void Version(
+      int& major,   /**< set to major version number of Ipopt */
+      int& minor,   /**< set to minor version number of Ipopt */
+      int& release  /**< set to release version number of Ipopt */
+   );
+
 private:
    /**@name Default Compiler Generated Methods
     * (Hidden to avoid implicit creation/calling).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Interfaces/IpStdCInterface.cpp 
new/Ipopt-releases-3.14.19/src/Interfaces/IpStdCInterface.cpp
--- old/Ipopt-releases-3.14.17/src/Interfaces/IpStdCInterface.cpp       
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/IpStdCInterface.cpp       
2025-07-30 11:38:01.000000000 +0200
@@ -11,6 +11,8 @@
 #include "IpBlas.hpp"
 #include "IpSmartPtr.hpp"
 
+#include <cassert>
+
 struct IpoptProblemInfo
 {
    Ipopt::SmartPtr<Ipopt::IpoptApplication> app;
@@ -331,3 +333,16 @@
 
    return ipopt_problem->tnlp->get_curr_violations(scaled != 0, n, 
x_L_violation, x_U_violation, compl_x_L, compl_x_U, grad_lag_x, m, 
nlp_constraint_violation, compl_g);
 }
+
+void GetIpoptVersion(
+   int* major,   /**< buffer to store major version number of Ipopt */
+   int* minor,   /**< buffer to store minor version number of Ipopt */
+   int* release  /**< buffer to store release version number of Ipopt */
+)
+{
+   assert(major != NULL);
+   assert(minor != NULL);
+   assert(release != NULL);
+
+   Ipopt::IpoptApplication::Version(*major, *minor, *release);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Interfaces/IpStdCInterface.h 
new/Ipopt-releases-3.14.19/src/Interfaces/IpStdCInterface.h
--- old/Ipopt-releases-3.14.17/src/Interfaces/IpStdCInterface.h 2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/IpStdCInterface.h 2025-07-30 
11:38:01.000000000 +0200
@@ -421,6 +421,19 @@
    ipnumber*     compl_g
 );
 
+/** Return version of Ipopt library.
+ *
+ * Gives the value of IPOPT_VERSION_MAJOR, IPOPT_VERSION_MINOR, and 
IPOPT_VERSION_RELEASE
+ * that were used when the Ipopt library was build.
+ *
+ * @since 3.14.18
+ */
+IPOPTLIB_EXPORT void IPOPT_CALLCONV GetIpoptVersion(
+   int* major,   /**< buffer to store major version number of Ipopt */
+   int* minor,   /**< buffer to store minor version number of Ipopt */
+   int* release  /**< buffer to store release version number of Ipopt */
+);
+
 #ifdef __cplusplus
 } /* extern "C" { */
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Ipopt-releases-3.14.17/src/Interfaces/IpStdJInterface.cpp 
new/Ipopt-releases-3.14.19/src/Interfaces/IpStdJInterface.cpp
--- old/Ipopt-releases-3.14.17/src/Interfaces/IpStdJInterface.cpp       
2024-12-14 14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/IpStdJInterface.cpp       
2025-07-30 11:38:01.000000000 +0200
@@ -665,7 +665,7 @@
       env->SetNumberArrayRegion(mult_gj, 0, m, const_cast<Number*>(lambda));
    }
 
-   env->GetNumberArrayRegion(fj, 0, 1, &obj_value);
+   env->SetNumberArrayRegion(fj, 0, 1, &obj_value);
 }
 
 /* Intermediate Callback method for the user. */
@@ -1143,4 +1143,20 @@
       return ret;
    }
 
+   JNIEXPORT void JNICALL Java_org_coinor_Ipopt_GetVersion(
+      JNIEnv*   env,
+      jobject /*obj_this*/,
+      jintArray jversion
+   )
+   {
+      int version[3];
+      IpoptApplication::Version(version[0], version[1], version[2]);
+
+      /* int[] -> jint[] */
+      jint versionj[3] = { version[0], version[1], version[2] };
+
+      /* jint[] -> jintArray */
+      env->SetIntArrayRegion(jversion, 0, 3, versionj);
+   }
+
 } // extern "C"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/src/Interfaces/IpTNLP.cpp 
new/Ipopt-releases-3.14.19/src/Interfaces/IpTNLP.cpp
--- old/Ipopt-releases-3.14.17/src/Interfaces/IpTNLP.cpp        2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/IpTNLP.cpp        2025-07-30 
11:38:01.000000000 +0200
@@ -931,7 +931,7 @@
          // orig_d_L is unscaled, but we need the scaled one below (because d 
is scaled)
          if( orignlp->NLP_scaling()->have_d_scaling() )
          {
-            d_L = orignlp->NLP_scaling()->apply_vector_scaling_d_NonConst(d_L);
+            d_L = 
orignlp->NLP_scaling()->apply_vector_scaling_d_LU_NonConst(*orignlp->Pd_L(), 
d_L, *orignlp->d_space());
          }
       }
       else // if no relaxation, then orig_d_L() returns NULL, use d_L instead
@@ -966,7 +966,7 @@
          // orig_d_U is unscaled, but we need the scaled one below (because d 
is scaled)
          if( orignlp->NLP_scaling()->have_d_scaling() )
          {
-            d_U = orignlp->NLP_scaling()->apply_vector_scaling_d_NonConst(d_U);
+            d_U = 
orignlp->NLP_scaling()->apply_vector_scaling_d_LU_NonConst(*orignlp->Pd_U(), 
d_U, *orignlp->d_space());
          }
       }
       else // if no relaxation, then orig_d_U() returns NULL, use d_U instead
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Ipopt-releases-3.14.17/src/Interfaces/Ipopt.java 
new/Ipopt-releases-3.14.19/src/Interfaces/Ipopt.java
--- old/Ipopt-releases-3.14.17/src/Interfaces/Ipopt.java        2024-12-14 
14:40:06.000000000 +0100
+++ new/Ipopt-releases-3.14.19/src/Interfaces/Ipopt.java        2025-07-30 
11:38:01.000000000 +0200
@@ -124,6 +124,11 @@
       double   compl_g[]
    );
 
+   /* Native function should not be used directly */
+   private native void GetVersion(
+      int version[]
+   );
+
    /** Use C index style for iRow and jCol vectors */
    public final static int C_STYLE = 0;
 
@@ -205,13 +210,6 @@
          {
             try
             {
-               /* This loads the Ipopt library with RTLD_LOCAL, which means 
that symbols loaded are not made available for future dlopen() calls.
-                * This causes a problem when using MKL, which loads an 
additional library at runtime, e.g., libmkl_avx2, because this lib references
-                * to symbols that could be resolved in previously load MKL 
libraries - but are not because of RTLD_LOCAL.
-                * TODO should one add some kind of workaround to load the 
Ipopt lib with RTLD_GLOBAL?, e.g.,
-                *     
https://stackoverflow.com/questions/5425034/java-load-shared-libraries-with-dependencies
-                *     https://github.com/victor-paltz/global-load-library
-                */
                System.loadLibrary(c);
                loadedlib = true;
                break;
@@ -226,6 +224,13 @@
       }
       else
       {
+         /* This loads the Ipopt library with RTLD_LOCAL, which means that 
symbols loaded are not made available for future dlopen() calls.
+          * This causes a problem when using MKL, which loads an additional 
library at runtime, e.g., libmkl_avx2, because this lib references
+          * to symbols that could be resolved in previously load MKL libraries 
- but are not because of RTLD_LOCAL.
+          * TODO should one add some kind of workaround to load the Ipopt lib 
with RTLD_GLOBAL?, e.g.,
+          *     
https://stackoverflow.com/questions/5425034/java-load-shared-libraries-with-dependencies
+          *     https://github.com/victor-paltz/global-load-library
+          */
          System.loadLibrary("ipopt");
       }
    }
@@ -851,4 +856,19 @@
    {
       return false;
    }
+
+   /** Get version of Ipopt library.
+    *
+    * Gives the value of IPOPT_VERSION_MAJOR, IPOPT_VERSION_MINOR, and 
IPOPT_VERSION_RELEASE
+    * that were used when the Ipopt library was build.
+    *
+    * @param version int[3] to store major, minor, and release version number
+    * @since 3.14.18
+    */
+   public void getVersion(
+      int[] version
+   )
+   {
+      GetVersion(version);
+   }
 }

Reply via email to