From 9abcefa0aa31dbbb3e0163034ecbd82619958a45 Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Wed, 24 Jul 2013 07:58:38 -0400 Subject: [PATCH] Add extensive comments. --- glibc.spec | 338 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 328 insertions(+), 10 deletions(-) diff --git a/glibc.spec b/glibc.spec index 8d86634..20b053d 100644 --- a/glibc.spec +++ b/glibc.spec @@ -1,8 +1,19 @@ %define glibcsrcdir glibc-2.17-906-g8ab0740 %define glibcversion 2.17.90 -### glibc.spec.in follows: +############################################################################## +# If run_glibc_tests is zero then tests are not run for the build. +# You must always set run_glibc_tests to one for production builds. %define run_glibc_tests 1 +############################################################################## +# Auxiliary arches are those arches that can be built in addition +# to the core supported arches. You either install an auxarch or +# you install the base arch, not both. You would do this in order +# to provide a more optimized version of the package for your arch. %define auxarches athlon alphaev6 +############################################################################## +# We build a special package for Xen that includes TLS support with +# no negative segment offsets for use with Xen guests. This is +# purely an optimization for increased performance on those arches. %define xenarches i686 athlon %ifarch %{xenarches} %define buildxen 1 @@ -11,19 +22,50 @@ %define buildxen 0 %define xenpackage 0 %endif +############################################################################## +# For Power we actually support alternate runtimes in the same base package. +# If we build for Power or Power64 we additionally build a power6 runtime that +# is enabled by AT_HWCAPS selection and an alternate runtime directory. %ifarch ppc ppc64 %define buildpower6 1 %else %define buildpower6 0 %endif +############################################################################## +# We build librtkaio for all rtkaioarches. The library is installed into +# a distinct subdirectory in the lib dir. This define enables the rtkaio +# add-on during the build. Upstream does not have rtkaio and it is provided +# strictly as part of our builds. %define rtkaioarches %{ix86} x86_64 ppc %{power64} s390 s390x +############################################################################## +# Any architecture/kernel combination that supports running 32-bit and 64-bit +# code in userspace is considered a biarch arch. %define biarcharches %{ix86} x86_64 ppc %{power64} s390 s390x +############################################################################## +# If the debug information is split into two packages, the core debuginfo +# pacakge and the common debuginfo package then the arch should be listed +# here. If the arch is not listed here then a single core debuginfo package +# will be created for the architecture. %define debuginfocommonarches %{biarcharches} alpha alphaev6 +############################################################################## +# If the architecture has multiarch support in glibc then it should be listed +# here to enable support in the build. Multiarch support is a single library +# with implementations of certain functions for multiple architectures. The +# most optimal function is selected at runtime based on the hardware that is +# detected by glibc. The underlying support for function selection and +# execution is provided by STT_GNU_IFUNC. %define multiarcharches ppc %{power64} %{ix86} x86_64 %{sparc} +############################################################################## +# If the architecture has SDT probe point support then we build glibc with +# --enable-systemtap and include all SDT probe points in the library. It is +# the eventual goal that all supported arches should be on this list. %define systemtaparches %{ix86} x86_64 +############################################################################## # Add -s for a less verbose build output. %define silentrules PARALLELMFLAGS= - +############################################################################## +# %%package glibc - The GNU C Library (glibc) core package. +############################################################################## Summary: The GNU libc libraries Name: glibc Version: %{glibcversion} @@ -36,9 +78,22 @@ Release: 5%{?dist} License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ Group: System Environment/Libraries URL: http://www.gnu.org/software/glibc/ +# We do not use usptream source tarballs as the start place for our package. +# We should use upstream source tarballs for official releases though and +# it will look like this: +# Source0: http://ftp.gnu.org/gnu/glibc/%{glibcsrcdir}.tar.gz +# Source1: %{glibcsrcdir}-releng.tar.gz +# TODO: +# The Source1 URL will never reference an upstream URL. In fact the plan +# should be to merge the entire release engineering tarball into upstream +# instead of keeping it around as a large dump of files. Distro specific +# changes should then be a very very small patch set. Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.gz Source1: %{glibcsrcdir}-releng.tar.gz +############################################################################## +# Start of glibc patches +############################################################################## # 0000-0999 for patches which are unlikely to ever go upstream or which # have not been analyzed to see if they ought to go upstream yet. # @@ -139,11 +194,18 @@ Patch2026: %{name}-rh841787.patch # Upstream BZ 14185 Patch2027: %{name}-rh819430.patch +############################################################################## +# End of glibc patches. +############################################################################## +############################################################################## +# Continued list of core "glibc" package information: +############################################################################## Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Obsoletes: glibc-profile < 2.4 Obsoletes: nss_db Provides: ldconfig + # The dynamic linker supports DT_GNU_HASH Provides: rtld(GNU_HASH) @@ -155,8 +217,10 @@ Provides: ld-linux.so.3(GLIBC_2.4) %endif Requires: glibc-common = %{version}-%{release} + # Require libgcc in case some program calls pthread_cancel in its %%post Requires(pre): basesystem, libgcc + # This is for building auxiliary programs like memusage, nscd # For initial glibc bootstraps it can be commented out BuildRequires: gd-devel libpng-devel zlib-devel texinfo, libselinux-devel >= 1.33.4-3 @@ -165,6 +229,7 @@ BuildRequires: /bin/ps, /bin/kill, /bin/awk %ifarch %{systemtaparches} BuildRequires: systemtap-sdt-devel %endif + # This is to ensure that __frame_state_for is exported by glibc # will be compatible with egcs 1.x.y BuildRequires: gcc >= 3.2 @@ -177,6 +242,7 @@ Conflicts: kernel < %{enablekernel} %ifarch %{power64} %define target ppc64-redhat-linux %endif + %ifarch %{multiarcharches} # Need STT_IFUNC support %ifarch ppc %{power64} @@ -193,6 +259,7 @@ Conflicts: prelink < 0.4.2 # Need --hash-style=* support BuildRequires: binutils >= 2.17.50.0.2-5 %endif + BuildRequires: gcc >= 3.2.1-5 %ifarch ppc s390 s390x BuildRequires: gcc >= 4.1.0-0.17 @@ -201,6 +268,9 @@ BuildRequires: gcc >= 4.1.0-0.17 BuildRequires: elfutils >= 0.72 BuildRequires: rpm >= 4.2-0.56 %endif + +# Filter out all GLIBC_PRIVATE symbols since they are internal to +# the package and should be examined by any other tool. %global __filter_GLIBC_PRIVATE 1 %description @@ -212,6 +282,9 @@ contains the most important sets of shared libraries: the standard C library and the standard math library. Without these two libraries, a Linux system will not function. +############################################################################## +# glibc "xen" sub-package +############################################################################## %if %{xenpackage} %package xen Summary: The GNU libc libraries (optimized for running under Xen) @@ -226,6 +299,9 @@ library binaries that will be selected instead when running under Xen. Install glibc-xen if you might run your system under the Xen hypervisor. %endif +############################################################################## +# glibc "devel" sub-package +############################################################################## %package devel Summary: Object files for development using standard C libraries. Group: Development/Libraries @@ -245,6 +321,9 @@ executables. Install glibc-devel if you are going to develop programs which will use the standard C libraries. +############################################################################## +# glibc "static" sub-package +############################################################################## %package static Summary: C library static libraries for -static linking. Group: Development/Libraries @@ -255,6 +334,9 @@ The glibc-static package contains the C library static libraries for -static linking. You don't need these, unless you link statically, which is highly discouraged. +############################################################################## +# glibc "headers" sub-package +############################################################################## %package headers Summary: Header files for development using standard C libraries. Group: Development/Libraries @@ -280,6 +362,9 @@ executables. Install glibc-headers if you are going to develop programs which will use the standard C libraries. +############################################################################## +# glibc "common" sub-package +############################################################################## %package common Summary: Common binaries and locale data for glibc Requires: %{name} = %{version}-%{release} @@ -290,6 +375,9 @@ Group: System Environment/Base The glibc-common package includes common binaries for the GNU libc libraries, as well as national language (locale) support. +############################################################################## +# glibc "nscd" sub-package +############################################################################## %package -n nscd Summary: A Name Service Caching Daemon (nscd). Group: System Environment/Daemons @@ -304,6 +392,9 @@ Requires(postun): systemd, /usr/sbin/userdel Nscd caches name service lookups and can dramatically improve performance with NIS+, and may help with DNS as well. +############################################################################## +# glibc "utils" sub-package +############################################################################## %package utils Summary: Development utilities from GNU C library Group: Development/Tools @@ -321,6 +412,9 @@ If unsure if you need this, don't install this package. %define __debug_install_post %{nil} %global __debug_package 1 +############################################################################## +# glibc core "debuginfo" sub-package +############################################################################## %package debuginfo Summary: Debug information for package %{name} Group: Development/Debug @@ -345,6 +439,9 @@ one or more of the standard C libraries. To use this debugging information, you need to link binaries with -static -L%{_prefix}/lib/debug%{_prefix}/%{_lib} compiler options. +############################################################################## +# glibc common "debuginfo-common" sub-package +############################################################################## %ifarch %{debuginfocommonarches} %package debuginfo-common @@ -357,12 +454,17 @@ This package provides debug information for package %{name}. Debug information is useful when developing applications that use this package or when debugging this package. -%endif -%endif +%endif # %{debuginfocommonarches} +%endif # 0%{?_enable_debug_packages} +############################################################################## +# Prepare for the build. +############################################################################## %prep %setup -q -n %{glibcsrcdir} -b1 +# Patch order is important as some patches depend on other patches and +# therefore the order must not be changed. %patch0001 -p1 %patch0003 -p1 %patch0004 -p1 @@ -399,20 +501,46 @@ package or when debugging this package. %patch0035 -p1 %patch0037 -p1 +############################################################################## +# %%prep - Additional prep required... +############################################################################## + +# XXX: This sounds entirely out of date, particularly in light of the fact +# that we want to be building newer Power support. We should review this +# and potentially remove this workaround. However it will require +# determining which arches we support building for on our distributions. +# ~~~ # On powerpc32, hp timing is only available in power4/power6 # libs, not in base, so pre-power4 dynamic linker is incompatible # with power6 libs. +# ~~~ %if %{buildpower6} rm -f sysdeps/powerpc/powerpc32/power4/hp-timing.[ch] %endif +# Remove all files generated from patching. find . -type f -size 0 -o -name "*.orig" -exec rm -f {} \; + +# Ensure timestamps on configure files are current to prevent +# regenerating them. touch `find . -name configure` + +# Ensure *-kw.h files are current to prevent regenerating them. touch locale/programs/*-kw.h +############################################################################## +# Build glibc... +############################################################################## %build + +# We built using the native system compilers. GCC=gcc GXX=g++ + +############################################################################## +# %%build - x86 options. +############################################################################## +# On x86 we build for the specific target cpu rpm is using. %ifarch %{ix86} BuildFlags="-march=%{_target_cpu} -mtune=generic" %endif @@ -429,6 +557,10 @@ BuildFlags="$BuildFlags -mno-tls-direct-seg-refs" %ifarch x86_64 BuildFlags="-mtune=generic" %endif + +############################################################################## +# %%build - SPARC options. +############################################################################## %ifarch sparc BuildFlags="-fcall-used-g6" GCC="gcc -m32" @@ -460,6 +592,9 @@ GCC="gcc -m64" GXX="g++ -m64" %endif +############################################################################## +# %%build - Generic options. +############################################################################## BuildFlags="$BuildFlags -fasynchronous-unwind-tables" # Add -DNDEBUG unless using a prerelease case %{version} in @@ -469,12 +604,21 @@ case %{version} in ;; esac EnableKernel="--enable-kernel=%{enablekernel}" +# Save the used compiler and options into the file "Gcc" for use later +# by %%install. echo "$GCC" > Gcc AddOns=`echo */configure | sed -e 's!/configure!!g;s!\(linuxthreads\|nptl\|rtkaio\|powerpc-cpu\)\( \|$\)!!g;s! \+$!!;s! !,!g;s!^!,!;/^,\*$/d'` %ifarch %{rtkaioarches} AddOns=,rtkaio$AddOns %endif +############################################################################## +# build() +# Build glibc in `build-%{target}$1', passing the rest of the arguments +# as CFLAGS to the build (not the same as configure CFLAGS). Several +# global values are used to determine build flags, add-ons, kernel +# version, multiarch support, system tap support, etc. +############################################################################## build() { builddir=build-%{target}${1:+-$1} @@ -509,12 +653,25 @@ make %{?_smp_mflags} -r CFLAGS="$build_CFLAGS" %{silentrules} popd } +############################################################################## +# Build glibc for the default set of options. +############################################################################## build +############################################################################## +# Build glibc for xen: +# If we support xen build glibc again for xen support. +############################################################################## %if %{buildxen} build nosegneg -mno-tls-direct-seg-refs %endif +############################################################################## +# Build glibc for power6: +# If we support building a power6 alternate runtime then built glibc again for +# power6. +# XXX: We build in a sub-shell for no apparent reason. +############################################################################## %if %{buildpower6} ( platform=`LD_SHOW_AUXV=1 /bin/true | sed -n 's/^AT_PLATFORM:[[:blank:]]*//p'` @@ -536,6 +693,12 @@ build power6 ) %endif +############################################################################## +# Build the glibc post-upgrade program: +# We only build one of these with the default set of options. This program +# must be able to run on all hardware for the lowest common denomintor since +# we only build it once. +############################################################################## pushd build-%{target} $GCC -static -L. -Os -g ../releng/glibc_post_upgrade.c -o glibc_post_upgrade.%{_target_cpu} \ '-DLIBTLS="/%{_lib}/tls/"' \ @@ -544,13 +707,20 @@ $GCC -static -L. -Os -g ../releng/glibc_post_upgrade.c -o glibc_post_upgrade.%{_ '-DICONVCONFIG="%{_sbindir}/iconvconfig.%{_target_cpu}"' popd +############################################################################## +# Install glibc... +############################################################################## %install +# Reload compiler and build options that were used during %%build. GCC=`cat Gcc` +# Cleanup any previous installs... rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT make -j1 install_root=$RPM_BUILD_ROOT install -C build-%{target} %{silentrules} chmod +x $RPM_BUILD_ROOT%{_prefix}/libexec/pt_chown +# If we are not building an auxiliary arch then install all of the supported +# locales. %ifnarch %{auxarches} pushd build-%{target} make %{?_smp_mflags} install_root=$RPM_BUILD_ROOT install-locales -C ../localedata objdir=`pwd` @@ -559,6 +729,9 @@ popd librtso=`basename $RPM_BUILD_ROOT/%{_lib}/librt.so.*` +############################################################################## +# Install rtkaio libraries. +############################################################################## %ifarch %{rtkaioarches} rm -f $RPM_BUILD_ROOT{,%{_prefix}}/%{_lib}/librtkaio.* rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/librt.so.* @@ -569,6 +742,9 @@ ln -sf `basename $RPM_BUILD_ROOT/%{_lib}/librt-*.so` $RPM_BUILD_ROOT/%{_lib}/$li ln -sf `basename $RPM_BUILD_ROOT/%{_lib}/rtkaio/librtkaio-*.so` $RPM_BUILD_ROOT/%{_lib}/rtkaio/$librtso %endif +############################################################################## +# Install the xen build files. +############################################################################## %if %{buildxen} %define nosegneg_subdir_base i686 %define nosegneg_subdir i686/nosegneg @@ -602,6 +778,9 @@ ln -sf $librtkaioso $destdir/$librtso popd %endif +############################################################################## +# Install the power6 build files. +############################################################################## %if %{buildpower6} pushd build-%{target}-power6 destdir=$RPM_BUILD_ROOT/%{_lib}/power6 @@ -633,7 +812,13 @@ popd popd %endif +############################################################################## # Remove the files we don't want to distribute +############################################################################## + +# Remove the libNoVersion files. +# XXX: This looks like a bug in glibc that accidentally installed these +# wrong files. We probably don't need this today. rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libNoVersion* rm -f $RPM_BUILD_ROOT/%{_lib}/libNoVersion* @@ -643,16 +828,23 @@ cp -a bits/stdio-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/stdio-lock.h # And needs sanitizing as well. cp -a releng/libc-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/libc-lock.h +# Move the info files if glibc installed them into the wrong location. if [ -d $RPM_BUILD_ROOT%{_prefix}/info -a "%{_infodir}" != "%{_prefix}/info" ]; then mkdir -p $RPM_BUILD_ROOT%{_infodir} mv -f $RPM_BUILD_ROOT%{_prefix}/info/* $RPM_BUILD_ROOT%{_infodir} rm -rf $RPM_BUILD_ROOT%{_prefix}/info fi +# Compress all of the info files. gzip -9nvf $RPM_BUILD_ROOT%{_infodir}/libc* +# XXX: What is this for? ln -sf libbsd-compat.a $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libbsd.a +############################################################################## +# Install configuration files for services +############################################################################## + install -p -m 644 releng/nsswitch.conf $RPM_BUILD_ROOT/etc/nsswitch.conf %ifnarch %{auxarches} @@ -688,6 +880,12 @@ install -m 700 build-%{target}/glibc_post_upgrade.%{_target_cpu} \ strip -g $RPM_BUILD_ROOT%{_prefix}/%{_lib}/*.o +############################################################################## +# Install debug copies of unstripped static libraries +############################################################################## + +# If we are building a debug package then copy all of the static archives +# into the debug directory to keep them as unstripped copies. %if 0%{?_enable_debug_packages} mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_prefix}/%{_lib} cp -a $RPM_BUILD_ROOT%{_prefix}/%{_lib}/*.a \ @@ -698,6 +896,10 @@ rm -f $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_prefix}/%{_lib}/*_p.a # rquota.x and rquota.h are now provided by quota rm -f $RPM_BUILD_ROOT%{_prefix}/include/rpcsvc/rquota.[hx] +############################################################################## +# Install locale files +############################################################################## + # Create archive of locale files %ifnarch %{auxarches} olddir=`pwd` @@ -715,6 +917,7 @@ mv locale-archive{,.tmpl} popd %endif +# Remove the old nss modules. rm -f ${RPM_BUILD_ROOT}/%{_lib}/libnss1-* rm -f ${RPM_BUILD_ROOT}/%{_lib}/libnss-*.so.1 @@ -724,6 +927,37 @@ ln -f ${RPM_BUILD_ROOT}%{_sbindir}/iconvconfig{,.%{_target_cpu}} # In F7+ this is provided by rpcbind rpm rm -f $RPM_BUILD_ROOT%{_sbindir}/rpcinfo +############################################################################## +# Build the file lists used for describing the package and subpackages. +############################################################################## +# There are 11 file lists: +# * rpm.fileslist +# - Master file list. Eventually, after removing files from this list +# we are left with the list of files for the glibc package. +# * workaround.filelist +# - This list contains files that are not shipped but for which we +# may wish to include debug information. I don't see why we would +# want to do that. The only file on this list right now is pt_chown. +# * common.filelist +# - Contains the list of flies for the common subpackage. +# * utils.filelist +# - Contains the list of files for the utils subpackage. +# * nscd.filelist +# - Contains the list of files for the nscd subpackage. +# * devel.filelist +# - Contains the list of files for the devel subpackage. +# * headers.filelist +# - Contains the list of files for the headers subpackage. +# * static.filelist +# - Contains the list of files for the static subpackage. +# * nosegneg.filelist +# - Contains the list of files for the xen subpackage. +# * debuginfo.filelist +# - Contains the list of files for the glibc debuginfo package. +# * debuginfocommon.filelist +# - Contains the list of files for the glibc common debuginfo package. +# + # BUILD THE FILE LIST { find $RPM_BUILD_ROOT \( -type f -o -type l \) \ @@ -755,6 +989,10 @@ rm -f $RPM_BUILD_ROOT%{_sbindir}/rpcinfo mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{_lib} mv -f $RPM_BUILD_ROOT/%{_lib}/lib{pcprofile,memusage}.so $RPM_BUILD_ROOT%{_prefix}/%{_lib} + +# The xtrace and memusage scripts have hard-coded paths that need to be +# translated to a correct set of paths using the $LIB token which is +# dynamically translated by ld.so as the default lib directory. for i in $RPM_BUILD_ROOT%{_prefix}/bin/{xtrace,memusage}; do sed -e 's~=/%{_lib}/libpcprofile.so~=%{_prefix}/%{_lib}/libpcprofile.so~' \ -e 's~=/%{_lib}/libmemusage.so~=%{_prefix}/%{_lib}/libmemusage.so~' \ @@ -763,57 +1001,96 @@ for i in $RPM_BUILD_ROOT%{_prefix}/bin/{xtrace,memusage}; do -i $i done +# Put the info files into the devel file list. grep '%{_infodir}' < rpm.filelist | grep -v '%{_infodir}/dir' > devel.filelist + +# Put the stub headers into the devel file list. grep '%{_prefix}/include/gnu/stubs-[32164]\+\.h' < rpm.filelist >> devel.filelist || : +# Put the include files into headers file list. grep '%{_prefix}/include' < rpm.filelist | egrep -v '%{_prefix}/include/(linuxthreads|gnu/stubs-[32164]+\.h)' \ > headers.filelist +# Remove partial (lib*_p.a) static libraries, include files, and info files from +# the core glibc package. sed -i -e '\|%{_prefix}/%{_lib}/lib.*_p.a|d' \ -e '\|%{_prefix}/include|d' \ -e '\|%{_infodir}|d' rpm.filelist +# Put some static files into the devel package. grep '%{_prefix}/%{_lib}/lib.*\.a' < rpm.filelist \ | grep '/lib\(\(c\|pthread\|nldbl\)_nonshared\|bsd\(\|-compat\)\|g\|ieee\|mcheck\|rpcsvc\)\.a$' \ >> devel.filelist + +# Put the rest of the static files into the static package. grep '%{_prefix}/%{_lib}/lib.*\.a' < rpm.filelist \ | grep -v '/lib\(\(c\|pthread\|nldbl\)_nonshared\|bsd\(\|-compat\)\|g\|ieee\|mcheck\|rpcsvc\)\.a$' \ > static.filelist + +# Put all of the object files and *.so (not the versioned ones) into the +# devel package. grep '%{_prefix}/%{_lib}/.*\.o' < rpm.filelist >> devel.filelist grep '%{_prefix}/%{_lib}/lib.*\.so' < rpm.filelist >> devel.filelist +# Remove all of the static, object, unversioned DSOs, old linuxthreads stuff, +# and nscd from the core glibc package. sed -i -e '\|%{_prefix}/%{_lib}/lib.*\.a|d' \ -e '\|%{_prefix}/%{_lib}/.*\.o|d' \ -e '\|%{_prefix}/%{_lib}/lib.*\.so|d' \ -e '\|%{_prefix}/%{_lib}/linuxthreads|d' \ -e '\|nscd|d' rpm.filelist +# All of the bin and certain sbin files go into the common package. +# We explicitly exclude certain sbin files that need to go into +# the core glibc package for use during upgrades. grep '%{_prefix}/bin' < rpm.filelist >> common.filelist grep '%{_prefix}/sbin/[^gi]' < rpm.filelist >> common.filelist +# All of the files under share go into the common package since +# they should be multilib-independent. grep '%{_prefix}/share' < rpm.filelist | \ grep -v -e '%{_prefix}/share/zoneinfo' -e '%%dir %{prefix}/share' \ >> common.filelist +# Remove the bin, locale, pt_chown, some sbin, and share from the +# core glibc package. We cheat a bit and use the slightly dangerous +# /usr/sbin/[^gi] to match the inverse of the search that put the +# files into common.filelist. It's dangerous in that additional files +# that start with g, or i would get put into common.filelist and +# rpm.filelist. sed -i -e '\|%{_prefix}/bin|d' \ -e '\|%{_prefix}/lib/locale|d' \ -e '\|%{_prefix}/libexec/pt_chown|d' \ -e '\|%{_prefix}/sbin/[^gi]|d' \ -e '\|%{_prefix}/share|d' rpm.filelist +############################################################################## +# Build the xen package file list (nosegneg.filelist) +############################################################################## > nosegneg.filelist %if %{xenpackage} grep '/%{_lib}/%{nosegneg_subdir}' < rpm.filelist >> nosegneg.filelist sed -i -e '\|/%{_lib}/%{nosegneg_subdir}|d' rpm.filelist +# TODO: There are files in the nosegneg list which should be in the devel +# pacakge, but we leave them instead in the xen subpackage. We may +# wish to clean that up at some point. %endif +# Add the binary to build localse to the common subpackage. echo '%{_prefix}/sbin/build-locale-archive' >> common.filelist + +# The nscd binary must go into the nscd subpackage. echo '%{_prefix}/sbin/nscd' > nscd.filelist +# The memusage and pcprofile libraries are put back into the core +# glibc package even though they are only used by utils package +# scripts.. cat >> rpm.filelist < utils.filelist < utils.filelist <&1 sleep 10s @@ -879,6 +1164,9 @@ pushd build-%{target} popd %if %{buildxen} echo ====================TESTING -mno-tls-direct-seg-refs============= +############################################################################## +# - Test the xen runtimes (nosegneg). +############################################################################## pushd build-%{target}-nosegneg ( make %{?_smp_mflags} -k check %{silentrules} 2>&1 sleep 10s @@ -889,6 +1177,9 @@ popd %endif %if %{buildpower6} echo ====================TESTING -mcpu=power6============= +############################################################################## +# - Test the power6 runtimes. +############################################################################## pushd build-%{target}-power6 ( if [ -d ../power6emul ]; then export LD_PRELOAD=`cd ../power6emul; pwd`/\$LIB/power6emul.so @@ -914,14 +1205,24 @@ echo ====================PLT RELOCS LIBC.SO============== readelf -Wr $RPM_BUILD_ROOT/%{_lib}/libc-*.so | sed -n -e "$PLTCMD" echo ====================PLT RELOCS END================== -%endif +%endif # %{run_glibc_tests} +############################################################################### +# Rebuild libpthread.a using --whole-archive to ensure all of libpthread +# is included in a static link. This prevents any problems when linking +# statically, using parts of libpthread, and other necessary parts not +# being included. Upstream has decided that this is the wrong approach to +# this problem and that the full set of dependencies should be resolved +# such that static linking works and produces the most minimally sized +# static application possible. +############################################################################### pushd $RPM_BUILD_ROOT/usr/%{_lib}/ $GCC -r -nostdlib -o libpthread.o -Wl,--whole-archive ./libpthread.a rm libpthread.a ar rcs libpthread.a libpthread.o rm libpthread.o popd +############################################################################### %if 0%{?_enable_debug_packages} @@ -930,6 +1231,9 @@ popd (cd locale; ln -s programs/*.gperf .) (cd iconv; ln -s ../locale/programs/charmap-kw.gperf .) +# Print some diagnostic information in the builds about the +# getconf binaries. +# XXX: Why do we do this? ls -l $RPM_BUILD_ROOT/usr/bin/getconf ls -l $RPM_BUILD_ROOT/usr/libexec/getconf eu-readelf -hS $RPM_BUILD_ROOT/usr/bin/getconf $RPM_BUILD_ROOT/usr/libexec/getconf/* @@ -946,6 +1250,7 @@ find_debuginfo_args="$find_debuginfo_args \ %endif eval /usr/lib/rpm/find-debuginfo.sh "$find_debuginfo_args" -o debuginfo.filelist +# List all of the *.a archives in the debug directory. list_debug_archives() { local dir=%{_prefix}/lib/debug%{_prefix}/%{_lib} @@ -954,13 +1259,17 @@ list_debug_archives() %ifarch %{debuginfocommonarches} +# Remove the source files from the common package debuginfo. sed -i '\#^%{_prefix}/src/debug/#d' debuginfocommon.filelist + +# Create a list of all of the source files we copied to the debug directory. find $RPM_BUILD_ROOT%{_prefix}/src/debug \ \( -type d -printf '%%%%dir ' \) , \ -printf '%{_prefix}/src/debug/%%P\n' > debuginfocommon.sources %ifarch %{biarcharches} +# Add the source files to the core debuginfo package. cat debuginfocommon.sources >> debuginfo.filelist %else @@ -972,33 +1281,42 @@ cat debuginfocommon.sources >> debuginfo.filelist %define basearch sparc %endif -# auxarches get only these few source files +# The auxarches get only these few source files. auxarches_debugsources=\ '/(generic|linux|%{basearch}|nptl(_db)?)/|/%{glibcsrcdir}/build|/dl-osinfo\.h' +# Place the source files into the core debuginfo pakcage. egrep "$auxarches_debugsources" debuginfocommon.sources >> debuginfo.filelist +# Remove the source files from the common debuginfo package. egrep -v "$auxarches_debugsources" \ debuginfocommon.sources >> debuginfocommon.filelist %endif +# Add the list of *.a archives in the debug directory to +# the common debuginfo package. list_debug_archives >> debuginfocommon.filelist -%endif +%endif # %{debuginfocommonarches} -%endif +%endif # 0%{?_enable_debug_packages} +# Remove the `dir' info-heirarchy file which will be maintained +# by the system as it adds info files to the install. rm -f $RPM_BUILD_ROOT%{_infodir}/dir %ifarch %{auxarches} +# Delete files that we do not intended to ship with the auxarch. echo Cutting down the list of unpackaged files >> debuginfocommon.filelist sed -e '/%%dir/d;/%%config/d;/%%verify/d;s/%%lang([^)]*) //;s#^/*##' \ common.filelist devel.filelist static.filelist headers.filelist \ utils.filelist nscd.filelist debuginfocommon.filelist | (cd $RPM_BUILD_ROOT; xargs --no-run-if-empty rm -f 2> /dev/null || :) + +# The auxarch doesn't install pt_chown. rm -f $RPM_BUILD_ROOT%{_prefix}/libexec/pt_chown %else