[patch] PR27783: default debuginfod-urls profile rework
Dmitry V. Levin
ldv@altlinux.org
Wed Nov 10 22:41:35 GMT 2021
On Thu, Nov 11, 2021 at 12:42:47AM +0300, Dmitry V. Levin wrote:
> Hi Frank,
>
> On Sun, Oct 03, 2021 at 05:33:33PM -0400, Frank Ch. Eigler via Elfutils-devel wrote:
> > commit 0c634f243d266ce8841fd311433d5d79555fabf9
> > Author: Frank Ch. Eigler <fche@redhat.com>
> > Date: Sun Oct 3 17:04:24 2021 -0400
> >
> > PR27783: switch default debuginfod-urls to drop-in style files
> >
> > Rewrote and commented the /etc/profile.d csh and sh script fragments
> > to take the default $DEBUGINFOD_URLS from the union of drop-in files:
> > /etc/debuginfod/*.urls. Hand-tested with csh and bash, with
> > conditions including no prior $DEBUGINFOD_URLS, nonexistent .urls
> > files, multiple entries in .urls files.
> [...]
> > diff --git a/config/profile.csh.in b/config/profile.csh.in
> > index 0a2d6d162019..29e59a709450 100644
> > --- a/config/profile.csh.in
> > +++ b/config/profile.csh.in
> > @@ -1,11 +1,16 @@
> > -if ("@DEBUGINFOD_URLS@" != "") then
> > - if ($?DEBUGINFOD_URLS) then
> > - if ($%DEBUGINFOD_URLS) then
> > - setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS @DEBUGINFOD_URLS@"
> > - else
> > - setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@"
> > - endif
> > - else
> > - setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@"
> > - endif
> > +
> > +# $HOME/.login* or similar files may first set $DEBUGINFOD_URLS.
> > +# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files.
> > +# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS.
> > +# See also [man debuginfod-client-config] for other environment variables
> > +# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS.
> > +
> > +if (! $?DEBUGINFOD_URLS) then
> > + set prefix="@prefix@"
> > + set debuginfod_urls=`find "@sysconfdir@/debuginfod/" -name '*.urls' | xargs cat | tr '\n' ' '`
> > + if ( "$debuginfod_urls" != "" ) then
> > + setenv DEBUGINFOD_URLS "$debuginfod_urls"
> > + endif
> > + unset debuginfod_urls
> > + unset prefix
> > endif
> > diff --git a/config/profile.sh.in b/config/profile.sh.in
> > index aa228a0dcd16..94b2983b9f90 100644
> > --- a/config/profile.sh.in
> > +++ b/config/profile.sh.in
> > @@ -1,4 +1,17 @@
> > -if [ -n "@DEBUGINFOD_URLS@" ]; then
> > - DEBUGINFOD_URLS="${DEBUGINFOD_URLS-}${DEBUGINFOD_URLS:+ }@DEBUGINFOD_URLS@"
> > - export DEBUGINFOD_URLS
> > +
> > +# $HOME/.profile* or similar files may first set $DEBUGINFOD_URLS.
> > +# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files.
> > +# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS.
> > +# See also [man debuginfod-client-config] for other environment variables
> > +# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS.
> > +
> > +if [ -z "$DEBUGINFOD_URLS" ]; then
> > + prefix="@prefix@"
> > + debuginfod_urls=`find "@sysconfdir@/debuginfod/" -name '*.urls' | xargs cat | tr '\n' ' '`
> > + if [ -n "$debuginfod_urls" ]; then
> > + DEBUGINFOD_URLS="$debuginfod_urls"
> > + export DEBUGINFOD_URLS
> > + fi
> > + unset debuginfod_urls
> > + unset prefix
> > fi
>
> Is there any particular reason to assign (and unset) prefix?
Another potential issue with this "cat" approach is that strings
without trailing newlines are concatenated with other strings.
I suggest the following code snippet instead:
if [ -z "${DEBUGINFOD_URLS+1}" ]; then
debuginfod_urls=$(sed -n 's/^[^#].*/&/p' @sysconfdir@/debuginfod/*.urls 2>/dev/null |tr '\n' ' ' ||:)
if [ -n "$debuginfod_urls" ]; then
DEBUGINFOD_URLS="$debuginfod_urls"
export DEBUGINFOD_URLS
fi
unset debuginfod_urls
fi
As a bonus, it also handles comments. :)
--
ldv
More information about the Elfutils-devel
mailing list