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
openSUSE Build Service is sponsored by