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