11b37a2a7SPierre Jolivet#!/usr/bin/env python3 2e68ebbecSBarry Smith 3e68ebbecSBarry Smith""" 465a891e7SLisandro DalcinPETSc: Portable, Extensible Toolkit for Scientific Computation 565a891e7SLisandro Dalcin============================================================== 665a891e7SLisandro Dalcin 765a891e7SLisandro DalcinThe Portable, Extensible Toolkit for Scientific Computation (PETSc), 865a891e7SLisandro Dalcinis a suite of data structures and routines for the scalable (parallel) 965a891e7SLisandro Dalcinsolution of scientific applications modeled by partial differential 1065a891e7SLisandro Dalcinequations. It employs the Message Passing Interface (MPI) standard for 1165a891e7SLisandro Dalcinall message-passing communication. 12922ada92SLisandro Dalcin 1393b33a5aSLisandro Dalcin.. note:: 1493b33a5aSLisandro Dalcin 155ee53db2SLisandro Dalcin To install the ``PETSc`` and ``petsc4py`` packages 165ee53db2SLisandro Dalcin (``mpi4py`` is optional but highly recommended) use:: 1793b33a5aSLisandro Dalcin 185ee53db2SLisandro Dalcin $ python -m pip install numpy mpi4py 195ee53db2SLisandro Dalcin $ python -m pip install petsc petsc4py 2093b33a5aSLisandro Dalcin 21922ada92SLisandro Dalcin.. tip:: 22922ada92SLisandro Dalcin 2393b33a5aSLisandro Dalcin You can also install the in-development versions with:: 24922ada92SLisandro Dalcin 25eaf87d4bSBarry Smith $ python -m pip install Cython numpy mpi4py 269dddd249SSatish Balay $ python -m pip install --no-deps https://gitlab.com/petsc/petsc/-/archive/main/petsc-main.tar.gz 27ca62002aSBarry Smith 28007ce00dSBarry Smith Provide any ``PETSc`` ./configure options using the environmental variable ``PETSC_CONFIGURE_OPTIONS``. 29007ce00dSBarry Smith 30007ce00dSBarry Smith Do not use the ``PETSc`` ``./configure`` options ``--with-cc``, ``--with-cxx``, ``--with-fc``, or ``--with-mpi-dir``. 315ee53db2SLisandro Dalcin To set the MPI compilers use the environmental variables ``MPICC``, ``MPICXX``, ``MPIFORT``. 325ee53db2SLisandro Dalcin If ``mpi4py`` is installed the compilers will be obtained from that installation and ``MPICC``, ``MPICXX``, ``MPIFORT`` will be ignored. 33007ce00dSBarry Smith 34e68ebbecSBarry Smith""" 35e68ebbecSBarry Smith 365ee53db2SLisandro Dalcinimport re 375ee53db2SLisandro Dalcinimport os 385ee53db2SLisandro Dalcinimport sys 395ee53db2SLisandro Dalcinimport shlex 405ee53db2SLisandro Dalcinimport shutil 4196fd8cd7SLisandro Dalcinfrom setuptools import setup 4296fd8cd7SLisandro Dalcinfrom setuptools.command.install import install as _install 430902bb45SLisandro Dalcintry: 440902bb45SLisandro Dalcin from setuptools.command.bdist_wheel import bdist_wheel as _bdist_wheel 450902bb45SLisandro Dalcinexcept ImportError: 460902bb45SLisandro Dalcin from wheel.bdist_wheel import bdist_wheel as _bdist_wheel 4765a891e7SLisandro Dalcinfrom distutils import log 4812c1d45bSMatthew G Knepley 4965a891e7SLisandro Dalcininit_py = """\ 50a32381aeSLisandro Dalcin# Author: PETSc Team 51a597b971SLisandro Dalcin# Contact: petsc-maint@mcs.anl.gov 5265a891e7SLisandro Dalcin 5365a891e7SLisandro Dalcindef get_petsc_dir(): 5465a891e7SLisandro Dalcin import os 5565a891e7SLisandro Dalcin return os.path.dirname(__file__) 5665a891e7SLisandro Dalcin 575ee53db2SLisandro Dalcin 58a32381aeSLisandro Dalcindef get_config(): 59a32381aeSLisandro Dalcin conf = {} 609fb7a39fSLisandro Dalcin conf['PETSC_DIR'] = get_petsc_dir() 61a32381aeSLisandro Dalcin return conf 6265a891e7SLisandro Dalcin""" 6365a891e7SLisandro Dalcin 645ee53db2SLisandro Dalcinmain_py = """\ 655ee53db2SLisandro Dalcin# Author: PETSc Team 665ee53db2SLisandro Dalcin# Contact: petsc-maint@mcs.anl.gov 675ee53db2SLisandro Dalcin 685ee53db2SLisandro Dalcinif __name__ == "__main__": 695ee53db2SLisandro Dalcin import sys 705ee53db2SLisandro Dalcin if "--prefix" in sys.argv: 715ee53db2SLisandro Dalcin from . import get_petsc_dir 725ee53db2SLisandro Dalcin print(get_petsc_dir()) 735ee53db2SLisandro Dalcin del get_petsc_dir 745ee53db2SLisandro Dalcin del sys 755ee53db2SLisandro Dalcin""" 765ee53db2SLisandro Dalcin 7759e0f383SLisandro Dalcinmetadata = { 7859e0f383SLisandro Dalcin 'provides' : ['petsc'], 7996fd8cd7SLisandro Dalcin 'zip_safe' : False, 8059e0f383SLisandro Dalcin} 8159e0f383SLisandro Dalcin 8215075023SLisandro DalcinCONFIGURE_OPTIONS = [] 8315075023SLisandro Dalcin 845ee53db2SLisandro Dalcin 8565a891e7SLisandro Dalcindef bootstrap(): 86cb58ab5bSLisandro Dalcin # Set PETSC_DIR and PETSC_ARCH 8765a891e7SLisandro Dalcin PETSC_DIR = os.path.abspath(os.getcwd()) 885ee53db2SLisandro Dalcin PETSC_ARCH = 'arch-python' 8965a891e7SLisandro Dalcin os.environ['PETSC_DIR'] = PETSC_DIR 9065a891e7SLisandro Dalcin os.environ['PETSC_ARCH'] = PETSC_ARCH 9165a891e7SLisandro Dalcin sys.path.insert(0, os.path.join(PETSC_DIR, 'config')) 92af0996ceSBarry Smith sys.path.insert(0, os.path.join(PETSC_DIR, 'lib','petsc','conf')) 935ee53db2SLisandro Dalcin 945ee53db2SLisandro Dalcin # Generate package __init__.py and __main__.py files 959fb7a39fSLisandro Dalcin pkgdir = os.path.join('config', 'pypi') 965ee53db2SLisandro Dalcin os.makedirs(pkgdir, exist_ok=True) 975ee53db2SLisandro Dalcin for pyfile, contents in ( 985ee53db2SLisandro Dalcin ('__init__.py', init_py), 995ee53db2SLisandro Dalcin ('__main__.py', main_py), 1005ee53db2SLisandro Dalcin ): 1015ee53db2SLisandro Dalcin with open(os.path.join(pkgdir, pyfile), 'w') as fh: 1025ee53db2SLisandro Dalcin fh.write(contents) 1035ee53db2SLisandro Dalcin 10415075023SLisandro Dalcin # Configure options 10515075023SLisandro Dalcin options = os.environ.get('PETSC_CONFIGURE_OPTIONS', '') 1065ee53db2SLisandro Dalcin CONFIGURE_OPTIONS.extend(shlex.split(options)) 107007ce00dSBarry Smith for i in CONFIGURE_OPTIONS: 1085f9afd5aSLawrence Mitchell if i.startswith('--with-mpi-dir='): 1095ee53db2SLisandro Dalcin raise RuntimeError("Do not use --with-mpi-dir, use the environmental variables MPICC, MPICXX, MPIFORT") 1105f9afd5aSLawrence Mitchell if i.startswith('--with-cc='): 111007ce00dSBarry Smith raise RuntimeError("Do not use --with-cc, use the environmental variable MPICC") 1125f9afd5aSLawrence Mitchell if i.startswith('--with-cxx=') and i != "--with-cxx=0": 113007ce00dSBarry Smith raise RuntimeError("Do not use --with-cxx, use the environmental variable MPICXX") 1145f9afd5aSLawrence Mitchell if i.startswith('--with-fc=') and i != "--with-fc=0": 1155ee53db2SLisandro Dalcin raise RuntimeError("Do not use --with-fc, use the environmental variable MPIFORT") 116007ce00dSBarry Smith 11715075023SLisandro Dalcin if '--with-mpi=0' not in CONFIGURE_OPTIONS: 11859e0f383SLisandro Dalcin # Simple-minded lookup for MPI and mpi4py 11959e0f383SLisandro Dalcin mpi4py = mpicc = None 12059e0f383SLisandro Dalcin try: 12159e0f383SLisandro Dalcin import mpi4py 12259e0f383SLisandro Dalcin conf = mpi4py.get_config() 12359e0f383SLisandro Dalcin mpicc = conf.get('mpicc') 12459e0f383SLisandro Dalcin except ImportError: # mpi4py is not installed 125922ada92SLisandro Dalcin mpi4py = None 12615075023SLisandro Dalcin mpicc = (os.environ.get('MPICC') or 1275ee53db2SLisandro Dalcin shutil.which('mpicc')) 1281b095333SLisandro Dalcin except AttributeError: # mpi4py is too old 12959e0f383SLisandro Dalcin pass 130922ada92SLisandro Dalcin if not mpi4py and mpicc: 131922ada92SLisandro Dalcin metadata['install_requires'] = ['mpi4py>=1.2.2'] 13265a891e7SLisandro Dalcin 1335ee53db2SLisandro Dalcin 13496fd8cd7SLisandro Dalcindef config(prefix, dry_run=False): 13565a891e7SLisandro Dalcin log.info('PETSc: configure') 13665a891e7SLisandro Dalcin options = [ 13796fd8cd7SLisandro Dalcin '--prefix=' + prefix, 13865a891e7SLisandro Dalcin 'PETSC_ARCH='+os.environ['PETSC_ARCH'], 139cb58ab5bSLisandro Dalcin '--with-shared-libraries=1', 14011035aebSLisandro Dalcin '--with-debugging=0', 141922ada92SLisandro Dalcin '--with-c2html=0', # not needed 14265a891e7SLisandro Dalcin ] 14315075023SLisandro Dalcin if '--with-fc=0' in CONFIGURE_OPTIONS: 14415075023SLisandro Dalcin options.append('--with-sowing=0') 14515075023SLisandro Dalcin if '--with-mpi=0' not in CONFIGURE_OPTIONS: 14659e0f383SLisandro Dalcin try: 14759e0f383SLisandro Dalcin import mpi4py 14859e0f383SLisandro Dalcin conf = mpi4py.get_config() 14959e0f383SLisandro Dalcin mpicc = conf.get('mpicc') 150cb58ab5bSLisandro Dalcin mpicxx = conf.get('mpicxx') 1515ee53db2SLisandro Dalcin mpifort = conf.get('mpifort') or conf.get('mpif90') 15259e0f383SLisandro Dalcin except (ImportError, AttributeError): 1535ee53db2SLisandro Dalcin mpicc = os.environ.get('MPICC') or shutil.which('mpicc') 1545ee53db2SLisandro Dalcin mpicxx = os.environ.get('MPICXX') or shutil.which('mpicxx') 1555ee53db2SLisandro Dalcin mpifort = os.environ.get('MPIFORT') or os.environ.get('MPIF90') 1565ee53db2SLisandro Dalcin mpifort = mpifort or shutil.which('mpifort') 1575ee53db2SLisandro Dalcin mpifort = mpifort or shutil.which('mpif90') 15859e0f383SLisandro Dalcin if mpicc: 15959e0f383SLisandro Dalcin options.append('--with-cc='+mpicc) 16015075023SLisandro Dalcin if '--with-cxx=0' not in CONFIGURE_OPTIONS: 161cb58ab5bSLisandro Dalcin if mpicxx: 162cb58ab5bSLisandro Dalcin options.append('--with-cxx='+mpicxx) 16393b33a5aSLisandro Dalcin else: 16493b33a5aSLisandro Dalcin options.append('--with-cxx=0') 16515075023SLisandro Dalcin if '--with-fc=0' not in CONFIGURE_OPTIONS: 1665ee53db2SLisandro Dalcin if mpifort: 1675ee53db2SLisandro Dalcin options.append('--with-fc='+mpifort) 16859e0f383SLisandro Dalcin else: 16993b33a5aSLisandro Dalcin options.append('--with-fc=0') 17093b33a5aSLisandro Dalcin options.append('--with-sowing=0') 17193b33a5aSLisandro Dalcin else: 17259e0f383SLisandro Dalcin options.append('--with-mpi=0') 17315075023SLisandro Dalcin options.extend(CONFIGURE_OPTIONS) 17415075023SLisandro Dalcin # 175cb58ab5bSLisandro Dalcin log.info('configure options:') 176cb58ab5bSLisandro Dalcin for opt in options: 177cb58ab5bSLisandro Dalcin log.info(' '*4 + opt) 17859e0f383SLisandro Dalcin # Run PETSc configure 1795ee53db2SLisandro Dalcin if dry_run: 1805ee53db2SLisandro Dalcin return 1810a0dac6aSLisandro Dalcin use_config_py = False 18296fd8cd7SLisandro Dalcin if use_config_py: 183e68ebbecSBarry Smith import configure 18465a891e7SLisandro Dalcin configure.petsc_configure(options) 185e68ebbecSBarry Smith import logger 186e68ebbecSBarry Smith logger.Logger.defaultLog = None 18796fd8cd7SLisandro Dalcin else: 18884a6b807SJose E. Roman python = sys.executable 1890a0dac6aSLisandro Dalcin command = [python, './configure'] + options 19096fd8cd7SLisandro Dalcin status = os.system(" ".join(command)) 1915ee53db2SLisandro Dalcin if status != 0: 1925ee53db2SLisandro Dalcin raise RuntimeError(status) 1935ee53db2SLisandro Dalcin # Fix PETSc configuration 1941eeab4b4SLisandro Dalcin using_build_backend = any( 1951eeab4b4SLisandro Dalcin os.environ.get(prefix + '_BUILD_BACKEND') 1961eeab4b4SLisandro Dalcin for prefix in ('_PYPROJECT_HOOKS', 'PEP517') 1971eeab4b4SLisandro Dalcin ) 1981eeab4b4SLisandro Dalcin if using_build_backend: 1995ee53db2SLisandro Dalcin pdir = os.environ['PETSC_DIR'] 2005ee53db2SLisandro Dalcin parch = os.environ['PETSC_ARCH'] 2015ee53db2SLisandro Dalcin include = os.path.join(pdir, parch, 'include') 2025ee53db2SLisandro Dalcin for filename in ( 2035ee53db2SLisandro Dalcin 'petscconf.h', 2045ee53db2SLisandro Dalcin 'petscconfiginfo.h', 2055ee53db2SLisandro Dalcin 'petscmachineinfo.h', 2065ee53db2SLisandro Dalcin ): 2075ee53db2SLisandro Dalcin filename = os.path.join(include, filename) 2085ee53db2SLisandro Dalcin with open(filename, 'r') as old_fh: 2095ee53db2SLisandro Dalcin contents = old_fh.read() 2105ee53db2SLisandro Dalcin contents = contents.replace(prefix, '${PETSC_DIR}') 2115ee53db2SLisandro Dalcin contents = re.sub( 2125ee53db2SLisandro Dalcin r'^(#define PETSC_PYTHON_EXE) "(.*)"$', 2135ee53db2SLisandro Dalcin r'\1 "python%d"' % sys.version_info[0], 2145ee53db2SLisandro Dalcin contents, flags=re.MULTILINE, 2155ee53db2SLisandro Dalcin ) 2165ee53db2SLisandro Dalcin with open(filename, 'w') as new_fh: 2175ee53db2SLisandro Dalcin new_fh.write(contents) 2185ee53db2SLisandro Dalcin 21912c1d45bSMatthew G Knepley 22065a891e7SLisandro Dalcindef build(dry_run=False): 22165a891e7SLisandro Dalcin log.info('PETSc: build') 222367c215cSLisandro Dalcin # Run PETSc build 2235ee53db2SLisandro Dalcin if dry_run: 2245ee53db2SLisandro Dalcin return 225367c215cSLisandro Dalcin use_builder_py = False 226367c215cSLisandro Dalcin if use_builder_py: 227e68ebbecSBarry Smith import builder 228e68ebbecSBarry Smith builder.PETScMaker().run() 229105e34d4SBarry Smith import logger 230105e34d4SBarry Smith logger.Logger.defaultLog = None 231367c215cSLisandro Dalcin else: 2325ee53db2SLisandro Dalcin make = shutil.which('make') 23396fd8cd7SLisandro Dalcin command = [make, 'all'] 23496fd8cd7SLisandro Dalcin status = os.system(" ".join(command)) 2355ee53db2SLisandro Dalcin if status != 0: 2365ee53db2SLisandro Dalcin raise RuntimeError(status) 2375ee53db2SLisandro Dalcin 238e68ebbecSBarry Smith 2398c408988SSatish Balaydef install(dry_run=False): 24065a891e7SLisandro Dalcin log.info('PETSc: install') 24159e0f383SLisandro Dalcin # Run PETSc installer 2425ee53db2SLisandro Dalcin if dry_run: 2435ee53db2SLisandro Dalcin return 2440a0dac6aSLisandro Dalcin use_install_py = False 245367c215cSLisandro Dalcin if use_install_py: 246105e34d4SBarry Smith import install 2478c408988SSatish Balay install.Installer().run() 24865a891e7SLisandro Dalcin import logger 24965a891e7SLisandro Dalcin logger.Logger.defaultLog = None 250367c215cSLisandro Dalcin else: 2515ee53db2SLisandro Dalcin make = shutil.which('make') 2528c408988SSatish Balay command = [make, 'install'] 25396fd8cd7SLisandro Dalcin status = os.system(" ".join(command)) 2545ee53db2SLisandro Dalcin if status != 0: 2555ee53db2SLisandro Dalcin raise RuntimeError(status) 2565ee53db2SLisandro Dalcin 25799468c80SLisandro Dalcin 25896fd8cd7SLisandro Dalcinclass context(object): 25999468c80SLisandro Dalcin def __init__(self): 26099468c80SLisandro Dalcin self.sys_argv = sys.argv[:] 26199468c80SLisandro Dalcin self.wdir = os.getcwd() 26299468c80SLisandro Dalcin def enter(self): 26399468c80SLisandro Dalcin del sys.argv[1:] 26499468c80SLisandro Dalcin pdir = os.environ['PETSC_DIR'] 26599468c80SLisandro Dalcin os.chdir(pdir) 26699468c80SLisandro Dalcin return self 26799468c80SLisandro Dalcin def exit(self): 26899468c80SLisandro Dalcin sys.argv[:] = self.sys_argv 26999468c80SLisandro Dalcin os.chdir(self.wdir) 270105e34d4SBarry Smith 2715ee53db2SLisandro Dalcin 27265a891e7SLisandro Dalcinclass cmd_install(_install): 27365a891e7SLisandro Dalcin 27441716173SLisandro Dalcin def initialize_options(self): 27541716173SLisandro Dalcin _install.initialize_options(self) 27641716173SLisandro Dalcin 27789031a3cSLisandro Dalcin def finalize_options(self): 27889031a3cSLisandro Dalcin _install.finalize_options(self) 27989031a3cSLisandro Dalcin self.install_lib = self.install_platlib 28089031a3cSLisandro Dalcin self.install_libbase = self.install_lib 281f46a955bSLisandro Dalcin self.old_and_unmanageable = True 28289031a3cSLisandro Dalcin 28365a891e7SLisandro Dalcin def run(self): 28489031a3cSLisandro Dalcin root_dir = os.path.abspath(self.install_lib) 2858c408988SSatish Balay prefix = os.path.join(root_dir, 'petsc') 28699468c80SLisandro Dalcin # 28799468c80SLisandro Dalcin ctx = context().enter() 28865a891e7SLisandro Dalcin try: 28996fd8cd7SLisandro Dalcin config(prefix, self.dry_run) 29096fd8cd7SLisandro Dalcin build(self.dry_run) 2918c408988SSatish Balay install(self.dry_run) 29265a891e7SLisandro Dalcin finally: 29399468c80SLisandro Dalcin ctx.exit() 29496fd8cd7SLisandro Dalcin # 29596fd8cd7SLisandro Dalcin self.outputs = [] 2968c408988SSatish Balay for dirpath, _, filenames in os.walk(prefix): 29796fd8cd7SLisandro Dalcin for fn in filenames: 29896fd8cd7SLisandro Dalcin self.outputs.append(os.path.join(dirpath, fn)) 29996fd8cd7SLisandro Dalcin # 30096fd8cd7SLisandro Dalcin _install.run(self) 30165a891e7SLisandro Dalcin 30296fd8cd7SLisandro Dalcin def get_outputs(self): 30396fd8cd7SLisandro Dalcin outputs = getattr(self, 'outputs', []) 30496fd8cd7SLisandro Dalcin outputs += _install.get_outputs(self) 30596fd8cd7SLisandro Dalcin return outputs 306a32381aeSLisandro Dalcin 3075ee53db2SLisandro Dalcin 3085ee53db2SLisandro Dalcinclass cmd_bdist_wheel(_bdist_wheel): 3095ee53db2SLisandro Dalcin 3105ee53db2SLisandro Dalcin def finalize_options(self): 3115ee53db2SLisandro Dalcin super().finalize_options() 3125ee53db2SLisandro Dalcin self.root_is_pure = False 3135ee53db2SLisandro Dalcin self.build_number = None 3145ee53db2SLisandro Dalcin 3155ee53db2SLisandro Dalcin def get_tag(self): 3165ee53db2SLisandro Dalcin plat_tag = super().get_tag()[-1] 3175ee53db2SLisandro Dalcin return (self.python_tag, "none", plat_tag) 3185ee53db2SLisandro Dalcin 3195ee53db2SLisandro Dalcin 32065a891e7SLisandro Dalcindef version(): 3217d04d9c9SLisandro Dalcin version_re = { 3227d04d9c9SLisandro Dalcin 'major' : re.compile(r"#define\s+PETSC_VERSION_MAJOR\s+(\d+)"), 3237d04d9c9SLisandro Dalcin 'minor' : re.compile(r"#define\s+PETSC_VERSION_MINOR\s+(\d+)"), 3247d04d9c9SLisandro Dalcin 'micro' : re.compile(r"#define\s+PETSC_VERSION_SUBMINOR\s+(\d+)"), 32515261b6dSSatish Balay 'release': re.compile(r"#define\s+PETSC_VERSION_RELEASE\s+([-]*\d+)"), 3267d04d9c9SLisandro Dalcin } 3277d04d9c9SLisandro Dalcin petscversion_h = os.path.join('include','petscversion.h') 32896fd8cd7SLisandro Dalcin data = open(petscversion_h, 'r').read() 3297d04d9c9SLisandro Dalcin major = int(version_re['major'].search(data).groups()[0]) 3307d04d9c9SLisandro Dalcin minor = int(version_re['minor'].search(data).groups()[0]) 3317d04d9c9SLisandro Dalcin micro = int(version_re['micro'].search(data).groups()[0]) 3327d04d9c9SLisandro Dalcin release = int(version_re['release'].search(data).groups()[0]) 333f46a955bSLisandro Dalcin if release: 3340a0dac6aSLisandro Dalcin v = "%d.%d.%d" % (major, minor, micro) 3357d04d9c9SLisandro Dalcin else: 3360a0dac6aSLisandro Dalcin v = "%d.%d.0.dev%d" % (major, minor+1, 0) 3377d04d9c9SLisandro Dalcin return v 33859e0f383SLisandro Dalcin 3395ee53db2SLisandro Dalcin 34065a891e7SLisandro Dalcindef tarball(): 34150f36069SLisandro Dalcin VERSION = version() 3425ee53db2SLisandro Dalcin if '.dev' in VERSION: 3435ee53db2SLisandro Dalcin return None 344ca0d62ffSSatish Balay return ('https://web.cels.anl.gov/projects/petsc/download/release-snapshots/' 345a8af48b3SSatish Balay 'petsc-%s.tar.gz#egg=petsc-%s' % (VERSION, VERSION)) 34665a891e7SLisandro Dalcin 3475ee53db2SLisandro Dalcin 3485ee53db2SLisandro Dalcindescription = __doc__.split('\n')[1:-1] 3495ee53db2SLisandro Dalcindel description[1:3] 3505ee53db2SLisandro Dalcin 35165a891e7SLisandro Dalcinclassifiers = """ 35296fd8cd7SLisandro DalcinDevelopment Status :: 5 - Production/Stable 35365a891e7SLisandro DalcinIntended Audience :: Developers 35465a891e7SLisandro DalcinIntended Audience :: Science/Research 35596fd8cd7SLisandro DalcinOperating System :: POSIX 35665a891e7SLisandro DalcinProgramming Language :: C 35765a891e7SLisandro DalcinProgramming Language :: C++ 35865a891e7SLisandro DalcinProgramming Language :: Fortran 35965a891e7SLisandro DalcinProgramming Language :: Python 360*aab42556SSatish BalayProgramming Language :: Python :: 3 36165a891e7SLisandro DalcinTopic :: Scientific/Engineering 36265a891e7SLisandro DalcinTopic :: Software Development :: Libraries 36365a891e7SLisandro Dalcin""" 36465a891e7SLisandro Dalcin 36565a891e7SLisandro Dalcinbootstrap() 3665ee53db2SLisandro Dalcinsetup( 3675ee53db2SLisandro Dalcin name='petsc', 36865a891e7SLisandro Dalcin version=version(), 36965a891e7SLisandro Dalcin description=description.pop(0), 37065a891e7SLisandro Dalcin long_description='\n'.join(description), 3715ee53db2SLisandro Dalcin long_description_content_type='text/x-rst', 37265a891e7SLisandro Dalcin classifiers=classifiers.split('\n')[1:-1], 37365a891e7SLisandro Dalcin keywords = ['PETSc', 'MPI'], 37465a891e7SLisandro Dalcin platforms=['POSIX'], 3755ee53db2SLisandro Dalcin license='BSD-2-Clause', 37665a891e7SLisandro Dalcin 377a17b96a8SKyle Gerard Felker url='https://petsc.org/', 37865a891e7SLisandro Dalcin download_url=tarball(), 37965a891e7SLisandro Dalcin 38065a891e7SLisandro Dalcin author='PETSc Team', 38199468c80SLisandro Dalcin author_email='petsc-maint@mcs.anl.gov', 38265a891e7SLisandro Dalcin maintainer='Lisandro Dalcin', 38365a891e7SLisandro Dalcin maintainer_email='dalcinl@gmail.com', 38465a891e7SLisandro Dalcin 38565a891e7SLisandro Dalcin packages=['petsc'], 3869fb7a39fSLisandro Dalcin package_dir= {'petsc': 'config/pypi'}, 3875ee53db2SLisandro Dalcin cmdclass={ 3885ee53db2SLisandro Dalcin 'install': cmd_install, 3895ee53db2SLisandro Dalcin 'bdist_wheel': cmd_bdist_wheel, 3905ee53db2SLisandro Dalcin }, 3915ee53db2SLisandro Dalcin **metadata 3925ee53db2SLisandro Dalcin) 393