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