1import config.package
2
3class Configure(config.package.Package):
4  def __init__(self, framework):
5    config.package.Package.__init__(self, framework)
6    self.gitcommit              = '668c2e36991b0a2c39275949277e6ce817414f94'  #master sep-25-2020
7    self.download               = ['git://https://github.com/libMesh/libmesh.git']
8    self.functions              = []
9    self.includes               = []
10    self.skippackagewithoptions = 1
11    self.useddirectly           = 0
12    self.linkedbypetsc          = 0
13    self.builtafterpetsc        = 1
14    return
15
16  def setupHelp(self, help):
17    config.package.Package.setupHelp(self,help)
18    import nargs
19    return
20
21  def setupDependencies(self, framework):
22    config.package.Package.setupDependencies(self, framework)
23    self.setCompilers    = framework.require('config.setCompilers',self)
24    self.sharedLibraries = framework.require('PETSc.options.sharedLibraries', self)
25    self.installdir      = framework.require('PETSc.options.installDir',self)
26    return
27
28  def Install(self):
29    import os
30
31    #  if installing as Superuser than want to return to regular user for clean and build
32    if self.installSudo:
33       newuser = self.installSudo+' -u $${SUDO_USER} '
34    else:
35       newuser = ''
36
37    # if installing prefix location then need to set new value for PETSC_DIR/PETSC_ARCH
38    if self.argDB['prefix']:
39       newdir = 'PETSC_DIR='+os.path.abspath(os.path.expanduser(self.argDB['prefix']))+' '
40       prefix = os.path.abspath(os.path.expanduser(self.argDB['prefix']))
41    else:
42       newdir = ' '
43       prefix = os.path.join(self.petscdir.dir,self.arch)
44
45    self.addDefine('HAVE_LIBMESH',1)
46    self.addMakeMacro('LIBMESH','yes')
47    self.addMakeRule('libmeshbuild','', \
48                       ['@echo "*** Building libmesh ***"',\
49                          '@${RM} -f ${PETSC_ARCH}/lib/petsc/conf/libmesh.errorflg',\
50                          '@(cd '+self.packageDir+' && \\\n\
51           '+newdir+' ./configure --prefix='+prefix+' && \\\n\
52           '+newdir+' '+self.make.make_jnp+' ) > ${PETSC_ARCH}/lib/petsc/conf/libmesh.log 2>&1 || \\\n\
53             (echo "**************************ERROR*************************************" && \\\n\
54             echo "Error building libmesh. Check ${PETSC_ARCH}/lib/petsc/conf/libmesh.log" && \\\n\
55             echo "********************************************************************" && \\\n\
56             touch ${PETSC_ARCH}/lib/petsc/conf/libmesh.errorflg && \\\n\
57             exit 1)'])
58    self.addMakeRule('libmeshinstall','', \
59                       ['@echo "*** Installing libmesh ***"',\
60                          '@(cd '+self.packageDir+' && \\\n\
61           '+newuser+newdir+' make install ) >> ${PETSC_ARCH}/lib/petsc/conf/libmesh.log 2>&1 || \\\n\
62             (echo "**************************ERROR*************************************" && \\\n\
63             echo "Error building libmesh. Check ${PETSC_ARCH}/lib/petsc/conf/libmesh.log" && \\\n\
64             echo "********************************************************************" && \\\n\
65             exit 1)'])
66    if self.argDB['prefix']:
67      self.addMakeRule('libmesh-build','')
68      # the build must be done at install time because PETSc shared libraries must be in final location before building libmesh
69      self.addMakeRule('libmesh-install','libmeshbuild libmeshinstall')
70    else:
71      self.addMakeRule('libmesh-build','libmeshbuild libmeshinstall')
72      self.addMakeRule('libmesh-install','')
73
74    return self.installDir
75
76  def alternateConfigureLibrary(self):
77    self.addMakeRule('libmesh-build','')
78    self.addMakeRule('libmesh-install','')
79
80