From 245d095d95d56a923babe33b6012a01652d497d2 Mon Sep 17 00:00:00 2001 From: Jacek Szafarkiewicz Date: Mon, 28 Aug 2023 10:42:03 -0300 Subject: [PATCH] Add support for compat mode Build zlib-ng twice in order to distribute the compat sub-packages that can fully replace zlib (zlib-ng-compat and zlib-ng-compat-devel). Run ABI tests provided by upstream during %check. Signed-off-by: Tulio Magno Quites Machado Filho --- far.diff | 12 ++++ zlib-ng.spec | 165 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 far.diff diff --git a/far.diff b/far.diff new file mode 100644 index 0000000..a525f46 --- /dev/null +++ b/far.diff @@ -0,0 +1,12 @@ +diff --git a/zconf.h.in b/zconf.h.in +index 074f0255..e7183db3 100644 +--- a/zconf.h.in ++++ b/zconf.h.in +@@ -200,4 +200,7 @@ typedef PTRDIFF_TYPE ptrdiff_t; + + typedef size_t z_size_t; + ++/* Some packages depend on FAR being defined, i.e. old versions of minizip. */ ++#define FAR ++ + #endif /* ZCONF_H */ diff --git a/zlib-ng.spec b/zlib-ng.spec index 467a053..59e3269 100644 --- a/zlib-ng.spec +++ b/zlib-ng.spec @@ -1,18 +1,36 @@ +%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.2.13 +# 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.1.3 -Release: 2%{?dist} +Release: 7%{?dist} 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 -ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 +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" @@ -23,23 +41,128 @@ Summary: Development files for %{name} Requires: %{name}%{?_isa} = %{version}-%{release} %description devel -The %{name}-devel package contains static libraries and header files for -developing application that use %{name}. +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. + +%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. -%cmake -DWITH_SANITIZERS=ON -DINSTALL_LIB_DIR=%{_libdir} +%global cmake_param %{?with_sanitizers:-DWITH_SANITIZER=ON} -DINSTALL_LIB_DIR=%{_libdir} + +# 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 +# Disable new strategies in order to keep compatibility with zlib. +%cmake %{cmake_param} -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF +%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 vendor pc +%else +%global vendor unknown +%endif + +%ifarch %{supported_abi_test} +CHOST=%{target_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}-%{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 @@ -53,7 +176,39 @@ developing application that use %{name}. %{_libdir}/libz-ng.so %{_libdir}/pkgconfig/%{name}.pc +%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 + + +%endif + + %changelog +* Wed Oct 18 2023 Tulio Magno Quites Machado Filho - 2.1.3-7 +- Improve the patch that defines the FAR macro + +* Wed Sep 27 2023 Tulio Magno Quites Machado Filho - 2.1.3-6 +- Add a patch that defines the FAR macro + +* Wed Sep 20 2023 Tulio Magno Quites Machado Filho - 2.1.3-5 +- Fix WITH_SANITIZER + +* Tue Sep 19 2023 Tulio Magno Quites Machado Filho - 2.1.3-4 +- Disable WITH_NEW_STRATEGIES in compat mode + +* Thu Aug 24 2023 Tulio Magno Quites Machado Filho - 2.1.3-3 +- Enable zlib compat build + * Sat Jul 22 2023 Fedora Release Engineering - 2.1.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild