[PATCH 3/3] find-debuginfo: Add -O/--output-dir switch

Michal Domonkos mdomonko@redhat.com
Wed Oct 29 15:11:55 GMT 2025


Originally, as it seems, the meaning of the builddir argument was that
of an *output* directory (for the list files), since that's all it was
used for. The actual *build* directory is pointed to by $RPM_BUILD_DIR.

However, since commit a8c7efeae67856e144897efb7c40516588b811ee, we have
been passing the builddir argument to "debugedit --base-dir" when unique
dirs are requested, effectively making the argument live up to its name.
Thus, the output directory currently equals the builddir and cannot be
set independently when needed. Fix that by adding a new switch to allow
just that.

This switch will be useful in RPM's %{__find_debuginfo} macro where we
can prevent "rpmbuild --build-in-place" from polluting the source tree
(since builddir points to $PWD in that mode).

Use -p and -o in the included test to also cover that code path.

Signed-off-by: Michal Domonkos <mdomonko@redhat.com>
---
 scripts/find-debuginfo.in | 13 ++++++++++++-
 tests/find-debuginfo.at   | 26 ++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in
index 8bb688a..d061630 100755
--- a/scripts/find-debuginfo.in
+++ b/scripts/find-debuginfo.in
@@ -33,6 +33,7 @@ Options:
 [-j N] [--jobs N]
 [-o debugfiles.list]
 [-S debugsourcefiles.list]
+[-O PATH] [--output-dir PATH]
 [--run-dwz] [--dwz-low-mem-die-limit N]
 [--dwz-max-die-limit N]
 [--dwz-single-file-mode]
@@ -74,6 +75,10 @@ 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 -O or --output-dir PATH flag instructs find-debuginfo to store all output
+files in the PATH directory. If not given, all output files will be stored in
+builddir.
+
 The --run-dwz flag instructs find-debuginfo 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.
@@ -183,6 +188,7 @@ fi
 
 
 BUILDDIR=.
+OUTDIR=
 out=debugfiles.list
 srcout=
 nout=0
@@ -241,6 +247,10 @@ while [ $# -gt 0 ]; do
     fi
     shift
     ;;
+  -O|--output-dir)
+    OUTDIR=$2
+    shift
+    ;;
   -l)
     lists[$nout]="${lists[$nout]} $2"
     shift
@@ -330,7 +340,7 @@ fi
 
 $quiet || echo "find-debuginfo: starting" 2>&1
 
-OUTDIR=$BUILDDIR
+[ -z "$OUTDIR" ] && OUTDIR=$BUILDDIR
 
 i=0
 while ((i < nout)); do
@@ -348,6 +358,7 @@ SOURCEFILE="$OUTDIR/debugsources.list"
 LINKSFILE="$OUTDIR/debuglinks.list"
 ELFBINSFILE="$OUTDIR/elfbins.list"
 
+mkdir -p "$OUTDIR"
 > "$SOURCEFILE"
 > "$LISTFILE"
 > "$LINKSFILE"
diff --git a/tests/find-debuginfo.at b/tests/find-debuginfo.at
index 834f1af..59c15b9 100644
--- a/tests/find-debuginfo.at
+++ b/tests/find-debuginfo.at
@@ -428,3 +428,29 @@ AT_CHECK([env RPM_BUILD_DIR=${PWD} \
 # Check builddir against the snapshot
 AT_CHECK([ls subdir_build | sort], [0], [expout], [])
 AT_CLEANUP
+
+# Run find-debuginfo on a small build and check all output files (and only
+# those) were created in the supplied output directory
+AT_SETUP([find-debuginfo output files (custom dir)])
+AT_KEYWORDS([find-debuginfo] [sources] [debugdata] [gdb-index])
+FIND_DEBUGINFO_PKG_BUILD_SETUP
+# Make a snapshot of builddir
+AT_CHECK([ls subdir_build | sort > expout], [0], [], [])
+# We need to set some environment variables for running find-debuginfo
+# normally set by rpmbuild.
+AT_CHECK([env RPM_BUILD_DIR=${PWD} \
+              RPM_BUILD_ROOT=${PWD} \
+              RPM_PACKAGE_NAME=pkg \
+              RPM_PACKAGE_VERSION=ver \
+              RPM_PACKAGE_RELEASE=rel \
+              RPM_ARCH=arch \
+          find-debuginfo -p '.*' -o allfiles.list \
+                         -O ${PWD}/output ${PWD}/subdir_build],
+         [0], [ignore], [])
+# Check builddir against the snapshot
+AT_CHECK([ls subdir_build | sort], [0], [expout], [])
+# Check the output directory against the expected list
+AT_CHECK([(echo allfiles.list; echo "FIND_DEBUGINFO_OUTPUT_FILES") |
+          sort > expout], [0], [], [])
+AT_CHECK([ls output | sort], [0], [expout], [])
+AT_CLEANUP
-- 
2.51.1



More information about the Debugedit mailing list