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