1import config.package 2 3class Configure(config.package.Package): 4 def __init__(self, framework): 5 config.package.Package.__init__(self, framework) 6 self.gitcommit = 'f42e77b1a1a3a3e891ad8dc88468372176b30300' # slepc-MarDiehl/use-bool-instead-of-enum (3.023.2+) aug-31-2025 7 #self.gitcommit = 'v'+self.version 8 self.download = ['git://https://gitlab.com/slepc/slepc.git','https://gitlab.com/slepc/slepc/-/archive/'+self.gitcommit+'/slepc-'+self.gitcommit+'.tar.gz'] 9 self.functions = [] 10 self.includes = [] 11 self.skippackagewithoptions = 1 12 self.useddirectly = 0 13 self.linkedbypetsc = 0 14 self.builtafterpetsc = 1 15 return 16 17 def setupHelp(self, help): 18 import nargs 19 config.package.Package.setupHelp(self,help) 20 help.addArgument('SLEPC', '-download-slepc-configure-arguments=string', nargs.Arg(None, None, 'Additional configure arguments for the build of SLEPc')) 21 return 22 23 def setupDependencies(self, framework): 24 config.package.Package.setupDependencies(self, framework) 25 self.python = framework.require('config.packages.Python',self) 26 self.setCompilers = framework.require('config.setCompilers',self) 27 self.sharedLibraries = framework.require('PETSc.options.sharedLibraries', self) 28 self.installdir = framework.require('PETSc.options.installDir',self) 29 self.parch = framework.require('PETSc.options.arch',self) 30 self.scalartypes = framework.require('PETSc.options.scalarTypes',self) 31 self.cuda = framework.require('config.packages.CUDA',self) 32 self.thrust = framework.require('config.packages.Thrust',self) 33 self.hypre = framework.require('config.packages.hypre',self) 34 self.SuiteSparse = framework.require('config.packages.SuiteSparse',self) 35 self.odeps = [self.cuda,self.thrust,self.hypre,self.SuiteSparse] 36 return 37 38 def Install(self): 39 import os 40 # if installing prefix location then need to set new value for PETSC_DIR/PETSC_ARCH 41 if self.argDB['prefix'] and not 'package-prefix-hash' in self.argDB: 42 iarch = 'installed-'+self.parch.nativeArch.replace('linux-','linux2-') 43 if self.scalartypes.scalartype != 'real': 44 iarch += '-' + self.scalartypes.scalartype 45 carg = 'SLEPC_DIR='+self.packageDir+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH=""' 46 barg = 'SLEPC_DIR='+self.packageDir+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH='+iarch 47 checkarg = 'SLEPC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH=""' 48 prefix = os.path.abspath(os.path.expanduser(self.argDB['prefix'])) 49 else: 50 carg = 'SLEPC_DIR=' + self.packageDir 51 barg = 'SLEPC_DIR=' + self.packageDir + ' PETSC_ARCH=${PETSC_ARCH}' 52 checkarg = barg 53 prefix = os.path.join(self.petscdir.dir,self.arch) 54 self.directory = prefix 55 56 if self.argDB['with-petsc4py']: 57 if 'download-slepc-configure-arguments' in self.argDB: 58 if self.argDB['download-slepc-configure-arguments'] and '--with-slepc4py' not in self.argDB['download-slepc-configure-arguments']: 59 self.argDB['download-slepc-configure-arguments'] += ' --with-slepc4py' 60 else: 61 self.argDB['download-slepc-configure-arguments'] = ' --with-slepc4py' 62 63 if 'download-slepc-configure-arguments' in self.argDB and self.argDB['download-slepc-configure-arguments']: 64 configargs = self.argDB['download-slepc-configure-arguments'] 65 if '--with-slepc4py' in self.argDB['download-slepc-configure-arguments']: 66 carg += ' PYTHONPATH='+os.path.join(self.installDir,'lib')+':${PYTHONPATH}' 67 else: 68 configargs = '' 69 70 self.include = [os.path.join(prefix,'include')] 71 if self.argDB['with-single-library']: 72 self.lib = [os.path.join(prefix,'lib','libslepc')] 73 else: 74 self.lib = [os.path.join(prefix,'lib','libslepclme'),'-lslepcmfn -lslepcnep -lslepcpep -lslepcsvd -lslepceps -lslepcsys'] 75 self.addDefine('HAVE_SLEPC',1) 76 self.addMakeMacro('SLEPC','yes') 77 self.addPost(self.packageDir,[carg + ' ' + self.python.pyexe + ' ./configure --prefix=' + prefix + ' ' + configargs, 78 barg + ' ${OMAKE} ' + barg, 79 barg + ' ${OMAKE} ' + barg + ' install']) 80 self.addMakeCheck(self.packageDir, '${OMAKE} ' + checkarg + ' check') 81 self.addTest(self.packageDir, barg + ' ${OMAKE} ' + barg + ' test') 82 if 'download-slepc-configure-arguments' in self.argDB and self.argDB['download-slepc-configure-arguments'].find('--with-slepc4py')>-1: 83 self.name = 'slepc4py' 84 self.addTest(self.packageDir, barg + ' ${OMAKE} ' + barg + ' slepc4pytest') 85 self.name = 'SLEPc' 86 self.logPrintBox('SLEPc examples are available at '+os.path.join(self.packageDir,'src','*','tutorials')) 87 return self.installDir 88