papilo/papilo.spec
2024-02-15 20:21:33 -07:00

136 lines
3.8 KiB
RPMSpec

# Architectures that have libquadmath
%ifarch x86_64 ppc64le
%global quadmath 1
%else
%global quadmath 0
%endif
Name: papilo
Version: 2.1.4
Release: %autorelease
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://github.com/scipopt/papilo/
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
# Unbundle catch, LUSOL, pdqsort, and ska
Patch0: %{name}-unbundle.patch
# Build a shared library instead of a static library
Patch1: %{name}-shared.patch
# The list of tests in CMakeLists.txt doesn't match the actual tests
Patch2: %{name}-test.patch
# Avoid out-of-bounds vector access
# https://github.com/scipopt/papilo/pull/42
Patch3: %{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
%if %{quadmath}
BuildRequires: libquadmath-devel
%endif
BuildRequires: lusol-devel
BuildRequires: pdqsort-static
BuildRequires: pkgconfig(gmp)
Requires: libpapilo%{?_isa} = %{version}-%{release}
# The bundled version of fmt is incompatible with version 10 in Rawhide.
Provides: bundled(fmt) = 6.1.2
%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
%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 'check for duplicate optimization problem instances' ./duplicates > \
%{buildroot}%{_mandir}/man1/duplicates.1
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 pages a little
sed -e 's,\./check_\(duplicates\),\1,' \
-e '/^\\&/i.TP' \
-i %{buildroot}%{_mandir}/man1/duplicates.1
sed -i 's,\./\(papilo\),\1,' %{buildroot}%{_mandir}/man1/papilo.1
%check
%ctest
%files
%doc CHANGELOG README.md parameters.txt
%{_bindir}/duplicates
%{_bindir}/papilo
%{_mandir}/man1/duplicates.1*
%{_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