From 19f19acfb410ccc3dad0b59d678b74e1cd0eb75b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Tue, 17 May 2022 16:00:47 +0200 Subject: [PATCH 1/3] Make the code future-proof against removal of distutils module. --- src/setup_common.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/setup_common.py b/src/setup_common.py index aec1f9b..3fb9086 100644 --- a/src/setup_common.py +++ b/src/setup_common.py @@ -30,7 +30,12 @@ if sys.version_info[0] < 3: import commands as subprocess from os import path as os_path -from distutils.sysconfig import get_python_lib +try: + from distutils.sysconfig import get_python_lib, get_config_var + __python_lib = get_python_lib(1) +except ImportError: + from sysconfig import get_config_var, get_path + __python_lib = get_path('platlib') # libxml2 - C flags def libxml2_include(incdir): @@ -50,7 +55,7 @@ def libxml2_include(incdir): # libxml2 - library flags def libxml2_lib(libdir, libs): - libdir.append(get_python_lib(1)) + libdir.append(__python_lib) if os_path.exists("/etc/debian_version"): #. XXX: Debian Workaround... libdir.append("/usr/lib/pymodules/python%d.%d"%sys.version_info[0:2]) @@ -69,7 +74,10 @@ def libxml2_lib(libdir, libs): libs.append(l.replace("-l", "", 1)) # this library is not reported and we need it anyway - libs.append('xml2mod') + if get_config_var("SOABI"): + libs.append('xml2mod.%s' % get_config_var("SOABI")) + else: + libs.append('xml2mod') From 6b370a4163bbbd97b35f9be8ab9206d07a10154a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Mon, 17 Oct 2022 19:59:52 +0200 Subject: [PATCH 2/3] Don't be too complicated. There is actually no reason to use distutils.sysconfig at all, plain sysconfig works even on 2.7. --- Makefile | 3 ++- src/setup_common.py | 9 ++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 2f47a75..6a12073 100644 --- a/Makefile +++ b/Makefile @@ -42,9 +42,10 @@ PY_BIN := python3 VERSION := $(shell cd src;$(PY_BIN) -c "from setup_common import *; print(get_version());") PACKAGE := python-dmidecode PY_VER := $(shell $(PY_BIN) -c 'import sys; print("%d.%d"%sys.version_info[0:2])') +PY_VER_DL := $(shell echo $(PY_VER) | tr -d '.') PY_MV := $(shell echo $(PY_VER) | cut -b 1) PY := python$(PY_VER) -SO_PATH := build/lib.linux-$(shell uname -m)-$(PY_VER) +SO_PATH := build/lib.linux-$(shell uname -m)-cpython-$(PY_VER_DL) ifeq ($(PY_MV),2) SO := $(SO_PATH)/dmidecodemod.so else diff --git a/src/setup_common.py b/src/setup_common.py index 3fb9086..97ece95 100644 --- a/src/setup_common.py +++ b/src/setup_common.py @@ -30,12 +30,7 @@ if sys.version_info[0] < 3: import commands as subprocess from os import path as os_path -try: - from distutils.sysconfig import get_python_lib, get_config_var - __python_lib = get_python_lib(1) -except ImportError: - from sysconfig import get_config_var, get_path - __python_lib = get_path('platlib') +from sysconfig import get_config_var, get_path # libxml2 - C flags def libxml2_include(incdir): @@ -55,7 +50,7 @@ def libxml2_include(incdir): # libxml2 - library flags def libxml2_lib(libdir, libs): - libdir.append(__python_lib) + libdir.append(get_path('platlib')) if os_path.exists("/etc/debian_version"): #. XXX: Debian Workaround... libdir.append("/usr/lib/pymodules/python%d.%d"%sys.version_info[0:2]) From a796f81c482a1a11abcffb1df59afe34218034f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Wed, 26 Oct 2022 17:39:47 +0200 Subject: [PATCH 3/3] Make the discovery of the build .so file more robust. Different versions of Python apparently generate different directory names, there doesn't seem to be any more reliable method of the .so file discovery than brutal force of the shell find command. --- Makefile | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 6a12073..06e83f0 100644 --- a/Makefile +++ b/Makefile @@ -42,15 +42,13 @@ PY_BIN := python3 VERSION := $(shell cd src;$(PY_BIN) -c "from setup_common import *; print(get_version());") PACKAGE := python-dmidecode PY_VER := $(shell $(PY_BIN) -c 'import sys; print("%d.%d"%sys.version_info[0:2])') -PY_VER_DL := $(shell echo $(PY_VER) | tr -d '.') PY_MV := $(shell echo $(PY_VER) | cut -b 1) PY := python$(PY_VER) -SO_PATH := build/lib.linux-$(shell uname -m)-cpython-$(PY_VER_DL) ifeq ($(PY_MV),2) - SO := $(SO_PATH)/dmidecodemod.so + SOLIB := dmidecodemod.so else SOABI := $(shell $(PY_BIN) -c 'import sysconfig; print(sysconfig.get_config_var("SOABI"))') - SO := $(SO_PATH)/dmidecodemod.$(SOABI).so + SOLIB := dmidecodemod.$(SOABI).so endif SHELL := /bin/bash @@ -60,10 +58,10 @@ SHELL := /bin/bash all : build dmidump build: $(PY)-dmidecodemod.so -$(PY)-dmidecodemod.so: $(SO) - cp $< $@ -$(SO): + +$(PY)-dmidecodemod.so: $(PY) src/setup.py build + cp $$(find build -name $(SOLIB)) $@ dmidump : src/util.o src/efi.o src/dmilog.o $(CC) -o $@ src/dmidump.c $^ -g -Wall -D_DMIDUMP_MAIN_