1import config.package
2
3# TODO: Require dynamic libraries
4class Configure(config.package.Package):
5  def __init__(self, framework):
6    config.package.Package.__init__(self, framework)
7    self.gitcommit              = 'a02ea7456e23e63ae9e90f6d3a9403c91ecd5688' # sync with 3.14.0
8    self.download               = ['git://https://gitlab.com/knepley/bamg','https://gitlab.com/knepley/bamg/archive/'+self.gitcommit+'.tar.gz']
9    self.functions              = []
10    self.includes               = []
11    self.useddirectly           = 0
12    self.linkedbypetsc          = 0
13    self.builtafterpetsc        = 1
14    return
15
16  def setupDependencies(self, framework):
17    config.package.Package.setupDependencies(self, framework)
18    self.setCompilers    = framework.require('config.setCompilers',self)
19    self.sharedLibraries = framework.require('PETSc.options.sharedLibraries',self)
20    self.mathlib         = framework.require('config.packages.mathlib',self)
21    self.mpi             = framework.require('config.packages.MPI',self)
22    self.blasLapack      = framework.require('config.packages.BlasLapack',self)
23    self.slepc           = framework.require('config.packages.slepc',self)
24    self.parch           = framework.require('PETSc.options.arch',self)
25    self.scalartypes     = framework.require('PETSc.options.scalarTypes',self)
26    self.deps            = [self.blasLapack,self.mathlib,self.mpi,self.slepc]
27    return
28
29  def Install(self):
30    import os
31    # if installing prefix location then need to set new value for PETSC_DIR/PETSC_ARCH
32    if self.argDB['prefix'] and not 'package-prefix-hash' in self.argDB:
33       iarch = 'installed-'+self.parch.nativeArch
34       if self.scalartypes.scalartype != 'real':
35         iarch += '-' + self.scalartypes.scalartype
36       carg = 'BAMG_DIR='+self.packageDir+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH="" '
37       barg = 'BAMG_DIR='+self.packageDir+' PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' PETSC_ARCH='+iarch+' '
38       prefix = os.path.abspath(os.path.expanduser(self.argDB['prefix']))
39    else:
40       carg = ' BAMG_DIR='+self.packageDir+' '
41       barg = ' BAMG_DIR='+self.packageDir+' SLEPC_DIR='+self.slepc.installDir+' '
42       prefix = os.path.join(self.petscdir.dir,self.arch)
43    if self.installSudo:
44       newuser = self.installSudo+' -u $${SUDO_USER} '
45    else:
46       newuser = ''
47    if not hasattr(self.framework, 'packages'):
48      self.framework.packages = []
49    self.framework.packages.append(self)
50    # SLEPc dependency
51    slepcbuilddep = 'slepc-install slepc-build'
52    oldFlags = self.compilers.CPPFLAGS
53
54    self.addMakeMacro('BAMG','yes')
55    self.addMakeRule('bamgbuild',slepcbuilddep, \
56                       ['@echo "*** Building PETSc BAMG ***"',\
57                          '@${RM} -f ${PETSC_ARCH}/lib/petsc/conf/bamg.errorflg',\
58                          '@(cd '+self.packageDir+' && \\\n\
59           '+carg+'./configure --prefix='+prefix+' --with-clean && \\\n\
60             mkdir -p ${PETSC_ARCH}/tests && \\\n\
61             touch ${PETSC_ARCH}/tests/testfiles && \\\n\
62           '+barg+'${OMAKE} '+barg+') > ${PETSC_ARCH}/lib/petsc/conf/bamg.log 2>&1 || \\\n\
63             (echo "**************************ERROR*************************************" && \\\n\
64             echo "Error building bamg. Check ${PETSC_ARCH}/lib/petsc/conf/bamg.log" && \\\n\
65             echo "********************************************************************" && \\\n\
66             touch ${PETSC_ARCH}/lib/petsc/conf/bamg.errorflg && \\\n\
67             exit 1)'])
68    self.addMakeRule('bamginstall','', \
69                       ['@echo "*** Installing PETSc BAMG ***"',\
70                          '@(cd '+self.packageDir+' && \\\n\
71           '+newuser+barg+'${OMAKE} install '+barg+') >> ${PETSC_ARCH}/lib/petsc/conf/bamg.log 2>&1 || \\\n\
72             (echo "**************************ERROR*************************************" && \\\n\
73             echo "Error building bamg. Check ${PETSC_ARCH}/lib/petsc/conf/bamg.log" && \\\n\
74             echo "********************************************************************" && \\\n\
75             exit 1)'])
76    if self.argDB['prefix'] and not 'package-prefix-hash' in self.argDB:
77      self.addMakeRule('bamg-build','')
78      # the build must be done at install time because PETSc shared libraries must be in final location before building ba
79      self.addMakeRule('bamg-install','bamgbuild bamginstall')
80    else:
81      self.addMakeRule('bamg-build','bamgbuild bamginstall')
82      self.addMakeRule('bamg-install','')
83    return self.installDir
84
85  def alternateConfigureLibrary(self):
86    self.addMakeRule('bamg-build','')
87    self.addMakeRule('bamg-install','')
88