import libcpuid-0.7.0-1.el10

cs10 imports/cs10/libcpuid-0.7.0-1.el10
MSVSphere Packaging Team 4 months ago
commit 580d6d6dca
Signed by: sys_gitsync
GPG Key ID: B2B0B9F29E528FE8

1
.gitignore vendored

@ -0,0 +1 @@
SOURCES/libcpuid-0.7.0.tar.gz

@ -0,0 +1 @@
a951a846d9164b469f507ef8a7bffe3a68d439ab SOURCES/libcpuid-0.7.0.tar.gz

@ -0,0 +1,332 @@
From c2acc569714d0a72051e4e1d34053f4f080d757b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavol=20=C5=BD=C3=A1=C4=8Dik?= <zacik.pa@gmail.com>
Date: Sun, 1 Sep 2024 19:37:37 +0200
Subject: [PATCH] Python: Refactor the build of the bindings
When building the binding, link the dynamic
C library as built by `make` instead of linking
the system-installed C library. This simplifies
packaging in Linux distributions and also the
build of the live docs.
---
.readthedocs.yml | 7 +-
python/pyproject.toml | 2 +-
python/src/libcpuid/_ffi_build.py | 116 +++++++++++++++++++++---
python/src/libcpuid/_ffi_build_rtd.py | 31 -------
python/src/libcpuid/_ffi_build_utils.py | 105 ---------------------
5 files changed, 105 insertions(+), 156 deletions(-)
delete mode 100644 python/src/libcpuid/_ffi_build_rtd.py
delete mode 100644 python/src/libcpuid/_ffi_build_utils.py
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 0866584..8aa71c8 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -14,13 +14,10 @@ build:
pre_install:
- libtoolize
- autoreconf --install
- - mkdir ./install
- - ./configure --prefix=`pwd`/install
+ - ./configure
- make
- - make install
- pip install cffi
- - python ./python/src/libcpuid/_ffi_build_rtd.py ./libcpuid/libcpuid.h ./install
-
+ - python python/src/libcpuid/_ffi_build.py --runtime-link
sphinx:
configuration: python/docs/conf.py
diff --git a/python/pyproject.toml b/python/pyproject.toml
index 637b0e6..580a4c7 100644
--- a/python/pyproject.toml
+++ b/python/pyproject.toml
@@ -1,5 +1,5 @@
[build-system]
-requires = ["setuptools", "cffi"]
+requires = ["setuptools", "cffi", "wheel"]
build-backend = "setuptools.build_meta"
[project]
diff --git a/python/src/libcpuid/_ffi_build.py b/python/src/libcpuid/_ffi_build.py
index 6e24d12..e3a7ea0 100644
--- a/python/src/libcpuid/_ffi_build.py
+++ b/python/src/libcpuid/_ffi_build.py
@@ -3,23 +3,111 @@ Module for compiling the C FFI.
"""
import os
-import sys
+import subprocess
+import tempfile
+import re
+import argparse
+from pathlib import Path
from cffi import FFI
-sys.path.append(os.path.dirname(os.path.abspath(__file__)))
-from _ffi_build_utils import ( # pylint: disable=import-error, wrong-import-position
- get_include_flags,
- find_header_file,
- preprocess_header,
- eval_sizeofs,
+class FFIBuildException(Exception):
+ """Generic exception for errors occuring during the CFFI build."""
+
+
+def preprocess_header(header_path):
+ """
+ Preprocesses the header file (python-cffi only accepts preprocessed C definitions)
+ at the given path and returns it as a string.
+ """
+ try:
+ return subprocess.check_output(
+ ["gcc", "-U __GNUC__", "-E", header_path]
+ ).decode()
+ except subprocess.CalledProcessError as e:
+ if e.returncode == 127:
+ raise FFIBuildException(
+ "The gcc compiler is necessary to build python-libcpuid."
+ ) from e
+ raise FFIBuildException(
+ f"Error preprocessing the libcpuid header file: {e.stderr}"
+ ) from e
+
+
+def _get_sizeof_eval_source(sizeof):
+ return f"""
+#include <libcpuid.h>
+#include <stdio.h>
+
+int main() {{
+ printf("%ld", {sizeof});
+ return 0;
+}}
+"""
+
+
+def eval_sizeofs(header, cflags):
+ """
+ Evaluates each sizeof found in the given C header and replaces all
+ occurences of the sizeof with its computed value.
+ """
+ sizeofs = set(re.findall(r"sizeof\([^\)]*\)", header))
+ tmp_dir = tempfile.mkdtemp()
+ c_program_path = Path(tmp_dir, "sizeof.c")
+ executable_path = Path(tmp_dir, "sizeof")
+
+ for sizeof in sizeofs:
+ with open(c_program_path, "w", encoding="UTF-8") as c_program_file:
+ c_program_file.write(_get_sizeof_eval_source(sizeof))
+ subprocess.check_call(["gcc", c_program_path, *cflags, "-o", executable_path])
+ size = subprocess.check_output([executable_path]).decode()
+ header = header.replace(sizeof, size)
+
+ os.remove(c_program_path)
+ os.remove(executable_path)
+ os.rmdir(tmp_dir)
+ return header
+
+
+LIBCPUID_DIR = str(Path(*(Path(os.path.abspath(__file__)).parts[:-4])))
+LIBCPUID_INCLUDE_DIR = str(Path(LIBCPUID_DIR, "libcpuid"))
+LIBCPUID_LIBRARY_DIR = str(Path(LIBCPUID_DIR, "libcpuid", ".libs"))
+LIBCPUID_MAIN_HEADER_FILENAME = "libcpuid.h"
+LIBCPUID_MAIN_HEADER_PATH = str(
+ Path(LIBCPUID_INCLUDE_DIR, LIBCPUID_MAIN_HEADER_FILENAME)
)
+LIBCPUID_LIBRARY_NAME = "cpuid"
+PYTHON_SRC_DIR = str(Path(LIBCPUID_DIR, "python", "src"))
+
+PREPROCESSED_HEADER = preprocess_header(LIBCPUID_MAIN_HEADER_PATH)
+EVAL_SIZEOF_CFLAGS = [
+ f"-I{LIBCPUID_INCLUDE_DIR}",
+ f"-L{LIBCPUID_LIBRARY_DIR}",
+ f"-l{LIBCPUID_LIBRARY_NAME}",
+ f"-Wl,-rpath={LIBCPUID_LIBRARY_DIR}",
+]
+
+NO_SIZEOF_HEADER = eval_sizeofs(PREPROCESSED_HEADER, EVAL_SIZEOF_CFLAGS)
-include_flags = get_include_flags()
-preprocessed_header = preprocess_header(find_header_file(include_flags))
-no_sizeof_header = eval_sizeofs(preprocessed_header, include_flags)
ffibuilder = FFI()
-ffibuilder.cdef(no_sizeof_header)
-ffibuilder.set_source_pkgconfig(
- "libcpuid._libcpuid_cffi", ["libcpuid"], "#include <libcpuid.h>"
-)
+ffibuilder.cdef(NO_SIZEOF_HEADER)
+
+set_source_kwargs = {
+ "module_name": "libcpuid._libcpuid_cffi",
+ "source": f"#include <{LIBCPUID_MAIN_HEADER_FILENAME}>",
+ "libraries": [LIBCPUID_LIBRARY_NAME],
+ "include_dirs": [LIBCPUID_INCLUDE_DIR],
+ "library_dirs": [LIBCPUID_LIBRARY_DIR],
+}
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-r", "--runtime-link", action="store_true")
+ args = parser.parse_args()
+ if args.runtime_link:
+ set_source_kwargs["extra_link_args"] = [f"-Wl,-rpath={LIBCPUID_LIBRARY_DIR}"]
+
+ffibuilder.set_source(**set_source_kwargs)
+
+if __name__ == "__main__":
+ ffibuilder.compile(PYTHON_SRC_DIR)
diff --git a/python/src/libcpuid/_ffi_build_rtd.py b/python/src/libcpuid/_ffi_build_rtd.py
deleted file mode 100644
index 09d09ba..0000000
--- a/python/src/libcpuid/_ffi_build_rtd.py
+++ /dev/null
@@ -1,31 +0,0 @@
-"""
-Script for compiling the C FFI for the live documentation.
-"""
-
-import sys
-import os
-from cffi import FFI
-
-sys.path.append(os.path.dirname(os.path.abspath(__file__)))
-
-from _ffi_build_utils import ( # pylint: disable=import-error, wrong-import-position
- preprocess_header,
- eval_sizeofs,
-)
-
-if __name__ == "__main__":
- header_path = sys.argv[1]
- install_dir = sys.argv[2]
- library_dir = os.path.join(os.getcwd(), install_dir, "lib")
- include_dir = os.path.join(install_dir, "include", "libcpuid")
- ffibuilder = FFI()
- ffibuilder.cdef(eval_sizeofs(preprocess_header(header_path), [f"-I{include_dir}"]))
- ffibuilder.set_source(
- "python.src.libcpuid._libcpuid_cffi",
- "#include <libcpuid.h>",
- libraries=["cpuid"],
- library_dirs=[library_dir],
- include_dirs=[include_dir],
- extra_link_args=[f"-Wl,-rpath={library_dir}"],
- )
- ffibuilder.compile(verbose=True)
diff --git a/python/src/libcpuid/_ffi_build_utils.py b/python/src/libcpuid/_ffi_build_utils.py
deleted file mode 100644
index 410bd8c..0000000
--- a/python/src/libcpuid/_ffi_build_utils.py
+++ /dev/null
@@ -1,105 +0,0 @@
-"""
-Utility functions for building the FFI.
-"""
-
-import subprocess
-import os
-import re
-import tempfile
-
-
-class FFIBuildException(Exception):
- """Generic exception for errors occuring during the CFFI build."""
-
-
-def get_include_flags():
- """
- Obtains libcpuid include flags via pkg-config.
- """
- try:
- cflags = (
- subprocess.check_output(["pkg-config", "libcpuid", "--cflags-only-I"])
- .decode()
- .strip()
- .split()
- )
- return cflags
- except subprocess.CalledProcessError as e:
- if e.returncode == 127:
- raise FFIBuildException(
- "The pkg-config command is necessary to build python-libcpuid."
- ) from e
- if e.returncode == 1:
- raise FFIBuildException(
- "The libcpuid C library (devel) was not found."
- ) from e
- raise FFIBuildException("Error looking for the libcpuid library") from e
-
-
-def find_header_file(include_flags):
- """
- Obtains main libcpuid header file location from include flags.
- """
- header_path = None # pylint: disable=invalid-name
- for cflag in include_flags:
- header_candidate = os.path.join(cflag[2:], "libcpuid.h")
- if os.path.isfile(header_candidate):
- header_path = header_candidate
- break
- if header_path is None:
- raise FFIBuildException("Could not find header file of the libcpuid library.")
- return header_path
-
-
-def preprocess_header(header_path):
- """
- Preprocesses the header file (python-cffi only accepts preprocessed C definitions)
- at the given path and returns it as a string.
- """
- try:
- return subprocess.check_output(
- ["gcc", "-U __GNUC__", "-E", header_path]
- ).decode()
- except subprocess.CalledProcessError as e:
- if e.returncode == 127:
- raise FFIBuildException(
- "The gcc compiler is necessary to build python-libcpuid."
- ) from e
- raise FFIBuildException(
- f"Error preprocessing the libcpuid header file: {e.stderr}"
- ) from e
-
-
-def _get_sizeof_eval_source(sizeof):
- return f"""
-#include <libcpuid.h>
-#include <stdio.h>
-
-int main() {{
- printf("%ld", {sizeof});
- return 0;
-}}
-"""
-
-
-def eval_sizeofs(header, cflags):
- """
- Evaluates each sizeof found in the given C header and replaces all
- occurences of the sizeof with its computed value.
- """
- sizeofs = set(re.findall(r"sizeof\([^\)]*\)", header))
- tmp_dir = tempfile.mkdtemp()
- c_program_path = os.path.join(tmp_dir, "sizeof.c")
- executable_path = os.path.join(tmp_dir, "sizeof")
-
- for sizeof in sizeofs:
- with open(c_program_path, "w", encoding="UTF-8") as c_program_file:
- c_program_file.write(_get_sizeof_eval_source(sizeof))
- subprocess.check_call(["gcc", c_program_path, *cflags, "-o", executable_path])
- size = subprocess.check_output([executable_path]).decode()
- header = header.replace(sizeof, size)
-
- os.remove(c_program_path)
- os.remove(executable_path)
- os.rmdir(tmp_dir)
- return header
--
2.46.0

@ -0,0 +1,41 @@
From eae4874e4e29d3575c04f830c23fbe3040ca7416 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavol=20=C5=BD=C3=A1=C4=8Dik?= <zacik.pa@gmail.com>
Date: Sun, 1 Sep 2024 19:43:31 +0200
Subject: [PATCH] Python: Do not fail sanity tests if current CPU is
unsupported
---
python/tests/sanity_test.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/python/tests/sanity_test.py b/python/tests/sanity_test.py
index bf17dc4..4e18165 100644
--- a/python/tests/sanity_test.py
+++ b/python/tests/sanity_test.py
@@ -5,6 +5,7 @@ import tempfile
import libcpuid
from libcpuid.info import CPUInfo, SystemInfo
from libcpuid.raw import CPURawData, CPURawDataArray
+from libcpuid.errors import CLibraryError
def test_cpu_name_in_vendor_list():
@@ -12,9 +13,12 @@ def test_cpu_name_in_vendor_list():
Checks that the current CPU codename appears
in the list of all CPUs of its vendor.
"""
- info = CPUInfo.from_current_cpu()
- cpulist = libcpuid.get_cpu_list(info.vendor)
- assert info.cpu_codename in cpulist
+ try:
+ info = CPUInfo.from_current_cpu()
+ cpulist = libcpuid.get_cpu_list(info.vendor)
+ assert info.cpu_codename in cpulist
+ except CLibraryError:
+ pass
def test_serialization():
--
2.46.0

@ -0,0 +1,193 @@
Name: libcpuid
Version: 0.7.0
Release: 1%{?dist}
Summary: Provides CPU identification for x86 and ARM
License: BSD-2-Clause
URL: https://github.com/anrieff/libcpuid
Source0: https://github.com/anrieff/libcpuid/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
# https://github.com/anrieff/libcpuid/pull/203
Patch0: 0001-Python-Refactor-the-build-of-the-bindings.patch
Patch1: 0002-Python-Do-not-fail-sanity-tests-if-current-CPU-is-un.patch
ExcludeArch: ppc64le s390x
BuildRequires: automake
BuildRequires: autoconf
BuildRequires: doxygen
BuildRequires: gcc-c++
BuildRequires: git
BuildRequires: libtool
BuildRequires: make
BuildRequires: python3-devel
BuildRequires: python3-cffi
BuildRequires: python3-setuptools
BuildRequires: python3-wheel
BuildRequires: python3-pip
BuildRequires: python3-pytest
BuildRequires: pyproject-rpm-macros
%description
Libcpuid provides CPU identification for the x86 (x86_64) and ARM architectures.
%package devel
Summary: Development files for %{name}
Requires: %{name}%{_isa} = %{version}-%{release}
%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
For details about the programming API, please see the docs
on the project's site (http://libcpuid.sourceforge.net/)
%package -n python3-%{name}
Summary: Python bindings for the libcpuid library
Requires: %{name}%{_isa} = %{version}-%{release}
%description -n python3-%{name}
The python3-%{name} package contains Python bindings for the libcpuid library.
%prep
%autosetup -p1 -n %{name}-%{version}
%build
autoreconf -vfi
%configure --disable-static
%make_build
pushd python
%pyproject_wheel
popd
%install
%make_install
# WARNING: empty dependency_libs variable. remove the pointless .la
rm %{buildroot}%{_libdir}/*.la
%ldconfig_scriptlets
pushd python
%pyproject_install
popd
%pyproject_save_files -L %{name}
%check
LD_LIBRARY_PATH=%{buildroot}%{_libdir} %pytest python/tests
%files
%doc Readme.md
%license COPYING
%{_libdir}/%{name}.so.*
%files devel
%{_bindir}/cpuid_tool
%{_includedir}/%{name}
%{_libdir}/%{name}.so
%{_libdir}/pkgconfig/%{name}.pc
%{_mandir}/man3/*.3.*
%files -n python3-%{name} -f %{pyproject_files}
%doc python/README.md
%changelog
* Mon Sep 02 2024 Pavol Žáčik <pzacik@redhat.com> - 0.7.0-1
- Rebase to 0.7.0
- Begin building the package for aarch64
- Add Python bindings as a subpackage (python3-libcpuid)
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 0.6.5-4
- Bump release for June 2024 mass rebuild
* Thu May 23 2024 Pavol Žáčik <pzacik@redhat.com> - 0.6.5-3
- Patch bugs found by static analysis tools
- Add %%{name}-fix-handle-leaks-in-rdmsr-c.patch
- Add %%{name}-fix-cpuid_get_hypervisor.patch
- Add %%{name}-prevent-intel_fn11-array-overruns.patch
* Thu May 09 2024 Pavol Žáčik <pzacik@redhat.com> - 0.6.5-2
- Specify license using an SPDX identifier
* Tue Apr 30 2024 Martin Gansser <martinkg@fedoraproject.org> - 0.6.5-1
- Update to 0.6.5
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Oct 09 2023 Martin Gansser <martinkg@fedoraproject.org> - 0.6.4-1
- Update to 0.6.4
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Wed May 03 2023 Martin Gansser <martinkg@fedoraproject.org> - 0.6.3-1
- Update to 0.6.3
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Sat Nov 12 2022 Martin Gansser <martinkg@fedoraproject.org> - 0.6.2-1
- Update to 0.6.2
* Sat Oct 22 2022 Martin Gansser <martinkg@fedoraproject.org> - 0.6.0-1
- Update to 0.6.0
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Sep 02 2021 Martin Gansser <martinkg@fedoraproject.org> - 0.5.1-1
- Update to 0.5.1
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Tue Dec 22 2020 Martin Gansser <martinkg@fedoraproject.org> - 0.5.0-1
- Update to 0.5.0
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Jan 17 2020 Martin Gansser <martinkg@fedoraproject.org> - 0.4.1-1
- Update to 0.4.1
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.0-8.20171023git2f10315
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.0-7.20171023git2f10315
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.0-6.20171023git2f10315
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.4.0-5.20171023git2f10315
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Mon Oct 23 2017 Martin Gansser <martinkg@fedoraproject.org> - 0.4.0-4.20171023git2f10315
- Update to 0.4.0-4.20171023git2f10315
- Dropped %%{name}-not-use-4m-macro.patch
- Add ExcludeArch: aarch64 %%arm ppc64le ppc64 s390x
* Mon Oct 23 2017 Martin Gansser <martinkg@fedoraproject.org> - 0.4.0-3.20170504git57298c6
- Add BR doxygen
- disable build of static lib
- don't remove %%exclude %%{_libdir}/%%{name}.so
- Add %%{name}-not-use-4m-macro.patch
* Mon Oct 23 2017 Martin Gansser <martinkg@fedoraproject.org> - 0.4.0-2.20170504git57298c6
- Add BR gcc-c++
- replace libtoolize and autoreconf --install with autoreconf -vfi
- remove %%exclude %%{_libdir}/%%{name}.so.* not needed
* Sun Oct 22 2017 Martin Gansser <martinkg@fedoraproject.org> - 0.4.0-1.20170504git57298c6
- Initial build.
Loading…
Cancel
Save