# ChangeLog Here we list changes of Ipopt since the release of version 2.2.0. More detailed information about incremental changes can be found in the [commit history](https://github.com/coin-or/Ipopt/commits). [TOC] ## 3.14 ### 3.14.21 ### 3.14.20 (2026-08-27) - Fixed issue where Ipopt exceptions could not been caught from other libraries on macOS with clang when Ipopt or the other library was build with `-fvisibility=hidden`. - Call MPI_Init() with NULL instead of dummy arguments to fix SIGSEGV with MPICH >= 4.3.1 [#846, by Shengqi Chen]. - Fixed a use-after-free in Spral interface where attempting to solve a second system with the same structurally singular matrix would end up trying to use an old numeric factorization using data from an already freed symbolic factorization [#848, by Kevin Kofler]. - Fixed that the limit on filter resets was not effective [#860, #862, by Lander Vanroye and Julien Schueller]. To restore previous behavior, set option max_filter_resets to a high value. - Removed unnecessary include of iostream header [#856 by Jeremy Nimmer, #863]. - Removed global variable `Wallclock_firstCall_` (for #857); WallclockTime() now returns time since the Epoch instead of the first call - Global variable `copyright_message_printed` is now thread-local (for #857). The copyright message will be printed once per thread now. ### 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()` to `IpUtils.hpp` to wrap handling of interrupt signals. Added parameter `checkinterrupt` (default false) to `AmplTNLP` constructor to enable check for interrupt signal in `intermediate_callback`. - The `ipopt` and `ipopt_sens` executables and scalable problems C++ examples can now be interrupted by SIGINT/SIGHUP (systems with sigaction()) or SIGINT/SIGTERM/SIGABRT (Windows systems). - New option `mumps_mpi_communicator` to specify the MPI communicator when using an MPI-enabled build of MUMPS [#790, by Alex Tyler Chapman]. - Updated build system to current autotools versions; initial support for icx/ifx and flang - Removed use of `vsprintf` and `sprintf`. Added `IpoptData::Append_info_string(std::string,double)`. - Removed use of `strcpy`, `strncpy`, `strdup`, and `sscanf`. - Using `fopen_s` and `getenv_s` instead of `fopen` and `getenv`, respectively, if available. - Added workaround for using Pardiso from Intel MKL 2025.0.1 [#799]. This requires checking the MKL version at runtime and can be disabled by defining `IPOPT_NO_MKLVERSIONCHECK`. ### 3.14.16 (2024-04-22) - Fixed load of linear solver libraries at runtime on Windows, which got broken for relative paths (the default) in 3.14.15 [#759, #760]. ### 3.14.15 (2024-04-10) - Fixed include guard of IpGenAugSystemSolver.hpp [#756, by Christopher Wellons]. - Improved finding dependencies of linear solver libraries loaded at runtime on Windows [#755, by Yue Yang]. ### 3.14.14 (2024-01-18) - Fixed build of MA57 interface when `FUNNY_MA57_FINT` is defined (MA57 with long integers). - Fixed that initial dual values for fixed variables (z_L, z_U) were ignored when doing a warm start with fixed_variable_treatment = make_constraint [#728]. - Fixed that the last argument when calling MA27CD/MA27C in MA27 interface was wrong [#738]. ### 3.14.13 (2023-11-08) - Reduced priority for making Spral the default value for option linear_solver [#677]. - Adapted to change of integer types in Spral interface. Minimal required Spral version is now v2023.03.29. - Fixed that return code from `TNLP::eval_jac_g()` was ignored at first call [#697, by Christoph Hansknecht]. - Print additional messages when reallocation of MA27 working space failed [#671, by Daniel Oliveira]. - Added option `file_append` to specify whether to append to `output_file` instead of truncating it. Added default argument `file_append` to `Journalist::AddFileJournal()`, added default argument `fappend` to `FileJournal::Open()`, and added default argument `file_append` to `IpoptApplication::OpenOutputFile()`. [#720] ### 3.14.12 (2023-04-05) - Fix that a source file was installed and install more header files. [#641, #642, by Joao Sousa Pinto] - Fixed crash of GetIpoptCurrentIterate() and GetIpoptCurrentViolations() in C interface when called before or after IpoptSolve(). [#644, #645, by Robbybp] - Updated HSL_MA97 header file to the one from HSL MA97 2.8.0 [#646, by Jari Fowkes]. - Fixed crash when trying to solve problem without variables and constraints. [#648] - Added optional argument to `AlgorithmBuilder` constructor to provide name of custom solver. [#618] - Changed handling of dual solution for square problems: When solving a problem with as many equations as variables, Ipopt used to ignore the violation of dual feasibility and complementarity in the convergence check and computed a final dual solution via a least-square estimate. If this failed, Ipopt would claim a square problem to be solved to optimality without providing a solution that satisfies optimality conditions. With this version, the behavior has been changed so that dual feasibility is no longer ignored by the convergence check, the least-square estimate is only computed if optimality is not proven already, and the normal Ipopt algorithm continues if the least-square estimate does not satisfy optimality conditions. - Updated HSL_MC86 header file to the one from HSL MC68 3.3.3 [#653, by Jari Fowkes]. ### 3.14.11 (2023-02-07) - Added `IpoptData::TimingStats() const` [#611] - Assume DLL library extension in linear solver library loader on Windows also when building with other compiler than MSVC/Intel [#628]. - Updated buildsystem files after upgrading to most recent versions of autotools. - Install some additional header files [#637]. ### 3.14.10 (2022-10-11) - Added option `grad_f_constant` to specify that objective function is linear. If set, the gradient of the objective will be requested by Ipopt only once. [#597] - Added `OrigIpoptNLP::orig_d_L()` and `OrigIpoptNLP::orig_d_U()` to get original constraint sides (before relaxation due to bound_relax_factor > 0). - `TNLP::get_curr_violations()` now returns the constraint violation and complementarity w.r.t. the original (non-relaxed) constraint sides. [#603] ### 3.14.9 (2022-07-21) - Fixed mapping of meta data for variable bounds, e.g., variable names, from TNLP to Ipopts internal NLP [#590]. ### 3.14.8 (2022-07-13) - Added options ma27_print_level, ma57_print_level, and mumps_print_level to enable output from these linear solvers. ### 3.14.7 (2022-06-24) - Fixed that ComputeSensitivityMatrix() of sIpopt assumed that there are no more than two parameters [#578, by Andrea Vescovini]. - For completeness, added option `gradient_approximation` to enable approximation of gradient of objective function by finite differences. Do not use. [#573] - Added function `IPSETPROBLEMSCALING` to Fortran interface to set problem scaling [#577, by Steven R. Hall] ### 3.14.6 (2022-05-02) - Fixed mapping of meta data for inequalities, e.g., constraint names, from TNLP to Ipopts internal NLP [#570, by Daniel Oliveira]. - Fixed that MC68 ordering time was not accounted in symbolic factorization time of HSL MA86 [#571]. - Include more header files in IpIpoptCalculatedQuantities.hpp for setups where forward declarations are not sufficients [#572]. ### 3.14.5 (2022-02-09) - Tried to fix recognition of JNI headers on macOS >= 11 [#516]. - Fixed that only primal variable values where passed to `finalize_solution()` when a timelimit was reached [#552]. ### 3.14.4 (2021-09-20) - Skip build of Java interface if either java or jar is not found [#510]. Only give warning if javac and jar are found, but no java or javadoc. - Fixed that `--with-lapack-lflags` was ignored if `--with-lapack` was not specified explicitly [#512,#515]. ### 3.14.3 (2021-09-03) - Fixed timing for iterate initialization if initialization fails due to an evaluation error. - Fixed possible integer overflow when reserving space for indices of Jacobian belonging to fixed variables (introduced with 3.14.0) and reduced memory usage for indices of Jacobian belonging to fixed variables. ### 3.14.2 (2021-07-21) - Added `OptionsList::UnsetValue()` to remove an option setting. - Added missing translation of some Ipopt status codes into AMPL solve result codes. - If using the MPI-parallel version of MUMPS: Moved calls to `MPI_Init()`/`MPI_Finalize()` in MUMPS interface into global constructor/destructor of Ipopt library (if building with GCC/clang). Use configure flag `--disable-mpiinit` to disable. [#500] ### 3.14.1 (2021-06-25) - Fixed invalidation of cached Hessians when reoptimizing with same structure. - Added `OptionsList::SetBoolValue()` and `OptionsList::SetBoolValueIfUnset()`. [#492] - Skip check for and link against libdl if linear solver loader is disabled. - Fixed missing initialization of `BacktrackingLineSearch::in_watchdog_`. - Fixed a problem with the current solution not being reset when initialization of a NLP fails in reoptimization. - Fixed that C++11 capability was not correctly identified with MS/Intel compilers. ### 3.14.0 (2021-06-15) #### Data Types - Due to a contribution by Mitchell Clement [#428], it is now possible to build Ipopt in a variant that uses single-precision floating point arithmetic instead of the default double-precision. This can be enabled by specifying the configure flag `--with-precision=single`. Doing so has a number of consequences on Ipopt interfaces and Ipopt dependencies. See the Ipopt installation instructions for more details. - The name of all functions in `IpBlas.hpp` and `IpLapack.hpp` has been changed to drop the precision-specifier "D" in the name. Wrapper using the old names are available, but their use is deprecated. - It is now possible to build Ipopt in a variant that uses 64-bit integers for its `Index` type. This can be enabled by specifying the configure flag `--with-intsize=64`. Doing so has a number of consequences on Ipopt interfaces and Ipopt dependencies. See the Ipopt installation instructions for more details. [#259] - Added new header `IpTypes.h` that defines Ipopt types for integer and real numbers for C users. - Deprecated almost never used type `Ipopt::Int`, use `int` instead. - Deprecated `Number`, `Index`, and `Int` (on global namespace) in `IpStdCInterface.h`, use `ipnumber`, `ipindex`, and `int` instead, respectively. - Deprecated `Bool` in `IpStdCInterface.h` and replaced it by `bool` from `stdbool.h`. Note, that `Bool` was defined to be `int`, but `bool` is likely a shorter type, e.g., `signed char`. Deprecated `TRUE` and `FALSE`, use `true` and `false` instead. - Deprecated `IPOPT_EXPORT` macro and introduced `IPOPT_CALLCONV`. - Deprecated `IPOPT_FORTRAN_INTEGER_TYPE` and `ipfint`. These were always assumed to be `int`. Use `ipindex` or `ipopt::Index` instead. #### Linear Solver Interfaces - Due to a contribution by Byron Tasseff [#446], it is now possible to use the linear solver [SPRAL](https://github.com/ralna/spral) (Sparse Parallel Robust Algorithms Library) with Ipopt. SPRAL is open-source and can, optionally, make use of NVIDIA GPUs. If Ipopt has been build with SPRAL, then option `linear_solver` can be set to `spral` to enable use of SPRAL. See the installation instructions on how to build the Ipopt/SPRAL interface and the options documentation for new options that are available for the Ipopt/SPRAL interface. - Added `IpoptLinearSolvers.h` with function `IpoptGetAvailableLinearSolvers()` to retrieve information which linear solvers are available for Ipopt (linked in or loaded at runtime). Options `linear_solver` and `linear_system_scaling` can now only be set to values which corresponding code is available (linked in or for load at runtime). - Revised and streamlined implementation of feature that loads libraries with HSL or Pardiso routines at runtime. Added options `hsllib` and `pardisolib` to specify name of of HSL and Pardiso libraries, respectively. - Separated interfaces for Pardiso from [pardiso-project.org](https://pardiso-project.org) and Pardiso from Intel MKL and allow to have both Pardiso versions available with the same Ipopt libraries. - Pardiso from pardiso-project.org can be selected via `linear_solver=pardiso`. configure option `--with-pardiso` should now specify only a Pardiso library to be loaded at runtime (the value for `--with-pardiso` decides the default value for option `pardisolib`). To avoid conflicts with Pardiso from MKL, it is **no longer possible to link against Pardiso from pardiso-project.org**. - Pardiso from MKL can be selected via `linear_solver=pardisomkl`. - Options that influence Pardiso from MKL are named `pardisomkl_msglvl`, `pardisomkl_order`, etc. - configure option `--disable-pardisomkl` can be used to disable the check for MKL Pardiso. [#454] - Fixed that return code (`info%flag`) of `ma97_solve()` was not checked in `Ma97SolverInterface::MultiSolve()`. - Calls into MUMPS are now protected by a mutex if compiling for C++11 or higher. This prevents Ipopt from calling MUMPS concurrently from several threads. - An insufficient memory return status is now also given if the memory required for a working space array of a linear solver exceeds the maximal value for the working space length variable, e.g., if MA27 requires a working space array of length higher than 2^31. - Avoid floating point overflow when computing memory increase in interfaces to MA27 and MA57. #### Algorithm - Changed treatment of NLPs with all variables fixed and `fixed_variable_treatment` set to `make_parameter`: Ipopt will still terminate early, but initialize its data structures first and print a solve summary (49a0d3a56). Changed treatment of NLPs with inconsistent variable bounds or constraint sides: These will now result in an invalid problem definition error (-11) (5cdb2624bb). As a consequence, solve statistics should now always be available if the return status from `(Re)Optimize()` is larger than -10. - Bound multipliers are now computed for fixed variables if `fixed_variable_treatment` is set to `make_parameter` (the default). This can trigger a reevaluating of the gradient of the objective function or the Jacobian of the constraint functions. If this is not desired, then option `fixed_variable_treatment` can be set to the new value `make_parameter_nodual`. [#308] - Changed default for `honor_original_bounds` to no. Variable bounds (see option `bound_relax_factor`) are now relaxed by at most the value of `constr_viol_tol`. The solve summary now reports the violation of original bounds and `SolveStatistics::(Scaled)Infeasibilities()` has been extended to report the violation of original variable bounds. [#312] - If Ipopt hits a time or iteration limit during watchdog phase, the iterate from before the watchdog phase is now restored and passed to `finalize_solution`. Note that this does not apply if Ipopt is stopped due to a user-interrupt (`intermediate_callback`). [#289] - When `BacktrackingLinesearch` could not find a trial point that provided sufficient progress, it may resort to call the feasibility restoration phase. If, however, the current (scaled) constraint violation was below tol/100, this would result in the infamous "Restoration phase is called at almost feasible point..." abort with status code `Restoration_Failure`. Now, this message has been changed to "Linesearch failed, but no restoration phase or other fall back is available." and the status code to `Error_In_Step_Computation` to better reflect that the linesearch failed and not the restoration phase. Further, the unscaled constraint violation tolerance now needs to be below `constr_viol_tol/10` as well in order to trigger this abort. - When a square problem is solved and the restoration phase only succeeded to find a point that is feasible w.r.t. constr_viol_tol, but not w.r.t. tol, then status Feasible_Point_Found is returned now. #### Ipopt interfaces - Added `TNLP::get_curr_iterate()` and `TNLP::get_curr_violations()` to request the current iterate (primal and dual variable values) and primal and dual infeasibility w.r.t. the TNLP. The methods are meant to be called during `intermediate_callback` to inspect the current iterate. The C, Fortran, and Java interfaces have been extended by corresponding functions, too. The hs071 examples have been extended to show use of the new functions. Added test `getcurr` to test new functions. [#382, #451] - Extended the Java interface by the possibility to specify an `intermediate_callback`. - Added flag to `TNLPAdapter::ResortX()` to specify how to handle fixed variables. Added flag to `TNLPAdapter::ResortG()` to specify whether to correct by right-hand-side of equality constraints. Added `TNLPAdapter::ResortBoundMultipliers()` to generate correct duals for fixed variables if `fixed_variable_treatment` is `make_constraint`. Added `TNLPAdapter::GetFullDimensions()`, `TNLPAdapter::GetFixedVariables()`, `TNLPAdapter::GetPermutationMatrices()`, and `TNLPAdapter::GetC_Rhs()` to retrieve more information of the transformation in a `TNLPAdapter`. - Added `TNLPAdapter::ResortBounds()` and deprecated `TNLPAdapter::ResortBnds()`. - `AmplTNLP` constructor and `AmplTNLP::get_options()` now expect to receive a pointer to a `RegisteredOptions` object as well. Previous versions of these methods are still available but deprecated. Using a NULL pointer for the `RegisteredOptions` argument is also deprecated. - `std::overflow_error` exceptions are now caught by Ipopt even if rethrowing of non-Ipopt exceptions is enabled. #### Timing - Added option `max_wall_time` to specify a wallclock time limit. Added `SolverReturn` code `WALLTIME_EXCEEDED` and `ApplicationReturnStatus` code `Maximum_WallTime_Exceeded`. - Changed default for `max_cpu_time` to 1e20 to indicate no CPU timelimit. - Detailed timing statistics are no longer collected by default. To reenable, set the new option `timing_statistics` to yes or set the option `print_timing_statistics` to yes [#299]. - Removed `IpoptData::ResetCpuStartTime()`. Deprecated `IpoptData::cpu_time_start()`, use `IpoptData::TimingStats()::OverallAlgorithm()::StartCpuTime()` instead. - Deprecated `SolveStatistics::TotalCPUTime()`, use `SolveStatistics::TotalCpuTime()` instead. #### Option handling - All Ipopt options are now also available via the AMPL interface, that is, can be set in AMPL via an option `ipopt_options "..."` statement. - Added flag "advanced" for `RegisteredOption` to store whether an option is rather meant for expert users. - Added class `RegisteredCategory` to store information on category of registered option. Next to the name, this is a priority, which determines the order in which categories are printed. As a consequence, methods `RegisteredOption::RegisteringCategory()` and `RegisteredOptions::RegisteringCategory()` now return a `RegisteredCategory` object instead of a string. Further, `RegisteredOption::SetRegisteringCategory()` has been removed. - Deprecated existing `RegisteredOptions::OutputXyz()` methods and added new variant of `RegisteredOptions::OutputOptionDocumentation()`. Added parameter `print_advanced_options` to indicate whether to print documentation for advanced options, too. - Added previously undocumented advanced options to options reference. #### Miscellaneous - Updated buildsystem, including improved checks for dependencies, use of current autotools, and skipping the build of intermediate non-distributed libraries. - Fixed missing initialization of `IpoptApplication::smart_jnlst` in second `IpoptApplication` constructor, if `ipopt verbosity > 0`. - Add GCC format attribute to `Journalist::Printf` functions to enable `printf`-formatter check. - Fixed `DenseVector::SumLogsImpl()` such that it returns 0.0 for a vector of dimension 0. Returned `nan` for homogeneous 0-vector of dimension 0 before, which may have caused the restoration phase to fail for problems with only equality or only inequality constraints. Also other `DenseVector` methods now skip calculations when dimension is 0 to avoid (probably harmless) divisions by zero. - Fixed a problem where moving slack away from 0 did not succeed when mu was very small. [#212] - Fixed a problem where moving slacks away from 0 resulted in `nan` if multipliers were zero. Added `Vector::ElementWiseSelect()`. - Various tiny bugfixes and improvements in performance and code style by following suggestions of `cppcheck`. - Added documentation on some available C preprocessor flags for expert users. - Fixed static build of sIpopt without GCC. Fixed that installed sIpopt headers were not usable (`SIPOPTLIB_EXPORT` not defined). - Fixed wrong gradient of objective function and Lagrangian Hessian in restoration problem [#478, by Nai-Yuan Chiang]. - If Ipopt is compiled for checklevel 2 or higher and the GLIBC extension `feenableexcept()` is available, then floating-pointing exceptions divbyzero, overflow, and invalid are raised while `IpoptAlgorithm::Optimize()` is running. - Fixed that norm on unscaled complementarity or scaled complementarity tolerance were negative when maximizing (by using a negative scaling factor for the objective). - Changed formula for relative error in derivative checker. The absolute error is now scaled up if the approximate derivative value is between derivative_test_tol and 1. [#487]. - The second-order derivative checker now uses values for obj_factor and lambda that are different from 1. ## 3.13 ### 3.13.4 (2021-02-24) - Fixed a linking issue for `ipopt_sens` [#418] - Fixed Makefile for Java example regarding location of jar file - Fixed build of R interface if using `-fvisibility=hidden`. ### 3.13.3 (2020-10-16) - Members of `AmplTNLP` class are now protected instead of private. - Updated Eclipse Public License from 1.0 to 2.0. - Fixed dangling pointer problems with Journalist used for debugging (`--with-ipopt-verbosity > 0`) when more than one `IpoptApplication` is used. [#393, thanks to Brad Bell] - Fixed build problem when using HSL library that does not include MA27, MA57, or MC19. [#395] - Added example `recursive_nlp` that uses Ipopt to solves an optimization problem for the evaluation of the objective function. [contributed by Brad Bell] - Fixed build of linear-solver loader on Windows [#408] ### 3.13.2 (2020-04-30) - The C-preprocessor defines `COIN_IPOPT_CHECKLEVEL`, `COIN_IPOPT_VERBOSITY`, and `FORTRAN_INTEGER_TYPE`, which are defined by `IpoptConfig.h`, have been renamed to `IPOPT_CHECKLEVEL`, `IPOPT_VERBOSITY`, and `IPOPT_FORTRAN_INTEGER_TYPE`, respectively. They are still available under their previous name, but these will be removed in Ipopt 3.14. - Changed dependencies as used by coinbrew to use new versions (2.1) of ThirdParty/HSL and ThirdParty/MUMPS and dropped ThirdParty/Metis. The new versions of the HSL and MUMPS build scripts now look for a Metis library in the system and should work with both Metis 4 and Metis 5. - Changed location where Java interface jar gets installed from `$libdir` to `$datadir/java/`. - minor fixes to buildsystem ### 3.13.1 (2020-03-11) - Added asserts that check whether sparsity pattern of Jacobian and Hessian as returned by TNLP are within range w.r.t. number of variables and constraints. [#350] - `TNLPAdapter::ResortBnds` now initializes complete output arrays with 0.0 before filling in values for non-fixed variables. Use new argument `clearorig` to turn this off. [#352] - bring back configure variables `ADD_{C,CXX,F}FLAGS` - added configure option `--enable-relocatable` to make prefix in pkg-config files relative to pcfiledir (assuming that `--libdir` hasn't been set) - bring back `configall_system.h` for build without config header - minor fixes to buildsystem ### 3.13.0 (2019-10-19) This major release comes with a larger renovation of the build system and a changed directory structure (eliminated top directory), which is the result of a long and still on-going effort to use recent autotools versions for various COIN-OR projects, reduce future maintenance efforts, and adapting behaviors of standard autotools-based projects. As a consequence, a monolithic build of Ipopt, which builds Ipopt with all its dependencies in one run of configure and make is no longer possible. Dependencies should now be build and installed before building Ipopt. Additionally, support for some outdated versions of dependencies and unmaintained components of Ipopt has been dropped and some improvements that may require changes on the users side have been applied. A more detailed, probably incomplete, list of changes follows: - Removed git submodules. Dependencies (HSL, Mumps, ASL, etc) now need to be build and installed in advance, either manually or by using coinbrew. - Dropped support for HSL < 2013. - Dropped support for MA28 in the linear solver loader. - Dropped support for Pardiso < 4.0 from pardiso-project.org. - Added support for Mumps 5.2.x, though initial experiments on CUTEst indicated that, on average, performance is worse than when using Mumps 4.10.0. - Dropped CUTEr interface, the successor CUTEst includes an interface to Ipopt. - Dropped Matlab interface as it is unmaintained and it was reported that it stopped functioning. Use https://github.com/ebertolazzi/mexIPOPT instead. - Dropped MSVS project files as unmaintained and not functioning with current Ipopt anymore. - Integrated Java interface into the main Ipopt library, that is, it is handled equivalently to the C and Fortran interfaces: - The source moved into `src/Interfaces`. - The JNI functions are now included in the main Ipopt library, thus an extra jipopt library is no longer build or necessary. - The Java class and `org.coinor.ipopt.jar` package are build and installed as part of the main Ipopt build. - The examples moved into `examples/*_java`. - A Java interface test is executed by `make test`. - To build javadoc, run `make javadoc` in the main build directory. - The configure flag `--disable-java` can be used to disable the check for Java and build of the Java interface. - `DLLPATH` and `DLLNAME` have been removed from the Ipopt class and constructors that works without arguments and with only one argument (specifying the Ipopt library namestem) have been added. - Method `Ipopt::finalize` has been marked as deprecated and will be removed in some future Ipopt version. Users must call `dispose()` explicitly. - Integrated sIpopt into the main Ipopt build, that is, it is now build together with Ipopt, but installed as separate library and executable. Use `--disable-sipopt` to disable building sIpopt. - `IPOPT_THREAD_LOCAL` now uses C++11's `thread_local` keyword if C++11 is available. - When using a GCC-compatible compiler, Ipopt and sIpopt interface functions are now declared with `visibility(default)`-attribute, thus building Ipopt with `-fvisibility=hidden` still produces a usable library. - When using a MSVC-compatible compiler, Ipopt and sIpopt interface functions are now declared with `dllimport`-attribute, so that an Ipopt C++ DLL can be used. - Under Windows/Msys2, DLLs are now build by default. - Cygwin and MSys1 are not supported. - pkg-config is now mandatory to use dependencies like ASL or HSL. On Windows, make sure to use a pkg-config version that produces Unix-style paths. - Script "`compile`" is now used to wrap around calls of cl/icl/ifort and translate GCC-style compiler flags to MSVC style. - "Addlibs" files have been removed, pkg-config should be used instead. - Header files are now installed in the better named `$prefix/include/coin-or` instead of `$prefix/include/coin`. - The default for `--prefix` is no longer the build directory, but the autotools-default, probably `/usr/local`. - The check for a Fortran compiler can be disabled via `--disable-f77` and Ipopt can easier be build without a Fortran compiler. - Lapack is no longer optional, but required. The separate check for Blas and the `--with-blas` flags have been removed. - `--enable-debug` does not imply `--disable-shared` anymore. - Removed `--enable-debug-ipopt`, use `--enable-debug` instead. - Removed configure variables `{ADD,OPT,DBG}_{C,CXX,F77}FLAGS`. Use `{C,CXX,F77}FLAGS` instead. - Silent build output is now enabled by default, use configure flag `--disable-silent-rules` or call make with `V=1` to disable. - Also for static builds, PIC objects are now generated by default, use `--without-pic` to disable. - The `--with-*-incdir` and `--with-*-lib` configure flags have been replaced by corresponding `--with-*-cflags` and `--with-*-lflags` flags. Note that the include directories need to be specified via `-I