File glibc.spec of Package glibc

#
# spec file for package glibc (Version 2.9)
#
# Copyright (c) 2010 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
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#

# norootforbuild


Name:           glibc
BuildRequires:  gcc-c++ libstdc++-devel
BuildRequires:  libselinux-devel
%define build_locales 1
%define run_testsuite 0
%define disable_assert 0
%define enable_stackguard_randomization 1
%ifarch ppc ppc64
%define optimize_power 1
%else
%define optimize_power 0
%endif
%define powerpc_optimize_base_cpu_power4 0
%if %{optimize_power}
%define powerpc_optimize_cpu_power4 1
%ifarch ppc64
%define powerpc_optimize_base_cpu_power4 1
%define powerpc_optimize_cpu_power4 0
%endif
%ifarch ppc
%define powerpc_optimize_cpu_power5 1
%else
%define powerpc_optimize_cpu_power5 0
%endif
%define powerpc_optimize_cpu_power5_compile 0
%define powerpc_optimize_cpu_power6 1
%define powerpc_optimize_cpu_power7 0
%define powerpc_optimize_cpu_cell 1
%else
%define powerpc_optimize_cpu_power4 0
%define powerpc_optimize_cpu_power5 0
%define powerpc_optimize_cpu_power6 0
%define powerpc_optimize_cpu_power7 0
%define powerpc_optimize_cpu_cell 0
# optimize_power
%endif
License:        BSD 3-Clause; GPL v2 or later; LGPL v2.1 or later
Summary:        Standard Shared Libraries (from the GNU C Library)
Group:          System/Libraries
Obsoletes:      ngpt <= 2.2.2 ngpt-devel <= 2.2.2
Provides:       ntpt = 2.2.2 ngpt-devel = 2.2.2
# bug437293
%ifarch ppc64
Obsoletes:      glibc-64bit
%endif
%ifarch ppc
Obsoletes:      glibc-32bit
%endif
Provides:       rtld(GNU_HASH)
AutoReqProv:    on
Version:        2.9
Release:        2.<RELEASE13>
%define snapshot_date 2008111711
Url:            http://www.gnu.org/software/libc/libc.html
PreReq:         filesystem
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Source:         glibc-%{version}-%{snapshot_date}.tar.bz2
Source1:        glibc-nptl-%{version}-%{snapshot_date}.tar.bz2
Source3:        noversion.tar.bz2
Source4:        manpages.tar.bz2
Source8:        nsswitch.conf
Source9:        nscd.init
Source10:       bindresvport.blacklist
Source11:       ctype_b.c
Source12:       glibc_post_upgrade.c
Source14:       powerpc-cpu.tar.bz2
Source15:       glibc.rpmlintrc
%if %_target_cpu == "i686"
NoSource:       0
%endif
#
Patch0:         glibc-2.3-SuSE.diff
Patch1:         glibc-2.3.90-noversion.diff
Patch2:         glibc-2.3.90-fnmatch.diff
Patch3:         resolv.dynamic.diff
Patch4:         glibc-2.3.locales.diff.bz2
Patch5:         crypt_blowfish-glibc-2.3.diff
Patch6:         glibc-version.diff
Patch7:         glibc-2.4.90-revert-only-euro.diff
Patch8:         glibc-2.3-regcomp.diff
Patch9:         glibc-2.3.2-revert_tcsetattr.diff
Patch10:        glibc-2.3.1.localedef.diff
Patch11:        glibc-2.3.2.no_archive.diff
Patch12:        glibc-2.3.3-amd64-string.diff
Patch13:        libm-x86-64.diff.bz2
Patch14:        glibc-2.3.90-bindresvport.blacklist.diff
Patch15:        glibc-suse-note.diff
Patch16:        glibc-2.4.90-no_NO.diff
Patch17:        glibc-2.3.90-ld.so-madvise.diff
Patch18:        glibc-2.3.3-amd64-s_ceil.diff
Patch19:        glibc-2.4.90-mdns-resolver.diff
Patch20:        glibc-2.3.3-execstack.diff
Patch21:        glibc-2.4-china.diff
Patch22:        glibc-2.3.4-gb18030-big5hkscs.diff.bz2
Patch23:        glibc-2.4.90-nscd.diff
Patch24:        glibc-2.3.3-nscd-db-path.diff
Patch25:        glibc-2.3.5-nscd-zeronegtimeout.diff
Patch26:        glibc-2.3.90-langpackdir.diff
Patch27:        glibc-nptl-2.4-nofixsyscallnr.diff
Patch28:        crypt_blowfish-1.0.diff
Patch29:        glibc-2.5-ppc-llrintl.diff
Patch30:        glibc-2.6-configure.diff
Patch31:        glibc-2.2-sunrpc.diff
Patch32:        glibc-2.8-getconf.diff
Patch33:        glibc-2.8-dlosinfo.diff
Patch34:        getaddrinfo-ipv6-sanity.diff
Patch35:        glibc-2.8-revert-nscleanup.diff
Patch36:        ppc-atomic.diff
Patch37:        glibc-2.8-clone.diff
Patch38:        glibc-nss-deepbind.diff
Patch39:        glibc-fix-nscd.diff
Patch40:        glibc-compiled-binaries.diff
Patch41:        glibc-selinux.diff
Patch42:        glibc-getgroups-fortify.diff
Patch43:        missing-include-build-fix.diff
Patch44:        glibc-no-unwind-tables.diff
Patch45:        glibc-2.10-nscd-nomeminflight.diff
Patch46:        glibc-2.10-nscd-prunerace.diff
Patch47:        glibc-2.10-locale-tuesday.diff
Patch48:        glibc-2.10-nis-hosts.diff
Patch49:        glibc-2.10-unsetenv.diff
Patch50:        glibc-2.10-dns-fixpack.diff
Patch51:        glibc-2.10-dns-no-gethostbyname4.diff
Patch52:        glibc-2.10-ppc32-setcontext-fp.diff
Patch53:        glibc-2.10-nscd-gc-dataofs.diff
Patch54:        glibc-2.10-nscd-nostack.diff
Patch56:        glibc-2.10-shm-exec.diff
Patch57:        glibc-utmp-timeout-raise.diff
Patch58:        glibc-nscd-assert.diff
Patch59:        crypt_blowfish-sha-allow.diff
Patch60:        glibc-2.10-malloc-threadsafe.diff
Patch61:        glibc-2.11-timer-delete-race.diff
Patch62:        glibc-2.10-hsearch.diff
Patch63:        glibc-statfs64-ia64.diff
Patch64:        glibc-2.9-power6-cmplwi.diff
Patch65:        glibc-sap-captialsharps.diff
Patch66:        glibc-2.11.2-elftag.diff
Patch67:        glibc-2.11.2-mntent.diff
Patch68:        glibc-2.11-strfmon.diff
Patch69:        glibc-x86_64-fini-unwind.diff
Patch70:        glibc-nis-adjunct-as-shadow.diff
Patch71:        glibc-nscd-hconf.diff
Patch72:        glibc-2.11.3-audit.diff

%description
The GNU C Library provides the most important standard libraries used
by nearly all programs: the standard C library, the standard math
library, and the POSIX thread library. A system is not functional
without these libraries.



%package info
License:        GPL v2 or later
Summary:        Info Files for the GNU C Library
Group:          Documentation/Other
PreReq:         %{install_info_prereq}
AutoReqProv:    on

%description info
This package contains the documentation for the GNU C library stored as
info files. Due to a lack of resources, this documentation is not
complete and is partially out of date.



%package html
License:        GPL v2 or later; LGPL v2.1 or later
Summary:        HTML Documentation for the GNU C Library
Group:          Documentation/HTML
AutoReqProv:    on

%description html
This package contains the HTML documentation for the GNU C library. Due
to a lack of resources, this documentation is not complete and is
partially out of date.



%package i18ndata
License:        LGPL v2.1 or later
Summary:        Database Sources for 'locale'
Group:          System/Libraries
AutoReqProv:    on

%description i18ndata
This package contains the data needed to build the locale data files to
use the internationalization features of the GNU libc. It is normally
not necessary to install this packages, the data files are already
created.



%package locale
License:        GPL v2 or later; LGPL v2.1 or later
Summary:        Locale Data for Localized Programs
Group:          System/Libraries
Requires:       glibc = %{version}
AutoReqProv:    on
# bug437293
%ifarch ppc64
Obsoletes:      glibc-locale-64bit
%endif
%ifarch ppc
Obsoletes:      glibc-locale-32bit
%endif

%description locale
Locale data for the internationalisation features of the GNU C library.



%package -n nscd
License:        LGPL v2.1 or later
Summary:        Name Service Caching Daemon
Group:          System/Daemons
Provides:       glibc:/usr/sbin/nscd aaa_base:/etc/init.d/nscd
PreReq:         %insserv_prereq

%description -n nscd
Nscd caches name service lookups and can dramatically improve
performance with NIS, NIS+, and LDAP.



%package profile
License:        LGPL v2.1 or later
Summary:        Libc Profiling and Debugging Versions
Group:          Development/Libraries/C and C++
Requires:       glibc = %{version}
# bug437293
%ifarch ppc64
Obsoletes:      glibc-profile-64bit
%endif
%ifarch ppc
Obsoletes:      glibc-profile-32bit
%endif
AutoReqProv:    on

%description profile
This package contains special versions of the GNU C library which are
necessary for profiling and debugging.



%package devel
License:        BSD 3-Clause; GPL v2 or later; LGPL v2.1 or later
Summary:        Include Files and Libraries Mandatory for Development
Group:          Development/Libraries/C and C++
Obsoletes:      epoll = 1.0
Provides:       epoll <= 1.0
# bug437293
%ifarch ppc64
Obsoletes:      glibc-devel-64bit
%endif
%ifarch ppc
Obsoletes:      glibc-devel-32bit
%endif
PreReq:         /bin/rm
Requires:       glibc = %{version}, linux-kernel-headers
AutoReqProv:    on

%description devel
These libraries are needed to develop programs which use the standard C
library.



%package obsolete
License:        BSD 3-Clause; GPL v2 or later; LGPL v2.1 or later
Summary:        Obsolete Shared Libraries from the GNU C Library
Group:          System/Libraries
Requires:       glibc = %{version}
AutoReqProv:    on

%description obsolete
This package provides some old libraries from the GNU C Library which
are no longer supported. Additional it provides a compatibility library
for old binaries linked against glibc 2.0.

Install this package if you need one of this libraries to get old
binaries working, but since this libraries are not supported and there
is no gurantee that they work for you, you should try to get newer
versions of your software.



%prep
%setup -n glibc-%{version} -q -a 1 -a 3 -a 4 -a 14
%patch
# libNoVersion part is only active on ix86
%patch1
%patch2
%patch3
%patch4
%patch6
%patch7
%patch8
%patch9
%patch10
%patch11
%patch12
# strncmp is broken, let's delete it for now this way
rm sysdeps/x86_64/strncmp.S
%patch13 -E
# We have s_sincos.c in patch13, remove duplicate
rm sysdeps/x86_64/fpu/s_sincos.S
%patch14
%patch15
%patch16
%patch17
%patch18
#We have nss-mdns, why should we need this patch?
#%patch19
%patch20
%patch21
%patch22
%patch23
%patch24
%patch25
%patch26
%patch27
%patch28
%patch29
%patch30
%patch31
%patch32
%patch33
%patch34
%patch35
%patch36
%patch37
%patch38
%patch39
%patch40
%patch41
%patch42
%patch43
%patch44
%patch45 -p1
%patch46
%patch47
%patch48
%patch49
%patch50
%patch51
%patch52
%patch53
%patch54
# %patch55 is cpusetsize increase on SLE11, but it was too late to get this in 11.1
%patch56 -p1
%patch57
%patch58
%patch59
%patch60
%patch61
%patch62
%patch63
%patch64
%patch65
%patch66
%patch67
%patch68 -p1
%patch69
%patch70 -p1
%patch71 -p1
%patch72 -p1
%patch5
#
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
#
# Glibc 2.8 introduced the HP_TIMING element to the rtld_global_ro struct # definition.
# If the base is built without power4 the loader won't have this element in
# the struct whereas the power4/5/6/... libc will, so there will be a disconnect
# between the size of the rtld_global_ro struct between the two and dl_close
# ends up getting called incorrectly when it's actually attempting to call a
# resolver function.  This is because the GLRO() macro simply attempts to
# compute an offset and gets the wrong one.
# Building the base glibc with --with-cpu=power4 solves this problem.
# But: ppc32 can not default to -mcpu=power4 because it would emit instructions
# which are not available on G3, G4 etc.
#
# We simply remove the power4 files, and build the base glibc for a generic powerpc cpu
# Additional cputuned libs can now be used on powerpc32
#
rm -fv sysdeps/powerpc/powerpc32/power4/hp-timing.c sysdeps/powerpc/powerpc32/power4/hp-timing.h
find . -name configure | xargs touch

%build
if [ -x /bin/uname.bin ]; then
  /bin/uname.bin -a
else
  uname -a
fi
uptime || :
ulimit -a
nice
# Adjust glibc version.h
echo "#define CONFHOST \"%{_target_cpu}-suse-linux\"" >> version.h
echo "#define CVSDATE \"`date -r ChangeLog +%Y%m%d`\"" >> version.h
#
# Default CFLAGS and Compiler
#
BuildFlags="$RPM_OPT_FLAGS -U_FORTIFY_SOURCE -fno-strict-aliasing -fasynchronous-unwind-tables"
BuildFlags="$(echo $BuildFlags | sed -e 's#-fstack-protector##' -e 's#-ffortify=[0-9]*##')"
BuildCC="gcc"
BuildCCplus="g++"
add_ons=",libidn"
PARALLEL="%{?jobs:-j%jobs}"
#
#now overwrite for some architectures
#
%ifarch sparc64
BuildFlags="-O2 -mcpu=ultrasparc -mvis -fcall-used-g6"
BuildCC="gcc -m64"
BuildCCplus="$BuildCCplus -m64"
%endif
%ifarch sparc
BuildFlags="$BuildFlags -fcall-used-g6"
BuildCC="gcc -m32"
BuildCCplus="$BuildCCplus -m32"
%endif
%ifarch sparcv9
BuildFlags="$BuildFlags -mcpu=ultrasparc -fcall-used-g6"
BuildCC="gcc -m32"
BuildCCplus="$BuildCCplus -m32"
%endif
%ifarch alphaev6
BuildFlags="-mcpu=ev6"
%endif
%ifarch ppc ppc64
BuildFlags="$(echo $BuildFlags | sed 's#-mminimal-toc##')"
%endif
%ifarch ppc64
BuildCC="$BuildCC -m64"
BuildCCplus="$BuildCCplus -m64"
%endif
%ifarch hppa
BuildFlags="$BuildFlags -mpa-risc-1-1 -fstrict-aliasing"
%endif
%ifarch %ix86 x86_64
BuildFlags="$BuildFlags -mno-tls-direct-seg-refs"
%endif
# Add flags for all plattforms except AXP
%ifnarch alpha
BuildFlags="$BuildFlags -g"
%endif
%if %{disable_assert}
BuildFlags="$BuildFlags -DNDEBUG=1"
%endif
%ifarch %ix86
add_ons=$add_ons,noversion
%endif
configure_and_build_glibc() {
	local cflags="$1"
	local addons="$2"
	shift 2
	CFLAGS="$cflags" CC="$BuildCC" CXX="$BuildCCplus"  ../configure \
	--prefix=%{_prefix} \
        --libexecdir=%{_libdir} --infodir=%{_infodir} \
        --enable-add-ons=nptl$addons --without-cvs --enable-profile \
	"$@" \
%if %{enable_stackguard_randomization}
        --enable-stackguard-randomization \
%endif
	--build=%{_target_cpu}-suse-linux \
        --with-tls --with-__thread --enable-kernel=2.6.4
make $PARALLEL
}
#
# Build nptl
#
mkdir cc-nptl
cd cc-nptl
configure_and_build_glibc "$BuildFlags" \
%if %{powerpc_optimize_base_cpu_power4}
"$add_ons,powerpc-cpu" --with-cpu=power4
%else
"$add_ons"
%endif
cd ..
%if %{optimize_power}
#
# Build POWER optimized
#
for pcpu in \
%if %{powerpc_optimize_cpu_power4}
power4 \
%endif
%if %{powerpc_optimize_cpu_power5}
%if %{powerpc_optimize_cpu_power5_compile}
power5 \
%endif
%endif
%if %{powerpc_optimize_cpu_power6}
power6 \
%endif
%if %{powerpc_optimize_cpu_power7}
power7 \
%endif
; do
mkdir cc-$pcpu
cd cc-$pcpu
configure_and_build_glibc "$BuildFlags -mcpu=$pcpu" "$add_ons,powerpc-cpu" --with-cpu=$pcpu --disable-runbinaries
cd ..
done
%if %{powerpc_optimize_cpu_cell}
mkdir cc-ppc-cell-be
cd cc-ppc-cell-be
configure_and_build_glibc "$BuildFlags -mcpu=cell" "$add_ons" --disable-runbinaries
cd ..
%endif
# optimize_power
%endif
#
# Build html documentation
#
make -C cc-nptl html
#
# Build glibc_post_upgrade binary
#
$BuildCC -static -Os -g $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgrade \
     -Lcc-nptl -Bcc-nptl/csu \
    '-DREMOVE_TLS_DIRS' \
%ifarch ppc ppc64
%if !%{powerpc_optimize_cpu_power4}
    '-DREMOVE_PPC_OPTIMIZE_POWER4' \
%endif
%if !%{powerpc_optimize_cpu_power5}
    '-DREMOVE_PPC_OPTIMIZE_POWER5' \
%endif
%if !%{powerpc_optimize_cpu_power6}
    '-DREMOVE_PPC_OPTIMIZE_POWER6' \
%endif
%if !%{powerpc_optimize_cpu_power7}
    '-DREMOVE_PPC_OPTIMIZE_POWER7' \
%endif
%if !%{powerpc_optimize_cpu_cell}
    '-DREMOVE_PPC_OPTIMIZE_CELL' \
%endif
%endif
    '-DLIBDIR="/%{_lib}"' '-DGCONV_MODULES_DIR="%{_prefix}/%{_lib}/gconv"'

%check
%if %{run_testsuite}
# Increase timeout
export TIMEOUTFACTOR=16
%ifarch alpha %ix86 ppc ppc64 ia64 s390 s390x x86_64
# ix86: tst-cputimer? fails
# ia64: tst-timer4 fails
# ppc64: tst-pselect, ftwtest fails
# s390,s390x: tst-timer* fails
   make -C cc-nptl -k check || echo make check failed
%else
   make -C cc-nptl check
%endif
%endif
make -C cc-nptl check-abi || echo check-abi failed

%install
# We don't want to strip the .symtab from our libraries in find-debuginfo.sh,
# at least not from libpthread.so.* because it is used by libthread_db to find
# some non-exported symbols in order to detect if threading support
# should be enabled.  These symbols are _not_ exported, and we can't easily
# export them retroactively without changing the ABI.  So we have to
# continue to "export" them via .symtab, instead of .dynsym :-(
export STRIP_KEEP_SYMTAB=libpthread*
# Make sure we will create the gconv-modules.cache
mkdir -p $RPM_BUILD_ROOT%{_libdir}/gconv
touch $RPM_BUILD_ROOT%{_libdir}/gconv/gconv-modules.cache
# Do not install in parallel, timezone Makefile will fail
make install_root=$RPM_BUILD_ROOT install -C cc-nptl
%if %{optimize_power}
# run ldconfig to create the library symlinks
# do not use the new ldconfig from the build directory because
# it may contain instructions not suitable for the cpu on the builhost
my_ldconfig=/sbin/ldconfig
#
for pcpu in \
%if %{powerpc_optimize_cpu_power4}
power4 \
%endif
%if %{powerpc_optimize_cpu_power5}
%if %{powerpc_optimize_cpu_power5_compile}
power5 \
%endif
%endif
%if %{powerpc_optimize_cpu_power6}
power6 \
%endif
%if %{powerpc_optimize_cpu_power7}
power7 \
%endif
%if %{powerpc_optimize_cpu_cell}
ppc-cell-be \
%endif
; do
	make install_root=${RPM_BUILD_ROOT}/$pcpu install -C cc-$pcpu
	mkdir -p $RPM_BUILD_ROOT/%{_lib}/$pcpu
	for i in libc-%{version} libm-%{version} libpthread-%{version} libthread_db-1.0 librt-%{version}
	do
		mv $RPM_BUILD_ROOT/$pcpu/%{_lib}/$i.so $RPM_BUILD_ROOT/%{_lib}/$pcpu
	done
	$my_ldconfig -n $RPM_BUILD_ROOT/%{_lib}/$pcpu/
	rm -rf $RPM_BUILD_ROOT/$pcpu
done
%if %{powerpc_optimize_cpu_power4}
# ppc970 is compatible with power4, unless compiled with altivec support
# doing a symlink doesnt work, ldconfig follows them and accepts only the first real dir
if test -d $RPM_BUILD_ROOT/%{_lib}/power4
then
	mkdir -p $RPM_BUILD_ROOT/%{_lib}/ppc970
	for i in $RPM_BUILD_ROOT/%{_lib}/power4/*.so ; do
		b=`basename $i`
		ln -vs	../power4/$b \
			$RPM_BUILD_ROOT/%{_lib}/ppc970/$b
	done
	$my_ldconfig -n $RPM_BUILD_ROOT/%{_lib}/ppc970/
fi
%endif
%if %{powerpc_optimize_cpu_power5}
# power5+ is compatible with power5 (adds only a few floating point instructions)
# doing a symlink doesnt work, ldconfig follows them and accepts only the first real dir
# symlink to power4 directory, which is built only on ppc32
%if %{powerpc_optimize_cpu_power5_compile}
if test -d $RPM_BUILD_ROOT/%{_lib}/power5
then
	mkdir -p $RPM_BUILD_ROOT/%{_lib}/power5+
	for i in $RPM_BUILD_ROOT/%{_lib}/power5/*.so ; do
		b=`basename $i`
		ln -vs	../power5/$b \
			$RPM_BUILD_ROOT/%{_lib}/power5+/$b
	done
	$my_ldconfig -n $RPM_BUILD_ROOT/%{_lib}/power5+/
fi
%else
if test -d $RPM_BUILD_ROOT/%{_lib}/power4
then
	mkdir -p $RPM_BUILD_ROOT/%{_lib}/power5
	mkdir -p $RPM_BUILD_ROOT/%{_lib}/power5+
	for i in $RPM_BUILD_ROOT/%{_lib}/power4/*.so ; do
		b=`basename $i`
		ln -vs	../power4/$b \
			$RPM_BUILD_ROOT/%{_lib}/power5/$b
		ln -vs	../power4/$b \
			$RPM_BUILD_ROOT/%{_lib}/power5+/$b
	done
	$my_ldconfig -n $RPM_BUILD_ROOT/%{_lib}/power5/
	$my_ldconfig -n $RPM_BUILD_ROOT/%{_lib}/power5+/
fi
%endif
%endif
%if %{powerpc_optimize_cpu_power6}
# power6 is compatible with power6x
# doing a symlink doesnt work, ldconfig follows them and accepts only the first real dir
if test -d $RPM_BUILD_ROOT/%{_lib}/power6
then
	mkdir -p $RPM_BUILD_ROOT/%{_lib}/power6x
	for i in $RPM_BUILD_ROOT/%{_lib}/power6/*.so ; do
		b=`basename $i`
		ln -vs	../power6/$b \
			$RPM_BUILD_ROOT/%{_lib}/power6x/$b
	done
	$my_ldconfig -n $RPM_BUILD_ROOT/%{_lib}/power6x/
fi
%endif
# optimize_power
%endif
%if %{build_locales}
# Do not install locales in parallel!
cd cc-nptl
make install_root=$RPM_BUILD_ROOT install-locales -C ../localedata objdir=`pwd`
cd ..
%endif
#create file list for glibc-locale package
%{find_lang} libc
cd manpages; make install_root=$RPM_BUILD_ROOT install; cd ..
export RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_lib}/obsolete
#
# NPTL <bits/stdio-lock.h> is not usable outside of glibc, so include
# the generic one (RH#162634)
#
cp -av bits/stdio-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/stdio-lock.h
%ifarch s390x
#
# s390x is different ...
#
mkdir                                  $RPM_BUILD_ROOT/lib
ln -sf ../%{_lib}/ld-%{version}.so     $RPM_BUILD_ROOT/lib/ld64.so.1
%endif
#
# Install glibc_post_upgrade tool
#
install -m 0700 glibc_post_upgrade $RPM_BUILD_ROOT%{_sbindir}
#
# Install the mapv4v6* header files
#
mkdir -p $RPM_BUILD_ROOT/usr/include/resolv
install -m 0644 resolv/mapv4v6addr.h $RPM_BUILD_ROOT/usr/include/resolv/
install -m 0644 resolv/mapv4v6hostent.h $RPM_BUILD_ROOT/usr/include/resolv/
#
# glibc documentation in HTML
#
mkdir -p $RPM_BUILD_ROOT/usr/share/doc/glibc
cp -p manual/libc/*.html $RPM_BUILD_ROOT/usr/share/doc/glibc
#
# Install nscd tools
#
mkdir -p $RPM_BUILD_ROOT/etc/init.d
cp nscd/nscd.conf $RPM_BUILD_ROOT/etc
install -m 755 $RPM_SOURCE_DIR/nscd.init $RPM_BUILD_ROOT/etc/init.d/nscd
ln -sf /etc/init.d/nscd $RPM_BUILD_ROOT/usr/sbin/rcnscd
mkdir -p $RPM_BUILD_ROOT/var/run/nscd
touch $RPM_BUILD_ROOT/var/run/nscd/{passwd,group,hosts}
touch $RPM_BUILD_ROOT/var/run/nscd/{socket,nscd.pid}
# Install bindresvport.blacklist
install -m 644 $RPM_SOURCE_DIR/bindresvport.blacklist $RPM_BUILD_ROOT/etc
#
# Create ld.so.conf
#
cat > $RPM_BUILD_ROOT/etc/ld.so.conf <<EOF
%ifarch s390x sparc64 x86_64 ppc64 ppc
/usr/X11R6/lib64/Xaw3d
/usr/X11R6/lib64
/usr/lib64/Xaw3d
%endif
/usr/X11R6/lib/Xaw3d
/usr/X11R6/lib
/usr/lib/Xaw3d
%ifarch %x86
/usr/i586-suse-linux/lib
%else
%ifarch ppc ppc64
/usr/powerpc-suse-linux/lib
/usr/powerpc64-suse-linux/lib
%else
/usr/$RPM_ARCH-suse-linux/lib
%endif
%endif
/usr/local/lib
/opt/kde3/lib
%ifarch s390x sparc64 x86_64 ppc64 ppc
/lib64
/lib
/usr/lib64
/usr/lib
/usr/local/lib64
/opt/kde3/lib64
%endif
include /etc/ld.so.conf.d/*.conf
EOF
# Add ldconfig cache directory for directory ownership
mkdir -p $RPM_BUILD_ROOT/var/cache/ldconfig
#
# install nsswitch.conf
#
install -m 644 $RPM_SOURCE_DIR/nsswitch.conf $RPM_BUILD_ROOT/etc
#
# install /etc/default/nss
#
mkdir -p $RPM_BUILD_ROOT/etc/default
install -m 644 nis/nss $RPM_BUILD_ROOT/etc/default/
#
# install /etc/gai.conf
#
install -m 644 posix/gai.conf $RPM_BUILD_ROOT/etc
%ifarch %ix86
#
# Remove static library and .so symlink, not needed
rm -f $RPM_BUILD_ROOT%{_libdir}/libNoVersion*
# Move to lib/obsolete
mkdir -p $RPM_BUILD_ROOT/%{_lib}/obsolete/noversion
mv -v $RPM_BUILD_ROOT/%{_lib}/libNoVersion* $RPM_BUILD_ROOT/%{_lib}/obsolete/noversion/
%endif
#
# Don't look at it! We don't wish a /bin/sh requires
chmod 644 $RPM_BUILD_ROOT/usr/bin/ldd
#
# Remove not needed files from BuildRoot
# Also, we now take timezone stuff from a separate package
#  create empty cache file
rm -f $RPM_BUILD_ROOT/etc/ld.so.cache
touch $RPM_BUILD_ROOT/etc/ld.so.cache
for i in sbin/sln usr/bin/tzselect usr/sbin/zic usr/sbin/zdump etc/localtime; do
	rm -f $RPM_BUILD_ROOT/$i
done
rm -rf $RPM_BUILD_ROOT/usr/share/zoneinfo
# remove the buildflags tracking section and the build-id
for o in $RPM_BUILD_ROOT/%{_libdir}/crt[1in].o $RPM_BUILD_ROOT/%{_libdir}/lib*_nonshared.a; do
  objcopy -R ".comment.SUSE.OPTs" -R ".note.gnu.build-id" $o
done

%clean
rm -rf $RPM_BUILD_ROOT

%post -p %{_sbindir}/glibc_post_upgrade

%postun -p /sbin/ldconfig

%post locale
for l in /usr/share/locale/locale.alias %{_libdir}/gconv/gconv-modules; do
	[ -d "$l.d" ] || continue
	echo "###X# The following is autogenerated from extra files in the .d directory:" >>"$l"
	cat "$l.d"/* >>"$l"
done

%post info
%install_info --info-dir=%{_infodir} %{_infodir}/libc.info.gz

%postun info
%install_info_delete --info-dir=%{_infodir} %{_infodir}/libc.info.gz

%preun -n nscd
%stop_on_removal nscd

%post -n nscd
%{insserv_force_if_yast nscd}

%postun -n nscd
%restart_on_update nscd
%insserv_cleanup
exit 0
#
# glibc
#

%files
%defattr(-,root,root)
%doc LICENSES
%config(noreplace) /etc/bindresvport.blacklist
%config /etc/ld.so.conf
%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /etc/ld.so.cache
%config(noreplace) /etc/rpc
%verify(not md5 size mtime) %config(noreplace) /etc/nsswitch.conf
%verify(not md5 size mtime) %config(noreplace) /etc/gai.conf
%config(noreplace) /etc/default/nss
%doc %{_mandir}/man1/getconf.1.gz
%doc %{_mandir}/man1/getent.1.gz
%doc %{_mandir}/man1/localedef.1.gz
%doc %{_mandir}/man5/*
%doc %{_mandir}/man8/rpcinfo.8.gz
/%{_lib}/ld-%{version}.so
%ifarch ppc s390 mips hppa
/%{_lib}/ld.so.1
%else
%ifarch ia64
/%{_lib}/ld-linux-ia64.so.2
%else
%ifarch s390x ppc64
/%{_lib}/ld64.so.1
%ifarch s390x
/lib/ld64.so.1
%endif
%else
%ifarch x86_64
/%{_lib}/ld-linux-x86-64.so.2
%else
/%{_lib}/ld-linux.so.2
%endif
%endif
%endif
%endif
/%{_lib}/libBrokenLocale-%{version}.so
/%{_lib}/libBrokenLocale.so.1
/%{_lib}/libSegFault.so
/%{_lib}/libanl-%{version}.so
/%{_lib}/libanl.so.1
/%{_lib}/libc-%{version}.so
/%{_lib}/libc.so.6*
/%{_lib}/libcidn-%{version}.so
/%{_lib}/libcidn.so.1
/%{_lib}/libcrypt-%{version}.so
/%{_lib}/libcrypt.so.1
/%{_lib}/libdl-%{version}.so
/%{_lib}/libdl.so.2*
/%{_lib}/libm-%{version}.so
/%{_lib}/libm.so.6*
/%{_lib}/libmemusage.so
/%{_lib}/libnsl-%{version}.so
/%{_lib}/libnsl.so.1
/%{_lib}/libnss_compat-%{version}.so
/%{_lib}/libnss_compat.so.2
/%{_lib}/libnss_dns-%{version}.so
/%{_lib}/libnss_dns.so.2
/%{_lib}/libnss_files-%{version}.so
/%{_lib}/libnss_files.so.2
/%{_lib}/libnss_hesiod-%{version}.so
/%{_lib}/libnss_hesiod.so.2
/%{_lib}/libnss_nis-%{version}.so
/%{_lib}/libnss_nis.so.2
/%{_lib}/libnss_nisplus-%{version}.so
/%{_lib}/libnss_nisplus.so.2
/%{_lib}/libpcprofile.so
/%{_lib}/libpthread-%{version}.so
/%{_lib}/libpthread.so.0
/%{_lib}/libresolv-%{version}.so
/%{_lib}/libresolv.so.2
/%{_lib}/librt-%{version}.so
/%{_lib}/librt.so.1
/%{_lib}/libthread_db-1.0.so
/%{_lib}/libthread_db.so.1
/%{_lib}/libutil-%{version}.so
/%{_lib}/libutil.so.1
%if %{optimize_power}
%if %{powerpc_optimize_cpu_power4}
%dir %attr(0755,root,root) /%{_lib}/power4
/%{_lib}/power4/libc-%{version}.so
/%{_lib}/power4/libc.so.6*
/%{_lib}/power4/libm-%{version}.so
/%{_lib}/power4/libm.so.6*
/%{_lib}/power4/libpthread-%{version}.so
/%{_lib}/power4/libpthread.so.0
/%{_lib}/power4/librt-%{version}.so
/%{_lib}/power4/librt.so.1
/%{_lib}/power4/libthread_db-1.0.so
/%{_lib}/power4/libthread_db.so.1
%dir %attr(0755,root,root) /%{_lib}/ppc970
/%{_lib}/ppc970/libc-%{version}.so
/%{_lib}/ppc970/libc.so.6*
/%{_lib}/ppc970/libm-%{version}.so
/%{_lib}/ppc970/libm.so.6*
/%{_lib}/ppc970/libpthread-%{version}.so
/%{_lib}/ppc970/libpthread.so.0
/%{_lib}/ppc970/librt-%{version}.so
/%{_lib}/ppc970/librt.so.1
/%{_lib}/ppc970/libthread_db-1.0.so
/%{_lib}/ppc970/libthread_db.so.1
%endif
%if %{powerpc_optimize_cpu_power5}
%dir %attr(0755,root,root) /%{_lib}/power5
/%{_lib}/power5/libc-%{version}.so
/%{_lib}/power5/libc.so.6*
/%{_lib}/power5/libm-%{version}.so
/%{_lib}/power5/libm.so.6*
/%{_lib}/power5/libpthread-%{version}.so
/%{_lib}/power5/libpthread.so.0
/%{_lib}/power5/librt-%{version}.so
/%{_lib}/power5/librt.so.1
/%{_lib}/power5/libthread_db-1.0.so
/%{_lib}/power5/libthread_db.so.1
%dir %attr(0755,root,root) /%{_lib}/power5+
/%{_lib}/power5+/libc-%{version}.so
/%{_lib}/power5+/libc.so.6*
/%{_lib}/power5+/libm-%{version}.so
/%{_lib}/power5+/libm.so.6*
/%{_lib}/power5+/libpthread-%{version}.so
/%{_lib}/power5+/libpthread.so.0
/%{_lib}/power5+/librt-%{version}.so
/%{_lib}/power5+/librt.so.1
/%{_lib}/power5+/libthread_db-1.0.so
/%{_lib}/power5+/libthread_db.so.1
%endif
%if %{powerpc_optimize_cpu_power6}
%dir %attr(0755,root,root) /%{_lib}/power6
/%{_lib}/power6/libc-%{version}.so
/%{_lib}/power6/libc.so.6*
/%{_lib}/power6/libm-%{version}.so
/%{_lib}/power6/libm.so.6*
/%{_lib}/power6/libpthread-%{version}.so
/%{_lib}/power6/libpthread.so.0
/%{_lib}/power6/librt-%{version}.so
/%{_lib}/power6/librt.so.1
/%{_lib}/power6/libthread_db-1.0.so
/%{_lib}/power6/libthread_db.so.1
%dir %attr(0755,root,root) /%{_lib}/power6x
/%{_lib}/power6x/libc-%{version}.so
/%{_lib}/power6x/libc.so.6*
/%{_lib}/power6x/libm-%{version}.so
/%{_lib}/power6x/libm.so.6*
/%{_lib}/power6x/libpthread-%{version}.so
/%{_lib}/power6x/libpthread.so.0
/%{_lib}/power6x/librt-%{version}.so
/%{_lib}/power6x/librt.so.1
/%{_lib}/power6x/libthread_db-1.0.so
/%{_lib}/power6x/libthread_db.so.1
%endif
%if %{powerpc_optimize_cpu_power7}
%dir %attr(0755,root,root) /%{_lib}/power7
/%{_lib}/power7/libc-%{version}.so
/%{_lib}/power7/libc.so.6*
/%{_lib}/power7/libm-%{version}.so
/%{_lib}/power7/libm.so.6*
/%{_lib}/power7/libpthread-%{version}.so
/%{_lib}/power7/libpthread.so.0
/%{_lib}/power7/librt-%{version}.so
/%{_lib}/power7/librt.so.1
/%{_lib}/power7/libthread_db-1.0.so
/%{_lib}/power7/libthread_db.so.1
%endif
%if %{powerpc_optimize_cpu_cell}
%dir %attr(0755,root,root) /%{_lib}/ppc-cell-be
/%{_lib}/ppc-cell-be/libc-%{version}.so
/%{_lib}/ppc-cell-be/libc.so.6*
/%{_lib}/ppc-cell-be/libm-%{version}.so
/%{_lib}/ppc-cell-be/libm.so.6*
/%{_lib}/ppc-cell-be/libpthread-%{version}.so
/%{_lib}/ppc-cell-be/libpthread.so.0
/%{_lib}/ppc-cell-be/librt-%{version}.so
/%{_lib}/ppc-cell-be/librt.so.1
/%{_lib}/ppc-cell-be/libthread_db-1.0.so
/%{_lib}/ppc-cell-be/libthread_db.so.1
%endif
# optimize_power
%endif
%dir %attr(0700,root,root) /var/cache/ldconfig
/sbin/ldconfig
/usr/bin/gencat
/usr/bin/getconf
/usr/bin/getent
/usr/bin/iconv
%attr(755,root,root) /usr/bin/ldd
%ifarch %ix86 sparc sparcv9
/usr/bin/lddlibc4
%endif
/usr/bin/locale
/usr/bin/localedef
%attr(4755,root,root) %{_libdir}/pt_chown
%dir %attr(0755,root,root) %{_libdir}/getconf
%{_libdir}/getconf/*
%{_sbindir}/glibc_post_upgrade
%{_sbindir}/rpcinfo
/usr/sbin/iconvconfig

%files obsolete
%defattr (755,root,root,755)
%dir /%{_lib}/obsolete/
%ifarch %ix86
%dir /%{_lib}/obsolete/noversion
/%{_lib}/obsolete/noversion/libNoVersion-%{version}.so
/%{_lib}/obsolete/noversion/libNoVersion.so.1
%endif
#
# locale subpackage
#

%files locale -f libc.lang
%defattr(-,root,root)
/usr/share/locale/locale.alias
%if %{build_locales}
/usr/lib/locale
%endif
%{_libdir}/gconv

%files devel
%defattr(-,root,root)
%doc COPYING COPYING.LIB FAQ INSTALL NEWS NOTES README BUGS CONFORMANCE $RPM_SOURCE_DIR/ctype_b.c
%doc %{_mandir}/man1/catchsegv.1.gz
%doc %{_mandir}/man1/rpcgen.1.gz
%doc %{_mandir}/man1/sprof.1.gz
%doc %{_mandir}/man3/*
/usr/bin/catchsegv
/usr/bin/mtrace
/usr/bin/pcprofiledump
/usr/bin/rpcgen
/usr/bin/sprof
/usr/bin/xtrace
%{_prefix}/include/*
%{_libdir}/*.o
%{_libdir}/*.so
%{_libdir}/libBrokenLocale.a
%{_libdir}/libanl.a
%{_libdir}/libbsd-compat.a
%{_libdir}/libc.a
%{_libdir}/libc_nonshared.a
%{_libdir}/libcrypt.a
%{_libdir}/libdl.a
%{_libdir}/libg.a
%{_libdir}/libieee.a
%ifarch ppc ppc64 s390 s390x
%{_libdir}/libnldbl_nonshared.a
%endif
%{_libdir}/libm.a
%{_libdir}/libmcheck.a
%{_libdir}/libnsl.a
%{_libdir}/libpthread.a
%{_libdir}/libpthread_nonshared.a
%{_libdir}/libresolv.a
%{_libdir}/librpcsvc.a
%{_libdir}/librt.a
%{_libdir}/libutil.a
#
# glibc-info
#

%files info
%defattr(-,root,root)
%doc %{_infodir}/libc.info.gz
%doc %{_infodir}/libc.info-?.gz
%doc %{_infodir}/libc.info-??.gz
#
# glibc-html
#

%files html
%defattr(-,root,root)
%doc %{_prefix}/share/doc/glibc
#
# glibc-i18ndata
#

%files i18ndata
%defattr(-,root,root)
%{_prefix}/share/i18n
#
# nscd
#

%files -n nscd
%defattr(-,root,root)
%config(noreplace) /etc/nscd.conf
%config /etc/init.d/nscd
/usr/sbin/nscd
/usr/sbin/rcnscd
%dir %attr(0755,root,root) /var/run/nscd
%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/nscd.pid
%attr(0666,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/socket
%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/passwd
%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/group
%attr(0600,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/run/nscd/hosts
#
# glibc-profile
#

%files profile
%defattr(-,root,root)
%{_libdir}/libc_p.a
%{_libdir}/libBrokenLocale_p.a
%{_libdir}/libanl_p.a
%{_libdir}/libm_p.a
%{_libdir}/libcrypt_p.a
%{_libdir}/libpthread_p.a
%{_libdir}/libresolv_p.a
%{_libdir}/libnsl_p.a
%{_libdir}/librt_p.a
%{_libdir}/librpcsvc_p.a
%{_libdir}/libutil_p.a
%{_libdir}/libdl_p.a

%changelog
openSUSE Build Service is sponsored by