From 6948060e01628f5bbebba21ff282cf1ed3d69fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Mon, 24 Apr 2023 13:32:34 +0200 Subject: [PATCH] Print out the Userspace-RCU flavor and version The `named -V` now prints out the liburcu flavor used and the compile-time version. --- bin/named/main.c | 1 + configure.ac | 47 ++++++++++++++++++++++++++------------------ m4/pkg-modversion.m4 | 35 +++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 m4/pkg-modversion.m4 diff --git a/bin/named/main.c b/bin/named/main.c index d134215207..00c4db48d3 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -591,6 +591,7 @@ printversion(bool verbose) { printf("compiled with libuv version: %d.%d.%d\n", UV_VERSION_MAJOR, UV_VERSION_MINOR, UV_VERSION_PATCH); printf("linked to libuv version: %s\n", uv_version_string()); + printf("compiled with %s version: %s\n", RCU_FLAVOR, RCU_VERSION); #if HAVE_LIBNGHTTP2 nghttp2_info *nginfo = NULL; printf("compiled with libnghttp2 version: %s\n", NGHTTP2_VERSION); diff --git a/configure.ac b/configure.ac index 88504b5dc5..e40828c52a 100644 --- a/configure.ac +++ b/configure.ac @@ -201,34 +201,43 @@ PKG_PROG_PKG_CONFIG AS_IF([test -z "$PKG_CONFIG"], [AC_MSG_ERROR([The pkg-config script could not be found or is too old.])]) +# +# Pick Userspace-RCU flavor (developer only option) +# +# [pairwise: --with-liburcu=membarrier, --with-liburcu=qsbr, --with-libucru=mb, --with-liburcu=signal, --with-liburcu=bp] AC_ARG_WITH([liburcu], [AS_HELP_STRING([--with-liburcu=FLAVOR], [Build with Userspace-RCU variant (membarrier|qsbr|mb|signal|bp) [default=membarrier]]))], [], [with_liburcu=membarrier]) -# -# Pick Userspace-RCU flavor (developer only option) -# - AC_MSG_CHECKING([liburcu flavor]) AS_CASE([$with_liburcu], - [membarrier],[AC_MSG_RESULT([membarrier]) - PKG_CHECK_MODULES([LIBURCU], [liburcu liburcu-cds]) - AC_DEFINE([RCU_MEMBARRIER], [1], [Build with membarrier Userspace-RCU flavor])], - [qsbr],[AC_MSG_RESULT([qsbr]) - PKG_CHECK_MODULES([LIBURCU], [liburcu-qsbr liburcu-cds]) - AC_DEFINE([RCU_QSBR], [1], [Build with QSBR Userspace-RCU flavor])], - [mb],[AC_MSG_RESULT([mb]) - PKG_CHECK_MODULES([LIBURCU], [liburcu-mb liburcu-cds]) - AC_DEFINE([RCU_MB], [1], [Build with mb Userspace-RCU flavor])], - [signal],[AC_MSG_RESULT([signal]) - PKG_CHECK_MODULES([LIBURCU], [liburcu-signal liburcu-cds]) - AC_DEFINE([RCU_SIGNAL], [1], [Build with signal Userspace-RCU flavor])], - [bp],[AC_MSG_RESULT([bulletproof]) - PKG_CHECK_MODULES([LIBURCU], [liburcu-bp liburcu-cds]) - AC_DEFINE([RCU_BP], [1], [Pick bulletproof Userspace-RCU flavor])], + [membarrier], + [RCU_FLAVOR="liburcu" + AC_DEFINE([RCU_MEMBARRIER], [1], [Build with membarrier Userspace-RCU flavor])], + [qsbr], + [RCU_FLAVOR="liburcu-qsbr" + AC_DEFINE([RCU_QSBR], [1], [Build with QSBR Userspace-RCU flavor])], + [mb], + [RCU_FLAVOR="liburcu-mb" + AC_DEFINE([RCU_MB], [1], [Build with mb Userspace-RCU flavor])], + [signal], + [RCU_FLAVOR="liburcu-signal" + AC_DEFINE([RCU_SIGNAL], [1], [Build with signal Userspace-RCU flavor])], + [bp], + [RCU_FLAVOR="liburcu-bp" + AC_DEFINE([RCU_BP], [1], [Build with bulletproof Userspace-RCU flavor])], [AC_MSG_ERROR([Invalid Userspace-RCU flavor picked])]) +AC_MSG_RESULT([$RCU_FLAVOR]) + +PKG_CHECK_MODULES([LIBURCU], [$RCU_FLAVOR liburcu-cds]) + +AC_DEFINE_UNQUOTED([RCU_FLAVOR], ["$RCU_FLAVOR"], [Chosen Userspace-RCU flavor]) + +PKG_CHECK_VERSION([RCU_VERSION], [$RCU_FLAVOR]) +AC_DEFINE_UNQUOTED([RCU_VERSION], ["$RCU_VERSION"], [Compile-time Userspace-RCU version]) + # Fuzzing is not included in pairwise testing as fuzzing tools are # not present in the relevant Docker image. # diff --git a/m4/pkg-modversion.m4 b/m4/pkg-modversion.m4 new file mode 100644 index 0000000000..fba2cc2033 --- /dev/null +++ b/m4/pkg-modversion.m4 @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: FSFAP +# +# =========================================================================== +# https://gitlab.isc.org/isc-projects/autoconf-archive/ax_jemalloc.html +# =========================================================================== +# +# SYNOPSIS +# +# PKG_CHECK_VERSION(VARIABLE, MODULE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# DESCRIPTION +# +# Retrieves the value of the pkg-config version for the given module. +# +# LICENSE +# +# Copyright (c) 2023 Internet Systems Consortium +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 1 + +# +AC_DEFUN([PKG_CHECK_VERSION], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [version of $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [modversion], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$4], [$3])dnl +])dnl PKG_CHECK_VERSION