Bug 225806

Summary: Merge Review: glibc
Product: [Fedora] Fedora Reporter: Nobody's working on this, feel free to take it <nobody>
Component: Package ReviewAssignee: Tom "spot" Callaway <tcallawa>
Status: CLOSED RAWHIDE QA Contact: Fedora Package Reviews List <fedora-package-review>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: jakub, redhat-bugzilla
Target Milestone: ---Flags: tcallawa: fedora-review+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2008-04-09 15:57:31 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 223691    
Bug Blocks: 426387    
Attachments:
Description Flags
New glibc spec file, Fedora cleanups. none

Description Nobody's working on this, feel free to take it 2007-01-31 18:49:52 UTC
Fedora Merge Review: glibc

http://cvs.fedora.redhat.com/viewcvs/devel/glibc/
Initial Owner: jakub

Comment 1 Tom "spot" Callaway 2008-01-11 16:03:54 UTC
I love pain. Love love love. Taking this one out.

Comment 2 Tom "spot" Callaway 2008-01-31 20:19:51 UTC
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,



Comment 3 Tom "spot" Callaway 2008-01-31 20:20:35 UTC
Created attachment 293646 [details]
New glibc spec file, Fedora cleanups.

Comment 4 Patrice Dumas 2008-01-31 20:56:46 UTC
(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.


Comment 5 Robert Scheck 2008-01-31 21:05:03 UTC
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...

Comment 6 Patrice Dumas 2008-01-31 21:12:16 UTC
But it requires the kernel to be installed, doesn't it? Requires
are better except for such cases. 

Comment 7 Tom "spot" Callaway 2008-01-31 22:29:28 UTC
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.

Comment 8 Patrice Dumas 2008-01-31 22:44:44 UTC
In my opinion it is in such a case that Conflict is right.

Comment 9 Tom "spot" Callaway 2008-04-04 14:50:48 UTC
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.

Comment 10 Tom "spot" Callaway 2008-04-09 15:57:09 UTC
Talked to Jakub, and he explained the logic there. I'm comfortable with this
spec file now. This package is APPROVED.