Hello community,

here is the log from the commit of package zlib for openSUSE:Factory checked in 
at 2012-10-23 07:16:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/zlib (Old)
 and      /work/SRC/openSUSE:Factory/.zlib.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "zlib", Maintainer is "mvysko...@suse.com"

Changes:
--------
--- /work/SRC/openSUSE:Factory/zlib/zlib.changes        2012-05-08 
06:54:02.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.zlib.new/zlib.changes   2012-10-23 
07:16:09.000000000 +0200
@@ -1,0 +2,16 @@
+Mon Oct 22 05:10:48 UTC 2012 - co...@suse.com
+
+- buildignore checks for now to get bootstrapping working
+
+-------------------------------------------------------------------
+Mon Oct 15 07:39:29 UTC 2012 - mvysko...@suse.com
+
+- add longest_match performance patch (fate#314093)
+  * suggested by IBM, sent upstream
+- rename the main library package to libz1 according Shared
+  Library Policy
+- profiling build can be enabled via build --with profiling
+- use the human-readable package description from zlib.net
+- add rpmlintrc
+
+-------------------------------------------------------------------

New:
----
  zlib-1.2.7-improve-longest_match-performance.patch
  zlib-rpmlintrc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ zlib.spec ++++++
--- /var/tmp/diff_new_pack.n8aC3h/_old  2012-10-23 07:16:11.000000000 +0200
+++ /var/tmp/diff_new_pack.n8aC3h/_new  2012-10-23 07:16:11.000000000 +0200
@@ -16,38 +16,61 @@
 #
 
 
+%bcond_with profiling
+
 Name:           zlib
-Provides:       libz
-Obsoletes:      libz
-# bug437293
-%ifarch ppc64
-Obsoletes:      zlib-64bit
-%endif
-#
 Version:        1.2.7
 Release:        0
 Summary:        Data Compression Library
 License:        Zlib
 Group:          System/Libraries
 Url:            http://www.zlib.net/
-# git://github.com/kaffeemonster/zlib.git (branch adler32_vec)
-Source:         http://zlib.net/zlib-%{version}.tar.bz2
+Source0:        http://zlib.net/zlib-%{version}.tar.bz2
 Source1:        LICENSE
 Source2:        baselibs.conf
+Source3:        zlib-rpmlintrc
+#PATCH-FIX-SUSE: fate#314093, sent upstream by IBM
+Patch0:         zlib-1.2.7-improve-longest_match-performance.patch
 BuildRequires:  pkgconfig
+#!BuildIgnore:  rpmlint-Factory
+#!BuildIgnore:  post-build-checks
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+# bug437293
+%ifarch ppc64
+Obsoletes:      zlib-64bit
+%endif
 
 %description
-ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt
-(deflate format) and rfc1952.txt (gzip format). These documents are
-also available in other formats from
-ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html.
+zlib is designed to be a free, general-purpose, legally unencumbered -- that
+is, not covered by any patents -- lossless data-compression library for use on
+virtually any computer hardware and operating system. the zlib data format is
+itself portable across platforms. unlike the lzw compression method used in
+unix compress(1) and in the gif image format, the compression method currently
+used in zlib essentially never expands the data. (lzw can double or triple the
+file size in extreme cases.) zlib's memory footprint is also independent of the
+input data and can be reduced, if necessary, at some cost in compression.
+
+%package -n libz1
+Summary:        Include Files and Libraries mandatory for Development
+Group:          Development/Languages/C and C++
+Provides:       %{name} = %{version}-%{release}
+Obsoletes:      %{name} < %{version}-%{release}
+
+%description -n libz1
+zlib is designed to be a free, general-purpose, legally unencumbered -- that
+is, not covered by any patents -- lossless data-compression library for use on
+virtually any computer hardware and operating system. the zlib data format is
+itself portable across platforms. unlike the lzw compression method used in
+unix compress(1) and in the gif image format, the compression method currently
+used in zlib essentially never expands the data. (lzw can double or triple the
+file size in extreme cases.) zlib's memory footprint is also independent of the
+input data and can be reduced, if necessary, at some cost in compression.
 
 %package devel
 Summary:        Include Files and Libraries mandatory for Development
 Group:          Development/Languages/C and C++
 Requires:       glibc-devel
-Requires:       zlib = %{version}
+Requires:       libz1 = %{version}
 Provides:       libz:/usr/include/zlib.h
 # bug437293
 %ifarch ppc64
@@ -73,12 +96,12 @@
 
 %prep
 %setup -q
+%patch0 -p1
 
 %build
 export LDFLAGS="-Wl,-z,relro,-z,now"
-# Marcus: breaks example64 in 32bit builds.
-%define do_profiling 0
-%if %{do_profiling}
+# Marcus: breaks example64 in 32bit builds, so it's disabled by default
+%if %{with profiling}
 profiledir=$(mktemp -d)
 trap "rm -rf $profiledir" EXIT
 CC="gcc" ./configure --shared --prefix=%{_prefix} --libdir=/%{_lib}
@@ -96,24 +119,23 @@
 time make check
 
 %install
-#mkdir -p %{buildroot}%{_mandir}/man3
 mkdir -p %{buildroot}%{_libdir}
 %make_install
 ln -s -v /%{_lib}/$(readlink %{buildroot}/%{_lib}/libz.so) 
%{buildroot}%{_libdir}/libz.so
 rm -v %{buildroot}/%{_lib}/libz.so
 # static lib
 mv %{buildroot}/%{_lib}/libz.a %{buildroot}%{_libdir}
-# Move .pc file to %{_libdir}
+# Move .pc file to _libdir
 mv %{buildroot}/%{_lib}/pkgconfig %{buildroot}%{_libdir}
 # manpage
 install -m 644 zlib.3 %{buildroot}%{_mandir}/man3
 install -m 644 zutil.h %{buildroot}%{_includedir}
 
-%post -p /sbin/ldconfig
+%post -n libz1 -p /sbin/ldconfig
 
-%postun -p /sbin/ldconfig
+%postun -n libz1 -p /sbin/ldconfig
 
-%files
+%files -n libz1
 %defattr(-,root,root)
 /%{_lib}/libz.so.1.2.*
 /%{_lib}/libz.so.1

++++++ baselibs.conf ++++++
--- /var/tmp/diff_new_pack.n8aC3h/_old  2012-10-23 07:16:11.000000000 +0200
+++ /var/tmp/diff_new_pack.n8aC3h/_new  2012-10-23 07:16:11.000000000 +0200
@@ -1,3 +1,3 @@
-zlib
+libz1
   targettype x86 provides "baselibs-x86:<prefix>/lib/libz.so.1"
 zlib-devel

++++++ zlib-1.2.7-improve-longest_match-performance.patch ++++++
# http://mail.madler.net/pipermail/zlib-devel_madler.net/2012-June/002907.html
# http://mail.madler.net/pipermail/zlib-devel_madler.net/2012-August/002977.html
From: Andreas Krebbel krebbel at linux.vnet.ibm.com 
Subject: RFC: Improve longest_match performance

The code currently generated for longest_match looks far from optimal
due to a bunch of pointless zero/sign extend instructions.

By just promoting a few data types in the function I was able to get
rid of all but two. The new hotloop is almost half the size of the
original version providing quite a performance win for S/390:

Measured on a zEnterprise z196
zlib compiled with upstream GCC 4.8 branch

32 bit                  old     new
                        
256MB randomdata:       11.65s  10.92s  6.68%   
100MB manpages:         4.23s   4.14s   2.17%
217MB PDF:              10.54s  9.44s   11.65%

unaligned ok

256MB randomdata:       10.90s  10.54s  3.41%
100MB manpages:         3.94s   3.87s   1.81%
217MB PDF:              8.77s   8.64s   1.50%

64 bit                  old     new
                        
256MB randomdata:       11.90s  11.43s  4.11%   
100MB manpages:         4.51s   4.44s   1.58%
217MB PDF:              10.11s  9.89s   2.22%

unaligned ok

256MB randomdata:       11.51s  11.15s  3.23%
100MB manpages:         4.33s   3.99s   8.52%
217MB PDF:              9.81s   9.02s   8.76%

I also did some measurements on x86 and Power:

For Power (64 bit, unaligned_ok) an additional zero extend
appears. However, the impact is not measurable. There are minor wins
and minor regressions. The overall result is flat.

For Core2 32 bit the patch is a clear winner with up to 9% for the pdf
test.  Also on 64 bit the code optimized for Core2 gets a bit smaller
but unfortunately causes some regressions which I cannot explain.

For mainframe customers the performance of zlib is very important so I
would be very happy to see the patch integrated into upstream
zlib. Given that the patch might cause minor regressions on other
targets, would it be possible to enable it arch-dependent?

See below for the patch and some code snippets from my tests.

Bye,

-Andreas-

---
 deflate.c |   15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

Index: zlib-1.2.7/deflate.c
===================================================================
--- zlib-1.2.7.orig/deflate.c   2012-02-13 01:15:47.000000000 +0100
+++ zlib-1.2.7/deflate.c        2012-09-27 13:39:57.942762946 +0200
@@ -1143,15 +1143,16 @@
 /* For 80x86 and 680x0, an optimized version will be provided in match.asm or
  * match.S. The code will be functionally equivalent.
  */
-local uInt longest_match(s, cur_match)
+local uInt longest_match(s, pcur_match)
     deflate_state *s;
-    IPos cur_match;                             /* current match */
+    IPos pcur_match;                             /* current match */
 {
+    ptrdiff_t cur_match = pcur_match; /* extend to pointer width */
     unsigned chain_length = s->max_chain_length;/* max hash chain length */
     register Bytef *scan = s->window + s->strstart; /* current string */
     register Bytef *match;                       /* matched string */
     register int len;                           /* length of current match */
-    int best_len = s->prev_length;              /* best match length so far */
+    ptrdiff_t best_len = s->prev_length;              /* best match length so 
far */
     int nice_match = s->nice_match;             /* stop if match long enough */
     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
         s->strstart - (IPos)MAX_DIST(s) : NIL;
@@ -1166,12 +1167,12 @@
      * Try with and without -DUNALIGNED_OK to check.
      */
     register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
-    register ush scan_start = *(ushf*)scan;
-    register ush scan_end   = *(ushf*)(scan+best_len-1);
+    register uInt scan_start = *(ushf*)scan;
+    register uInt scan_end   = *(ushf*)(scan+best_len-1);
 #else
     register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-    register Byte scan_end1  = scan[best_len-1];
-    register Byte scan_end   = scan[best_len];
+    register uInt scan_end1  = scan[best_len-1];
+    register uInt scan_end   = scan[best_len];
 #endif
 
     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
++++++ zlib-rpmlintrc ++++++
# zlib-devel require libz1 - zlib produces libz, not libzlib
addFilter("zlib-devel.*: W: no-dependency-on zlib*/zlib-libs/libzlib")
# used only if build --with profiling
addFilter("zlib.src.*: W: make-check-outside-check-section time make check")
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to