zlib-ng/zlib-ng.spec
Tulio Magno Quites Machado Filho c93c81c630 Enable DFLTCC on s390x
Ensure DFLTCC is enabled on s390x for both deflate and inflate.
2025-12-12 10:36:45 -03:00

235 lines
5.9 KiB
RPMSpec

%bcond_without compat
%bcond_without sanitizers
# Be explicit about the soname in order to avoid unintentional changes.
# Before modifying any of the sonames, this must be announced to the Fedora
# community as it may break many other packages.
# A change proposal is needed:
# https://docs.fedoraproject.org/en-US/program_management/changes_policy/
%global soname libz-ng.so.2
%global compat_soname libz.so.1
# Compatible with the following zlib version.
%global zlib_ver 1.3.1
# Obsoletes zlib versions less than.
%global zlib_obsoletes 1.3
# ABI files for ix86 and s390x are not available upstream.
%global supported_abi_test aarch64 ppc64le x86_64
Name: zlib-ng
Version: 2.3.2
Release: %autorelease
Summary: Zlib replacement with optimizations
License: Zlib
Url: https://github.com/zlib-ng/zlib-ng
Source0: https://github.com/zlib-ng/zlib-ng/archive/%{version}/%{name}-%{version}.tar.gz
Patch: far.diff
BuildRequires: cmake >= 3.1
BuildRequires: gcc-c++
BuildRequires: cmake(GTest)
BuildRequires: libabigail
%description
zlib-ng is a zlib replacement that provides optimizations for "next generation"
systems.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
The %{name}-devel package contains libraries and header files for developing
application that use %{name}.
%if %{with compat}
%package compat
Summary: Zlib implementation provided by %{name}
Provides: zlib = %{zlib_ver}
Provides: zlib%{?_isa} = %{zlib_ver}
Conflicts: zlib%{?_isa}
Obsoletes: zlib < %{zlib_obsoletes}
%description compat
zlib-ng is a zlib replacement that provides optimizations for "next generation"
systems.
The %{name}-compat package contains the library that is API and binary
compatible with zlib.
%package compat-devel
Summary: Development files for %{name}-compat
Requires: %{name}-compat%{?_isa} = %{version}-%{release}
Provides: zlib-devel = %{zlib_ver}
Provides: zlib-devel%{?_isa} = %{zlib_ver}
Conflicts: zlib-devel%{?_isa}
Obsoletes: zlib-devel < %{zlib_obsoletes}
%description compat-devel
The %{name}-compat-devel package contains libraries and header files for
developing application that use zlib.
%package compat-static
Summary: Static libraries for %{name}-compat
Requires: %{name}-compat-devel%{?_isa} = %{version}-%{release}
Provides: zlib-static = %{zlib_ver}
Provides: zlib-static%{?_isa} = %{zlib_ver}
Conflicts: zlib-static%{?_isa}
Obsoletes: zlib-static < %{zlib_obsoletes}
%description compat-static
The %{name}-compat-static package contains static libraries needed for
developing applications that use zlib.
%endif
%prep
%autosetup -p1 -n %{name}-%{version}
%build
cat <<_EOF_
###########################################################################
#
# Build the default zlib-ng library
#
###########################################################################
_EOF_
# zlib-ng uses a different macro for library directory.
%global cmake_param %{?with_sanitizers:-DWITH_SANITIZER=ON}
%ifarch riscv64
%global cmake_param %cmake_param -DWITH_RVV=OFF
%endif
%ifarch s390x
%global cmake_param %cmake_param -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON
%endif
%if 0%{?rhel} >= 10
%ifarch x86_64
# RHEL 10 has x86_64-v3 as baseline, turning the CRC32 Chorba optimization
# unnecessary.
# More info: https://github.com/zlib-ng/zlib-ng/releases/tag/2.3.1
%global cmake_param %cmake_param -DWITH_CRC32_CHORBA=OFF
%endif
%endif
# Setting __cmake_builddir is not necessary in this step, but do it anyway for symmetry.
%global __cmake_builddir %{_vpath_builddir}
%cmake %{cmake_param}
%cmake_build
%if %{with compat}
cat <<_EOF_
###########################################################################
#
# Build the compat mode library
#
###########################################################################
_EOF_
%global __cmake_builddir %{_vpath_builddir}-compat
# defining BUILD_SHARED_LIBS disables the static library
%undefine _cmake_shared_libs
# Disable new strategies in order to keep compatibility with zlib.
%cmake %{cmake_param} -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
%cmake_build
%endif
%check
cat <<_EOF_
###########################################################################
#
# Run the zlib-ng tests
#
###########################################################################
_EOF_
%global __cmake_builddir %{_vpath_builddir}
%ctest
%ifarch ppc64le
# Workaround Copr, that sets _target_cpu to ppc64le.
%global target_cpu powerpc64le
%else
%global target_cpu %{_target_cpu}
%endif
%ifarch x86_64
%global cpu_vendor pc
%else
%global cpu_vendor unknown
%endif
%ifarch %{supported_abi_test}
CHOST=%{target_cpu}-%{cpu_vendor}-linux-gnu sh test/abicheck.sh
%endif
%if %{with compat}
cat <<_EOF_
###########################################################################
#
# Run the compat mode tests
#
###########################################################################
_EOF_
%global __cmake_builddir %{_vpath_builddir}-compat
%ctest
%ifarch %{supported_abi_test}
CHOST=%{target_cpu}-%{cpu_vendor}-linux-gnu sh test/abicheck.sh --zlib-compat
%endif
%endif
%install
%global __cmake_builddir %{_vpath_builddir}
%cmake_install
%if %{with compat}
%global __cmake_builddir %{_vpath_builddir}-compat
%cmake_install
%endif
%files
%license LICENSE.md
%doc README.md
%{_libdir}/libz-ng.so.%{version}
%{_libdir}/%{soname}
%files devel
%{_includedir}/zconf-ng.h
%{_includedir}/zlib-ng.h
%{_includedir}/zlib_name_mangling-ng.h
%{_libdir}/libz-ng.so
%{_libdir}/pkgconfig/%{name}.pc
%dir %{_libdir}/cmake/zlib-ng/
%{_libdir}/cmake/zlib-ng/*
%if %{with compat}
%files compat
%{_libdir}/%{compat_soname}
%{_libdir}/libz.so.%{zlib_ver}.zlib-ng
%files compat-devel
%{_includedir}/zconf.h
%{_includedir}/zlib.h
%{_includedir}/zlib_name_mangling.h
%{_libdir}/libz.so
%{_libdir}/pkgconfig/zlib.pc
%dir %{_libdir}/cmake/ZLIB/
%{_libdir}/cmake/ZLIB/*
%files compat-static
%{_libdir}/libz.a
%endif
%changelog
%autochangelog