import os, sys
import warnings
import setuptools
from setuptools import Extension, setup
from Cython.Build import cythonize
from Cython.Compiler.Main import default_options
default_options['emit_linenums'] = True
def get_include():
dirs = []
for key in ['BUILDDIR', 'SRCDIR']:
name = f'PMIX_BINDINGS_TOP_{key}'
if name in os.environ:
dirs.append(f'{os.environ[name]}/include')
return dirs
def getVersion():
dir = os.path.dirname(__file__)
vers_path = os.path.join(dir, '../../include', 'pmix_version.h')
if not os.path.exists(vers_path):
include_dirs = get_include()
vers_path = None
for dir in include_dirs:
tmp_path = os.path.join(dir, 'pmix_version.h')
if os.path.exists(tmp_path):
vers_path = tmp_path
break
if vers_path is None:
print("Error: pmix_version.h does not exist at path: ",vers_path)
sys.exit(1)
with open(vers_path) as verFile:
lines = verFile.readlines()
for l in lines:
if 'MAJOR' in l:
major = l.split()[2]
major = major[:-1]
elif 'MINOR' in l:
minor = l.split()[2]
minor = minor[:-1]
elif 'RELEASE' in l:
release = l.split()[2]
release = release[:-1]
vers = [major, minor, release]
version = ".".join(vers)
return version
def package_setup(package_name, package_vers):
key = 'PMIX_BINDINGS_TOP_BUILDDIR'
if key in os.environ:
dir = os.environ[key]
src_filename = os.path.join(dir, "bindings", "python", "pmix.pyx")
else:
dir = os.path.dirname(sys.argv[0])
src_filename = os.path.join(dir, "pmix.pyx")
if hasattr(setuptools, "SetuptoolsDeprecationWarning"):
warnings.filterwarnings("ignore",
category=setuptools.SetuptoolsDeprecationWarning)
setup(
name = 'pypmix',
version = getVersion(),
url = 'https://pmix.org',
license = '3-clause BSD',
author = 'Ralph H. Castain',
author_email = 'rhc@pmix.org',
description = 'Python bindings for PMIx',
classifiers = [
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'Topic :: HPC :: Parallel Programming :: System Management',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Programming Language :: Python :: 3.12'],
keywords = ['PMI', 'PMIx', 'HPC', 'MPI', 'SHMEM' ],
platforms = 'any',
install_requires = ["cython"],
zip_safe = False,
ext_modules = cythonize([Extension("pmix",
[src_filename],
libraries=["pmix"],
depends=[], )],
compiler_directives={'language_level': 3}),
include_dirs = get_include()
)
def main():
package_name = 'pypmix'
package_vers = getVersion()
package_setup(package_name, package_vers)
return os.EX_OK
if __name__ == '__main__':
sys.exit(main())