glibc/glibc.spec

1172 lines
35 KiB
RPMSpec

#
# spec file for package glibc
#
# Copyright (c) 2011 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/
#
Name: glibc
License: GPLv2+
Summary: Standard Shared Libraries (from the GNU C Library)
Group: System/Libraries
BuildRequires: gcc-c++
BuildRequires: libselinux-devel
BuildRequires: libstdc++-devel
%define _filter_GLIBC_PRIVATE 1
%define build_locales 1
%define run_testsuite 0
%define disable_assert 0
%define enable_stackguard_randomization 1
%ifarch ppc ppc64
%define optimize_power 1
%ifarch ppc
%define powerpc_optimize_base power3
%define powerpc_optimize_tune power3
%define powerpc_optimize_cpu_power4 1
%else
%define powerpc_optimize_base power4
%define powerpc_optimize_tune power5
%define powerpc_optimize_cpu_power4 0
%endif
# We are not building Power CPU specific optimizations for openSUSE.
%define powerpc_optimize_cpu_power6 0
%define powerpc_optimize_cpu_power7 0
%define powerpc_optimize_cpu_cell 0
%else
%define optimize_power 0
%define powerpc_optimize_base 0
%define powerpc_optimize_cpu_power4 0
%define powerpc_optimize_cpu_power6 0
%define powerpc_optimize_cpu_power7 0
%define powerpc_optimize_cpu_cell 0
%endif # ppc, ppc64
%ifarch %ix86 x86_64
%define enablekernel 2.6.32
%else
%define enablekernel 2.6.5
%endif
%ifarch ppc ppc64
# On PowerPC we got a memory corruption during building, disabling
# exp_malloc fixed it. Disable it until we have found and fixed the
# root cause.
%define exp_malloc 0
%else
%define exp_malloc 1
%endif
# ngpt was used in 8.1 and SLES8
Obsoletes: ngpt < 2.2.2
Obsoletes: ngpt-devel < 2.2.2
Provides: ngpt = 2.2.2
Provides: ngpt-devel = 2.2.2
Conflicts: kernel < %{enablekernel}
# bug437293 - handle update from SLES10 on PowerPC
%ifarch ppc64
Obsoletes: glibc-64bit
%endif
%ifarch ppc
Obsoletes: glibc-32bit
%endif
Version: 2.13
Release: 5
Url: http://www.gnu.org/software/libc/libc.html
Source: glibc-%{version}-996cf2ef0727.tar.bz2
Source2: http://ftp.gnu.org/gnu/glibc/glibc-ports-2.13.tar.bz2
Source3: noversion.tar.bz2
Source4: manpages.tar.bz2
Source5: usr.sbin.nscd
Source8: nsswitch.conf
Source9: nscd.init
Source10: bindresvport.blacklist
Source12: glibc_post_upgrade.c
Source15: glibc.rpmlintrc
Source16: baselibs.conf
Requires(pre): filesystem
Provides: rtld(GNU_HASH)
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if %_target_cpu == "i686"
# We need to avoid to have only the src rpm from i686 on the media,
# since it does not work on other architectures.
NoSource: 0
%endif
#
# PATCH-FIX-OPENSUSE remove lfs test from testsuite aj@suse.de
Patch0: glibc-testsuite.patch
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch1: glibc-2.3.90-noversion.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch2: glibc-fnmatch-multibyte.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch3: glibc-resolv-reload.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch4: glibc-2.3.locales.diff.bz2
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch5: crypt_blowfish-1.0-suse.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch7: glibc-version.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch8: glibc-2.4.90-revert-only-euro.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch11: glibc-2.3.1.localedef.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch12: glibc-2.3.2.no_archive.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch13: libm-x86-64.diff.bz2
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch14: glibc-2.3.90-bindresvport.blacklist.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch16: glibc-2.4.90-no_NO.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch18: glibc-2.3.3-amd64-s_ceil.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch20: glibc-2.4-china.diff
# PATCH-FIX-OPENSUSE Fix gb18030 code bnc#54080
Patch21: glibc-2.3.4-gb18030-big5hkscs.diff.bz2
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch22: glibc-2.4.90-nscd.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch23: glibc-2.3.3-nscd-db-path.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch24: glibc-2.3.5-nscd-zeronegtimeout.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch25: glibc-2.3.90-langpackdir.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch27: glibc-2.6-configure.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch28: glibc-2.2-sunrpc.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch29: glibc-2.8-getconf.diff
# PATCH-FIX-OPENSUSE only use ipv6 if real ipv6 address exists bnc#361697, bnc#684534
Patch30: getaddrinfo-ipv6-sanity.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch31: ppc-atomic.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch33: glibc-compiled-binaries.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch36: glibc-no-unwind-tables.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch37: glibc-2.10-nscd-nostack.diff
# PATCH-FEATURE-SLE increase cpusetsize to 4096, needs to be kept for compatibility kukuk@suse.de
Patch38: glibc-cpusetsize.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch39: glibc-2.10.99-ia64-include.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch40: libm-x86-64-exceptions.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch41: glibc-uio-cell.diff
# PATCH-FIX-SLE -- Do not assume statfs64 exists for ia64's ia32 layer bnc#534828
Patch42: glibc-statfs64-ia64.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch43: missing-include-build-fix.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch44: glibc-ppc64-vdso-time.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch45: glibc-gai-private4.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch46: glibc-resolv-mdnshint.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch47: glibc-nscd-hconf.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch48: glibc-malloc-arena-max.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch49: glibc-fini-unwind.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch50: glibc-gconvcache-s390.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch51: glibc-vfprintf-positional.diff
# PATCH-FIX-OPENSUSE bnc#657627
Patch52: glibc-elf-localscope.diff
# PATCH-FIX-UPSTREAM Fix longlong.h for zArch
Patch53: glibc-zarch-longlong.diff
# PATCH-FEATURE-OPENSUSE disable backward memcpy aj@suse.de
Patch54: glibc-disable-backward-memcpy.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch55: glibc-bso-12454.diff
# PATCH-FIX-UPSTREAM fix static memcpy
Patch56: glibc-static-memcpy.diff
# FIX-OPENSUSE compile some files with -fno-strict-aliasing
Patch58: glibc-strict-aliasing.diff
# PATCH-FIX-UPSTREAM fix preloading of shared libs aj@suse.de
Patch59: glibc-2.13-dl-load.patch
# PATCH-FIX-UPSTREAM fix x86 <bits/sigcontext.h> aj@suse.de
Patch60: glibc-x86-bits-sigcontext.patch
# PATCH-FEATURE-UPSTREAM Speedup getsysstats call aj@suse.de
Patch61: glibc-2.15-getsysstats-speedup.patch
# PATCH-FIX-UPSTREAM Fix gcc 4.6 warnings aj@suse.de
Patch62: glibc-2.13-warnings.fix
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch500: ARM_glibc-2.10.1-local-eabi-wchar.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch501: ARM_glibc-2.10.1-local-hwcap-updates.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch502: ARM_glibc-2.10.1-local-lowlevellock.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch503: ARM_glibc-2.10.1-local-no-hwcap.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: GPLv2+
Summary: Info Files for the GNU C Library
Group: Documentation/Other
Requires(post): %{install_info_prereq}
Requires(postun): %{install_info_prereq}
%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: GPLv2+ ; LGPLv2.1+
Summary: HTML Documentation for the GNU C Library
Group: Documentation/HTML
%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: LGPLv2.1+
Summary: Database Sources for 'locale'
Group: System/Libraries
%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: GPLv2+ ; LGPLv2.1+
Summary: Locale Data for Localized Programs
Group: System/Libraries
Requires(post): /bin/cat
Requires: glibc = %{version}
# 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: LGPLv2.1+
Summary: Name Service Caching Daemon
Group: System/Daemons
Provides: aaa_base:/etc/init.d/nscd
Provides: glibc:/usr/sbin/nscd
Requires(preun): %insserv_prereq
Requires(post): %insserv_prereq
Requires(postun): %insserv_prereq
%description -n nscd
Nscd caches name service lookups and can dramatically improve
performance with NIS, NIS+, and LDAP.
%package profile
License: LGPLv2.1+
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
%description profile
This package contains special versions of the GNU C library which are
necessary for profiling and debugging.
%package devel
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
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
Requires: glibc = %{version}
Requires: linux-kernel-headers
%description devel
These libraries are needed to develop programs which use the standard C
library.
%package devel-static
Summary: C library static libraries for -static linking
Group: Development/Libraries/C and C++
Requires: %{name}-devel = %{version}
%description devel-static
The glibc-devel-static package contains the C library static libraries
for -static linking. You don't need these, unless you link statically,
which is highly discouraged.
%package utils
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Summary: Development utilities from GNU C library
Group: Development/Languages/C and C++
Requires: glibc = %{version}
%description utils
The glibc-utils package contains mtrace, a memory leak tracer and
xtrace, a function call tracer which can be helpful during program
debugging.
If you are unsure if you need this, don't install this package.
%ifarch %ix86
%package obsolete
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Summary: Obsolete Shared Libraries from the GNU C Library
Group: System/Libraries
Requires: glibc = %{version}
%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.
%endif
%prep
%ifarch %arm armv5tel armv7l
# add glibc-ports for arm
# this is CURRENTLY BROKEN; ARM-interested contributors need to provide
# new tested glibc-ports source
%setup -n glibc-%{version} -q -a 2 -a 3 -a 4
%else
# any other leave out ports
%setup -n glibc-%{version} -q -a 3 -a 4
%endif
%patch0
# libNoVersion part is only active on ix86
%patch1
%patch2 -p1
%patch3
%patch4
%patch5
%patch7
%patch8
%patch11
%patch12
%patch13 -E
# We have s_sincos.c in patch13, remove duplicate
rm sysdeps/x86_64/fpu/s_sincos.S
%patch14
%patch16
%patch18
%patch20
%patch21
# avoid changing nscd_stat.c mtime to avoid code generation
# differences on each rebuild
touch -r nscd/nscd_stat.c nscd/s-stamp
%patch22
%patch23
%patch24
touch -r nscd/s-stamp nscd/nscd_stat.c
rm nscd/s-stamp
%patch25
%patch27
%patch28
%patch29
%patch30
%patch31
%patch33
%patch36
%patch37
%patch38
%patch39
%patch40
%patch41 -p1
%if 0%{?sles_version}
# Only apply for x86 on SLES
%patch42
%endif
%patch43 -p1
%patch44 -p1
%patch45
%patch46 -p1
%patch47 -p1
%if !%{exp_malloc}
%patch48 -p1
%endif
%patch49
%patch50
%patch51 -p1
%patch52
%patch53 -p1
%patch54 -p1
%patch55 -p1
%patch56 -p1
%patch58
%patch59 -p1
%patch60 -p1
%patch61 -p1
%patch62 -p1
%ifarch %arm armv5tel armv7l
%patch500
%patch501
%patch502
%patch503
%endif
#
# 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
###
#######################################################################
%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="%{optflags} -U_FORTIFY_SOURCE"
BuildFlags="$(echo $BuildFlags | sed -e 's#-fstack-protector##' -e 's#-ffortify=[0-9]*##')"
BuildCC="gcc"
BuildCCplus="g++"
add_ons=",libidn"
PARALLEL="%{?_smp_mflags}"
#
#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
%ifarch %arm armv5tel armv7l
add_ons=$add_ons,ports
BuildFlags="-march=armv5te -O2 -Wall"
# fails to build otherwise - need to recheck and fix
%define enable_stackguard_randomization 0
%endif
configure_and_build_glibc() {
local dirname="$1"; shift
local cflags="$1"; shift
local addons="$1"; shift
mkdir "cc-$dirname"
cd "cc-$dirname"
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
%ifarch %arm armv5tel armv7l
--build=%{_target_cpu}-suse-linux-gnueabi \
%else
--build=%{_target_cpu}-suse-linux \
%endif
%ifarch ppc ppc64 %{ix86} x86_64
--enable-multi-arch \
%endif
%if %{exp_malloc}
--enable-experimental-malloc \
%endif
--with-tls --with-__thread --enable-kernel=%{enablekernel} \
--enable-bind-now
# Should we enable --enable-nss-crypt to build use freebl3 hash functions?
make $PARALLEL
cd ..
}
%if !%{optimize_power}
#
# Build base glibc
#
configure_and_build_glibc base "$BuildFlags" "$add_ons"
%else
#
# Build POWER-optimized glibc
#
# First, base build:
pBuildFlags="$BuildFlags -mcpu=%{powerpc_optimize_base} -mtune=%{powerpc_optimize_tune}"
%if %{powerpc_optimize_base} != "power3"
configure_and_build_glibc base "$pBuildFlags" "$add_ons" --with-cpu=%{powerpc_optimize_base}
%else
# Use no default CPU
configure_and_build_glibc base "$pBuildFlags" "$add_ons"
%endif
# Then other power variants:
for pcpu in \
%if %{powerpc_optimize_cpu_power4}
power4 \
%endif
%if %{powerpc_optimize_cpu_power6}
power6 \
%endif
%if %{powerpc_optimize_cpu_power7}
power7 \
%endif
; do
configure_and_build_glibc $pcpu "$BuildFlags -mcpu=$pcpu" "$add_ons" \
--with-cpu=$pcpu --disable-runbinaries
done
# Eventually, special Cell variant:
%if %{powerpc_optimize_cpu_cell}
configure_and_build_glibc ppc-cell-be "$BuildFlags -mcpu=cell" "$add_ons" --disable-runbinaries
%endif
%endif # optimize_power
#
# Build html documentation
#
make -C cc-base html
#
# Build glibc_post_upgrade binary
#
$BuildCC -static %{optflags} -Os $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgrade \
-Lcc-base -Bcc-base/csu \
'-DREMOVE_TLS_DIRS' '-DREMOVE_PPC_OPTIMIZE_POWER5' \
%ifarch ppc ppc64
%if !%{powerpc_optimize_cpu_power4}
'-DREMOVE_PPC_OPTIMIZE_POWER4' \
%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="%{_libdir}/gconv"'
#######################################################################
###
### CHECK
###
#######################################################################
%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-base -k check || echo make check failed
%else
make -C cc-base check
%endif
%endif
make -C cc-base check-abi || echo check-abi failed
#######################################################################
###
### INSTALL
###
#######################################################################
%install
# We don't want to strip the .symtab from our libraries in find-debuginfo.sh,
# certainly 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 :-(
# But we also want to keep .symtab and .strtab of other libraries since some
# debugging tools currently require these sections directly inside the main
# files - specifically valgrind and PurifyPlus.
export STRIP_KEEP_SYMTAB=*.so*
# Make sure we will create the gconv-modules.cache
mkdir -p %{buildroot}%{_libdir}/gconv
touch %{buildroot}%{_libdir}/gconv/gconv-modules.cache
# Install base glibc
# Do not install in parallel, timezone Makefile will fail
make install_root=%{buildroot} install -C cc-base
# Install power-optimized glibc
%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_power6}
power6 \
%endif
%if %{powerpc_optimize_cpu_power7}
power7 \
%endif
%if %{powerpc_optimize_cpu_cell}
ppc-cell-be \
%endif
; do
make install_root=%{buildroot}/$pcpu install -C cc-$pcpu
mkdir -p %{buildroot}/%{_lib}/$pcpu
for i in libc-%{version} libm-%{version} libpthread-%{version} libthread_db-1.0 librt-%{version}; do
mv %{buildroot}/$pcpu/%{_lib}/$i.so %{buildroot}/%{_lib}/$pcpu
done
$my_ldconfig -n %{buildroot}/%{_lib}/$pcpu/
rm -rf %{buildroot}/$pcpu
done
%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 %{buildroot}/%{_lib}/power6; then
mkdir -p %{buildroot}/%{_lib}/power6x
for i in %{buildroot}/%{_lib}/power6/*.so; do
b=`basename $i`
ln -vs ../power6/$b %{buildroot}/%{_lib}/power6x/$b
done
$my_ldconfig -n %{buildroot}/%{_lib}/power6x/
fi
%endif
%endif # optimize_power
# Install locales
%if %{build_locales}
# Do not install locales in parallel!
cd cc-base
make install_root=%{buildroot} install-locales -C ../localedata objdir=`pwd`
cd ..
%endif
# Create file list for glibc-locale package
%{find_lang} libc
# Prepare obsolete/, used only on some architectures:
export RPM_BUILD_ROOT
%ifarch %ix86
mkdir -p %{buildroot}/%{_lib}/obsolete
%endif
# NPTL <bits/stdio-lock.h> is not usable outside of glibc, so include
# the generic one (RH#162634)
cp -av bits/stdio-lock.h %{buildroot}%{_includedir}/bits/stdio-lock.h
%ifarch s390x
# s390x is different ...
mkdir %{buildroot}/lib
ln -sf ../%{_lib}/ld-%{version}.so %{buildroot}/lib/ld64.so.1
%endif
# Miscelanna:
install -m 0700 glibc_post_upgrade %{buildroot}%{_sbindir}
install -m 644 $RPM_SOURCE_DIR/bindresvport.blacklist %{buildroot}/etc
install -m 644 $RPM_SOURCE_DIR/nsswitch.conf %{buildroot}/etc
install -m 644 posix/gai.conf %{buildroot}/etc
mkdir -p %{buildroot}/etc/default
install -m 644 nis/nss %{buildroot}/etc/default/
mkdir -p %{buildroot}%{_includedir}/resolv
install -m 0644 resolv/mapv4v6addr.h %{buildroot}%{_includedir}/resolv/
install -m 0644 resolv/mapv4v6hostent.h %{buildroot}%{_includedir}/resolv/
mkdir -p %{buildroot}%{_datadir}/doc/glibc
cp -p manual/libc/*.html %{buildroot}%{_datadir}/doc/glibc
cd manpages; make install_root=%{buildroot} install; cd ..
# nscd tools:
cp nscd/nscd.conf %{buildroot}/etc
mkdir -p %{buildroot}/etc/apparmor.d
cp $RPM_SOURCE_DIR/usr.sbin.nscd %{buildroot}/etc/apparmor.d
mkdir -p %{buildroot}/etc/init.d
install -m 755 $RPM_SOURCE_DIR/nscd.init %{buildroot}/etc/init.d/nscd
ln -sf /etc/init.d/nscd %{buildroot}/usr/sbin/rcnscd
mkdir -p %{buildroot}/var/run/nscd
touch %{buildroot}/var/run/nscd/{passwd,group,hosts}
touch %{buildroot}/var/run/nscd/{socket,nscd.pid}
#
# Create ld.so.conf
#
cat > %{buildroot}/etc/ld.so.conf <<EOF
/usr/%{_lib}/Xaw3d
%ifarch s390x sparc64 x86_64 ppc64 ppc
/usr/lib/Xaw3d
%endif
/usr/local/%{_lib}
%ifarch s390x sparc64 x86_64 ppc64 ppc
/usr/local/lib
%endif
/%{_lib}
%ifarch s390x sparc64 x86_64 ppc64 ppc
/lib
%endif
/usr/%{_lib}
%ifarch s390x sparc64 x86_64 ppc64 ppc
/usr/lib
%endif
include /etc/ld.so.conf.d/*.conf
EOF
# Add ldconfig cache directory for directory ownership
mkdir -p %{buildroot}/var/cache/ldconfig
# Empty the ld.so.cache:
rm -f %{buildroot}/etc/ld.so.cache
touch %{buildroot}/etc/ld.so.cache
# libNoVersion belongs only to glibc-obsolete:
%ifarch %ix86
rm -f %{buildroot}%{_libdir}/libNoVersion*
mkdir -p %{buildroot}/%{_lib}/obsolete/noversion
mv -v %{buildroot}/%{_lib}/libNoVersion* %{buildroot}/%{_lib}/obsolete/noversion/
%endif
# Don't look at ldd! We don't wish a /bin/sh requires
chmod 644 %{buildroot}%{_bindir}/ldd
# Remove timezone data, now coming in standalone package:
for i in sbin/sln usr/bin/tzselect usr/sbin/zic usr/sbin/zdump etc/localtime; do
rm -f %{buildroot}/$i
done
rm -rf %{buildroot}%{_datadir}/zoneinfo
# Remove the buildflags tracking section and the build-id
for o in %{buildroot}/%{_libdir}/crt[1in].o %{buildroot}/%{_libdir}/lib*_nonshared.a; do
objcopy -R ".comment.SUSE.OPTs" -R ".note.gnu.build-id" $o
done
#######################################################################
###
### ...
###
#######################################################################
%clean
rm -rf %{buildroot}
# Note: glibc_post_upgrade does:
# %%set_permissions %%{_libdir}/pt_chown
# since we cannot do it in our own post section
%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
/usr/sbin/iconvconfig
%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}
mkdir -p /var/run/nscd
%postun -n nscd
%restart_on_update nscd
%insserv_cleanup
exit 0
%verifyscript
%verify_permissions -e %{_libdir}/pt_chown
#######################################################################
###
### FILES
###
#######################################################################
# 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
%ifarch %arm armv5tel armv7l
/%{_lib}/ld-linux.so.3
%else
/%{_lib}/ld-linux.so.2
%endif
%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}/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}/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}
%define optimized_libs() \
%dir %attr(0755,root,root) /%{_lib}/%1\
/%{_lib}/%1/libc-%{version}.so\
/%{_lib}/%1/libc.so.6*\
/%{_lib}/%1/libm-%{version}.so\
/%{_lib}/%1/libm.so.6*\
/%{_lib}/%1/libpthread-%{version}.so\
/%{_lib}/%1/libpthread.so.0\
/%{_lib}/%1/librt-%{version}.so\
/%{_lib}/%1/librt.so.1\
/%{_lib}/%1/libthread_db-1.0.so\
/%{_lib}/%1/libthread_db.so.1
%if %{powerpc_optimize_cpu_power4}
%{optimized_libs power4}
%endif
%if %{powerpc_optimize_cpu_power6}
%{optimized_libs power6}
%{optimized_libs power6x}
%endif
%if %{powerpc_optimize_cpu_power7}
%{optimized_libs power7}
%endif
%if %{powerpc_optimize_cpu_cell}
%{optimized_libs ppc-cell-be}
%endif
%endif # optimize_power
%dir %attr(0700,root,root) /var/cache/ldconfig
/sbin/ldconfig
%{_bindir}/gencat
%{_bindir}/getconf
%{_bindir}/getent
%{_bindir}/iconv
%attr(755,root,root) %{_bindir}/ldd
%ifarch %ix86 sparc sparcv9
%{_bindir}/lddlibc4
%endif
%{_bindir}/locale
%{_bindir}/localedef
%verify(not mode caps) %attr(4755,root,root) %{_libdir}/pt_chown
%dir %attr(0755,root,root) %{_libdir}/getconf
%{_libdir}/getconf/*
%{_sbindir}/glibc_post_upgrade
%{_sbindir}/rpcinfo
%{_sbindir}/iconvconfig
%ifarch %ix86
%files obsolete
%defattr (755,root,root,755)
%dir /%{_lib}/obsolete/
%dir /%{_lib}/obsolete/noversion
/%{_lib}/obsolete/noversion/libNoVersion-%{version}.so
/%{_lib}/obsolete/noversion/libNoVersion.so.1
%endif
%files locale -f libc.lang
%defattr(-,root,root)
%{_datadir}/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
%doc %{_mandir}/man1/catchsegv.1.gz
%doc %{_mandir}/man1/rpcgen.1.gz
%doc %{_mandir}/man1/sprof.1.gz
%doc %{_mandir}/man3/*
%{_bindir}/catchsegv
%{_bindir}/rpcgen
%{_bindir}/sprof
%{_includedir}/*
%{_libdir}/*.o
%{_libdir}/*.so
# These static libraries are needed even for shared builds
%{_libdir}/libbsd-compat.a
%{_libdir}/libc_nonshared.a
%{_libdir}/libg.a
%{_libdir}/libieee.a
%ifarch ppc ppc64 s390 s390x sparc sparcv8 sparcv9 sparcv9v
# This is not built on sparc64.
%{_libdir}/libnldbl_nonshared.a
%endif
%{_libdir}/libmcheck.a
%{_libdir}/libpthread_nonshared.a
%{_libdir}/librpcsvc.a
%files devel-static
%defattr(-,root,root)
%{_libdir}/libBrokenLocale.a
%{_libdir}/libanl.a
%{_libdir}/libc.a
%{_libdir}/libcrypt.a
%{_libdir}/libdl.a
%{_libdir}/libm.a
%{_libdir}/libnsl.a
%{_libdir}/libpthread.a
%{_libdir}/libresolv.a
%{_libdir}/librt.a
%{_libdir}/libutil.a
%files info
%defattr(-,root,root)
%doc %{_infodir}/libc.info.gz
%doc %{_infodir}/libc.info-?.gz
%doc %{_infodir}/libc.info-??.gz
%files html
%defattr(-,root,root)
%doc %{_prefix}/share/doc/glibc
%files i18ndata
%defattr(-,root,root)
%{_prefix}/share/i18n
%files -n nscd
%defattr(-,root,root)
%config(noreplace) /etc/nscd.conf
%dir /etc/apparmor.d
%config /etc/apparmor.d/usr.sbin.nscd
%config /etc/init.d/nscd
%{_sbindir}/nscd
%{_sbindir}/rcnscd
%dir %attr(0755,root,root) %ghost /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
%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
%files utils
%defattr(-,root,root)
/%{_lib}/libmemusage.so
/%{_lib}/libpcprofile.so
# These need gd-devel for building
# %%{_bindir}/memusage
# %%{_bindir}/memusagestat
%{_bindir}/mtrace
%{_bindir}/pcprofiledump
%{_bindir}/xtrace
%changelog