# # spec file for package glibc (Version 2.10.1) # # Copyright (c) 2009 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 (or similar) ; 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.10.1 Release: 5 Url: http://www.gnu.org/software/libc/libc.html PreReq: filesystem BuildRoot: %{_tmppath}/%{name}-%{version}-build # The glibc source comes from http://repo.or.cz/w/glibc/pb-stable.git # glibc-2.10-branch. Source: glibc-%{version}-4253a1e0b2.tar.bz2 Source2: glibc-ports-%{version}-2b2b217196.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" # We need to avoid to have only the srv rpm from i686 on the media, # since it does not work on other architectures. 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-1.0.diff Patch6: crypt_blowfish-glibc-2.3.diff Patch7: glibc-version.diff Patch8: glibc-2.4.90-revert-only-euro.diff Patch9: glibc-2.3-regcomp.diff Patch10: glibc-2.3.2-revert_tcsetattr.diff Patch11: glibc-2.3.1.localedef.diff Patch12: glibc-2.3.2.no_archive.diff Patch13: glibc-2.3.3-amd64-string.diff Patch14: libm-x86-64.diff.bz2 Patch15: glibc-2.3.90-bindresvport.blacklist.diff Patch16: glibc-suse-note.diff Patch17: glibc-2.4.90-no_NO.diff Patch18: glibc-2.3.90-ld.so-madvise.diff Patch19: glibc-2.3.3-amd64-s_ceil.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 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: getaddrinfo-ipv6-sanity.diff Patch35: ppc-atomic.diff Patch36: glibc-2.8-clone.diff Patch37: glibc-nss-deepbind.diff Patch38: glibc-nscd-prune-ret.diff Patch39: glibc-compiled-binaries.diff Patch40: glibc-selinux.diff Patch41: glibc-check-native-missing-include.diff Patch42: glibc-no-unwind-tables.diff Patch43: glibc-2.10-nscd-nostack.diff Patch44: glibc-cpusetsize.diff Patch45: glibc-nis-splitgroups.diff Patch46: glibc-2.10-mcheck-free-race.diff Patch47: glibc-2.10.99-ia64-include.diff Patch500: ARM_glibc-2.10.1-local-eabi-wchar.diff Patch501: ARM_glibc-2.10.1-local-hwcap-updates.diff Patch502: ARM_glibc-2.10.1-local-lowlevellock.diff 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: 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 (or similar) ; 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 (or similar) ; 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 %ifarch %arm armv5tel armv7l # add glibc-ports for arm %setup -n glibc-%{version} -q -a 2 -a 3 -a 4 -a 14 %else # any other leave out ports %setup -n glibc-%{version} -q -a 3 -a 4 -a 14 %endif %patch # libNoVersion part is only active on ix86 %patch1 %patch2 %patch3 %patch4 %patch5 %patch6 %patch7 %patch8 %patch9 %patch10 %patch11 %patch12 %patch13 %patch14 -E # We have s_sincos.c in patch13, remove duplicate rm sysdeps/x86_64/fpu/s_sincos.S %patch15 %patch16 %patch17 %patch18 %patch19 %patch20 %patch21 %patch22 %patch23 %patch24 %patch25 %patch26 %patch27 %patch29 %patch30 %patch31 %patch32 %patch33 %patch35 %patch36 %patch37 %patch38 %patch39 %patch40 %patch41 %patch42 %patch43 %patch44 %patch45 %patch46 %patch47 %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 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" 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 %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 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 %ifarch %arm armv5tel armv7l --build=%{_target_cpu}-suse-linux-gnueabi \ %else --build=%{_target_cpu}-suse-linux \ %endif --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 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 <