Fedora Merge Review: glibc http://cvs.fedora.redhat.com/viewcvs/devel/glibc/ Initial Owner: jakub
I love pain. Love love love. Taking this one out.
OK, this was not as bad as I'd originally thought it would be. Here is a commented diff between the existing devel spec and my cleaned up spec (which I will attach to this bug ticket): # First section # There is no need to define macros that have the same values as Name, Version # and Release. Also, lets use %{glibcdate} to generate glibcsrcdir. @@ -1,9 +1,6 @@ %define glibcdate 20080131T0821 -%define glibcname glibc -%define glibcsrcdir glibc-20080131T0821 +%define glibcsrcdir glibc-%{glibcdate} %define glibc_release_tarballs 0 -%define glibcversion 2.7.90 -%define glibcrelease 5 %define run_glibc_tests 1 %define auxarches i586 i686 athlon sparcv9v sparc64v alphaev6 %define xenarches i686 athlon # We really don't want to use hacks here, especially # _unpackaged_files_terminate_build. glibc doesn't even # need it. Drop the summary period, and put the version/release here. @@ -21,11 +18,13 @@ %endif %define rtkaioarches %{ix86} x86_64 ia64 ppc ppc64 s390 s390x %define debuginfocommonarches %{ix86} alpha alphaev6 sparc sparcv9 sparcv9v sparc64 sparc64v -%define _unpackaged_files_terminate_build 0 -Summary: The GNU libc libraries. + +Summary: The GNU libc libraries Name: glibc -Version: %{glibcversion} -Release: %{glibcrelease} +Version: 2.7.90 +# Normally, we'd embed the checkout tag in the release, but since glibc changes +# checkout tag with every release, it is somewhat pointless to do so. +Release: 6 # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries. # Things that are linked directly into dynamically linked programs # and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional # Add the upstream URL. # Use "name" rather than "glibcname". # Fix the buildroot to comply with Fedora standards # Drop the ancient obsoletes, conflicts. We only keep conflicts around for 3 # releases. # Get rid of AutoReq: false. # Use BuildRequires instead of BuildPreReq @@ -33,48 +32,56 @@ # libraries without restrictions. License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ Group: System Environment/Libraries +URL: http://sources.redhat.com/glibc/ Source0: %{glibcsrcdir}.tar.bz2 %if %{glibc_release_tarballs} Source1: %(echo %{glibcsrcdir} | sed s/glibc-/glibc-linuxthreads-/).tar.bz2 Source2: %(echo %{glibcsrcdir} | sed s/glibc-/glibc-libidn-/).tar.bz2 %define glibc_release_unpack -a1 -a2 %endif -Source3: %{glibcname}-fedora-%{glibcdate}.tar.bz2 -Patch0: %{glibcname}-fedora.patch +Source3: %{name}-fedora-%{glibcdate}.tar.bz2 +Patch0: %{name}-fedora.patch Patch1: %{name}-ia64-lib64.patch -Buildroot: %{_tmppath}/glibc-%{PACKAGE_VERSION}-root -Obsoletes: zoneinfo, libc-static, libc-devel, libc-profile, libc-headers, -Obsoletes: gencat, locale, ldconfig, locale-ja, glibc-profile +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +# These obsoletes are ancient. +# Obsoletes: zoneinfo, libc-static, libc-devel, libc-profile, libc-headers, +# Obsoletes: gencat, locale, ldconfig, locale-ja, glibc-profile Provides: ldconfig # The dynamic linker supports DT_GNU_HASH Provides: rtld(GNU_HASH) -Autoreq: false +# Autoreq: false Requires: glibc-common = %{version}-%{release} -%ifarch sparc -Obsoletes: libc -%endif # Require libgcc in case some program calls pthread_cancel in its %%post -Prereq: basesystem, libgcc +Requires(pre): basesystem, libgcc # This is for building auxiliary programs like memusage, nscd # For initial glibc bootstraps it can be commented out -BuildPreReq: gd-devel libpng-devel zlib-devel texinfo, libselinux-devel >= 1.33.4-3 -BuildPreReq: audit-libs-devel >= 1.1.3, sed >= 3.95, libcap-devel, gettext -BuildPreReq: /bin/ps, /bin/kill, /bin/awk +BuildRequires: gd-devel libpng-devel zlib-devel texinfo, libselinux-devel >= 1.33.4-3 +BuildRequires: audit-libs-devel >= 1.1.3, sed >= 3.95, libcap-devel, gettext +BuildRequires: /bin/ps, /bin/kill, /bin/awk # This is to ensure that __frame_state_for is exported by glibc # will be compatible with egcs 1.x.y -BuildPreReq: gcc >= 3.2 -Conflicts: rpm <= 4.0-0.65 -Conflicts: glibc-devel < 2.2.3 -Conflicts: gcc4 <= 4.0.0-0.6 -%ifarch x86_64 %{ix86} +BuildRequires: gcc >= 3.2 +# Last seen in RHL, no need to state this anymore. +# Conflicts: rpm <= 4.0-0.65 +# Last seen in RHL, no need to state this anymore. +# Conflicts: glibc-devel < 2.2.3 +# Last seen in FC-3, no need to state this anymore. +# Conflicts: gcc4 <= 4.0.0-0.6 +# %ifarch x86_64 %{ix86} # Need gdb that understands DW_CFA_val_expression -Conflicts: gdb < 6.3.0.0-1.111 -%endif +# Last seen in preFC-5 era, no need to state this anymore. +# Conflicts: gdb < 6.3.0.0-1.111 +# %endif # Earlier shadow-utils packages had too restrictive permissions on # /etc/default -Conflicts: shadow-utils < 2:4.0.3-20 -Conflicts: nscd < 2.3.3-52 -Conflicts: kernel < 2.6.9 +# Last seen in FC-2, no need to state this anymore. +# Conflicts: shadow-utils < 2:4.0.3-20 +# Last seen in FC-3 era, no need to state this anymore. +# Conflicts: nscd < 2.3.3-52 +# Last seen in FC-2 era, no need to state this anymore. +# Conflicts: kernel < 2.6.9 +# However, just to be safe, lets make this a Requires: +Requires: kernel >= 2.6.9 %define enablekernel 2.6.9 %ifarch i386 %define nptl_target_cpu i486 # BuildRequires instead of BuildPreReq @@ -89,9 +96,10 @@ BuildRequires: gcc >= 4.1.0-0.17 %endif %if "%{_enable_debug_packages}" == "1" -BuildPreReq: elfutils >= 0.72 -BuildPreReq: rpm >= 4.2-0.56 +BuildRequires: elfutils >= 0.72 +BuildRequires: rpm >= 4.2-0.56 %endif %define __find_provides %{_builddir}/%{glibcsrcdir}/find_provides.sh %define _filter_GLIBC_PRIVATE 1 # Drop ancient conflicts/obsoletes. # Use Requires(pre) instead of PreReq. # Don't use AutoReq. @@ -121,20 +128,25 @@ %package devel Summary: Object files for development using standard C libraries. Group: Development/Libraries -Conflicts: texinfo < 3.11 +# This is pre Fedora, don't need it. +# Conflicts: texinfo < 3.11 # Need AS_NEEDED directive -Conflicts: binutils < 2.15.94.0.2-1 -Prereq: /sbin/install-info -Obsoletes: libc-debug, libc-headers, libc-devel, linuxthreads-devel -Obsoletes: glibc-debug, nptl-devel -Prereq: %{name}-headers -Requires: %{name}-headers = %{version}-%{release}, %{name} = %{version}-%{release} -%ifarch %{ix86} +# This is pre Fedora 4, don't need it. +# Conflicts: binutils < 2.15.94.0.2-1 +Requires(pre): /sbin/install-info +# Ancient. Dropping. +# Obsoletes: libc-debug, libc-headers, libc-devel, linuxthreads-devel +# Haven't seen nptl-devel since FC-3, haven't seen glibc-debug since, well, unknown. +# Obsoletes: glibc-debug, nptl-devel +Requires(pre): %{name}-headers = %{version}-%{release} +Requires: %{name} = %{version}-%{release} +# %ifarch %{ix86} # Earlier gcc's had atexit reference in crtendS.o, which does not # work with this glibc where atexit is in libc_nonshared.a -Conflicts: gcc < 2.96-79 -%endif -Autoreq: true +# This is pre Fedora, don't need it anymore. +# Conflicts: gcc < 2.96-79 +# %endif +# Autoreq: true %description devel The glibc-devel package contains the object files necessary # Drop ancient obsoletes. # Use Requires(pre), not PreReq. # Don't use AutoReq. @@ -156,11 +168,12 @@ # have to be installed, not i386 ones. Obsoletes: %{name}-headers(i386) %endif -Obsoletes: libc-debug, libc-headers, libc-devel -Prereq: kernel-headers +# Ancient. +# Obsoletes: libc-debug, libc-headers, libc-devel +Requires(pre): kernel-headers Requires: kernel-headers >= 2.2.1, %{name} = %{version}-%{release} BuildRequires: kernel-headers >= 2.6.22 -Autoreq: true +# Autoreq: true %description headers The glibc-headers package contains the header files necessary # Drop conflicts loop. Replace with explicit Requires. # Get rid of AutoReq. @@ -175,9 +188,8 @@ %package common Summary: Common binaries and locale data for glibc -Conflicts: %{name} < %{version} -Conflicts: %{name} > %{version} -Autoreq: false +Requires: %{name} = %{version}-%{release} +# Autoreq: false Requires: tzdata >= 2003a Group: System Environment/Base # Drop ancient Conflicts. # Don't use AutoReq. # Use Requires(pre) instead of PreReq. @@ -188,11 +200,13 @@ %package -n nscd Summary: A Name Service Caching Daemon (nscd). Group: System Environment/Daemons -Conflicts: kernel < 2.2.0 +# Seriously ancient. +# Conflicts: kernel < 2.2.0 Requires: libselinux >= 1.17.10-1, audit-libs >= 1.1.3 -Conflicts: selinux-policy-targeted < 1.17.30-2.2 -Prereq: /sbin/chkconfig, /usr/sbin/useradd, /usr/sbin/userdel, sh-utils -Autoreq: true +# Not necessary since FC-3. +# Conflicts: selinux-policy-targeted < 1.17.30-2.2 +Requires(pre): /sbin/chkconfig, /usr/sbin/useradd, /usr/sbin/userdel, sh-utils +# Autoreq: true %description -n nscd Nscd caches name service lookups and can dramatically improve # Use %{name} macro for consistency. @@ -201,7 +215,7 @@ %package utils Summary: Development utilities from GNU C library Group: Development/Tools -Requires: glibc = %{version}-%{release} +Requires: %{name} = %{version}-%{release} %description utils The glibc-utils package contains memusage, a memory usage profiler,
Created attachment 293646 [details] New glibc spec file, Fedora cleanups.
(In reply to comment #2) > +# Conflicts: kernel < 2.6.9 > +# However, just to be safe, lets make this a Requires: > +Requires: kernel >= 2.6.9 This is not right for install in chroots. No package should ever requires the kernel.
It doesn't require the kernel, it just requires a version of the kernel which is new enough for glibc to work with. IMHO requiring is better than conflicting anyway...
But it requires the kernel to be installed, doesn't it? Requires are better except for such cases.
I would much rather have the versioned Requires than the versioned Conflicts. This means that all of your installed kernels much be > 2.6.9, or glibc hits this Conflict. With it as a requires, as long as one kernel is >= 2.6.9, we meet this Requires. But, I do see Patrice's point, this will pull kernel into the default buildroot. Perhaps it would be best to drop it altogether, since the last Fedora with a 2.6.9 kernel was FC-3, 6 releases back from F-9. We'd leave it as a comment for anyone foolish enough to try to run modern glibc with old kernels.
In my opinion it is in such a case that Conflict is right.
OK, just revisiting this. Only one change didn't make it in: --- glibc.spec.BAD 2008-04-04 10:43:37.000000000 -0400 +++ glibc.spec 2008-04-04 10:48:06.000000000 -0400 @@ -1,6 +1,5 @@ %define glibcdate 20080328T1347 -%define glibcname glibc -%define glibcsrcdir glibc-20080328T1347 +%define glibcsrcdir glibc-%{glibcdate} %define glibc_release_tarballs 0 %define run_glibc_tests 1 %define auxarches i586 i686 athlon sparcv9v sparc64v alphaev6 @@ -38,8 +37,8 @@ Source1: %(echo %{glibcsrcdir} | sed s/g Source2: %(echo %{glibcsrcdir} | sed s/glibc-/glibc-libidn-/).tar.bz2 %define glibc_release_unpack -a1 -a2 %endif -Source3: %{glibcname}-fedora-%{glibcdate}.tar.bz2 -Patch0: %{glibcname}-fedora.patch +Source3: %{name}-fedora-%{glibcdate}.tar.bz2 +Patch0: %{name}-fedora.patch Patch1: %{name}-ia64-lib64.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Obsoletes: glibc-profile < 2.4 Basically, there is no longer a need for a "%{glibcname}" macro, since %{name} serves that purpose. Also, we should use %{glibcdate} when defining %{glibcsrcdir}. Aside from this change, everything else (while somewhat complex), looks ok. Once I see that change go into rawhide CVS, I'll sign off on this review.
Talked to Jakub, and he explained the logic there. I'm comfortable with this spec file now. This package is APPROVED.