diff --git a/requirements.txt b/requirements.txt index 9358511..ad10b13 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ numpy cffi cmake>=3.17.0 +packaging diff --git a/setup.py b/setup.py index 8910564..4b77a2a 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,9 @@ import sys import shutil import os +import subprocess from os import path +from packaging import version from subprocess import call as execute from setuptools.command.build_ext import build_ext @@ -29,9 +31,16 @@ def initialize_options(self): self.cmake_args = None build_ext.initialize_options(self) + def get_cmake_version(self): + output = subprocess.check_output(['cmake', '--version']).decode('utf-8') + line = output.splitlines()[0] + version = line.split()[2] + return(version) + def run(self): if 0 != os.system('cmake --version'): sys.exit('\nError: Cannot find cmake. Install cmake, e.g. `pip install cmake`.') + for ext in self.extensions: self.build_extension(ext) @@ -43,6 +52,11 @@ def build_extension(self, ext): shutil.rmtree(BUILD_TEMP, ignore_errors=True) os.makedirs(BUILD_TEMP) + if version.parse(self.get_cmake_version()) < version.parse("3.22.0"): + cmake_passthru_flag = "--" + else: + cmake_passthru_flag = "-S" + # Run cmake build_type = 'Debug' if self.debug else 'Release' if 0 != execute(['cmake', @@ -52,7 +66,7 @@ def build_extension(self, ext): # set Debug and Release paths to the output directory on Windows "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG='{}'".format(EXT_DIR), "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE='{}'".format(EXT_DIR), - self.cmake_args or "--", + self.cmake_args or cmake_passthru_flag, SOURCE_DIR], cwd=BUILD_TEMP): sys.exit('\nERROR: Cannot generate Makefile. See above errors.')