Add automatic requires if building against glibc development snapshots
This commit is contained in:
parent
947a02c4ad
commit
700394c8ed
3
glibc.attr
Normal file
3
glibc.attr
Normal file
@ -0,0 +1,3 @@
|
||||
%__glibc_requires %{_rpmconfigdir}/glibc.req
|
||||
%__glibc_magic ELF
|
||||
%__glibc_flags exeonly
|
40
glibc.req.in
Normal file
40
glibc.req.in
Normal file
@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
# Auto-generating dependencies for glibc development snapshots.
|
||||
#
|
||||
# A glibc development snapshot (say version 2.33.9000) may define
|
||||
# symbols in its under-development symbol version (GLIBC_2.34). RPM
|
||||
# automatically derives RPM dependencies such as
|
||||
# libc.so.6(GLIBC_2.34)(64bit) from that. While the GLIBC_2.34
|
||||
# version is under development, these dependencies may be inaccurate
|
||||
# and could be satisfied by glibc RPM package versions that lack the
|
||||
# symbols because they were created from an earlier development
|
||||
# snapshot that had some other GLIBC_2.34 symbols. Therefore, if the
|
||||
# latest, under-development ELF symbol version is detected, this
|
||||
# dependency generator adds an explicit RPM dependencies on the glibc
|
||||
# packaging version against which an RPM package is built.
|
||||
#
|
||||
# This script runs for the glibc build itself. In this case, it may
|
||||
# produce a >= dependency on the build-time glibc, but there will also
|
||||
# be an (potentially indirect) = dependency, which takes precedence.
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
searching=true
|
||||
# Pre-filter using eu-elfclassify, to skip kernel modules.
|
||||
eu-elfclassify --loadable --file --stdin --print | while read path; do
|
||||
# Assume that all dynamically linked objects depend on glibc in
|
||||
# some way.
|
||||
if $searching; then
|
||||
# Undefined symbols within latest, under-development
|
||||
# (changing) symbol versions trigger the versioned RPM
|
||||
# dependency.
|
||||
if eu-readelf -s "$path" | egrep -q '\sUNDEF\s.*@''@SYMVER@(\s|$)'
|
||||
then
|
||||
echo 'glibc >= @VERSION@-@RELEASE@'
|
||||
# Stop searching after the first match, but keep reading from
|
||||
# the pipe.
|
||||
searching=false
|
||||
fi
|
||||
fi
|
||||
done
|
37
glibc.spec
37
glibc.spec
@ -8,8 +8,22 @@
|
||||
# gzip -9 $(git describe --match 'glibc-*').tar
|
||||
#
|
||||
# glibc_release_url is only defined when we have a release tarball.
|
||||
# Conversly, glibc_autorequires is set for development snapshots, where
|
||||
# dependencies based on symbol versions are inaccurate.
|
||||
%{lua: if string.match(rpm.expand("%glibcsrcdir"), "^glibc%-[0-9.]+$") then
|
||||
rpm.define("glibc_release_url https://ftp.gnu.org/gnu/glibc/") end}
|
||||
rpm.define("glibc_release_url https://ftp.gnu.org/gnu/glibc/")
|
||||
end
|
||||
local major, minor = string.match(rpm.expand("%glibcversion"),
|
||||
"^([0-9]+)%.([0-9]+)%.9000$")
|
||||
if major and minor then
|
||||
rpm.define("glibc_autorequires 1")
|
||||
-- The minor version in a .9000 development version lags the actual
|
||||
-- symbol version by one.
|
||||
local symver = "GLIBC_" .. major .. "." .. (minor + 1)
|
||||
rpm.define("glibc_autorequires_symver " .. symver)
|
||||
else
|
||||
rpm.define("glibc_autorequires 0")
|
||||
end}
|
||||
##############################################################################
|
||||
# We support the following options:
|
||||
# --with/--without,
|
||||
@ -97,7 +111,7 @@
|
||||
Summary: The GNU libc libraries
|
||||
Name: glibc
|
||||
Version: %{glibcversion}
|
||||
Release: 25%{?dist}
|
||||
Release: 26%{?dist}
|
||||
|
||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||
# libraries.
|
||||
@ -131,6 +145,8 @@ Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.xz
|
||||
Source1: nscd.conf
|
||||
Source2: bench.mk
|
||||
Source3: glibc-bench-compare
|
||||
Source4: glibc.req.in
|
||||
Source5: glibc.attr
|
||||
Source10: wrap-find-debuginfo.sh
|
||||
Source11: parse-SUPPORTED.py
|
||||
# Include in the source RPM for reference.
|
||||
@ -1660,6 +1676,16 @@ sed -i -e '\,libmemusage.so,d' \
|
||||
-e '\,/libnss_[a-z]*\.so$,d' \
|
||||
devel.filelist
|
||||
|
||||
%if %{glibc_autorequires}
|
||||
mkdir -p %{glibc_sysroot}/%{_rpmconfigdir} %{glibc_sysroot}/%{_fileattrsdir}
|
||||
sed < %{SOURCE4} \
|
||||
-e s/@VERSION@/%{version}/ \
|
||||
-e s/@RELEASE@/%{release}/ \
|
||||
-e s/@SYMVER@/%{glibc_autorequires_symver}/ \
|
||||
> %{glibc_sysroot}/%{_rpmconfigdir}/glibc.req
|
||||
cp %{SOURCE5} %{glibc_sysroot}/%{_fileattrsdir}/glibc.attr
|
||||
%endif
|
||||
|
||||
###############################################################################
|
||||
# glibc-doc
|
||||
###############################################################################
|
||||
@ -2133,6 +2159,10 @@ fi
|
||||
%{_prefix}/share/i18n/charmaps/*
|
||||
|
||||
%files -f devel.filelist devel
|
||||
%if %{glibc_autorequires}
|
||||
%attr(0755,root,root) %{_rpmconfigdir}/glibc.req
|
||||
%{_fileattrsdir}/glibc.attr
|
||||
%endif
|
||||
|
||||
%if %{with docs}
|
||||
%files -f doc.filelist doc
|
||||
@ -2183,6 +2213,9 @@ fi
|
||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||
|
||||
%changelog
|
||||
* Sun Jun 27 2021 Florian Weimer <fweimer@redhat.com> - 2.33.9000-26
|
||||
- Add automatic requires if building against glibc development snapshots
|
||||
|
||||
* Thu Jun 24 2021 Carlos O'Donell <carlos@redhat.com> - 2.33.9000-25
|
||||
- Fix thread local storage corruption (#1974970)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user