diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ec20798cc..5da81d2a00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -688,7 +688,7 @@ if(openPMD_HAVE_PYTHON) if(EMSCRIPTEN) set_target_properties(openPMD.py PROPERTIES - PREFIX "") + PREFIX "" SUFFIX ".emscripten_wasm32.so") else() pybind11_extension(openPMD.py) endif() diff --git a/pyproject.toml b/pyproject.toml index 702b476ec8..916338ec9b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [build-system] requires = [ - "setuptools>=42", + "setuptools>=57.4", "wheel", "cmake>=3.15.0,<4.0.0", "pybind11>=2.6.2,<3.0.0" diff --git a/setup.py b/setup.py index 7a03e5b055..e63a36b879 100644 --- a/setup.py +++ b/setup.py @@ -35,6 +35,18 @@ def run(self): for ext in self.extensions: self.build_extension(ext) + def get_ext_filename(self, ext_name): + r"""Convert the name of an extension (eg. "foo.bar") into the name + of the file from which it will be loaded (eg. "foo/bar.so", or + "foo\bar.pyd"). + """ + from distutils.sysconfig import get_config_var + ext_path = ext_name.split('.') + ext_suffix = os.getenv('SETUPTOOLS_EXT_SUFFIX', None) + if ext_suffix is None: + ext_suffix = get_config_var('EXT_SUFFIX') + return os.path.join(*ext_path) + ext_suffix + def build_extension(self, ext): extdir = os.path.abspath(os.path.dirname( self.get_ext_fullpath(ext.name) @@ -44,10 +56,9 @@ def build_extension(self, ext): extdir += os.path.sep cmake_args = [ - '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + - os.path.join(extdir, "openpmd_api"), - # '-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=' + extdir, - '-DCMAKE_PYTHON_OUTPUT_DIRECTORY=' + extdir, + '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, + # '-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=' + os.path.join(extdir, "../"), + '-DCMAKE_PYTHON_OUTPUT_DIRECTORY=' + os.path.join(extdir, "../"), '-DPython_EXECUTABLE=' + sys.executable, '-DopenPMD_USE_PYTHON:BOOL=ON', # variants @@ -87,9 +98,7 @@ def build_extension(self, ext): if platform.system() == "Windows": cmake_args += [ '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format( - cfg.upper(), - os.path.join(extdir, "openpmd_api") - ) + cfg.upper(), extdir) ] if sys.maxsize > 2**32: cmake_args += ['-A', 'x64'] @@ -186,7 +195,7 @@ def build_extension(self, ext): 'Source': 'https://github.com/openPMD/openPMD-api', 'Tracker': 'https://github.com/openPMD/openPMD-api/issues', }, - ext_modules=[CMakeExtension('openpmd_api_cxx')], + ext_modules=[CMakeExtension('openpmd_api.openpmd_api_cxx')], cmdclass=dict(build_ext=CMakeBuild), # scripts=['openpmd-ls'], zip_safe=False,