xref: /petsc/config/BuildSystem/config/packages/SLEPc.py (revision ae1ee55146a7ad071171b861759b85940c7e5c67)
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