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