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