From patchwork Wed Aug 9 11:10:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timothy Redaelli X-Patchwork-Id: 1819248 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=W4Y8HMMy; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RLS5T5RDzz1yYC for ; Wed, 9 Aug 2023 21:10:20 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id E2B7A6122A; Wed, 9 Aug 2023 11:10:17 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org E2B7A6122A Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=W4Y8HMMy X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uXJ2Q58ngw6O; Wed, 9 Aug 2023 11:10:16 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 71CFD60B04; Wed, 9 Aug 2023 11:10:15 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 71CFD60B04 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 41545C0072; Wed, 9 Aug 2023 11:10:15 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1A07DC0032 for ; Wed, 9 Aug 2023 11:10:14 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D459660FCE for ; Wed, 9 Aug 2023 11:10:13 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org D459660FCE X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id oMKei8rYKDv9 for ; Wed, 9 Aug 2023 11:10:12 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id 4493C60B04 for ; Wed, 9 Aug 2023 11:10:12 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 4493C60B04 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1691579411; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NqHkD5PpzlOsaF3Yaa4QIiIl7USmxKWD//lq9XAssz8=; b=W4Y8HMMyVtkdgp1C1OY5CannjetSmckZX69ns+s5jjbsMjIj1SmCCmJpwtEoUfhgOU+5eY wkNaqrasPbwOC1U3Z9+iBZRyZDeesi1tt3/TY/QHmUhyN6JRPXok5ZGjN/5wJm+hZst686 trYfWXFTdm4A05QVzQ5j37uunQuEBzk= Received: from mimecast-mx02.redhat.com (66.187.233.73 [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-391-MMBf-NdwPdSziO11E4U70A-1; Wed, 09 Aug 2023 07:10:07 -0400 X-MC-Unique: MMBf-NdwPdSziO11E4U70A-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7CABC3C0DDA2; Wed, 9 Aug 2023 11:10:07 +0000 (UTC) Received: from aldebaran.redhat.com (unknown [10.39.192.144]) by smtp.corp.redhat.com (Postfix) with ESMTP id ADB851121314; Wed, 9 Aug 2023 11:10:06 +0000 (UTC) From: Timothy Redaelli To: dev@openvswitch.org Date: Wed, 9 Aug 2023 13:10:04 +0200 Message-ID: <2f2adc82b3c71ba23f8f2839adb0f74c84ec74e5.1691579350.git.tredaelli@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: Ilya Maximets Subject: [ovs-dev] [PATCH v6] rhel: make the version, displayed to the user, customizable X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Since on CentOS/RHEL the builds are based on stable branches and not on tags for debugging purpose it's better to have the downstream version as version so it's easier to know which commits are included in a build. This commit adds --with-version-suffix as ./configure option in order to set an OVS version suffix that should be shown to the user via ovs-vsctl -V and, so, also on database, on ovs-vsctl show and the other utilities. --with-version-suffix is used in Fedora/CentOS/RHEL spec file in order to have the version be aligned with the downstream one. Signed-off-by: Timothy Redaelli --- v1 -> v2: Use --with-version-suffix= and add version to other utilies (as requested by Ilya). v2 -> v3: Add versioning to python utilities and python library itself (as suggested by Aaron). v3 -> v4: Remove versioning to python library itself to avoid breaking PEP440 (as requested by Ilya). Versioning is still used in python utilities. v4 -> v5: Re-add versioning to python library itself, but don't use it on setup.py (to avoid breaking PEP440). This will permit to have the custom version as ovs.version.VERSION (in case somebody uses it) and, so, also in python/ovs/unixctl/server.py (as suggested by Ilya). v5 -> v6: Fix some setup.py leftovers and change the test as a loop (as suggested by Ilya). --- Makefile.am | 1 + acinclude.m4 | 13 ++++++++++++ configure.ac | 1 + include/openvswitch/version.h.in | 2 +- lib/ovsdb-error.c | 2 +- lib/util.c | 5 +++-- ovsdb/ovsdb-server.c | 3 ++- python/.gitignore | 1 + python/automake.mk | 18 ++++++++++++----- python/{setup.py => setup.py.template} | 28 +++++++++----------------- rhel/openvswitch-fedora.spec.in | 1 + utilities/ovs-dpctl-top.in | 2 +- utilities/ovs-lib.in | 2 +- utilities/ovs-parse-backtrace.in | 2 +- utilities/ovs-pcap.in | 2 +- utilities/ovs-pki.in | 2 +- utilities/ovs-tcpdump.in | 4 ++-- utilities/ovs-tcpundump.in | 2 +- utilities/ovs-vlan-test.in | 2 +- vswitchd/bridge.c | 3 ++- 20 files changed, 58 insertions(+), 38 deletions(-) rename python/{setup.py => setup.py.template} (87%) diff --git a/Makefile.am b/Makefile.am index db341504d..793cd10dc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -160,6 +160,7 @@ SUFFIXES += .in -e 's,[@]PYTHON3[@],$(PYTHON3),g' \ -e 's,[@]RUNDIR[@],$(RUNDIR),g' \ -e 's,[@]VERSION[@],$(VERSION),g' \ + -e 's,[@]VERSION_SUFFIX[@],$(VERSION_SUFFIX),g' \ -e 's,[@]localstatedir[@],$(localstatedir),g' \ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \ -e 's,[@]sysconfdir[@],$(sysconfdir),g' \ diff --git a/acinclude.m4 b/acinclude.m4 index f1ba046c2..f7a81a734 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -497,6 +497,19 @@ AC_DEFUN([OVS_CHECK_DPDK], [ AM_CONDITIONAL([DPDK_NETDEV], test "$DPDKLIB_FOUND" = true) ]) +dnl Append a version suffix + +AC_DEFUN([OVS_CHECK_VERSION_SUFFIX], [ + AC_ARG_WITH([version-suffix], + [AS_HELP_STRING([--with-version-suffix=ver_suffix], + [Specify a version suffix that will be appended + to OVS version])]) + AC_DEFINE_UNQUOTED([VERSION_SUFFIX], ["$with_version_suffix"], + [Package version suffix]) + AC_SUBST([VERSION_SUFFIX], [$with_version_suffix]) + ]) +]) + dnl Checks for net/if_dl.h. dnl dnl (We use this as a proxy for checking whether we're building on FreeBSD diff --git a/configure.ac b/configure.ac index c8708630e..049d37d7d 100644 --- a/configure.ac +++ b/configure.ac @@ -198,6 +198,7 @@ OVS_CHECK_LINUX_SCTP_CT OVS_CHECK_LINUX_VIRTIO_TYPES OVS_CHECK_DPDK OVS_CHECK_PRAGMA_MESSAGE +OVS_CHECK_VERSION_SUFFIX AC_SUBST([CFLAGS]) AC_SUBST([OVS_CFLAGS]) AC_SUBST([OVS_LDFLAGS]) diff --git a/include/openvswitch/version.h.in b/include/openvswitch/version.h.in index 23d8fde4f..231f61e30 100644 --- a/include/openvswitch/version.h.in +++ b/include/openvswitch/version.h.in @@ -19,7 +19,7 @@ #define OPENVSWITCH_VERSION_H 1 #define OVS_PACKAGE_STRING "@PACKAGE_STRING@" -#define OVS_PACKAGE_VERSION "@PACKAGE_VERSION@" +#define OVS_PACKAGE_VERSION "@PACKAGE_VERSION@@VERSION_SUFFIX@" #define OVS_LIB_VERSION @LT_CURRENT@ #define OVS_LIB_REVISION @LT_REVISION@ diff --git a/lib/ovsdb-error.c b/lib/ovsdb-error.c index 9ad42b232..56512fc28 100644 --- a/lib/ovsdb-error.c +++ b/lib/ovsdb-error.c @@ -146,7 +146,7 @@ ovsdb_internal_error(struct ovsdb_error *inner_error, ds_put_char(&ds, ')'); } - ds_put_format(&ds, " (%s %s)", program_name, VERSION); + ds_put_format(&ds, " (%s %s)", program_name, VERSION VERSION_SUFFIX); if (inner_error) { char *s = ovsdb_error_to_string_free(inner_error); diff --git a/lib/util.c b/lib/util.c index 3fb3a4b40..c1bfda0e6 100644 --- a/lib/util.c +++ b/lib/util.c @@ -617,8 +617,9 @@ ovs_set_program_name(const char *argv0, const char *version) program_name = basename; free(program_version); - if (!strcmp(version, VERSION)) { - program_version = xasprintf("%s (Open vSwitch) "VERSION"\n", + if (!strcmp(version, VERSION VERSION_SUFFIX)) { + program_version = xasprintf("%s (Open vSwitch) "VERSION + VERSION_SUFFIX"\n", program_name); } else { program_version = xasprintf("%s %s\n" diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index cf09c9079..f8b9aebbe 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -428,7 +428,8 @@ main(int argc, char *argv[]) /* ovsdb-server is usually a long-running process, in which case it * makes plenty of sense to log the version, but --run makes * ovsdb-server more like a command-line tool, so skip it. */ - VLOG_INFO("%s (Open vSwitch) %s", program_name, VERSION); + VLOG_INFO("%s (Open vSwitch) %s", program_name, + VERSION VERSION_SUFFIX); } unixctl_command_register("exit", "", 0, 0, ovsdb_server_exit, &exiting); diff --git a/python/.gitignore b/python/.gitignore index 60ace6f05..ad5486af8 100644 --- a/python/.gitignore +++ b/python/.gitignore @@ -1,2 +1,3 @@ dist/ *.egg-info +setup.py diff --git a/python/automake.mk b/python/automake.mk index 82a508787..b1e224d7f 100644 --- a/python/automake.mk +++ b/python/automake.mk @@ -75,7 +75,6 @@ EXTRA_DIST += \ EXTRA_DIST += \ python/ovs/compat/sortedcontainers/LICENSE \ python/README.rst \ - python/setup.py \ python/test_requirements.txt # C extension support. @@ -93,7 +92,7 @@ FLAKE8_PYFILES += \ python/build/nroff.py \ python/build/soutil.py \ python/ovs/dirs.py.template \ - python/setup.py + python/setup.py.template nobase_pkgdata_DATA = $(ovs_pyfiles) $(ovstest_pyfiles) ovs-install-data-local: @@ -112,10 +111,10 @@ ovs-install-data-local: $(INSTALL_DATA) python/ovs/dirs.py.tmp $(DESTDIR)$(pkgdatadir)/python/ovs/dirs.py rm python/ovs/dirs.py.tmp -python-sdist: $(srcdir)/python/ovs/version.py $(ovs_pyfiles) python/ovs/dirs.py +python-sdist: $(srcdir)/python/setup.py $(srcdir)/python/ovs/version.py $(ovs_pyfiles) python/ovs/dirs.py (cd python/ && $(PYTHON3) setup.py sdist) -pypi-upload: $(srcdir)/python/ovs/version.py $(ovs_pyfiles) python/ovs/dirs.py +pypi-upload: $(srcdir)/python/setup.py $(srcdir)/python/ovs/version.py $(ovs_pyfiles) python/ovs/dirs.py (cd python/ && $(PYTHON3) setup.py sdist upload) install-data-local: ovs-install-data-local @@ -126,7 +125,7 @@ ovs-uninstall-local: ALL_LOCAL += $(srcdir)/python/ovs/version.py $(srcdir)/python/ovs/version.py: config.status $(AM_V_GEN)$(ro_shell) > $(@F).tmp && \ - echo 'VERSION = "$(VERSION)"' >> $(@F).tmp && \ + echo 'VERSION = "$(VERSION)$(VERSION_SUFFIX)"' >> $(@F).tmp && \ if cmp -s $(@F).tmp $@; then touch $@; rm $(@F).tmp; else mv $(@F).tmp $@; fi ALL_LOCAL += $(srcdir)/python/ovs/dirs.py @@ -144,6 +143,15 @@ $(srcdir)/python/ovs/dirs.py: python/ovs/dirs.py.template EXTRA_DIST += python/ovs/dirs.py.template CLEANFILES += python/ovs/dirs.py +ALL_LOCAL += $(srcdir)/python/setup.py +$(srcdir)/python/setup.py: python/setup.py.template + $(AM_V_GEN)sed \ + -e 's,[@]VERSION[@],$(VERSION),g' \ + < $? > $@.tmp && \ + mv $@.tmp $@ +EXTRA_DIST += python/setup.py.template +CLEANFILES += python/setup.py + EXTRA_DIST += python/TODO.rst $(srcdir)/python/ovs/flow/ofp_fields.py: $(srcdir)/build-aux/gen_ofp_field_decoders include/openvswitch/meta-flow.h diff --git a/python/setup.py b/python/setup.py.template similarity index 87% rename from python/setup.py rename to python/setup.py.template index bcf832ce9..e7d59f2ca 100644 --- a/python/setup.py +++ b/python/setup.py.template @@ -23,24 +23,16 @@ except ImportError: # Needed for setuptools < 59.0 import setuptools -VERSION = "unknown" - -try: - # Try to set the version from the generated ovs/version.py - exec(open("ovs/version.py").read()) -except IOError: - print("Ensure version.py is created by running make python/ovs/version.py", - file=sys.stderr) - sys.exit(-1) - -try: - # Try to open generated ovs/dirs.py. However, in this case we - # don't need to exec() - open("ovs/dirs.py") -except IOError: - print("Ensure dirs.py is created by running make python/ovs/dirs.py", - file=sys.stderr) - sys.exit(-1) +VERSION = "@VERSION@" + +for x in ("version.py", "dirs.py"): + try: + # Try to open generated ovs/{version,dirs}.py + open(f"ovs/{x}") + except IOError: + print(f"Ensure {x} is created by running make python/ovs/{x}", + file=sys.stderr) + sys.exit(-1) ext_errors = (CCompilerError, ExecError, PlatformError) if sys.platform == 'win32': diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in index 343a5716d..402184d43 100644 --- a/rhel/openvswitch-fedora.spec.in +++ b/rhel/openvswitch-fedora.spec.in @@ -178,6 +178,7 @@ This package provides IPsec tunneling support for OVS tunnels. --disable-static \ --enable-shared \ --with-pkidir=%{_sharedstatedir}/openvswitch/pki \ + --with-version-suffix=-%{release} \ PYTHON3=%{__python3} build-aux/dpdkstrip.py \ diff --git a/utilities/ovs-dpctl-top.in b/utilities/ovs-dpctl-top.in index 2c1766eff..ec57eccd6 100755 --- a/utilities/ovs-dpctl-top.in +++ b/utilities/ovs-dpctl-top.in @@ -351,7 +351,7 @@ def args_get(): # None is a special value indicating to read flows from stdin. # This handles the case # ovs-dpctl dump-flows | ovs-dpctl-flows.py - parser.add_argument("-v", "--version", version="@VERSION@", + parser.add_argument("-v", "--version", version="@VERSION@@VERSION_SUFFIX@", action="version", help="show version") parser.add_argument("-f", "--flow-file", dest="flowFiles", default=None, action="append", diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in index 7812a94ee..d162227dc 100644 --- a/utilities/ovs-lib.in +++ b/utilities/ovs-lib.in @@ -70,7 +70,7 @@ ovs_ctl () { esac } -VERSION='@VERSION@' +VERSION='@VERSION@@VERSION_SUFFIX@' DAEMON_CWD=/ diff --git a/utilities/ovs-parse-backtrace.in b/utilities/ovs-parse-backtrace.in index f44f05cd1..42f831eed 100755 --- a/utilities/ovs-parse-backtrace.in +++ b/utilities/ovs-parse-backtrace.in @@ -51,7 +51,7 @@ def addr2line(binary, addr): def main(): - parser = optparse.OptionParser(version='@VERSION@', + parser = optparse.OptionParser(version='@VERSION@@VERSION_SUFFIX@', usage="usage: %prog [binary]", description="""\ Parses the output of ovs-appctl backtrace producing a more human readable diff --git a/utilities/ovs-pcap.in b/utilities/ovs-pcap.in index 6b5f63399..d0ca94788 100755 --- a/utilities/ovs-pcap.in +++ b/utilities/ovs-pcap.in @@ -85,7 +85,7 @@ if __name__ == "__main__": if key in ['-h', '--help']: usage() elif key in ['-V', '--version']: - print("ovs-pcap (Open vSwitch) @VERSION@") + print("ovs-pcap (Open vSwitch) @VERSION@@VERSION_SUFFIX@") else: sys.exit(0) diff --git a/utilities/ovs-pki.in b/utilities/ovs-pki.in index e0ba910f9..c34e5888a 100755 --- a/utilities/ovs-pki.in +++ b/utilities/ovs-pki.in @@ -118,7 +118,7 @@ EOF exit 0 ;; -V|--version) - echo "ovs-pki (Open vSwitch) @VERSION@" + echo "ovs-pki (Open vSwitch) @VERSION@@VERSION_SUFFIX@" exit 0 ;; --di*=*) diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in index 4cbd9a5d3..104ee355a 100755 --- a/utilities/ovs-tcpdump.in +++ b/utilities/ovs-tcpdump.in @@ -47,7 +47,7 @@ try: from ovs.fatal_signal import add_hook except Exception: print("ERROR: Please install the correct Open vSwitch python support") - print(" libraries (version @VERSION@).") + print(" libraries (version @VERSION@@VERSION_SUFFIX@).") print(" Alternatively, check that your PYTHONPATH is pointing to") print(" the correct location.") sys.exit(1) @@ -453,7 +453,7 @@ def main(): if cur in ['-h', '--help']: usage() elif cur in ['-V', '--version']: - print("ovs-tcpdump (Open vSwitch) @VERSION@") + print("ovs-tcpdump (Open vSwitch) @VERSION@@VERSION_SUFFIX@") sys.exit(0) elif cur in ['--db-sock']: db_sock = nxt diff --git a/utilities/ovs-tcpundump.in b/utilities/ovs-tcpundump.in index ede5448b4..2a1b08332 100755 --- a/utilities/ovs-tcpundump.in +++ b/utilities/ovs-tcpundump.in @@ -46,7 +46,7 @@ if __name__ == "__main__": if key in ['-h', '--help']: usage() elif key in ['-V', '--version']: - print("ovs-tcpundump (Open vSwitch) @VERSION@") + print("ovs-tcpundump (Open vSwitch) @VERSION@@VERSION_SUFFIX@") sys.exit(0) else: sys.exit(0) diff --git a/utilities/ovs-vlan-test.in b/utilities/ovs-vlan-test.in index de3ae1686..3c15e2b13 100755 --- a/utilities/ovs-vlan-test.in +++ b/utilities/ovs-vlan-test.in @@ -393,7 +393,7 @@ def main(): usage() return 0 elif key in ['-V', '--version']: - print_safe('ovs-vlan-test (Open vSwitch) @VERSION@') + print_safe('ovs-vlan-test (Open vSwitch) @VERSION@@VERSION_SUFFIX@') return 0 elif key in ['-s', '--server']: server = True diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index e9110c1d8..57f4d5f5e 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -3352,7 +3352,8 @@ bridge_run(void) vlog_enable_async(); - VLOG_INFO_ONCE("%s (Open vSwitch) %s", program_name, VERSION); + VLOG_INFO_ONCE("%s (Open vSwitch) %s", program_name, + VERSION VERSION_SUFFIX); } }