From 71ba877da9af3b4f552ba36a22155da2e1148e95 Mon Sep 17 00:00:00 2001 From: midhunsai31 Date: Sat, 19 Apr 2025 20:07:39 +0530 Subject: [PATCH 1/4] Added the Documentation for the code --- _build_backend/backend.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_build_backend/backend.py b/_build_backend/backend.py index 7fc84138..0550348c 100644 --- a/_build_backend/backend.py +++ b/_build_backend/backend.py @@ -1,3 +1,5 @@ +# Import the default setuptools PEP 517 build backend under a custom alias +# This allows us to extend or override its functionality where needed from setuptools import build_meta as _orig prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel From da45f8739582175d80a5291281588cad9e0a3fe9 Mon Sep 17 00:00:00 2001 From: midhunsai31 Date: Sat, 19 Apr 2025 20:11:08 +0530 Subject: [PATCH 2/4] Modified the code to add Docstrings --- _build_backend/backend.py | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/_build_backend/backend.py b/_build_backend/backend.py index 0550348c..75fe4100 100644 --- a/_build_backend/backend.py +++ b/_build_backend/backend.py @@ -1,25 +1,46 @@ -# Import the default setuptools PEP 517 build backend under a custom alias -# This allows us to extend or override its functionality where needed +""" +Custom build backend for setuptools + scikit-build-based Python packages. +Ensures CMake >= 3.5 is available for building C/C++ extensions. +""" + from setuptools import build_meta as _orig +# Pass-through functions from the original setuptools backend prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel build_wheel = _orig.build_wheel build_sdist = _orig.build_sdist get_requires_for_build_sdist = _orig.get_requires_for_build_sdist def get_requires_for_build_wheel(config_settings=None): + """ + Returns a list of additional build-time dependencies required to build a wheel. + + This custom version checks if the system has an appropriate version of CMake + (>= 3.5), which is required by scikit-build. If not present or outdated, it + appends 'cmake>=3.5' to the required packages list. + + Args: + config_settings (dict, optional): Configuration settings (unused). + + Returns: + List[str]: List of required build dependencies. + """ from packaging import version from skbuild.exceptions import SKBuildError from skbuild.cmaker import get_cmake_version - packages = _orig.get_requires_for_build_wheel(config_settings) - # check if system cmake can be used if present - # if not, append cmake PyPI distribution to required packages - # scikit-build>=0.18 itself requires cmake 3.5+ + + # Get default requirements + packages = list(_orig.get_requires_for_build_wheel(config_settings)) + + # Define minimum version required min_version = "3.5" + try: - if version.parse(get_cmake_version().split("-")[0]) < version.parse(min_version): + cmake_ver = get_cmake_version().split("-")[0] + if version.parse(cmake_ver) < version.parse(min_version): packages.append(f'cmake>={min_version}') - except SKBuildError: + except (SKBuildError, OSError, ValueError) as e: + # Catch broader exceptions in case of system misconfigurations packages.append(f'cmake>={min_version}') - return packages + return packages \ No newline at end of file From 544501a71042f2f62160bda22f1a61364df82552 Mon Sep 17 00:00:00 2001 From: midhunsai31 Date: Sat, 19 Apr 2025 20:13:23 +0530 Subject: [PATCH 3/4] Added the Documentation --- _build_backend/backend.py | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/_build_backend/backend.py b/_build_backend/backend.py index 75fe4100..0550348c 100644 --- a/_build_backend/backend.py +++ b/_build_backend/backend.py @@ -1,46 +1,25 @@ -""" -Custom build backend for setuptools + scikit-build-based Python packages. -Ensures CMake >= 3.5 is available for building C/C++ extensions. -""" - +# Import the default setuptools PEP 517 build backend under a custom alias +# This allows us to extend or override its functionality where needed from setuptools import build_meta as _orig -# Pass-through functions from the original setuptools backend prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel build_wheel = _orig.build_wheel build_sdist = _orig.build_sdist get_requires_for_build_sdist = _orig.get_requires_for_build_sdist def get_requires_for_build_wheel(config_settings=None): - """ - Returns a list of additional build-time dependencies required to build a wheel. - - This custom version checks if the system has an appropriate version of CMake - (>= 3.5), which is required by scikit-build. If not present or outdated, it - appends 'cmake>=3.5' to the required packages list. - - Args: - config_settings (dict, optional): Configuration settings (unused). - - Returns: - List[str]: List of required build dependencies. - """ from packaging import version from skbuild.exceptions import SKBuildError from skbuild.cmaker import get_cmake_version - - # Get default requirements - packages = list(_orig.get_requires_for_build_wheel(config_settings)) - - # Define minimum version required + packages = _orig.get_requires_for_build_wheel(config_settings) + # check if system cmake can be used if present + # if not, append cmake PyPI distribution to required packages + # scikit-build>=0.18 itself requires cmake 3.5+ min_version = "3.5" - try: - cmake_ver = get_cmake_version().split("-")[0] - if version.parse(cmake_ver) < version.parse(min_version): + if version.parse(get_cmake_version().split("-")[0]) < version.parse(min_version): packages.append(f'cmake>={min_version}') - except (SKBuildError, OSError, ValueError) as e: - # Catch broader exceptions in case of system misconfigurations + except SKBuildError: packages.append(f'cmake>={min_version}') - return packages \ No newline at end of file + return packages From 50c49735d3f1b8c56bf2522c1ff2a73e0d000b0c Mon Sep 17 00:00:00 2001 From: midhunsai31 Date: Sat, 19 Apr 2025 21:05:49 +0530 Subject: [PATCH 4/4] improve code readability with detailed inline comments --- _build_backend/backend.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_build_backend/backend.py b/_build_backend/backend.py index 0550348c..952692c6 100644 --- a/_build_backend/backend.py +++ b/_build_backend/backend.py @@ -2,11 +2,13 @@ # This allows us to extend or override its functionality where needed from setuptools import build_meta as _orig +# Re-use the default implementations for standard PEP 517 hook methods prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel build_wheel = _orig.build_wheel build_sdist = _orig.build_sdist get_requires_for_build_sdist = _orig.get_requires_for_build_sdist +# Override the `get_requires_for_build_wheel` function to add dynamic dependency logic def get_requires_for_build_wheel(config_settings=None): from packaging import version from skbuild.exceptions import SKBuildError @@ -15,6 +17,7 @@ def get_requires_for_build_wheel(config_settings=None): # check if system cmake can be used if present # if not, append cmake PyPI distribution to required packages # scikit-build>=0.18 itself requires cmake 3.5+ + # Define the minimum required version of CMake (needed by scikit-build>=0.18) min_version = "3.5" try: if version.parse(get_cmake_version().split("-")[0]) < version.parse(min_version): @@ -22,4 +25,5 @@ def get_requires_for_build_wheel(config_settings=None): except SKBuildError: packages.append(f'cmake>={min_version}') +# Return the final list of required packages for building the wheel return packages