From 1cd3ee5ec89b3e79da96fab34a92ee7b3e37e71e Mon Sep 17 00:00:00 2001 From: Martin Belanger Date: Wed, 14 Jan 2026 10:17:27 -0500 Subject: [PATCH] PyPI: Only use major version for libnvme.so When building a pip (PyPI) package, do not set the libnvme.so version to major.minor.patch (e.g. libnvme.so.3.0.0), but instead just set it to the major (e.g. libnvme.so.3). pip/wheel do not care about the full versioning, and since symbolic links cannot be installed via pip (i.e. libnvme.so.3 -> libnvme.so.3.0.0), it's better to just skip the major.minor.patch versioning for PyPI. To support this we're introducing a new config flag "pypi" to let meson know we're building for pip/PyPI. Signed-off-by: Martin Belanger --- libnvme/src/meson.build | 19 ------------------- meson.build | 6 ++++++ meson_options.txt | 6 ++++++ pyproject.toml | 1 + 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/libnvme/src/meson.build b/libnvme/src/meson.build index d63c756917..40798e15ce 100644 --- a/libnvme/src/meson.build +++ b/libnvme/src/meson.build @@ -55,25 +55,6 @@ libnvme = library( install: true, ) -# Explicitly create the symlinks in the same directory. When building the -# PyPI package (pipx run build --sdist), the symbolic link don't get installed -# unless we explicitly set them as below. -# 1st: libnvme.so.X -> libnvme.so.X.Y.Z -major_version = libnvme_so_version.split('.')[0] -install_symlink( - 'libnvme.so.@0@'.format(major_version), - pointing_to: 'libnvme.so.@0@'.format(libnvme_so_version), - install_dir: get_option('libdir'), -) - -# 2nd: libnvme.so -> libnvme.so.X -major_version = libnvme_so_version.split('.')[0] -install_symlink( - 'libnvme.so', - pointing_to: 'libnvme.so.@0@'.format(major_version), - install_dir: get_option('libdir'), -) - pkg = import('pkgconfig') pkg.generate(libnvme, filebase: 'libnvme', diff --git a/meson.build b/meson.build index 8948d2c032..2f2f90df2f 100644 --- a/meson.build +++ b/meson.build @@ -88,6 +88,12 @@ else libnvme_so_version = ver_digits + '.0' endif +# For PyPI builds, use only the major version (e.g., '3' instead of '3.0.0'). +# This avoids the need for symbolic links which pip/wheel doesn't preserve. +if get_option('pypi') + libnvme_so_version = libnvme_so_version.split('.')[0] +endif + ################################################################################ prefixdir = get_option('prefix') datadir = join_paths(prefixdir, get_option('datadir')) diff --git a/meson_options.txt b/meson_options.txt index d31fbcdece..4d2fe78309 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -130,3 +130,9 @@ option( value: 'disabled', description : 'liburing support' ) +option( + 'pypi', + type : 'boolean', + value : false, + description : 'building for PyPI (use short soversion, e.g. libnvme.so.3)' +) diff --git a/pyproject.toml b/pyproject.toml index 9daa3a4b67..9e92370ec5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ setup = [ "-Dnvme=disabled", "-Dlibnvme=enabled", "-Dpython=enabled", + "-Dpypi=true", "-Dtests=false", "-Dnvme-tests=false", "-Dexamples=false",