configure,abidb: Make the libarchive python module optional for abidb

Some distributions don't have the libarchive python module packaged.

This patch makes that module optional and enables abidb to function
without it, as it's only necessary for the support of the '--archive'
command line option of the abidb program.

	* configure.ac: Detect the libarchive python module as an optional
	dependency for the abidb program.  So far, only the git python
	module remains a hard dependency.
	* tools/abidb (main): Do not support the '--archive' command line
	option if the libarchive python module is not present.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
Frank Ch. Eigler 2024-04-26 10:30:42 +02:00 committed by Dodji Seketeli
parent 0fb03efa85
commit 784b61f00a
2 changed files with 32 additions and 14 deletions

View File

@ -824,16 +824,27 @@ fi
dnl abidb checks
if test x$PYTHON3_INTERPRETER != xno -a x$ENABLE_ABIDB != xno; then
AX_CHECK_PYTHON_MODULES([git libarchive],
AX_CHECK_PYTHON_MODULES([git],
[$PYTHON],
[FOUND_ALL_PYTHON_MODULES=yes],
[FOUND_ALL_PYTHON_MODULES=no])
if test x$FOUND_ALL_PYTHON_MODULES = xno; then
AC_MSG_NOTICE([missing python modules: $MISSING_PYTHON_MODULES])
AC_MSG_NOTICE([disabling abidb as a result])
AC_MSG_WARN([disabling abidb as a result])
ENABLE_ABIDB=no
else
ENABLE_ABIDB=yes
dnl search for optional modules, just for autoconf reporting purposes
AX_CHECK_PYTHON_MODULES([libarchive],
[$PYTHON],
[FOUND_ALL_OPTIONAL_PYTHON_MODULES=yes],
[FOUND_ALL_OPTIONAL_PYTHON_MODULES=no])
if test x$FOUND_ALL_OPTIONAL_PYTHON_MODULES = xno; then
AC_MSG_WARN([missing optional python modules for abidb: $MISSING_PYTHON_MODULES])
else
AC_MSG_NOTICE([found all optional python modules for abidb])
fi
fi
else
AC_MSG_NOTICE([disabling abidb])

View File

@ -23,7 +23,11 @@ import re
import ast
import os
import glob
import libarchive
try:
import libarchive
enable_libarchive=True
except:
enable_libarchive=False
# globals
@ -156,9 +160,10 @@ def main() -> list[str]:
parser.add_argument('--timeout',type=int,help='limit abidw/abicompat runtime (seconds)',default=0)
parser.add_argument('--submit',nargs='*',type=str,default=[],
help='submit abidw of given binaries to abidb')
parser.add_argument('--archive','-Z',metavar='EXT=CMD',
type=str,help='submit binaries from archives with given extension & decoder',
default=[],action='append') # like debuginfod(8)
if enable_libarchive:
parser.add_argument('--archive','-Z',metavar='EXT=CMD',
type=str,help='submit binaries from archives with given extension & decoder',
default=[],action='append') # like debuginfod(8)
parser.add_argument('--sysroot',type=str,help='remove given sysroot prefix from submitted file names',default=None)
parser.add_argument('--filter',type=str,help='submit only binaries matching given wildcard',default=r'/lib.*\.so') # sub-version suffixes will be flattened into SONAME
# --sysroot=PATH subtract this from SUBMIT paths
@ -208,14 +213,15 @@ def main() -> list[str]:
logging.info(f'checked out distrobranch {args.distrobranch} files {numfiles}')
ra = {}
for entry in args.archive: # parse / accumulate -Z EXT=CMD bits
extcmd = entry.split('=')
ext = extcmd[0]
if len(extcmd) == 1:
cmd = "cat" # default: pass through to libarchive
else:
cmd = "=".join(extcmd[1:]) # the rest of the command, filling other ='s back in
ra["."+ext] = cmd
if enable_libarchive:
for entry in args.archive: # parse / accumulate -Z EXT=CMD bits
extcmd = entry.split('=')
ext = extcmd[0]
if len(extcmd) == 1:
cmd = "cat" # default: pass through to libarchive
else:
cmd = "=".join(extcmd[1:]) # the rest of the command, filling other ='s back in
ra["."+ext] = cmd
def submit_file_generator(args):
@ -230,6 +236,7 @@ def main() -> list[str]:
ln = submit
yield (None, ln, pn) # must be a plain file # XXX or ldconfig-created symlink, ugh
else: # an archive!
assert enable_libarchive
cmd = ra[ext]
if (cmd == "cat"): # short-circuit this
with libarchive.file_reader(submit) as archive: