public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
From: "dodji at seketeli dot org" <sourceware-bugzilla@sourceware.org>
To: libabigail@sourceware.org
Subject: [Bug default/31672] abidb: make libarchive a soft dependency
Date: Fri, 26 Apr 2024 13:59:58 +0000	[thread overview]
Message-ID: <bug-31672-9487-CMZ7ZIErJe@http.sourceware.org/bugzilla/> (raw)
In-Reply-To: <bug-31672-9487@http.sourceware.org/bugzilla/>

https://sourceware.org/bugzilla/show_bug.cgi?id=31672

--- Comment #3 from Dodji Seketeli <dodji at seketeli dot org> ---
Dodji Seketeli <dodji@seketeli.org> a écrit:

[...]

> I came up with the potential commit below that is currently running
> through the build bots.  OK to apply if it passes tests?

Actually, the previous patch failed some tests on some platform where
the libarchive python module is missing.  This is because some code in
the main() function was still referencing the archive even though it is
not supported.  Adjusted thus.

Now, the updated patch below actually passes the test on all the tested
platforms.  OK to apply to the master branch?

From f41d17301f75fab61366bd7b568418d2a9c30567 Mon Sep 17 00:00:00 2001
From: "Frank Ch. Eigler" <fche@redhat.com>
Date: Fri, 26 Apr 2024 10:30:42 +0200
Subject: [PATCH] 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>
---
 configure.ac | 15 +++++++++++++--
 tools/abidb  | 31 +++++++++++++++++++------------
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/configure.ac b/configure.ac
index a86f81d0..c6e1ad64 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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])
diff --git a/tools/abidb b/tools/abidb
index a3f6850f..af1750d9 100755
--- a/tools/abidb
+++ b/tools/abidb
@@ -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:

-- 
You are receiving this mail because:
You are on the CC list for the bug.

  parent reply	other threads:[~2024-04-26 13:59 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-23 13:41 [Bug default/31672] New: " fche at redhat dot com
2024-04-23 14:02 ` [Bug default/31672] " fche at redhat dot com
2024-04-26  8:44   ` [RFC] [PATCH] Make libarchive python module optional. Was " Dodji Seketeli
2024-04-26 13:59     ` Dodji Seketeli
2024-04-26 14:18       ` Dodji Seketeli
2024-04-26  8:44 ` dodji at seketeli dot org
2024-04-26 13:59 ` dodji at seketeli dot org [this message]
2024-04-26 14:18 ` dodji at redhat dot com
2024-04-26 14:19 ` dodji at seketeli dot org

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=bug-31672-9487-CMZ7ZIErJe@http.sourceware.org/bugzilla/ \
    --to=sourceware-bugzilla@sourceware.org \
    --cc=libabigail@sourceware.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).