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