papilo/papilo.spec
David Abdurachmanov 607504c8ab
Merge remote-tracking branch 'up/main' into main-riscv64
Signed-off-by: David Abdurachmanov <davidlt@rivosinc.com>
2024-11-21 16:03:00 +02:00

142 lines
3.9 KiB
RPMSpec

# Architectures that have libquadmath
%ifarch x86_64 ppc64le
%global quadmath 1
%else
%global quadmath 0
%endif
# The papilo binary depends on several solvers that transitively depend on the
# papilo library. In a bootstrap situation, first build the binary without
# solver support, build the solvers, then do a non-bootstrap build.
%bcond bootstrap 1
%global giturl https://github.com/scipopt/papilo/
Name: papilo
Version: 2.3.1
Release: %autorelease -e 0.riscv64
Summary: Parallel presolve for integer and linear optimization
# LGPL-3.0-or-later: the project as a whole
# BSL-1.0: src/papilo/misc/extended_euclidean.hpp
# Zlib: the header-only pdqsort project
# MIT: the bundled fmt project
License: LGPL-3.0-or-later AND BSL-1.0 AND Zlib AND MIT
URL: https://www.scipopt.org/
VCS: git:%{giturl}.git
Source: %{giturl}/archive/v%{version}/%{name}-%{version}.tar.gz
# Unbundle catch, LUSOL, pdqsort, and ska
Patch: %{name}-unbundle.patch
# Build a shared library instead of a static library
Patch: %{name}-shared.patch
# Avoid out-of-bounds vector access
# https://github.com/scipopt/papilo/pull/48
Patch: %{name}-vector-bounds.patch
# See https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
ExcludeArch: %{ix86}
BuildRequires: boost-devel
BuildRequires: cmake
BuildRequires: cmake(catch2)
BuildRequires: cmake(tbb)
BuildRequires: gcc-c++
BuildRequires: help2man
BuildRequires: libatomic
%if %{quadmath}
BuildRequires: libquadmath-devel
%endif
BuildRequires: lusol-devel
BuildRequires: pdqsort-static
BuildRequires: pkgconfig(gmp)
%if %{without bootstrap}
# Solver support
BuildRequires: cmake(scip)
BuildRequires: cmake(soplex)
%endif
Requires: libpapilo%{?_isa} = %{version}-%{release}
%global _desc %{expand:
PaPILO provides parallel presolve routines for (mixed integer) linear
programming problems. The routines are implemented using templates
which allows switching to higher precision or rational arithmetic using
the boost multiprecision package.}
%description %_desc
%package -n libpapilo
Summary: Library interface to PaPILO
# The bundled version of fmt is incompatible with version 10 in Rawhide.
Provides: bundled(fmt) = 7.1.3
%description -n libpapilo %_desc
This package provides a library interface to the PaPILO functionality.
%package -n libpapilo-devel
Summary: Headers and library links for libpapilo
Requires: libpapilo%{?_isa} = %{version}-%{release}
Requires: boost-devel%{?_isa}
Requires: lusol-devel%{?_isa}
Requires: pdqsort-static
Requires: tbb-devel%{?_isa}
%description -n libpapilo-devel %_desc
This package contains headers and library links to develop applications
that use libpapilo.
%prep
%autosetup -p1
# Ensure none of the bundled code but fmt can be used
rm -fr src/papilo/external/{catch,lusol,pdqsort,ska}
# Fix installation directories
if [ '%{_lib}' != 'lib' ]; then
sed -i 's,\(DESTINATION \)lib,\1%{_lib},g' CMakeLists.txt
fi
%build
%cmake -DQUADMATH:BOOL=%{?quadmath:ON}%{!?quadmath:OFF}
%cmake_build
%install
%cmake_install
# Generate man pages
mkdir -p %{buildroot}%{_mandir}/man1
export LD_LIBRARY_PATH=$PWD/%{_vpath_builddir}
cd %{_vpath_builddir}/bin
help2man -N -h '' --version-string %{version} \
-n 'parallel presolve for integer and linear optimization' ./papilo > \
%{buildroot}%{_mandir}/man1/papilo.1
cd -
# Fix up the man page a little
sed -i 's,\./\(papilo\),\1,' %{buildroot}%{_mandir}/man1/papilo.1
%check
# Temporarily skip a test that is broken in the 2.3.1 release
%ctest -E 'q-solve-rgn\.mps-default\.set'
%files
%doc CHANGELOG README.md parameters.txt
%{_bindir}/papilo
%{_mandir}/man1/papilo.1*
%files -n libpapilo
%license COPYING COPYING.LESSER
%{_libdir}/libpapilo-core.so.0*
%files -n libpapilo-devel
%{_includedir}/papilo/
%{_libdir}/cmake/papilo/
%{_libdir}/libpapilo-core.so
%changelog
%autochangelog