File libsolv.spec of Package libsolv
%define realname libsolv
%define realver 0.7.34
%define srcext tar.gz
%define so_ver 1
%define gh_repo openSUSE/libsolv
%undefine _annotated_build
# For use with ruby
%define rbvendor %(ruby -e 'require "rbconfig"; puts RbConfig::CONFIG["vendordir"]')
%define rblib %(ruby -e 'require "rbconfig"; puts RbConfig::CONFIG["vendorlibdir"]')
%define rbso %(ruby -e 'require "rbconfig"; puts RbConfig::CONFIG["vendorarchdir"]')
%define rbver %(ruby -e 'require "rbconfig"; puts RbConfig::CONFIG["ruby_version"]')
%define ruby_lib %(ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubylibprefix"]')
%define ruby_abi %(ruby -rrbconfig -e 'puts RbConfig::CONFIG["ruby_version"]')
%define python3 %{_bindir}/python3
%define python3_pkg python3
%if ! 0%{?py3_ver:1}
%define py3_ver %(%python3 -c "import sys; v=sys.version_info[:2]; print ('%%d.%%d'%%v)" 2>/dev/null || echo PYTHON3-NOT-FOUND)
%endif
%if ! 0%{?python3_sitearch:1}
%define python3_sitearch %(%python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib(True))')
%endif
%if 0%{?rhel} >= 8
%define __python %{python3}
%endif
# Common info
Name: %{realname}
Version: %{realver}
Release: wiz%{?extraver:0.}1%{?dist}
License: BSD-3-Clause
Group: System/Packages
URL: http://en.opensuse.org/openSUSE:Libzypp_satsolver
Summary: Package dependency solver library using a satisfiability algorithm
# Install-time parameters
Provides: %{realname}%{?so_ver} = %{version}-%{release}
# Build-time parameters
BuildRequires: cmake >= 2.8.5 pkg-config
BuildRequires: gcc-c++ libstdc++-devel
BuildRequires: ninja
BuildRequires: expat-devel
BuildRequires: zlib-devel
BuildRequires: xz-devel
%if 0%{?suse_version}
BuildRequires: libbz2-devel
%else
BuildRequires: bzip2-devel
%endif
BuildRequires: libzstd-devel
BuildRequires: pkgconfig(zck)
BuildRequires: pkgconfig(rpm)
BuildRequires: swig
BuildRequires: ruby ruby-devel
BuildRequires: %{python3_pkg}-devel
BuildRequires: perl%{!?suse_version:-devel}
%if 0%{?rhel} >= 8
BuildRequires: annobin
%endif
Source: https://codeload.github.com/%{gh_repo}/%{srcext}/refs/tags/%{realver}#/%{realname}-%{realver}%{?extraver}.%{srcext}
%description
This is libsolv, a free package dependency solver using a satisfiability
algorithm.
Supported package formats:
- rpm/rpm5
- deb
- arch linux
- haiku
Supported repository formats:
- rpmmd (primary, filelists, comps, deltainfo/presto, updateinfo)
- susetags, suse product formats
- mandriva/mageia (synthesis, info, files)
- arch linux
- red carpet helix format
- haiku
%package devel
Group: Development/Languages/C and C++
Summary: Development files for %{name}
Requires: %{name} = %{version}-%{release}
Requires: %{name}-tools = %{version}-%{release}
%description devel
Development files for %{name}
%package tools
Group: System/Packages
Summary: Tools for libsolv
Requires: %{name} = %{version}-%{release}
Requires: bzip2 gzip xz
%description tools
Tools for libsolv
%package -n ruby-solv
Group: Development/Languages/Ruby
Summary: Ruby bindings for %{name}
Provides: rubygem-solv
Provides: rubygem(solv)
Provides: rubygem(%{ruby_abi}:solv)
Requires: ruby(abi) = %{ruby_abi}
%description -n ruby-solv
Ruby bindings for %{name}
%package -n perl-solv
Group: Development/Languages/Perl
Summary: Perl bindings for %{name}
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
%description -n perl-solv
Perl bindings for %{name}
%package -n python3-solv
Group: Development/Languages/Python
Summary: Python bindings for %{name}
Requires: python(abi) = %{py3_ver}
%description -n python3-solv
Python bindings for %{name}
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}
%build
_CFLAGS='%{optflags} %{?gcc_lto}'
# Note! Build fails with `-Wl,--no-undefined`
_LDFLAGS='-Wl,--as-needed -Wl,--strip-all -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}'
cmake -S . -B build \
-Wno-dev \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_C_FLAGS="$_CFLAGS" \
-DCMAKE_CXX_FLAGS="$_CFLAGS" \
-DCMAKE_EXE_LINKER_FLAGS="$_LDFLAGS" \
-DCMAKE_MODULE_LINKER_FLAGS="$_LDFLAGS" \
-DCMAKE_SHARED_LINKER_FLAGS="$_LDFLAGS" \
-DCMAKE_VERBOSE_MAKEFILE=YES \
-DCMAKE_MODULE_PATH=%{_datadir}/cmake/Modules \
\
-DENABLE_PERL=ON \
-DENABLE_PYTHON=ON \
-DENABLE_RUBY=ON \
\
-DUSE_VENDORDIRS=ON \
\
-DENABLE_RPMDB=ON \
-DENABLE_RPMPKG=ON \
-DENABLE_PUBKEY=ON \
-DENABLE_RPMDB_BYRPMHEADER=ON \
-DENABLE_RPMDB_LIBRPM=ON \
-DENABLE_RPMPKG_LIBRPM=ON \
-DENABLE_RPMMD=ON \
-DENABLE_SUSEREPO=ON \
-DENABLE_COMPS=ON \
-DENABLE_HELIXREPO=ON \
-DENABLE_DEBIAN=ON \
\
-DMULTI_SEMANTICS=ON \
\
-DENABLE_LZMA_COMPRESSION=ON \
-DENABLE_BZIP2_COMPRESSION=ON \
-DENABLE_ZSTD_COMPRESSION=ON \
-DENABLE_ZCHUNK_COMPRESSION=ON \
\
-DWITH_SYSTEM_ZCHUNK=ON \
\
-DENABLE_COMPLEX_DEPS=ON
ninja -v -C build %{?_smp_mflags}
%install
DESTDIR=%{buildroot} ninja -v -C build install
%{__install} -m 0644 ext/pool_parserpmrichdep.h %{buildroot}%{_includedir}/solv/
%files
%defattr(-,root,root)
%license LICENSE.BSD
%doc CREDITS NEWS README doc/*.txt
%{_libdir}/libsolv.so.%{?so_ver}
%{_libdir}/libsolvext.so.%{?so_ver}
# Development stuff
%files devel
%defattr(-,root,root)
%dir %{_includedir}/solv/
%{_libdir}/pkgconfig/libsolv.pc
%{_libdir}/pkgconfig/libsolvext.pc
%{_includedir}/solv/*.h
%{_libdir}/libsolv.so
%{_libdir}/libsolvext.so
%dir %{_datadir}/cmake/Modules
%dir %{_datadir}/cmake
%{_datadir}/cmake/Modules/FindLibSolv.cmake
%doc %{_mandir}/man3/*
# Documentation
%files tools
%defattr(-,root,root)
%{_bindir}/*
%doc %{_mandir}/man1/*
%files -n ruby-solv
%defattr(-,root,root)
%dir %{rbso}
%{rbso}/*
%files -n perl-solv
%defattr(-,root,root)
%{perl_vendorarch}/*
%files -n python3-solv
%defattr(-,root,root)
%{python3_sitearch}/*
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%changelog