xref: /petsc/config/BuildSystem/config/packages/GLVis.py (revision 7b2fcb5d6efa604aac62606659be4a62fc8a0438)
1import config.package
2
3class Configure(config.package.GNUPackage):
4  def __init__(self, framework):
5    config.package.GNUPackage.__init__(self, framework)
6    self.gitcommit              = 'bca608d856fe8183f9f7bf5e57d493af0b02f616'
7    self.download               = ['git://https://github.com/stefanozampini/glvis.git','https://github.com/stefanozampini/glvis/archive/'+self.gitcommit+'.tar.gz']
8    self.linkedbypetsc          = 0
9    self.downloadonWindows      = 1
10    self.buildLanguages         = ['Cxx']
11    return
12
13  def setupDependencies(self, framework):
14    config.package.Package.setupDependencies(self, framework)
15    self.x11    = framework.require('config.packages.X',self)
16    self.opengl = framework.require('config.packages.OpenGL',self)
17    self.deps   = [self.x11,self.opengl]
18    return
19
20  def updateGitDir(self):
21    import os
22    config.package.GNUPackage.updateGitDir(self)
23    if not hasattr(self.sourceControl, 'git') or (self.packageDir != os.path.join(self.externalPackagesDir,'git.'+self.package)):
24      return
25    Dir = self.getDir()
26    try:
27      mfem = self.mfem
28    except AttributeError:
29      try:
30        self.executeShellCommand([self.sourceControl.git, 'submodule', 'update', '--init'], cwd=Dir, log=self.log)
31        import os
32        if os.path.isfile(os.path.join(Dir,'mfem','README')):
33          self.mfem = os.path.join(Dir,'mfem')
34        else:
35          raise RuntimeError
36      except RuntimeError:
37        raise RuntimeError('Could not initialize mfem submodule needed by GLVis')
38    return
39
40  def Install(self):
41    import os
42
43    with open(os.path.join(self.packageDir,'glvis_config.mk'),'w') as g:
44      g.write('PREFIX = .\n')
45      g.write('INSTALL = /usr/bin/install\n')
46      g.write('AR = '+self.setCompilers.AR+'\n')
47      g.write('MFEM_DIR = ./mfem\n')
48      g.write('GLVIS_OPTS = \n')
49      g.write('GLVIS_LDFLAGS = \n')
50      g.write('GL_OPTS = '+self.headers.toString(self.x11.include)+'\n')
51      g.write('GL_LIBS = '+self.libraries.toString(self.x11.lib)+' '+self.libraries.toString(self.opengl.lib)+'\n')
52      g.write('GLVIS_USE_FREETYPE = NO\n')
53      g.write('GLVIS_USE_LIBTIFF = NO\n')
54      g.write('GLVIS_USE_LIBPNG = NO\n')
55
56      self.pushLanguage('C')
57      g.write('CC = '+self.getCompiler()+'\n')
58      g.write('CFLAGS = ' + self.updatePackageCFlags(self.getCompilerFlags())+'\n')
59      self.popLanguage()
60
61      # build flags for serial MFEM
62      self.pushLanguage('Cxx')
63      mfem_flags='CXX=\"'+self.getCompiler()+'\" CXXFLAGS=\"-O3 '+self.getCompilerFlags()+'\"'
64      self.popLanguage()
65
66      g.write('PETSC_MFEM_FLAGS = '+mfem_flags+'\n')
67      g.close()
68
69    if self.installNeeded('glvis_config.mk'):
70      try:
71        self.logPrintBox('Compiling GLVis; this may take several minutes')
72        output0,err0,ret0 = config.package.Package.executeShellCommand('make clean && '+self.make.make_jnp+' serial '+mfem_flags, cwd=self.packageDir+'/mfem', timeout=2500, log = self.log)
73        output1,err1,ret1 = config.package.Package.executeShellCommand('make clean && '+self.make.make_jnp+' GLVIS_CONFIG_MK=glvis_config.mk', cwd=self.packageDir, timeout=2500, log = self.log)
74        installBinDir = os.path.join(self.installDir,'bin')
75        self.logPrintBox('Installing GLVis; this may take several minutes')
76        output2,err2,ret2 = config.package.Package.executeShellCommandSeq(
77          ['mkdir -p '+installBinDir,
78           'cp -f glvis '+installBinDir+'/.',
79           'chmod 750 '+installBinDir+'/glvis'
80          ], cwd=self.packageDir, timeout=60, log = self.log)
81      except RuntimeError as e:
82        self.logPrint('Error running make on GLVis: '+str(e))
83        raise RuntimeError('Error running make on GLVis')
84      self.postInstall(output0+err0+output1+err1+output2+err2,'glvis_config.mk')
85
86    return self.installDir
87