From: Mark Wielaard <mark@klomp.org>
To: "Dmitry V. Levin" <ldv@altlinux.org>
Cc: debugedit@sourceware.org
Subject: Re: [PATCH] find-debuginfo.sh: Add --help, --version and man page.
Date: Fri, 30 Apr 2021 14:10:14 +0200 [thread overview]
Message-ID: <93393113c5d29d9861ef6ee5105062cfb3447b23.camel@klomp.org> (raw)
In-Reply-To: <20210429230630.GC29311@altlinux.org>
[-- Attachment #1: Type: text/plain, Size: 535 bytes --]
Hi Dmitry,
On Fri, 2021-04-30 at 02:06 +0300, Dmitry V. Levin wrote:
> I suggest to use "cat" instead of multiple echoes, e.g.
>
> cat <<-'EOF'
> Usage: find-debuginfo.sh [OPTION]... [builddir]
> automagically generates debug info and file lists
>
> Options:
> [...]
> --unique-debug-src-base "%{name}-%{VERSION}-
> %{RELEASE}.%{_arch}")
>
> All file names in switches are relative to builddir ('.' if not
> given).
> EOF
Yes, that is obviously much nicer.
Updated patch attached.
Thanks,
Mark
[-- Attachment #2: 0001-find-debuginfo.sh-Add-help-version-and-man-page.patch --]
[-- Type: text/x-patch, Size: 9622 bytes --]
From 477a1c56237f91c959b538e3512e5628920bd4c8 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Fri, 30 Apr 2021 00:42:23 +0200
Subject: [PATCH] find-debuginfo.sh: Add --help, --version and man page.
Add a --version and --help option to find-debuginfo.sh and use that to
generate a manual page.
* .gitignore: Add find-debuginfo.sh.1
* Makefile.am (dist_man_MANS): Add find-debuginfo.sh.1
(find-debuginfo.sh.1): New make rule.
* scripts/find-debuginfo.sh (help): New function.
Handle --version and --help.
https://sourceware.org/bugzilla/show_bug.cgi?id=27641
Signed-off-by: Mark Wielaard <mark@klomp.org>
---
.gitignore | 2 +
Makefile.am | 7 +-
scripts/find-debuginfo.sh | 158 ++++++++++++++++++++++----------------
3 files changed, 100 insertions(+), 67 deletions(-)
diff --git a/.gitignore b/.gitignore
index d41ec64..3e81e87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,8 @@ debugedit.1
sepdebugcrcfix
sepdebugcrcfix.1
+find-debuginfo.sh.1
+
atconfig
atlocal
package.m4
diff --git a/Makefile.am b/Makefile.am
index de7c51d..b26d238 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -39,7 +39,7 @@ sepdebugcrcfix_CFLAGS = @LIBELF_CFLAGS@ $(AM_CFLAGS)
sepdebugcrcfix_LDADD = @LIBELF_LIBS@
# Manual pages are generated for dist
-dist_man_MANS = debugedit.1 sepdebugcrcfix.1
+dist_man_MANS = debugedit.1 sepdebugcrcfix.1 find-debuginfo.sh.1
debugedit.1: tools/debugedit.c $(top_srcdir)/configure.ac
$(MAKE) $(AM_MAKEFLAGS) debugedit$(EXEEXT)
@@ -53,6 +53,11 @@ sepdebugcrcfix.1: tools/sepdebugcrcfix.c $(top_srcdir)/configure.ac
--name='fixes CRC for separate .debug files' \
./sepdebugcrcfix$(EXEEXT)
+find-debuginfo.sh.1: scripts/find-debuginfo.sh $(top_srcdir)/configure.ac
+ $(HELP2MAN) -N --output=$@ \
+ --name='finds debuginfo and processes it' \
+ $(top_srcdir)/scripts/find-debuginfo.sh
+
noinst_HEADERS= tools/ansidecl.h \
tools/hashtab.h \
tools/md5.h \
diff --git a/scripts/find-debuginfo.sh b/scripts/find-debuginfo.sh
index 3d736e0..5ea57ca 100755
--- a/scripts/find-debuginfo.sh
+++ b/scripts/find-debuginfo.sh
@@ -17,72 +17,84 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>
-# Usage: find-debuginfo.sh [--strict-build-id] [-g] [-r] [-m] [-i] [-n]
-# [--keep-section SECTION] [--remove-section SECTION]
-# [--g-libs]
-# [-j N] [--jobs N]
-# [-o debugfiles.list]
-# [-S debugsourcefiles.list]
-# [--run-dwz] [--dwz-low-mem-die-limit N]
-# [--dwz-max-die-limit N]
-# [--dwz-single-file-mode]
-# [--build-id-seed SEED]
-# [--unique-debug-suffix SUFFIX]
-# [--unique-debug-src-base BASE]
-# [[-l filelist]... [-p 'pattern'] -o debuginfo.list]
-# [builddir]
-#
-# The -g flag says to use strip -g instead of full strip on DSOs or EXEs.
-# The --g-libs flag says to use strip -g instead of full strip ONLY on DSOs.
-# Options -g and --g-libs are mutually exclusive.
-# The -r flag says to use eu-strip --reloc-debug-sections.
-# Use --keep-section SECTION or --remove-section SECTION to explicitly
-# keep a (non-allocated) section in the main executable or explicitly
-# remove it into the .debug file. SECTION is an extended wildcard pattern.
-# Both options can be given more than once.
-#
-# The --strict-build-id flag says to exit with failure status if
-# any ELF binary processed fails to contain a build-id note.
-# The -m flag says to include a .gnu_debugdata section in the main binary.
-# The -i flag says to include a .gdb_index section in the .debug file.
-# The -n flag says to not recompute the build-id.
-#
-# The -j, --jobs N option will spawn N processes to do the debuginfo
-# extraction in parallel.
-#
-# A single -o switch before any -l or -p switches simply renames
-# the primary output file from debugfiles.list to something else.
-# A -o switch that follows a -p switch or some -l switches produces
-# an additional output file with the debuginfo for the files in
-# the -l filelist file, or whose names match the -p pattern.
-# The -p argument is an grep -E -style regexp matching the a file name,
-# and must not use anchors (^ or $).
-#
-# The --run-dwz flag instructs find-debuginfo.sh to run the dwz utility
-# if available, and --dwz-low-mem-die-limit and --dwz-max-die-limit
-# provide detailed limits. See dwz(1) -l and -L option for details.
-# Use --dwz-single-file-mode to disable multi-file mode, see dwz(1) -m
-# for more details.
-
-#
-# If --build-id-seed SEED is given then debugedit is called to
-# update the build-ids it finds adding the SEED as seed to recalculate
-# the build-id hash. This makes sure the build-ids in the ELF files
-# are unique between versions and releases of the same package.
-# (Use --build-id-seed "%{VERSION}-%{RELEASE}".)
-#
-# If --unique-debug-suffix SUFFIX is given then the debug files created
-# for <FILE> will be named <FILE>-<SUFFIX>.debug. This makes sure .debug
-# are unique between package version, release and architecture.
-# (Use --unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}".)
-#
-# If --unique-debug-src-base BASE is given then the source directory
-# will be called /usr/debug/src/<BASE>. This makes sure the debug source
-# directories are unique between package version, release and architecture.
-# (Use --unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}".)
-#
-# All file names in switches are relative to builddir (. if not given).
-#
+help()
+{
+ cat <<EOF
+Usage: find-debuginfo.sh [OPTION]... [builddir]
+automagically generates debug info and file lists
+
+Options:
+[--strict-build-id] [-g] [-r] [-m] [-i] [-n]
+[--keep-section SECTION] [--remove-section SECTION]
+[--g-libs]
+[-j N] [--jobs N]
+[-o debugfiles.list]
+[-S debugsourcefiles.list]
+[--run-dwz] [--dwz-low-mem-die-limit N]
+[--dwz-max-die-limit N]
+[--dwz-single-file-mode]
+[--build-id-seed SEED]
+[--unique-debug-suffix SUFFIX]
+[--unique-debug-src-base BASE]
+[[-l filelist]... [-p 'pattern'] -o debuginfo.list]
+[builddir]
+
+The -g flag says to use strip -g instead of full strip on DSOs or EXEs.
+The --g-libs flag says to use strip -g instead of full strip ONLY on
+DSOs. Options -g and --g-libs are mutually exclusive.
+
+The -r flag says to use eu-strip --reloc-debug-sections.
+
+Use --keep-section SECTION or --remove-section SECTION to explicitly
+keep a (non-allocated) section in the main executable or explicitly
+remove it into the .debug file. SECTION is an extended wildcard
+pattern. Both options can be given more than once.
+
+The --strict-build-id flag says to exit with failure status if
+any ELF binary processed fails to contain a build-id note.
+
+The -m flag says to include a .gnu_debugdata section in the main binary.
+
+The -i flag says to include a .gdb_index section in the .debug file.
+
+The -n flag says to not recompute the build-id.
+
+The -j, --jobs N option will spawn N processes to do the debuginfo
+extraction in parallel.
+
+A single -o switch before any -l or -p switches simply renames
+the primary output file from debugfiles.list to something else.
+A -o switch that follows a -p switch or some -l switches produces
+an additional output file with the debuginfo for the files in
+the -l filelist file, or whose names match the -p pattern.
+The -p argument is an grep -E -style regexp matching the a file name,
+and must not use anchors (^ or $).
+
+The --run-dwz flag instructs find-debuginfo.sh to run the dwz utility
+if available, and --dwz-low-mem-die-limit and --dwz-max-die-limit
+provide detailed limits. See dwz(1) -l and -L option for details.
+Use --dwz-single-file-mode to disable multi-file mode, see dwz(1) -m
+for more details.
+
+If --build-id-seed SEED is given then debugedit is called to
+update the build-ids it finds adding the SEED as seed to recalculate
+the build-id hash. This makes sure the build-ids in the ELF files
+are unique between versions and releases of the same package.
+(Use --build-id-seed \"%{VERSION}-%{RELEASE}\".)
+
+If --unique-debug-suffix SUFFIX is given then the debug files created
+for <FILE> will be named <FILE>-<SUFFIX>.debug. This makes sure .debug
+are unique between package version, release and architecture.
+(Use --unique-debug-suffix \"-%{VERSION}-%{RELEASE}.%{_arch}\".)
+
+If --unique-debug-src-base BASE is given then the source directory
+will be called /usr/debug/src/<BASE>. This makes sure the debug source
+dirs are unique between package version, release and achitecture (Use
+--unique-debug-src-base \"%{name}-%{VERSION}-%{RELEASE}.%{_arch}\")
+
+All file names in switches are relative to builddir ('.' if not given).
+EOF
+}
# Figure out where we are installed so we can call other helper scripts.
lib_rpm_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -129,6 +141,9 @@ unique_debug_src_base=
# Number of parallel jobs to spawn
n_jobs=1
+# exit early on --version or --help
+done=false
+
BUILDDIR=.
out=debugfiles.list
srcout=
@@ -223,6 +238,14 @@ while [ $# -gt 0 ]; do
srcout=$2
shift
;;
+ --version)
+ echo "debugedit find-debuginfo.sh"
+ done=true;
+ ;;
+ --help)
+ help
+ done=true
+ ;;
*)
BUILDDIR=$1
shift
@@ -232,6 +255,9 @@ while [ $# -gt 0 ]; do
shift
done
+# version or help given
+if [ "$done" = "true" ]; then exit 0; fi
+
if test -n "$build_id_seed" -a "$no_recompute_build_id" = "true"; then
echo >&2 "*** ERROR: --build-id-seed (unique build-ids) and -n (do not recompute build-id) cannot be used together"
exit 2
--
2.18.4
next prev parent reply other threads:[~2021-04-30 12:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 22:46 Mark Wielaard
2021-04-29 23:06 ` Dmitry V. Levin
2021-04-30 12:10 ` Mark Wielaard [this message]
2021-04-30 12:19 ` Dmitry V. Levin
2021-04-30 12:37 ` Mark Wielaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=93393113c5d29d9861ef6ee5105062cfb3447b23.camel@klomp.org \
--to=mark@klomp.org \
--cc=debugedit@sourceware.org \
--cc=ldv@altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).