1import config.package 2 3class Configure(config.package.Package): 4 def __init__(self, framework): 5 config.package.Package.__init__(self, framework) 6 self.gitcommit = '2435073368006cab65837fb206144f409508c908' # main feb-20-2026 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 consistencyChecks(self): 39 config.package.Package.consistencyChecks(self) 40 if 'download-slepc' in self.argDB and self.argDB['download-slepc']: 41 if 'download-slepc-configure-arguments' in self.argDB and '--with-slepc4py' in self.argDB['download-slepc-configure-arguments']: 42 raise RuntimeError('You should set --with-slepc4py as a separate option of PETSc configure, not within --download-slepc-configure-arguments') 43 if self.argDB['with-petsc4py'] and not self.argDB['with-slepc4py']: 44 raise RuntimeError('You should also set --with-slepc4py when using both --with-petsc4py and --download-slepc') 45 return 46 47 def Install(self): 48 import os 49 # if installing prefix location then need to set new value for PETSC_DIR/PETSC_ARCH 50 if self.argDB['prefix'] and not 'package-prefix-hash' in self.argDB: 51 iarch = 'installed-'+self.parch.nativeArch.replace('linux-','linux2-') 52 if self.scalartypes.scalartype != 'real': 53 iarch += '-' + self.scalartypes.scalartype 54 carg = 'SLEPC_DIR='+self.packageDir+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH=""' 55 barg = 'SLEPC_DIR='+self.packageDir+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH='+iarch 56 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=""' 57 prefix = os.path.abspath(os.path.expanduser(self.argDB['prefix'])) 58 else: 59 carg = 'SLEPC_DIR=' + self.packageDir 60 barg = 'SLEPC_DIR=' + self.packageDir + ' PETSC_ARCH=${PETSC_ARCH}' 61 checkarg = barg 62 prefix = os.path.join(self.petscdir.dir,self.arch) 63 self.directory = prefix 64 65 if 'download-slepc-configure-arguments' in self.argDB and self.argDB['download-slepc-configure-arguments']: 66 configargs = self.argDB['download-slepc-configure-arguments'] 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.addPost(self.packageDir,[carg + ' ' + self.python.pyexe + ' ./configure --prefix=' + prefix + ' ' + configargs, 76 barg + ' ${OMAKE} ' + barg, 77 barg + ' ${OMAKE} ' + barg + ' install']) 78 self.addMakeCheck(self.packageDir, '${OMAKE} ' + checkarg + ' check') 79 self.addTest(self.packageDir, barg + ' ${OMAKE} ' + barg + ' test') 80 self.logPrintBox('SLEPc examples are available at '+os.path.join(self.packageDir,'src','*','tutorials')) 81 return self.installDir 82