1import config.package 2 3class Configure(config.package.Package): 4 def __init__(self, framework): 5 config.package.Package.__init__(self, framework) 6 self.gitcommit = 'v3.2p4' 7 self.download = ['git://https://bitbucket.org/petsc/pkg-parms.git','http://ftp.mcs.anl.gov/pub/petsc/externalpackages/pARMS_3.2p4.tar.gz'] 8 self.functions = ['parms_PCCreate'] 9 self.includes = ['parms.h'] 10 self.liblist = [['libparms.a']] 11 #self.license = 'http://www-users.cs.umn.edu/~saad/software/pARMS' 12 self.precisions = ['double'] 13 return 14 15 def setupDependencies(self, framework): 16 config.package.Package.setupDependencies(self, framework) 17 self.scalartypes = framework.require('PETSc.options.scalarTypes',self) 18 self.blasLapack = framework.require('config.packages.BlasLapack',self) 19 self.mpi = framework.require('config.packages.MPI',self) 20 self.deps = [self.mpi,self.blasLapack] 21 return 22 23 def Install(self): 24 import os 25 26 # Configure and Build pARMS 27 g = open(os.path.join(self.packageDir,'makefile.in'),'w') 28 g.write('SHELL = /bin/sh\n') 29 g.write('.SUFFIXES:\n') 30 g.write('.SUFFIXES: .c .o .f .F\n') 31 32 # C compiler 33 self.setCompilers.pushLanguage('C') 34 g.write('CC = '+self.setCompilers.getCompiler()+'\n') 35 g.write('CFLAGS = '+self.removeWarningFlags(self.setCompilers.getCompilerFlags())+' -DUSE_MPI -DREAL=double -DHAS_BLAS ') 36 if self.scalartypes.scalartype == 'complex': 37 g.write('-DDBL_CMPLX\n') 38 else: 39 g.write('-DDBL\n') 40 self.setCompilers.popLanguage() 41 42 # BLAS mangling 43 if self.blasLapack.mangling == 'underscore': 44 g.write('CFDEFS = -DFORTRAN_UNDERSCORE\n') 45 elif self.blasLapack.mangling == 'caps': 46 g.write('CFDEFS = -DFORTRAN_CAPS\n') 47 elif self.blasLapack.mangling == 'unchanged': 48 g.write('CFDEFS = \n') 49 else: 50 raise RuntimeError('Unknown blas mangling: cannot proceed with pARMS: '+str(self.blasLapack.mangling)) 51 g.write('CFFLAGS = ${CFDEFS} -DVOID_POINTER_SIZE_'+str(self.types.sizes['known-sizeof-void-p'])+'\n') 52 53 g.write('RM = rm\n') 54 g.write('RMFLAGS = -rf\n') 55 g.write('EXTFLAGS = -x\n') 56 57 # archive and options 58 g.write('AR = '+self.setCompilers.AR+'\n') 59 g.write('ARFLAGS = '+self.setCompilers.AR_FLAGS+'\n') 60 61 # pARMS lib and its directory 62 g.write('LIBDIR = '+self.installDir+'/lib\n') 63 g.write('LIB = ${LIBDIR}/libparms.a\n') 64 g.write('LIBFLAGS = -L${LIBDIR}\n') 65 g.write('PARMS_LIBS = -lparms\n') 66 67 #----------------------------------------- 68 g.close() 69 70 if self.installNeeded('makefile.in'): 71 try: 72 self.logPrintBox('Compiling pARMS; this may take several minutes') 73 libDir = os.path.join(self.installDir, self.libdir,'') 74 incDir = os.path.join(self.installDir, self.includedir,'') 75 if not os.path.isdir(libDir): 76 os.mkdir(libDir) 77 self.installDirProvider.printSudoPasswordMessage() 78 output,err,ret = config.package.Package.executeShellCommand(self.installSudo+'mkdir -p '+libDir, timeout=2500, log=self.log) 79 output,err,ret = config.package.Package.executeShellCommand(self.installSudo+'mkdir -p '+incDir, timeout=2500, log=self.log) 80 output,err,ret = config.package.Package.executeShellCommand('cd '+self.packageDir+' && make cleanall && make OBJ3="" && '+self.installSudo+'cp -f include/*.h '+incDir +' && '+self.installSudo+'cp lib/* '+libDir, timeout=2500, log = self.log) 81 except RuntimeError, e: 82 raise RuntimeError('Error running make on pARMS: '+str(e)) 83 self.postInstall(output+err,'makefile.in') 84 return self.installDir 85