1e68ebbecSBarry Smith#!/usr/bin/env python 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. 12e68ebbecSBarry Smith""" 13e68ebbecSBarry Smith 1465a891e7SLisandro Dalcinimport sys, os 1565a891e7SLisandro Dalcinfrom distutils.core import setup 1665a891e7SLisandro Dalcinfrom distutils.util import get_platform 1765a891e7SLisandro Dalcinfrom distutils.command.build import build as _build 1865a891e7SLisandro Dalcinif 'setuptools' in sys.modules: 1965a891e7SLisandro Dalcin from setuptools.command.install import install as _install 2065a891e7SLisandro Dalcinelse: 2165a891e7SLisandro Dalcin from distutils.command.install import install as _install 2265a891e7SLisandro Dalcinfrom distutils import log 2312c1d45bSMatthew G Knepley 2465a891e7SLisandro Dalcininit_py = """\ 2565a891e7SLisandro Dalcin# Author: Lisandro Dalcin 2665a891e7SLisandro Dalcin# Contact: dalcinl@gmail.com 2765a891e7SLisandro Dalcin 2865a891e7SLisandro Dalcindef get_petsc_dir(): 2965a891e7SLisandro Dalcin import os 3065a891e7SLisandro Dalcin return os.path.dirname(__file__) 3165a891e7SLisandro Dalcin 3265a891e7SLisandro Dalcindef get_petsc_arch(): 3365a891e7SLisandro Dalcin return '' 3465a891e7SLisandro Dalcin""" 3565a891e7SLisandro Dalcin 3665a891e7SLisandro Dalcindef bootstrap(): 3765a891e7SLisandro Dalcin PETSC_DIR = os.path.abspath(os.getcwd()) 3865a891e7SLisandro Dalcin PETSC_ARCH = get_platform() + '-python' 3965a891e7SLisandro Dalcin os.environ['PETSC_DIR'] = PETSC_DIR 4065a891e7SLisandro Dalcin os.environ['PETSC_ARCH'] = PETSC_ARCH 4165a891e7SLisandro Dalcin sys.path.insert(0, os.path.join(PETSC_DIR, 'config')) 4265a891e7SLisandro Dalcin try: 4365a891e7SLisandro Dalcin if not os.path.exists(PETSC_ARCH): 4465a891e7SLisandro Dalcin os.mkdir(PETSC_ARCH) 4565a891e7SLisandro Dalcin pkgfile = os.path.join(PETSC_ARCH, '__init__.py') 4665a891e7SLisandro Dalcin if not os.path.exists(pkgfile): 4765a891e7SLisandro Dalcin open(pkgfile, 'wt').write(init_py) 4865a891e7SLisandro Dalcin except: 4965a891e7SLisandro Dalcin pass 5065a891e7SLisandro Dalcin 5165a891e7SLisandro Dalcindef config(dry_run=False): 5265a891e7SLisandro Dalcin log.info('PETSc: configure') 5365a891e7SLisandro Dalcin if dry_run: return 5465a891e7SLisandro Dalcin options = [ 5565a891e7SLisandro Dalcin 'PETSC_ARCH='+os.environ['PETSC_ARCH'], 5665a891e7SLisandro Dalcin '--with-shared-libraries', 5765a891e7SLisandro Dalcin '--with-fc=0', 5865a891e7SLisandro Dalcin '--with-mpi=0', 5965a891e7SLisandro Dalcin ] 60e68ebbecSBarry Smith import configure 6165a891e7SLisandro Dalcin configure.petsc_configure(options) 62e68ebbecSBarry Smith import logger 63e68ebbecSBarry Smith logger.Logger.defaultLog = None 6412c1d45bSMatthew G Knepley 6565a891e7SLisandro Dalcindef build(dry_run=False): 6665a891e7SLisandro Dalcin log.info('PETSc: build') 6765a891e7SLisandro Dalcin if dry_run: return 68e68ebbecSBarry Smith import builder 69e68ebbecSBarry Smith builder.PETScMaker().run() 70105e34d4SBarry Smith import logger 71105e34d4SBarry Smith logger.Logger.defaultLog = None 72e68ebbecSBarry Smith 7365a891e7SLisandro Dalcindef install(dest_dir, prefix=None, dry_run=False): 7465a891e7SLisandro Dalcin log.info('PETSc: install') 7565a891e7SLisandro Dalcin if dry_run: return 7665a891e7SLisandro Dalcin if prefix is None: 7765a891e7SLisandro Dalcin prefix = dest_dir 7865a891e7SLisandro Dalcin options = [ 7965a891e7SLisandro Dalcin '--destDir=' + dest_dir, 8065a891e7SLisandro Dalcin '--prefix=' + prefix 8165a891e7SLisandro Dalcin ] 82105e34d4SBarry Smith import install 8365a891e7SLisandro Dalcin install.Installer(options).run() 8465a891e7SLisandro Dalcin import logger 8565a891e7SLisandro Dalcin logger.Logger.defaultLog = None 8665a891e7SLisandro Dalcin # temporary hack - delete log files created by BuildSystem 8765a891e7SLisandro Dalcin delfiles=['RDict.db','RDict.log', 8865a891e7SLisandro Dalcin 'build.log','default.log', 8965a891e7SLisandro Dalcin 'build.log.bkp','default.log.bkp'] 90105e34d4SBarry Smith for delfile in delfiles: 9165a891e7SLisandro Dalcin try: 9265a891e7SLisandro Dalcin if (os.path.exists(delfile) and 9365a891e7SLisandro Dalcin os.stat(delfile).st_uid==0): 94105e34d4SBarry Smith os.remove(delfile) 9565a891e7SLisandro Dalcin except: 9665a891e7SLisandro Dalcin pass 97105e34d4SBarry Smith 9865a891e7SLisandro Dalcinclass cmd_build(_build): 9965a891e7SLisandro Dalcin 10065a891e7SLisandro Dalcin def finalize_options(self): 10165a891e7SLisandro Dalcin if self.build_base is None: 10265a891e7SLisandro Dalcin self.build_base= 'build' 10365a891e7SLisandro Dalcin self.build_base = os.path.join( 10465a891e7SLisandro Dalcin os.environ['PETSC_ARCH'], self.build_base) 10565a891e7SLisandro Dalcin _build.finalize_options(self) 10665a891e7SLisandro Dalcin 10765a891e7SLisandro Dalcin def run(self): 10865a891e7SLisandro Dalcin _build.run(self) 10965a891e7SLisandro Dalcin wdir = os.getcwd() 11065a891e7SLisandro Dalcin pdir = os.environ['PETSC_DIR'] 11165a891e7SLisandro Dalcin try: 11265a891e7SLisandro Dalcin os.chdir(pdir) 11365a891e7SLisandro Dalcin config(self.dry_run) 11465a891e7SLisandro Dalcin build(self.dry_run) 11565a891e7SLisandro Dalcin finally: 11665a891e7SLisandro Dalcin os.chdir(wdir) 11765a891e7SLisandro Dalcin 11865a891e7SLisandro Dalcinclass cmd_install(_install): 11965a891e7SLisandro Dalcin 12065a891e7SLisandro Dalcin def run(self): 12165a891e7SLisandro Dalcin _install.run(self) 12265a891e7SLisandro Dalcin root_dir = self.install_platlib 12365a891e7SLisandro Dalcin dest_dir = os.path.join(root_dir, 'petsc') 12465a891e7SLisandro Dalcin bdist_base = self.get_finalized_command('bdist').bdist_base 12565a891e7SLisandro Dalcin if dest_dir.startswith(bdist_base): 12665a891e7SLisandro Dalcin prefix = dest_dir[len(bdist_base)+1:] 12765a891e7SLisandro Dalcin prefix = prefix[prefix.index(os.path.sep):] 12865a891e7SLisandro Dalcin else: 12965a891e7SLisandro Dalcin prefix = dest_dir 13065a891e7SLisandro Dalcin dest_dir = os.path.abspath(dest_dir) 13165a891e7SLisandro Dalcin prefix = os.path.abspath(prefix) 13265a891e7SLisandro Dalcin wdir = os.getcwd() 13365a891e7SLisandro Dalcin pdir = os.environ['PETSC_DIR'] 13465a891e7SLisandro Dalcin try: 13565a891e7SLisandro Dalcin os.chdir(pdir) 13665a891e7SLisandro Dalcin install(dest_dir, prefix, self.dry_run) 13765a891e7SLisandro Dalcin finally: 13865a891e7SLisandro Dalcin os.chdir(wdir) 13965a891e7SLisandro Dalcin 14065a891e7SLisandro Dalcindef version(): 141*f6b9c231SLisandro Dalcin return '3.2.dev1' 14265a891e7SLisandro Dalcindef tarball(): 143*f6b9c231SLisandro Dalcin return None # XXX remove this line 144*f6b9c231SLisandro Dalcin return ('http://ftp.mcs.anl.gov/pub/petsc/<XXX>/' # XXX fix this line 145*f6b9c231SLisandro Dalcin 'petsc-lite-%s.tar.gz' % version() ) 14665a891e7SLisandro Dalcin 14765a891e7SLisandro Dalcindescription = __doc__.split('\n')[1:-1]; del description[1:3] 14865a891e7SLisandro Dalcinclassifiers = """ 14965a891e7SLisandro DalcinLicense :: Public Domain 15065a891e7SLisandro DalcinOperating System :: POSIX 15165a891e7SLisandro DalcinIntended Audience :: Developers 15265a891e7SLisandro DalcinIntended Audience :: Science/Research 15365a891e7SLisandro DalcinProgramming Language :: C 15465a891e7SLisandro DalcinProgramming Language :: C++ 15565a891e7SLisandro DalcinProgramming Language :: Fortran 15665a891e7SLisandro DalcinProgramming Language :: Python 15765a891e7SLisandro DalcinTopic :: Scientific/Engineering 15865a891e7SLisandro DalcinTopic :: Software Development :: Libraries 15965a891e7SLisandro Dalcin""" 16065a891e7SLisandro Dalcin 16165a891e7SLisandro Dalcinbootstrap() 16265a891e7SLisandro Dalcinsetup(name='petsc', 16365a891e7SLisandro Dalcin version=version(), 16465a891e7SLisandro Dalcin description=description.pop(0), 16565a891e7SLisandro Dalcin long_description='\n'.join(description), 16665a891e7SLisandro Dalcin classifiers= classifiers.split('\n')[1:-1], 16765a891e7SLisandro Dalcin keywords = ['PETSc', 'MPI'], 16865a891e7SLisandro Dalcin platforms=['POSIX'], 16965a891e7SLisandro Dalcin license='PETSc', 17065a891e7SLisandro Dalcin 17165a891e7SLisandro Dalcin provides=['petsc'], 17265a891e7SLisandro Dalcin requires=[], 17365a891e7SLisandro Dalcin 17465a891e7SLisandro Dalcin url='http://www.mcs.anl.gov/petsc/', 17565a891e7SLisandro Dalcin download_url=tarball(), 17665a891e7SLisandro Dalcin 17765a891e7SLisandro Dalcin author='PETSc Team', 17865a891e7SLisandro Dalcin author_email='petsc-users@mcs.anl.gov', 17965a891e7SLisandro Dalcin maintainer='Lisandro Dalcin', 18065a891e7SLisandro Dalcin maintainer_email='dalcinl@gmail.com', 18165a891e7SLisandro Dalcin 18265a891e7SLisandro Dalcin packages = ['petsc'], 18365a891e7SLisandro Dalcin package_dir = {'petsc': os.environ['PETSC_ARCH']}, 18465a891e7SLisandro Dalcin cmdclass={ 18565a891e7SLisandro Dalcin 'build': cmd_build, 18665a891e7SLisandro Dalcin 'install': cmd_install, 18765a891e7SLisandro Dalcin }, 18865a891e7SLisandro Dalcin ) 189