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