Updated the bundled Uno C++ solver from 2.7.4 to upstream release
2.9.2. Uno 2.9 adds the auto preset (chosen by problem
size), function scaling for all methods, a Ctrl-C handler that stops a
solve cleanly with the new USER_INTERRUPTION status, and
two solution statuses: DIVERGING_ITERATE and
UNBOUNDED_OBJECTIVE (which replaces
UNBOUNDED). The R-packaging patch set was rebased onto
v2.9.2.
Updated the bundled HiGHS from 1.14.0 to 1.15.1, the version in
the CRAN highs package, with two upstream fixes not yet in
a HiGHS release: ERGO-Code/HiGHS#3430 (uninitialized bool
members, reported by UBSAN on every QP solve) and #3472 (a container
overflow in presolve, reported by AddressSanitizer), the latter moved to
its 1.15.1 location. HiGHS’s extern/ extras library is not
built: it serves only the HiPO solver, which is off.
The status labels uno_solve() returns are now
generated from Uno’s C API header at install time, so they follow the
bundled Uno exactly; uno_status_labels() lists
them.
MUMPS through rmumps, two generations: with
rmumps 5.2.1-44 or later the package binds to the versioned
C interface <rmumps/rmumps_api.h>, whose entry points
are named after the MUMPS structure layout they were built for, so a
mismatch between the rmumps a binary was built against and
the one installed is a clear error when the package loads rather than
memory corruption; rmumps 5.9.1-1 brings MUMPS 5.9.1 this
way. With rmumps 5.2.1-43 the legacy dmumps_c
entry point is used as before. The binding happens in
.onLoad. uno_mumps_version() reports the MUMPS
reached.
New: uno_options() lists every Uno option with its
type; uno_solve() gains a name argument (the
model name in Uno’s log) and validates the preset; without a
log_callback, Uno’s output now goes to the R console
through an explicit logger sink.
Fixed log_callback, which received Uno’s preamble
twice and never the iteration table or the final summary: Uno’s stream
buffer expects the callback to return the number of bytes it consumed,
and the binding returned 0, which Uno treats as a failed flush. The
callback now receives the whole log, once.
citation("Uno") now gives a single entry for the R
package and points to the references the Uno authors maintain for the
solver; the package description cites the published Mathematical
Programming Computation paper (Vanaret and Leyffer, 2026) instead of the
preprint.
Authorship and copyright: Authors@R names every
copyright holder of the bundled Uno sources (Alexis Montoison, Joris
Gillis, David Kiessling and Manuel Schaich alongside Charlie Vanaret),
the package’s own code is attributed to its author, and
inst/COPYRIGHTS is self-contained after installation. Uno’s
documentation, test suite, AMPL interface, examples and CMake
find-modules, none of which the build reads, no longer ship in the
source package.
Build: Uno is configured with -DUSE_OPENMP=OFF (Uno
2.7.5 made OpenMP the default, which its CMake requires whenever MUMPS
is present). The bundled Uno’s CMake gains a
FORTRAN_MANGLING_UNDERSCORE option, which the package turns
on: BLAS/LAPACK symbol names are spelled with the gfortran convention R
uses everywhere instead of being discovered by compiling and linking a
Fortran probe, so installing no longer needs a working Fortran link step
(nothing in the build is Fortran; R supplies BLAS, LAPACK and the
Fortran runtime at link time). For the same reason R’s BLAS and LAPACK
link names are handed to Uno’s CMake directly instead of letting it
search for libraries the archive never links (the search failed on
Rtools without a Fortran compiler). The bundled Uno’s
DynamicLoader.cpp includes <cstdlib> for
std::getenv, which LLVM 23’s libc++ no longer provides
transitively (CRAN’s r-devel-linux-x86_64-fedora-clang);
the 2.7.4-1 fix of VectorView.hpp is moot, that file is
gone upstream.
Fixed an installation failure on glibc 2.36 and older (Debian 12, Ubuntu 22.04 LTS, RHEL 9), where the bundled HiGHS build stopped.
r-devel-linux-x86_64-fedora-clang check. libc++ 23
dropped many transitive includes in all language modes, so the bundled
Uno solver’s VectorView.hpp no longer saw
<algorithm> and its use of std::fill
failed to compile, taking 28 translation units with it. The header now
includes <algorithm> directly. No user-visible
change.Fixed the interior-point (“ipopt”) preset on Windows, which
failed with “The linear solver MUMPS is unknown”. The shim now resolves
rmumps’ dmumps_c via R_GetCCallable (works on
Windows) instead of R_FindSymbol (did not), and
configure.win builds with MUMPS enabled. Requires
rmumps >= 5.2.1-43.
Updated the bundled Uno C++ solver to upstream release 2.7.4. The R-packaging patch set rebased cleanly; the C API is backward-compatible and the R binding is unchanged.
Build: forward the HiGHS include root into the bundled Uno compile, fixing a “‘highs/Highs.h’ file not found” error from Uno 2.7.4’s prefixed include.
Keep the bundled HiGHS/Uno source trees out of the
installed package via a top-level .Rinstignore, as
CRAN requested; the static libraries are still built from the bundled
sources at configure time.
Fixed an undefined-behavior report from CRAN’s gcc-SAN /
clang-SAN checks (uno_binding.cpp, make_x): a
length-0 memcpy received a NULL source. The copy is now
guarded; no user-visible behavior change.
R.home("include") for R’s
header path, and normalize a lib64/ libuno.a
install to lib/.Updated the bundled Uno C++ solver to upstream release 2.7.3. The
R-packaging patch set was rebased onto v2.7.3; the C API is
backward-compatible (the binding is unchanged). One internal fix: Uno
2.7.3 relocated Options::dump_default_options(), so its
console output is re-routed through the R-output mechanism
(UNO_COUT) to keep the compiled library free of raw
std::cout for the CRAN compiled-code check.
Added inst/COPYRIGHTS documenting the copyright
holders and licenses of the bundled third-party libraries: the Uno C++
solver and HiGHS, including the components HiGHS itself bundles (AMD,
METIS, pdqsort, zstr, rcm, filereaderlp, Catch2, and CLI11). All are
permissive and MIT-compatible (MIT / BSD-3-Clause / Apache-2.0 / zlib /
Boost Software License 1.0); none is copyleft. A
Copyright: file inst/COPYRIGHTS field and a
cph entry for the HiGHS development team record this in the
package metadata. Because the file lives under inst/, the
attribution survives installation. MUMPS (reached at run time through
the GPL-licensed rmumps package) and BQPD are not
bundled.