So far one could only specify yes/no (optionally for all drivers through
--enable-all-drivers={yes,no}). However, even when stating a =yes, the
dependency check would override it to a =no if the dependencies are
missing.

This is a bit annoying for scripts since a script may specify
--enable-foo-driver=yes but in fact the build may not contain
`foo-driver` due to missing build dependencies. This is especially
problematic for distro's which look like they currently do not build a
defined driver set - which results in random drivers missing [1].

This fixes that by following the autoconf examples [2] that allow a third
state `check`. With that `no` means no, `yes` means yes (raise an error
if deps are unavailable) and `check` gracefully disables drivers with
unavailable dependencies.

With that --enable-all-drivers can be used to ensure that all drivers are
built in. Certain drivers can still be explicitly disabled by overriding
the individual driver setting.

This way distros can specify --enable-all-drivers and new drivers with
unmet dependencies will cause an error rather than silently getting
dropped of the build.

[1] https://sigrok.org/bugzilla/show_bug.cgi?id=1699
[2] 
https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/External-Software.html#External-Software

To: sigrok-devel@lists.sourceforge.net
Cc: Daniel Thompson <daniel.thomp...@linaro.org>
---
I realized that Fedora only builds libsigrok with a somewhat random set
of enabled drivers. It also seems to cause ambigious situations for the
appimage builds.

This proposes a more explicit and less error-prone method of specifying
the drivers expected to be built in.
---
 configure.ac | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index 5c30a816..a509a89d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -277,26 +277,31 @@ sr_check_driver_deps() {
                        [SR_APPEND([sr_deps_missing], [', '], [$sr_dep])])
        done
        test -z "$sr_deps_missing" || return 1
 }
 
 AC_ARG_ENABLE([all-drivers],
        [AS_HELP_STRING([--enable-all-drivers],
-                       [enable all drivers by default [default=yes]])],
-       [], [enable_all_drivers=yes])
+                       [enable all drivers by default [default=check]])],
+       [], [enable_all_drivers=check])
 
 ## _SR_DRIVER(Device name, driver-name, var-name, [dependencies...])
 m4_define([_SR_DRIVER], [
        AC_ARG_ENABLE([$2],
                [AS_HELP_STRING([--enable-$2], [enable $1 support])],
                [$3=$enableval], [$3=$enable_all_drivers])
 
-       AS_IF([test "x[$]$3" = xyes], [sr_hw_info=yes[]m4_ifval([$4], [
+       AS_IF([test "x[$]$3" != xno],
+               [sr_hw_info=yes[]m4_ifval([$4], [
                sr_check_driver_deps $4 \
-                       || $3=no sr_hw_info="no (missing: $sr_deps_missing)"
+                       || if test "x[$]$3" != xcheck; then
+                               AC_MSG_ERROR([driver $2 is enabled, but deps 
are missing: $sr_deps_missing])
+                       else
+                               $3=no sr_hw_info="no (missing: 
$sr_deps_missing)"
+                       fi;
        ])], [sr_hw_info='no (disabled)'])
        sr_driver_summary_append "$2" "$sr_hw_info"
 
        AM_CONDITIONAL([$3], [test "x[$]$3" = xyes])
        AM_COND_IF([$3], [AC_DEFINE([HAVE_$3], [1], [Whether to support $1 
device.]) AC_DEFINE([HAVE_DRIVERS], [1], [Whether at least one driver is 
enabled.])])
 ])
 

---
base-commit: b503d24cdf56abf8c0d66d438ccac28969f01670
change-id: 20240112-tweak-enable-all-drivers-7e02a3e567f3

Best regards,
-- 
Erik Schilling <erik.schill...@linaro.org>



_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel

Reply via email to