Hi -

A few buildbots are unhappy with the debuginfod configury from
yesterday.  It's right: it's rather convoluted.  This patch
reworks and harmonizes all of that stuff.


Author: Frank Ch. Eigler <f...@redhat.com>
Date:   Mon Jun 3 18:14:52 2024 -0400

    rework debuginfod configury
    
    Rework the top level configure.ac to systematize the
    debuginfod-related checks, inferences, rejections,
    and configuration outputs.
    
    Tested by hand on a F39 machine, installing/uninstalling
    the various dependencies one at a time, and rerunning
    the configury with / without --enable-*debuginfod* flags.
    
    Signed-off-by: Frank Ch. Eigler <f...@redhat.com>

diff --git a/configure.ac b/configure.ac
index 836d61ea6c0d..ddea59525829 100644
--- a/configure.ac
+++ b/configure.ac
@@ -671,41 +671,6 @@ case "$ac_cv_search__obstack_free" in
 esac
 AC_SUBST([obstack_LIBS])
 
-enable_ima_verification="x"
-AC_CHECK_LIB(rpm, headerGet, [
-  AC_CHECK_DECL(RPMSIGTAG_FILESIGNATURES,
-  [
-    enable_ima_verification=$enable_ima_verification"rpm"
-    AC_SUBST(rpm_LIBS, '-lrpm -lrpmio')
-  ],
-  [], [#include <rpm/rpmlib.h>])
-])
-
-dnl we use only the header, not the code of this library
-AC_CHECK_HEADER(imaevm.h, [
-  enable_ima_verification=$enable_ima_verification"imaevm"
-])
-
-AC_CHECK_LIB(crypto, EVP_MD_CTX_new, [
-  enable_ima_verification=$enable_ima_verification"crypto"
-  AC_SUBST(crypto_LIBS, '-lcrypto')
-])
-
-AC_ARG_ENABLE(debuginfod-ima-verification,
-             [AS_HELP_STRING([--enable-debuginfod-ima-verification],[enable 
per-file signature verification])],
-             [want_ima_verification=$enableval],[want_ima_verification=auto])
-
-debuginfod_ima_verification_enabled="no"
-if test "x$want_ima_verification" = "xno"; then
-  enable_ima_verification=nope # indicate failure of prerequisites for 
AM_CONDITIONAL below
-elif test "$enable_ima_verification" = "xrpmimaevmcrypto"; then
-  debuginfod_ima_verification_enabled="yes"
-  AC_DEFINE([ENABLE_IMA_VERIFICATION], [1], [Define if the required ima 
verification libraries are available])
-elif test "x$want_ima_verification" = "xyes"; then
-  AC_MSG_ERROR("missing prerequisites for ima verification")
-fi
-AM_CONDITIONAL([ENABLE_IMA_VERIFICATION],[test "$enable_ima_verification" = 
"xrpmimaevmcrypto"])
-
 dnl The directories with content.
 
 dnl Documentation.
@@ -855,53 +820,71 @@ AX_CXX_COMPILE_STDCXX(11, noext, optional)
 AS_IF([test "x$HAVE_CXX11" = "x1"], [HAVE_CXX11=yes], [HAVE_CXX11=no])
 AM_CONDITIONAL([HAVE_CXX11],[test "x$HAVE_CXX11" = "xyes"])
 
-# Look for libcurl for libdebuginfod minimum version as per rhel7.
-AC_ARG_ENABLE([libdebuginfod],AS_HELP_STRING([--enable-libdebuginfod], [Build 
debuginfod client library (can be =dummy)]))
-AS_IF([test "x$enable_libdebuginfod" != "xno"], [
-    if test "x$enable_libdebuginfod" != "xdummy"; then
-      AC_MSG_NOTICE([checking libdebuginfod dependencies, 
--disable-libdebuginfod or --enable-libdebuginfo=dummy to skip])
-      enable_libdebuginfod=yes # presume success
-      PKG_PROG_PKG_CONFIG
-      PKG_CHECK_MODULES([libcurl],[libcurl >= 
7.29.0],[],[enable_libdebuginfod=no])
-    else
-      AC_MSG_NOTICE([building (bootstrap) dummy libdebuginfo library])
-    fi
-])
-
-AC_CHECK_LIB(pthread, pthread_setname_np, [
-                      AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable 
pthread_setname_np])])
-
-AS_IF([test "x$enable_libdebuginfod" = "xyes" || test "x$enable_libdebuginfod" 
= "xdummy"],
-      [AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
-AS_IF([test "x$enable_libdebuginfod" = "xdummy"],
-      [AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])])
-AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xyes" || test 
"x$enable_libdebuginfod" = "xdummy"])
-AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = 
"xdummy"])
 AC_CHECK_HEADERS([execinfo.h])
 
-# Look for libmicrohttpd, libarchive, sqlite for debuginfo server and srcfiles 
tool
-# minimum versions as per rhel7.
-AC_ARG_ENABLE([debuginfod],AS_HELP_STRING([--enable-debuginfod], [Build 
debuginfod server]))
-AS_IF([test "x$enable_debuginfod" != "xno"], [
-    if test "x$HAVE_CXX11" = "xno"; then
-      AC_MSG_ERROR([the compiler does not support C++11, use 
--disable-debuginfod to disable.])
-    fi
-    AC_MSG_NOTICE([checking debuginfod dependencies, --disable-debuginfod to 
skip])
-    if test "x$enable_libdebuginfod" = "xno"; then
-      AC_MSG_ERROR([need libdebuginfod (or dummy), use --disable-debuginfod to 
disable.])
-    fi
-    enable_debuginfod=yes # presume success
-    AC_DEFINE([HAVE_LIBARCHIVE], [1], [Define to 1 if libarchive is 
available]) # presume success
-    PKG_PROG_PKG_CONFIG
-    PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 
0.9.33],[],[enable_debuginfod=no])
-    PKG_CHECK_MODULES([oldlibmicrohttpd],[libmicrohttpd < 
0.9.51],[old_libmicrohttpd=yes],[old_libmicrohttpd=no])
-    PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no])
-    PKG_CHECK_MODULES([libarchive],[libarchive >= 
3.1.2],[],[enable_debuginfod=no])
-    PKG_CHECK_MODULES([jsonc],[json-c >= 0.11],[],[enable_debuginfod=no])    
-])
-
+# debuginfod-related checks
+#
+# autoconf enable options
+AC_ARG_ENABLE([libdebuginfod],[AS_HELP_STRING([--enable-libdebuginfod], [Build 
debuginfod client library (can be =dummy)])])
+AC_ARG_ENABLE([debuginfod],[AS_HELP_STRING([--enable-debuginfod], [Build 
debuginfod server])])
+AC_ARG_ENABLE([debuginfod-ima-verification],[AS_HELP_STRING([--enable-debuginfod-ima-verification],[enable
 per-file signature verification])])
+#
+# Look for various packages, minimum versions as per rhel7.
+PKG_PROG_PKG_CONFIG
+PKG_CHECK_MODULES([libcurl],[libcurl >= 
7.29.0],[have_libcurl=yes],[have_libcurl=no])
+AC_CHECK_LIB(pthread, pthread_setname_np, 
[AC_DEFINE([HAVE_PTHREAD_SETNAME_NP],[1],[Enable pthread_setname_np])])
+PKG_CHECK_MODULES([jsonc],[json-c >= 0.11],[have_jsonc=yes],[have_jsonc=no])
+PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 
0.9.33],[],[enable_debuginfod=no])
+PKG_CHECK_MODULES([oldlibmicrohttpd],[libmicrohttpd < 
0.9.51],[old_libmicrohttpd=yes],[old_libmicrohttpd=no])
+PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 
3.7.17],[have_sqlite3=yes],[have_sqlite3=no])
+PKG_CHECK_MODULES([libarchive],[libarchive >= 
3.1.2],[have_libarchive=yes],[have_libarchive=no])
+AC_CHECK_LIB(rpm, headerGet, [AC_CHECK_DECL(RPMSIGTAG_FILESIGNATURES,
+                                            [AC_SUBST(rpm_LIBS, '-lrpm 
-lrpmio')],[], [#include <rpm/rpmlib.h>])])
+AC_CHECK_LIB(crypto, EVP_MD_CTX_new, [AC_SUBST(crypto_LIBS, '-lcrypto')])
+AC_CHECK_HEADER(imaevm.h)
+#
+# pronounce judgement on ability to build client, overridden by =yes/=no
+if test "x$enable_libdebuginfod" = "xno"; then
+   true
+elif test "x$have_jsonc$have_libcurl" = "xyesyes"; then
+   enable_libdebuginfod=yes
+elif test "x$enable_libdebuginfod" = "xyes" -o "x$enable_libdebuginfod" = 
"xdummy"; then
+   AC_MSG_ERROR([unable to build libdebuginfod])
+else
+   enable_libdebuginfod=no
+fi
+#
+# pronounce judgement on ability to build server, overridden by =yes/=no
+if test "x$enable_debuginfod" = "xno"; then
+   true
+elif test "x$have_jsonc$HAVE_CXX11$have_libarchive$have_sqlite3" = 
"xyesyesyesyes"; then
+   enable_debuginfod=yes
+elif test "x$enable_debuginfod" = "xyes"; then
+   AC_MSG_ERROR([unable to build debuginfod])
+else
+   enable_debuginfod=no
+fi
+#
+# pronounce judgment on ima signature support
+if test "x$enable_debuginfod_ima_verification" = "xno"; then
+   true
+elif test 
"x$ac_cv_lib_rpm_headerGet$ac_cv_have_decl_RPMSIGTAG_FILESIGNATURES$ac_cv_lib_crypto_EVP_MD_CTX_new$ac_cv_header_imaevm_h"
 = "xyesyesyesyes"; then
+   enable_debuginfod_ima_verification=yes
+elif test "x$enable_debuginfod_ima_verification" = "xyes"; then
+   AC_MSG_ERROR([unable to enable debuginfod ima verification])
+else
+   enable_debuginfod_ima_verification=no
+fi
+#
+# communicate judgements to automake / config.h
+AS_IF([test "x$enable_libdebuginfod" != 
"xno"],[AC_DEFINE([ENABLE_LIBDEBUGINFOD], [1], [Enable libdebuginfod])])
+AM_CONDITIONAL([LIBDEBUGINFOD],[test "x$enable_libdebuginfod" != "xno"])
+AS_IF([test "x$enable_libdebuginfod" = 
"xdummy"],[AC_DEFINE([DUMMY_LIBDEBUGINFOD], [1], [Build dummy libdebuginfod])])
+AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = 
"xdummy"])
 AS_IF([test "x$enable_debuginfod" != 
"xno"],AC_DEFINE([ENABLE_DEBUGINFOD],[1],[Build debuginfod]))
 AM_CONDITIONAL([DEBUGINFOD],[test "x$enable_debuginfod" = "xyes"])
+AS_IF([test "x$enable_debuginfod_ima_verification" = 
"xyes"],AC_DEFINE([ENABLE_IMA_VERIFICATION],[1],[Build IMA verification]))
+AM_CONDITIONAL([ENABLE_IMA_VERIFICATION],[test 
"$enable_debuginfod_ima_verification" = "xyes"])
 AM_CONDITIONAL([OLD_LIBMICROHTTPD],[test "x$old_libmicrohttpd" = "xyes"])
 
 dnl for /etc/profile.d/elfutils.{csh,sh}
@@ -964,7 +947,8 @@ AC_MSG_NOTICE([
     libdebuginfod client support       : ${enable_libdebuginfod}
     Debuginfod server support          : ${enable_debuginfod}
     Default DEBUGINFOD_URLS            : ${default_debuginfod_urls}
-    Debuginfod RPM sig checking        : 
${debuginfod_ima_verification_enabled} ${default_debuginfod_ima_cert_path}
+    Debuginfod RPM sig checking        : ${enable_debuginfod_ima_verification} 
+    Default DEBUGINFOD_IMA_CERT_PATH   : ${default_debuginfod_ima_cert_path}
 
   EXTRA TEST FEATURES (used with make check)
     have bunzip2 installed (required)  : ${HAVE_BUNZIP2}


diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3cc9ded43b6a..771dd01d24d7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -209,7 +209,6 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile 
test-nlist \
        run-disasm-riscv64.sh \
        run-pt_gnu_prop-tests.sh \
        run-getphdrnum.sh run-test-includes.sh \
-       run-debuginfod-client-profile.sh \
        leb128 read_unaligned \
        msg_tst system-elf-libelf-test system-elf-gelf-test \
        $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \
@@ -272,6 +271,7 @@ TESTS += run-debuginfod-dlopen.sh \
         run-debuginfod-webapi-concurrency.sh \
         run-debuginfod-section.sh \
         run-debuginfod-IXr.sh \
+        run-debuginfod-client-profile.sh \
         run-debuginfod-find-metadata.sh
 endif
 if !OLD_LIBMICROHTTPD

Reply via email to