diff --git a/bzip2-1.0.6-autoconfiscated.patch b/bzip2-1.0.6-autoconfiscated.patch index b8cdfbb..ba689a3 100644 --- a/bzip2-1.0.6-autoconfiscated.patch +++ b/bzip2-1.0.6-autoconfiscated.patch @@ -53,7 +53,7 @@ +both instances of the shared library can live together. --- /dev/null +++ configure.ac -@@ -0,0 +1,71 @@ +@@ -0,0 +1,62 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + @@ -65,19 +65,20 @@ +AC_CONFIG_SRCDIR([bzlib.h]) +AC_CONFIG_MACRO_DIR([m4]) + -+AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([foreign subdir-objects]) +AM_MAINTAINER_MODE + +# Checks for programs. +AC_PROG_AWK +AC_PROG_CC_STDC ++AC_PROG_CC_C_O +AC_USE_SYSTEM_EXTENSIONS +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET -+AC_PROG_LIBTOOL ++LT_INIT([disable-static pic-only]) +PKG_PROG_PKG_CONFIG -+ ++gl_VISIBILITY +# Checks for libraries. + +# Checks for header files. @@ -107,16 +108,6 @@ + CFLAGS="$save_CFLAGS" +]) + -+AC_MSG_CHECKING([whether compiler understands -fno-strength-reduce]) -+save_CFLAGS="$CFLAGS" -+CFLAGS="$CFLAGS -fno-strength-reduce" -+AC_TRY_COMPILE([], [], [ -+ AC_MSG_RESULT([yes]) -+], [ -+ AC_MSG_RESULT([no]) -+ CFLAGS="$save_CFLAGS" -+]) -+ +# Checks for library functions. + +# Write the output. @@ -127,9 +118,10 @@ +AC_OUTPUT --- /dev/null +++ Makefile.am -@@ -0,0 +1,138 @@ +@@ -0,0 +1,137 @@ ++ACLOCAL_AMFLAGS = -I m4 +lib_LTLIBRARIES = libbz2.la -+ ++AM_CFLAGS = $(CFLAG_VISIBILITY) +libbz2_la_SOURCES = \ + blocksort.c \ + huffman.c \ @@ -141,7 +133,7 @@ + +libbz2_la_LDFLAGS = \ + -version-info $(BZIP2_LT_CURRENT):$(BZIP2_LT_REVISION):$(BZIP2_LT_AGE) \ -+ -no-undefined -Wl,--version-script=$(srcdir)/libbz2.map ++ -no-undefined + +include_HEADERS = bzlib.h + @@ -264,8 +256,6 @@ + words2 \ + words3 \ + xmlproc.sh -+ -+ACLOCAL_AMFLAGS = -I m4 --- /dev/null +++ bzip2.pc.in @@ -0,0 +1,11 @@ @@ -281,36 +271,98 @@ +Libs: -L${libdir} -lbz2 +Cflags: -I${includedir} --- /dev/null -+++ libbz2.map -@@ -0,0 +1,31 @@ -+{ -+global: ++++ m4/visibility.m4 +@@ -0,0 +1,78 @@ ++# visibility.m4 serial 4 (gettext-0.18.2) ++dnl Copyright (C) 2005, 2008, 2010-2011 Free Software Foundation, Inc. ++dnl This file is free software; the Free Software Foundation ++dnl gives unlimited permission to copy and/or distribute it, ++dnl with or without modifications, as long as this notice is preserved. + -+ BZ2_bzBuffToBuffCompress; -+ BZ2_bzBuffToBuffDecompress; -+ BZ2_bzCompress; -+ BZ2_bzCompressEnd; -+ BZ2_bzCompressInit; -+ BZ2_bzDecompress; -+ BZ2_bzDecompressEnd; -+ BZ2_bzDecompressInit; -+ BZ2_bzRead; -+ BZ2_bzReadClose; -+ BZ2_bzReadGetUnused; -+ BZ2_bzReadOpen; -+ BZ2_bzWrite; -+ BZ2_bzWriteClose; -+ BZ2_bzWriteClose64; -+ BZ2_bzWriteOpen; -+ BZ2_bzclose; -+ BZ2_bzdopen; -+ BZ2_bzerror; -+ BZ2_bzflush; -+ BZ2_bzlibVersion; -+ BZ2_bzopen; -+ BZ2_bzread; -+ BZ2_bzwrite; ++dnl From Bruno Haible. + -+local: *; ++dnl Tests whether the compiler supports the command-line option ++dnl -fvisibility=hidden and the function and variable attributes ++dnl __attribute__((__visibility__("hidden"))) and ++dnl __attribute__((__visibility__("default"))). ++dnl Does *not* test for __visibility__("protected") - which has tricky ++dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on ++dnl MacOS X. ++dnl Does *not* test for __visibility__("internal") - which has processor ++dnl dependent semantics. ++dnl Does *not* test for #pragma GCC visibility push(hidden) - which is ++dnl "really only recommended for legacy code". ++dnl Set the variable CFLAG_VISIBILITY. ++dnl Defines and sets the variable HAVE_VISIBILITY. + -+}; ++AC_DEFUN([gl_VISIBILITY], ++[ ++ AC_REQUIRE([AC_PROG_CC]) ++ CFLAG_VISIBILITY= ++ HAVE_VISIBILITY=0 ++ if test -n "$GCC"; then ++ dnl First, check whether -Werror can be added to the command line, or ++ dnl whether it leads to an error because of some other option that the ++ dnl user has put into $CC $CFLAGS $CPPFLAGS. ++ AC_MSG_CHECKING([whether the -Werror option is usable]) ++ AC_CACHE_VAL([gl_cv_cc_vis_werror], [ ++ gl_save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -Werror" ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([[]], [[]])], ++ [gl_cv_cc_vis_werror=yes], ++ [gl_cv_cc_vis_werror=no]) ++ CFLAGS="$gl_save_CFLAGS"]) ++ AC_MSG_RESULT([$gl_cv_cc_vis_werror]) ++ dnl Now check whether visibility declarations are supported. ++ AC_MSG_CHECKING([for simple visibility declarations]) ++ AC_CACHE_VAL([gl_cv_cc_visibility], [ ++ gl_save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -fvisibility=hidden" ++ dnl We use the option -Werror and a function dummyfunc, because on some ++ dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning ++ dnl "visibility attribute not supported in this configuration; ignored" ++ dnl at the first function definition in every compilation unit, and we ++ dnl don't want to use the option in this case. ++ if test $gl_cv_cc_vis_werror = yes; then ++ CFLAGS="$CFLAGS -Werror" ++ fi ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM( ++ [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; ++ extern __attribute__((__visibility__("default"))) int exportedvar; ++ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); ++ extern __attribute__((__visibility__("default"))) int exportedfunc (void); ++ void dummyfunc (void) {} ++ ]], ++ [[]])], ++ [gl_cv_cc_visibility=yes], ++ [gl_cv_cc_visibility=no]) ++ CFLAGS="$gl_save_CFLAGS"]) ++ AC_MSG_RESULT([$gl_cv_cc_visibility]) ++ if test $gl_cv_cc_visibility = yes; then ++ CFLAG_VISIBILITY="-fvisibility=hidden" ++ HAVE_VISIBILITY=1 ++ AC_DEFINE([BZ_EXTERN], [__attribute__((__visibility__("default")))], [To make symbol visible]) ++ fi ++ fi ++ AC_SUBST([CFLAG_VISIBILITY]) ++ AC_SUBST([HAVE_VISIBILITY]) ++ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], ++ [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ++]) +--- bzlib.h.orig ++++ bzlib.h +@@ -91,9 +91,11 @@ typedef + # endif + #else + # define BZ_API(func) func +-# define BZ_EXTERN extern + #endif + ++#ifndef BZ_EXTERN ++#define BZ_EXTERN extern ++#endif + + /*-- Core (low-level) library functions --*/ + diff --git a/bzip2-ocloexec.patch b/bzip2-ocloexec.patch new file mode 100644 index 0000000..4a4dc0b --- /dev/null +++ b/bzip2-ocloexec.patch @@ -0,0 +1,19 @@ +--- bzlib.c.orig ++++ bzlib.c +@@ -1414,7 +1414,15 @@ BZFILE * bzopen_or_bzdopen + } + mode++; + } +- strcat(mode2, writing ? "w" : "r" ); ++ ++ /* open fds with O_CLOEXEC _only_ when we are the initiator ++ * aka. bzopen() but not bzdopen() */ ++ if(open_mode == 0) { ++ strcat (mode2, writing ? "we" : "re" ); ++ } else { ++ strcat(mode2, writing ? "w" : "r" ); ++ } ++ + strcat(mode2,"b"); /* binary mode */ + + if (open_mode==0) { diff --git a/bzip2.changes b/bzip2.changes index 4a30fd8..647985b 100644 --- a/bzip2.changes +++ b/bzip2.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Sat Jan 7 19:26:14 UTC 2012 - crrodriguez@opensuse.org + +- bzlib: open file descriptors with O_CLOEXEC, but just like + the zlib case, only when bzopen() is used and not bzdopen() + to avoid messing up with the caller's semantics. + It is responsability of to initiator to set that flag in such case. +- Replace error prone list of exported symbols with proper use of + GCC visibility features. + ------------------------------------------------------------------- Fri Sep 30 20:07:46 UTC 2011 - coolo@suse.com diff --git a/bzip2.spec b/bzip2.spec index be195a4..14ecc0c 100644 --- a/bzip2.spec +++ b/bzip2.spec @@ -1,7 +1,7 @@ # # spec file for package bzip2 # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -46,6 +46,7 @@ Patch2: bzip2-maxlen20.patch Patch3: bzip2-faster.patch Patch5: bzip2-unsafe_strcpy.patch Patch6: bzip2-point-to-doc-pkg.patch +Patch7: bzip2-ocloexec.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -86,6 +87,7 @@ The bzip2 runtime library development files. %patch3 %patch5 %patch6 -p1 +%patch7 %build profile_bzip2() @@ -96,7 +98,7 @@ profile_bzip2() # time ./bzip2 $tmpfile time ./bzip2 -d < $tmpfile.bz2 > /dev/null } -sh ./autogen.sh +autoreconf -fiv %if %{do_profiling} export CFLAGS="$RPM_OPT_FLAGS %{cflags_profile_generate}" %endif @@ -111,7 +113,7 @@ mv .libs/*.gcda .libs.save/ make clean mv .libs.save .libs export CFLAGS="$RPM_OPT_FLAGS %{cflags_profile_feedback}" -%configure\ +%configure \ --libdir=/%{_lib}\ --disable-static %endif @@ -133,7 +135,6 @@ install -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_mandir}/man1 %files %defattr(-,root,root) -%doc COPYING NEWS README %doc %{_mandir}/man1/* %{_bindir}/* @@ -143,12 +144,12 @@ install -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_mandir}/man1 %files -n libbz2-1 %defattr(-,root,root) -%doc COPYING NEWS README /%{_lib}/libbz2.so.1 /%{_lib}/libbz2.so.1.* %files -n libbz2-devel %defattr(-,root,root) +%doc LICENSE CHANGES %{_includedir}/bzlib.h %{_libdir}/libbz2.so %{_libdir}/pkgconfig/bzip2.pc