Bug 225806 - Merge Review: glibc
Summary: Merge Review: glibc
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Tom "spot" Callaway
QA Contact: Fedora Package Reviews List
URL:
Whiteboard:
Depends On: 223691
Blocks: F9MergeReviewTarget
TreeView+ depends on / blocked
 
Reported: 2007-01-31 18:49 UTC by Nobody's working on this, feel free to take it
Modified: 2008-04-09 15:57 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2008-04-09 15:57:31 UTC
Type: ---
Embargoed:
tcallawa: fedora-review+


Attachments (Terms of Use)
New glibc spec file, Fedora cleanups. (149.44 KB, text/plain)
2008-01-31 20:20 UTC, Tom "spot" Callaway
no flags Details

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.


Note You need to log in before you can comment on or make changes to this bug.