Skip to content

Commit e1e7b6d

Browse files
committed
Merge branch 'bugfix-80'
2 parents 5745675 + b5e9034 commit e1e7b6d

File tree

10 files changed

+99
-94
lines changed

10 files changed

+99
-94
lines changed

CHANGELOG

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,38 +11,44 @@ fixed bugs:
1111

1212
miscellaneous:
1313

14-
Next - Release 8.0.0
14+
15+
Release 8.0.1
1516
==================
1617

17-
build system:
18+
fixed bugs:
1819

19-
- For cmake >= 3.30 CMP0167 is enforced and BOOST_ROOT no longer supported, please use Boost_DIR instead with these cmake versions.
20+
21+
November 2025 - Release 8.0.0
22+
==================
23+
24+
interface & parameters:
25+
- method SoPlexBase<R>::factorizeColumnRational() is now public
26+
- added getRowActivity(), getRowActivityRational(), getRowsActivity(), getRowsActivityReal(), getRowsActivityRational(), and getColActivity(), getColActivityRational(), getColsActivity(), getColsActivityReal() to SoPlexBase<R>, based on extended computePrimalActivity() and computeDualActivity()
27+
- rename enums for verbosity levels: SPxOut::DEBUG to SPxOut::VERB_DEBUG etc.
28+
- changed type of second argument of spx_alloc() and spx_realloc() from int to size_t
29+
- changed second argument of NameSet::NameSet(), first argument of NameSet::memRemax(), return of NameSet::memMax(), and return of NameSet::memSize() from int to size_t
30+
- add constructor for class SolBase
31+
- deprecated SOPLEX_SUBVERSION, SOPLEX_VERSION_SUB, and soplex::subversion()
32+
33+
build system:
34+
- for cmake >= 3.30, CMP0167 is enforced and BOOST_ROOT no longer supported; use Boost_DIR instead with these cmake versions
2035
- increased minimal required cmake version to 3.11
2136
- revised SANITIZE options for makefile: removed SANITIZE=full, added SANITIZE=thread, SANITIZE=address, and SANITIZE=memory to enable
2237
thread, address, and memory sanitizers, respectively, in addition to undefined behavior sanitizer;
2338
changed default to SANITIZE=false
24-
- replaced `SANITIZE_XYZ=(on|off)` options for cmake by `SANITIZE=(on|off|thread|address|memory)` and let it have an actual effect on the build;
39+
- replaced SANITIZE_XYZ=(on|off) options for cmake by SANITIZE=(on|off|thread|address|memory) and let it have an actual effect on the build;
2540
undefined behavior sanitizer is always enabled if not `SANITIZE=off` (the default)
26-
- Makefiles: By default, SoPlex links with MPFR=true and GMP=true if and only if BOOST=true (options GMP=auto and MPFR=auto)
27-
- Makefiles: Change default value of BOOST to false; set BOOST=true manually to obtain exact rational solving functionality
41+
- Makefiles: by default, SoPlex links with MPFR=true and GMP=true if and only if BOOST=true (options GMP=auto and MPFR=auto)
42+
- Makefiles: change default value of BOOST to false; set BOOST=true manually to obtain exact rational solving functionality
2843
- cmake: if SoPlex is build with MPFR, then also projects that use such a SoPlex installation will now look for MPFR
29-
30-
features:
44+
- cmake: updated FindMPFR.cmake so that MPFR_DIR is now supported
3145

3246
fixed bugs:
3347
- extend memory counters to size_t to avoid segmentation faults for large-scale problems
48+
- removed instantiation of SPxLPBase<Rational> class template from header file, to avoid problems when SoPlex headers are compiled into several object files of a library
3449

3550
code quality:
36-
- avoid deprecated implicit copy constructor for 'SPxException', 'SLinSolver', and 'SLinSolverRational'
37-
38-
interface & parameters:
39-
- add `SolBase` constructor
40-
- make method `factorizeColumnRational` public
41-
- deprecated SOPLEX_SUBVERSION, SOPLEX_VERSION_SUB, and soplex::subversion()
42-
- rename enums for verbosity levels: SPxOut::DEBUG to SPxOut::VERB_DEBUG etc.
43-
- add getRowActivity(), getRowActivityRational(), getRowsActivity(), getRowsActivityReal(), getRowsActivityRational(), and getColActivity(), getColActivityRational(), getColsActivity(), getColsActivityReal() based on extended computePrimalActivity() and computeDualActivity()
44-
- retype second argument of spx_alloc() and spx_realloc() from int to size_t
45-
- in class NameSet retype second argument of NameSet(), first argument of memRemax(), return of memMax(), and return of memSize() from int to size_t
51+
- avoid deprecated implicit copy constructor for classes SPxException, SLinSolver, and SLinSolverRational
4652

4753
miscellaneous:
4854
- removed 4th number in SoPlex version; new format is major.minor.patch

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ if(BOOST)
196196
find_package(MPFR)
197197
endif()
198198
if(MPFR_FOUND)
199-
message(STATUS "SoPlex with Boost MPFR libraries")
199+
message(STATUS "SoPlex with Boost MPFR ${MPFR_VERSION} libraries")
200200
set(SOPLEX_WITH_MPFR on)
201201
include_directories(${MPFR_INCLUDE_DIRS})
202202
set(libs ${libs} ${MPFR_LIBRARIES})

build_webdemo.sh

100644100755
File mode changed.

cmake/Modules/FindMPFR.cmake

Lines changed: 54 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,66 @@
1-
# Try to find the MPFR library
2-
# See http://www.mpfr.org/
3-
#
4-
# This module supports requiring a minimum version, e.g. you can do
5-
# find_package(MPFR 2.3.0)
6-
# to require version 2.3.0 to newer of MPFR.
7-
#
8-
# Once done this will define
9-
#
10-
# MPFR_FOUND - system has MPFR lib with correct version
11-
# MPFR_INCLUDES - the MPFR include directory
12-
# MPFR_LIBRARIES - the MPFR library
13-
# MPFR_VERSION - MPFR version
1+
# ${MPFR_INCLUDE_DIRS} contains the paths to mpfr.h if MPFR is found.
2+
# ${MPFR_LIBRARIES} contains libmpfr if MPFR is found.
143

15-
# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
16-
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
17-
# Copyright (c) 2010 Jitse Niesen, <jitse@maths.leeds.ac.uk>
18-
# Copyright (c) 2015 Jack Poulson, <jack.poulson@gmail.com>
19-
# Redistribution and use is allowed according to the terms of the BSD license.
4+
# Check whether environment variable MPFR_DIR was set.
5+
if(NOT MPFR_DIR)
6+
set(ENV_MPFR_DIR $ENV{MPFR_DIR})
7+
if(ENV_MPFR_DIR)
8+
set(MPFR_DIR $ENV{MPFR_DIR} CACHE PATH "Path to mpfr directory")
9+
endif()
10+
endif()
2011

21-
find_path(MPFR_INCLUDES NAMES mpfr.h PATHS $ENV{GMPDIR} $ENV{MPFRDIR}
22-
${INCLUDE_INSTALL_DIR})
12+
find_path(MPFR_INCLUDE_DIRS
13+
NAMES mpfr.h
14+
HINTS ${MPFR_DIR}
15+
PATH_SUFFIXES include)
2316

24-
# Set MPFR_FIND_VERSION to 1.0.0 if no minimum version is specified
25-
if(NOT MPFR_FIND_VERSION)
26-
if(NOT MPFR_FIND_VERSION_MAJOR)
27-
set(MPFR_FIND_VERSION_MAJOR 1)
28-
endif()
29-
if(NOT MPFR_FIND_VERSION_MINOR)
30-
set(MPFR_FIND_VERSION_MINOR 0)
31-
endif()
32-
if(NOT MPFR_FIND_VERSION_PATCH)
33-
set(MPFR_FIND_VERSION_PATCH 0)
34-
endif()
35-
set(MPFR_FIND_VERSION
36-
"${MPFR_FIND_VERSION_MAJOR}.${MPFR_FIND_VERSION_MINOR}.${MPFR_FIND_VERSION_PATCH}")
17+
if(STATIC_MPFR)
18+
find_library(MPFR_LIBRARY
19+
NAMES libmpfr.a mpfr
20+
HINTS ${MPFR_DIR}
21+
PATH_SUFFIXES lib)
22+
else()
23+
find_library(MPFR_LIBRARY
24+
NAMES libmpfr.so mpfr
25+
HINTS ${MPFR_DIR}
26+
PATH_SUFFIXES lib)
3727
endif()
3828

39-
if(MPFR_INCLUDES)
40-
# Query MPFR_VERSION
41-
file(READ "${MPFR_INCLUDES}/mpfr.h" _mpfr_version_header)
29+
SET(MPFR_LIBRARIES ${MPFR_LIBRARY})
4230

43-
string(REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)"
44-
_mpfr_major_version_match "${_mpfr_version_header}")
45-
set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}")
46-
string(REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)"
47-
_mpfr_minor_version_match "${_mpfr_version_header}")
48-
set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}")
49-
string(REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)"
50-
_mpfr_patchlevel_version_match "${_mpfr_version_header}")
51-
set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}")
31+
# look for mpir library and include files when mpfr could not be found
32+
if(NOT MPFR_LIBRARIES)
33+
find_path(MPFR_INCLUDE_DIRS
34+
NAMES mpir.h
35+
HINTS ${MPFR_DIR}
36+
PATH_SUFFIXES include)
5237

53-
set(MPFR_VERSION
54-
${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION})
38+
find_library(MPFR_LIBRARY
39+
NAMES mpir
40+
HINTS ${MPFR_DIR}
41+
PATH_SUFFIXES lib)
5542

56-
# Check whether found version exceeds minimum required
57-
if(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION})
58-
set(MPFR_VERSION_OK FALSE)
59-
message(STATUS "MPFR version ${MPFR_VERSION} found in ${MPFR_INCLUDES}, "
60-
"but at least version ${MPFR_FIND_VERSION} is required")
61-
else()
62-
set(MPFR_VERSION_OK TRUE)
63-
endif()
43+
SET(MPFR_LIBRARIES ${MPFR_LIBRARY})
6444
endif()
6545

66-
find_library(MPFR_LIBRARIES mpfr
67-
PATHS $ENV{GMPDIR} $ENV{MPFRDIR} ${LIB_INSTALL_DIR})
46+
file(GLOB MPFR_HEADERS "${MPFR_INCLUDE_DIRS}/mpfr.h")
47+
foreach (mpfr_header_filename ${MPFR_HEADERS})
48+
file(READ "${mpfr_header_filename}" _mpfr_version_header)
49+
string(REGEX MATCH
50+
"define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" _mpfr_major_version_match
51+
"${_mpfr_version_header}")
52+
if (_mpfr_major_version_match)
53+
set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}")
54+
string(REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)"
55+
_mpfr_minor_version_match "${_mpfr_version_header}")
56+
set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}")
57+
string(REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)"
58+
_mpfr_patchlevel_version_match "${_mpfr_version_header}")
59+
set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}")
60+
set(MPFR_VERSION
61+
${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION})
62+
endif ()
63+
endforeach ()
6864

6965
include(FindPackageHandleStandardArgs)
70-
find_package_handle_standard_args(MPFR DEFAULT_MSG
71-
MPFR_INCLUDES MPFR_LIBRARIES MPFR_VERSION_OK)
72-
mark_as_advanced(MPFR_INCLUDES MPFR_LIBRARIES)
66+
find_package_handle_standard_args(MPFR DEFAULT_MSG MPFR_INCLUDE_DIRS MPFR_LIBRARIES)

extra/lpconv.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ int main(int argc, char **argv)
264264
"* *\n"
265265
"* LPConv --- Convert LPF to MPS format. *\n"
266266
"* Release 1.0.2 *\n"
267-
"* Copyright (c) 2007-2020 Zuse Institute Berlin (ZIB) *\n"
267+
"* Copyright (c) 2007-2025 Zuse Institute Berlin (ZIB) *\n"
268268
"* fuer Informationstechnik Berlin *\n"
269269
"* *\n"
270270
"* LPConv is distributed under the terms of the Apache 2.0 Licence. *\n"

extra/lpstat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ int main(int argc, char **argv)
3838
"* *\n"
3939
"* LPStat --- Print Statistics about LPs. *\n"
4040
"* Release 1.0.2 *\n"
41-
"* Copyright (c) 2002-2020 Zuse Institute Berlin (ZIB) *\n"
41+
"* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) *\n"
4242
"* fuer Informationstechnik Berlin *\n"
4343
"* *\n"
4444
"* LPStat is distributed under the terms of the Apache 2.0 Licence. *\n"

src/CMakeLists.txt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,19 +233,29 @@ install(FILES
233233
${PROJECT_SOURCE_DIR}/src/soplex/external/fmt/posix.h
234234
${PROJECT_SOURCE_DIR}/src/soplex/external/fmt/printf.h
235235
${PROJECT_SOURCE_DIR}/src/soplex/external/fmt/ranges.h
236-
DESTINATION include/soplex/external/fmt)
236+
DESTINATION include/soplex/external/fmt)
237237

238-
install(FILES
238+
# TODO this is necessary only if ZLIB_FOUND?
239+
install(FILES
239240
${PROJECT_SOURCE_DIR}/src/soplex/external/zstr/zstr.hpp
240241
${PROJECT_SOURCE_DIR}/src/soplex/external/zstr/strict_fstream.hpp
241-
DESTINATION include/soplex/external/zstr)
242+
DESTINATION include/soplex/external/zstr)
243+
install(FILES ${PROJECT_SOURCE_DIR}/src/soplex/external/zstr/License.txt DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/soplex/zstr)
242244

243245
# install the binary and the library to appropriate lcoations and add them to an export group
244246
install(TARGETS soplex libsoplex libsoplex-pic libsoplexshared EXPORT soplex-targets
245-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
246-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
247-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
248-
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
247+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
248+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
249+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
250+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
251+
252+
if(MSVC)
253+
install(FILES $<TARGET_PDB_FILE:libsoplexshared> $<TARGET_PDB_FILE:soplex> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
254+
endif()
255+
256+
# install license files of soplex and fmt
257+
install(FILES ${PROJECT_SOURCE_DIR}/LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/soplex)
258+
install(FILES ${PROJECT_SOURCE_DIR}/src/soplex/external/fmt/LICENSE.rst DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/soplex/fmt)
249259

250260
# Add library targets to the build-tree export set
251261
export(TARGETS libsoplex libsoplex-pic libsoplexshared

src/soplex/spxlpbase_rational.cpp

Whitespace-only changes.

src/soplex/spxlpbase_rational.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2464,9 +2464,4 @@ void SPxLPBase<Rational>::buildDualProblem(SPxLPBase<Rational>& dualLP, SPxRowId
24642464
SPX_MSG_ERROR(std::cerr << "Method buildDualProblem() not implemented for Rational\n");
24652465
}
24662466

2467-
2468-
// ---------------------------------------------------------------------------------------------------------------------
2469-
// Explicit instantiation
2470-
// ---------------------------------------------------------------------------------------------------------------------
2471-
template class SPxLPBase < Rational >;
24722467
} // namespace soplex

src/soplex/spxlpbase_real.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3264,7 +3264,7 @@ void SPxLPBase<R>::buildDualProblem(SPxLPBase<R>& dualLP, SPxRowId primalRowIds[
32643264

32653265
break;
32663266

3267-
case LPRowBase<R>::LESS_EQUAL: // <= constriant
3267+
case LPRowBase<R>::LESS_EQUAL: // <= constraint
32683268
assert(rhs(i) < R(infinity));
32693269
primalRowIds[primalrowsidx] = rId(i); // setting the rowid for the primal row
32703270
primalrowsidx++;

0 commit comments

Comments
 (0)