#!/usr/bin/env python #------------------------------------------------------------------------------- # Library modules import #------------------------------------------------------------------------------- import os, re, sys, os.path, shutil #import string import time, getpass # # def main(): # # # install # ------- setup = Setup() class Setup: def __init__(self): # # Init shutil.copy('setup','setup_ini') resume = open('resume', mode='w') startTime = time.asctime() resume.write('Start time: '+startTime+'\n') name = ' '.join(os.uname()) resume.write('Computer name: '+name+'\n') user = getpass.getuser() resume.write('User name: '+user+'\n') self.installFunctions={} self.installFunctions['zlib'] = self.installZLIB self.installFunctions['metis'] = self.installMETIS self.installFunctions['mpi'] = self.installMPI self.installFunctions['cgns'] = self.installCGNS self.installFunctions['hdf'] = self.installHDF self.installFunctions['med'] = self.installMED self.installFunctions['tcltktix']= self.installTCLTKTIX self.installFunctions['python'] = self.installPYTHON self.installFunctions['libxml'] = self.installLIBXML self.installFunctions['bft'] = self.installBFT self.installFunctions['fvm'] = self.installFVM self.installFunctions['ecs'] = self.installECS self.installFunctions['syr_cs'] = self.installSYRCS self.installFunctions['ics'] = self.installICS self.installFunctions['ncs'] = self.installNCS self.installPath = os.path.dirname(os.getcwd()) self.readSetup() self.install = {} for library in self.libraries: self.install[library] = 'nok' for library in self.libraries: apply(self.installFunctions[library]) self.install[library] = 'ok' self.report() self.prepareValid() endTime = time.asctime() resume.write('End time: '+endTime+'\n') resume.write('\n') resume.close() os.system('env > tmp; cat resume tmp > tmp2; mv tmp2 resume; rm tmp') def readSetup(self): # # Init self.path = {} self.name = {} self.usage = [] self.libraries = [] self.listDef = [ 'nom_arch','compC','compF'] self.listLib = ['zlib','metis','mpi','cgns','hdf','med', 'tcltktix','python','libxml','bft','fvm','ecs','syr_cs','syrthes','ics','ncs'] for lib in self.listDef: self.name[lib] = '' for lib in self.listLib: self.path[lib] = '' self.name[lib] = '' # # setup file reading # try: setupFile = file('setup', mode='r') except IOError: print 'Error : opening setup file' sys.exit(1) while 1 : line = setupFile.readline() if (line == '') : break if line[0] == '#' : continue list = line.split() if list[0]=='nom_arch' : try: self.arch = list[1] except: arch = os.uname() self.arch = arch[0] print '\nInstallation of Code_Saturne elements on architecture '+self.arch print '\n\n' elif list[0]=='compC' : self.name[list[0]] = list[1] elif list[0]=='compF' : self.name[list[0]] = list[1] else : try: self.path[list[0]] = list[1] self.name[list[0]] = list[2] if list[3]=='yes' : self.usage.append(list[0]) if list[4]=='yes' : self.libraries.append(list[0]) except: pass def installZLIB(self): nameLib = self.name['zlib'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['zlib']+' on architecture '+self.arch+'\n' if os.path.isdir(srcPath+'.build') : shutil.rmtree(srcPath+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) files = os.listdir(srcPath) for file in files : try: shutil.copytree(srcPath+'/'+file,buildPath+'/'+file) except: shutil.copy(srcPath+'/'+file,buildPath+'/'+file) error = os.system('./configure --prefix='+optPath) if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) self.path['zlib'] = namePath os.chdir(self.installPath+'/Install') def installMETIS(self): nameLib = self.name['metis'] srcPath = self.installPath+'/src/'+nameLib namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch incPath = namePath+'/include' docPath = namePath+'/doc' binPath = optPath+'/bin' libPath = optPath+'/lib' print '\nInstallation of '+self.name['metis']+' on architecture '+self.arch+'\n' os.chdir(srcPath) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) if os.path.isdir(optPath) : shutil.rmtree(optPath) if not os.path.isdir(incPath) : os.makedirs(incPath) files = os.listdir(srcPath+'/Lib') for file in files : if file.find('.h') >= 0 : shutil.copy(srcPath+'/Lib/'+file,incPath+'/'+file) if not os.path.isdir(docPath) : os.makedirs(docPath) files = os.listdir(srcPath+'/Doc') for file in files : try: shutil.copytree(srcPath+'/Doc/'+file,docPath+'/'+file) except: shutil.copy(srcPath+'/Doc/'+file,docPath+'/'+file) if not os.path.isdir(binPath) : os.makedirs(binPath) binFiles = ['graphchk','kmetis','mesh2dual','mesh2nodal','oemetis', 'onmetis','partdmesh','partnmesh','pmetis'] try: for binFile in binFiles : shutil.move(srcPath+'/'+binFile,binPath+'/'+binFile) except: for binFile in binFiles : shutil.copy(srcPath+'/'+binFile,binPath+'/'+binFile) if not os.path.isdir(libPath) : os.makedirs(libPath) libFile = 'libmetis.a' try: shutil.move(srcPath+'/'+libFile,libPath+'/'+libFile) except: shutil.copy(srcPath+'/'+libFile,libPath+'/'+libFile) os.system('make clean') self.path['metis'] = namePath os.chdir(self.installPath+'/Install') def installMPI(self): nameLib = self.name['mpi'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['mpi']+' on architecture '+self.arch+'\n' if os.path.isdir(srcPath+'.build') : shutil.rmtree(srcPath+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) error = os.system(srcPath+'/configure --prefix='+optPath+' CC=\"' +self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['mpi'] = namePath os.chdir(self.installPath+'/Install') def installCGNS(self): nameLib = self.name['cgns'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['cgns']+' on architecture '+self.arch+'\n' if os.path.isdir(srcPath+'.build') : shutil.rmtree(srcPath+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) files = os.listdir(srcPath) for file in files : try: shutil.copytree(srcPath+'/'+file,buildPath+'/'+file) except: shutil.copy(srcPath+'/'+file,buildPath+'/'+file) error = os.system(srcPath+'/configure --prefix='+optPath+' --enable-64bit --enable-lfs CC=\"' +self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) if not os.path.isdir(optPath+'/lib') : os.makedirs(optPath+'/lib') if not os.path.isdir(optPath+'/include') : os.makedirs(optPath+'/include') error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) self.path['cgns'] = namePath os.chdir(self.installPath+'/Install') def installHDF(self): nameLib = self.name['hdf'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['hdf']+' on architecture '+self.arch+'\n' zlibPath = self.path['zlib']+'/arch/'+self.arch withZlib = '' for lib in self.usage : if lib == 'zlib' : withZlib = ' --with-zlib='+zlibPath if os.path.isdir(srcPath+'.build') : shutil.rmtree(srcPath+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) if self.arch == 'IRIX64' : files = os.listdir(srcPath) for file in files : try: shutil.copytree(srcPath+'/'+file,buildPath+'/'+file) except: shutil.copy(srcPath+'/'+file,buildPath+'/'+file) error = os.system(srcPath+'/configure --prefix='+optPath+' --enable-production CC=\"' +self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['hdf'] = namePath os.chdir(self.installPath+'/Install') def installMED(self): nameLib = self.name['med'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['med']+' on architecture '+self.arch+'\n' hdfPath = self.path['hdf']+'/arch/'+self.arch withHdf = '' for lib in self.usage : if lib == 'hdf' : withHdf = ' --with-hdf5='+hdfPath if os.path.isdir(srcPath+'.build') : shutil.rmtree(srcPath+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) files = os.listdir(srcPath) for file in files : try: shutil.copytree(srcPath+'/'+file,buildPath+'/'+file) except: shutil.copy(srcPath+'/'+file,buildPath+'/'+file) error = os.system('./configure --prefix='+optPath+withHdf+ ' --disable-int64 CC=\"'+self.name['compC']+ '\" FC=\"'+self.name['compF']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['med'] = namePath os.chdir(self.installPath+'/Install') def installTCLTKTIX(self): nameLib = self.name['tcltktix'] nameTcl = self.name['tcltktix']+'/tcl8.4.14' nameTk = self.name['tcltktix']+'/tk8.4.0' nameTix = self.name['tcltktix']+'/tix-8.4.14' namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+nameLib+' on architecture '+self.arch+'\n' print '\n Installation of '+nameTcl+' on architecture '+self.arch+'\n' if os.path.isdir(optPath) : shutil.rmtree(optPath) srcPath = self.installPath+'/src/'+nameTcl os.chdir(srcPath) os.system('make distclean') os.system('rm -f config.*') error = os.system(srcPath+'/unix/configure --prefix='+optPath+ ' --enable-gcc --enable-shared') if error != 0 : print "Error during configure of "+nameTcl sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameTcl sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameTcl sys.exit(1) print '\n Installation of '+nameTk+' on architecture '+self.arch+'\n' srcPath = self.installPath+'/src/'+nameTk os.chdir(srcPath) os.system('make distclean') os.system('rm -f config.*') error = os.system(srcPath+'/unix/configure --prefix='+optPath+ ' --with-tcl='+optPath+'/lib'+ ' --enable-gcc --enable-shared') if error != 0 : print "Error during configure of "+nameTk sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameTk sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameTk sys.exit(1) print '\n Installation of '+nameTix+' on architecture '+self.arch+'\n' srcPath = self.installPath+'/src/'+nameTix os.chdir(srcPath+'/unix') os.system('make distclean') os.system('rm -f config.*') error = os.system(srcPath+'/unix/configure --prefix='+optPath+ ' --with-tclconfig='+optPath+'/lib'+ ' --with-tkconfig='+optPath+'/lib'+ ' --with-tclinclude='+optPath+'/include'+ ' --with-tkinclude='+optPath+'/include'+ ' --enable-gcc') if error != 0 : print "Error during configure of "+nameTix sys.exit(1) tkversion = 'tk8.3' os.chdir(srcPath+'/unix/'+tkversion) error = os.system(srcPath+'/unix/'+tkversion+'/configure --prefix='+optPath+ ' --with-tclconfig='+optPath+'/lib'+ ' --with-tkconfig='+optPath+'/lib'+ ' --with-tclinclude='+optPath+'/include'+ ' --with-tkinclude='+optPath+'/include'+ ' --enable-gcc --enable-shared') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) os.chdir(srcPath+'/unix') error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) self.path['tcltktix'] = namePath os.chdir(self.installPath+'/Install') def installPYTHON(self): nameLib = self.name['python'] srcPath = self.installPath+'/src/'+nameLib namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch buildPath = srcPath+'/build' versionPath = srcPath+'/Python-2.4.1' print '\nInstallation of '+self.name['python']+' on architecture '+self.arch+'\n' tcltktixPath = self.path['tcltktix']+'/arch/'+self.arch libtixPath = tcltktixPath+'/lib' if os.path.isdir(buildPath) : shutil.rmtree(buildPath) if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath+'/'+self.arch) os.chdir(srcPath) # adjust tcl tk tix libraries location in Setup.* try: setupFile = file(srcPath+'/Setup.'+self.arch, mode='r') except IOError: print "Error : opening "+srcPath+'/Setup.'+self.arch sys.exit(1) setupTmp = open(srcPath+'/Setup.'+self.arch+'.tmp', mode='w') while 1 : line = setupFile.readline() if (line == '') : break keyword = '/home/saturne/opt/tcl8.3/arch/'+self.arch kw = re.compile(keyword) line = kw.sub(tcltktixPath, line) setupTmp.write(line) setupFile.close() setupTmp.close() os.rename(srcPath+'/Setup.'+self.arch+'.tmp',srcPath+'/Setup.'+self.arch) os.chdir(buildPath+'/'+self.arch) error = os.system(versionPath+'/configure --prefix='+optPath) if error != 0 : print "Error during configure of "+nameLib sys.exit(1) try: os.environ['LD_LIBRARY_PATH'] = libtixPath+':'+os.environ['LD_LIBRARY_PATH'] except: os.environ['LD_LIBRARY_PATH'] = libtixPath shutil.copy(srcPath+'/Setup.'+self.arch,buildPath+'/'+self.arch+'/Modules/Setup') error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['python'] = optPath os.chdir(self.installPath+'/Install') def installLIBXML(self): nameLib = self.name['libxml'] srcPath = self.installPath+'/src/'+nameLib+'/src' buildPath = self.installPath+'/src/'+nameLib+'/build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['libxml']+' on architecture '+self.arch+'\n' if os.path.isdir(self.installPath+'/src/'+nameLib+'/build') : shutil.rmtree(self.installPath+'/src/'+nameLib+'/build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) error = os.system(srcPath+'/configure --prefix='+namePath+ ' --exec-prefix='+optPath+' --srcdir='+srcPath+ ' --with-ftp=no CC=\"'+self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) self.path['libxml'] = namePath os.chdir(self.installPath+'/Install') def installBFT(self): nameLib = self.name['bft'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch print '\nInstallation of '+self.name['bft']+' on architecture '+self.arch+'\n' zlibPath = self.path['zlib']+'/arch/'+self.arch withIncZlib = '' withLibZlib = '' for lib in self.usage : if lib == 'zlib' : withIncZlib = ' CPP_ADD=-I'+zlibPath+'/include' withLibZlib = ' LD_ADD=-L'+zlibPath+'/lib' if os.path.isdir(srcPath+'.build') : shutil.rmtree(srcPath+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) if self.arch == 'IRIX64' : files = os.listdir(srcPath) for file in files : try: shutil.copytree(srcPath+'/'+file,buildPath+'/'+file) except: shutil.copy(srcPath+'/'+file,buildPath+'/'+file) error = os.system(srcPath+'/configure --prefix='+optPath+ ' CC=\"'+self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['bft'] = namePath os.chdir(self.installPath+'/Install') def installFVM(self): nameLib = self.name['fvm'] srcPath = self.installPath+'/src/'+nameLib buildPath = srcPath+'.build/arch/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/arch/'+self.arch bftPath = self.path['bft']+'/arch/'+self.arch mpiPath = self.path['mpi']+'/arch/'+self.arch cgnsPath = self.path['cgns']+'/arch/'+self.arch hdf5Path = self.path['hdf']+'/arch/'+self.arch medPath = self.path['med']+'/arch/'+self.arch print '\nInstallation of '+self.name['fvm']+' on architecture '+self.arch+'\n' withBft = '' withMpi = '' withGgns = '' withHdf5 = '' withMed = '' for lib in self.usage : if lib == 'bft' : withBft = ' --with-bft-prefix='+bftPath if lib == 'mpi' and self.name['compC'] != 'mpicc' : withMpi = ' --with-mpi-prefix='+mpiPath if lib == 'cgns' : withCgns = ' --with-cgns-prefix='+cgnsPath if lib == 'hdf' : withHdf5 = ' --with-hdf5-prefix='+hdf5Path if lib == 'med' : withMed = ' --with-med-prefix='+medPath if os.path.isdir(self.installPath+'/src/'+nameLib+'.build') : shutil.rmtree(self.installPath+'/src/'+nameLib+'.build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) error = os.system(srcPath+'/configure --prefix='+optPath+withBft+withMpi+withCgns+withHdf5+withMed+ ' CC=\"'+self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['fvm'] = namePath os.chdir(self.installPath+'/Install') def installECS(self): nameLib = self.name['ecs'] srcPath = self.installPath+'/Enveloppe/'+nameLib optPath = srcPath+'/arch/'+self.arch print '\nInstallation of '+self.name['ecs']+' on architecture '+self.arch+'\n' bftPath = self.path['bft']+'/arch/'+self.arch cgnsPath = self.path['cgns']+'/arch/'+self.arch hdfPath = self.path['hdf']+'/arch/'+self.arch medPath = self.path['med']+'/arch/'+self.arch metisPath = self.path['metis']+'/arch/'+self.arch mpiPath = self.path['mpi']+'/arch/'+self.arch withBft = '' withCgns = '' withHdf = '' withMed = '' withMetis = '' withMetisExec = '' withMpi = '' for lib in self.usage : if lib == 'bft' : withBft = ' --with-bft-prefix='+bftPath if lib == 'cgns' : withCgns = ' --with-cgns-prefix='+cgnsPath if lib == 'hdf' : withHdf = ' --with-hdf5-prefix='+hdfPath if lib == 'med' : withMed = ' --with-med-prefix='+medPath if lib == 'metis' : withMetis = ' --with-metis-prefix='+self.installPath+'/opt/'+self.name['metis'] withMetisExec = ' --with-metis-exec-prefix='+metisPath if lib == 'mpi' and self.name['compC'] != 'mpicc' : withMpi = ' --with-mpi-prefix='+mpiPath if os.path.isdir(optPath) : shutil.rmtree(optPath) os.chdir(srcPath) error = os.system(srcPath+'/configure --prefix='+optPath+ withBft+withCgns+withHdf+withMed+withMetis+withMetisExec+withMpi+ ' CC=\"'+self.name['compC']+'\"') if error != 0 : print "Error during configure of "+nameLib sys.exit(1) error = os.system('make') if error != 0 : print "Error during make of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.system('make distclean') self.path['ecs'] = srcPath os.chdir(self.installPath+'/Install') def installSYRCS(self): nameLib = self.name['syr_cs'] srcPath = self.installPath+'/src/'+nameLib binPath = srcPath+'/bin' buildPath = srcPath+'/build/'+self.arch namePath = self.installPath+'/opt/'+nameLib optPath = namePath+'/lib/'+self.arch print '\nInstallation of '+self.name['syr_cs']+' on architecture '+self.arch+'\n' mpiPath = self.path['mpi']+'/arch/'+self.arch if os.path.isdir(self.installPath+'/src/'+nameLib+'/build') : shutil.rmtree(self.installPath+'/src/'+nameLib+'/build') if os.path.isdir(optPath) : shutil.rmtree(optPath) os.makedirs(buildPath) os.chdir(buildPath) binFiles = os.listdir(binPath) for binFile in binFiles : if binFile.find('Makefile') >= 0 : os.link(binPath+'/Makefile',buildPath+'/Makefile') # adjust variable DIR_SYR_CS in Makefile try: makeFile = open(buildPath+'/Makefile', mode='r') except IOError: print 'Error : opening '+buildPath+'/Makefile' sys.exit(1) makeTmp = open(buildPath+'/Makefile.tmp', mode='w') while 1 : line = makeFile.readline() if (line == '') : break keyword = 'DIR_SYR_CS' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'='+srcPath+'\n' keyword = '\$\(NOM_ARCH\)' kw = re.compile(keyword) line = kw.sub(self.arch, line) makeTmp.write(line) makeFile.close() makeTmp.close() os.rename(buildPath+'/Makefile.tmp',buildPath+'/Makefile') # adjust Syrthes location and -isystem in macros*.mk try: macrosFile = open(binPath+'/macros_'+self.arch+'.mk', mode='r') except IOError: print 'Error : opening '+binPath+'/macros_'+self.arch+'.mk' sys.exit(1) macrosTmp = open(binPath+'/macros_'+self.arch+'.mk.tmp', mode='w') filetmp = open('tmp.c', mode='w') filetmp.write('main(){\n return 0; \n}\n') filetmp.close() try: os.system('gcc -isystem . tmp.c') test = True except: test = False while 1 : line = macrosFile.readline() if (line == '') : break keyword = 'SYR_HOME' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'='+self.path['syrthes']+'\n' keyword = 'MED_HOME' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'='+self.path['med']+'\n' keyword = 'HDF_HOME' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'='+self.path['hdf']+'\n' keyword = 'MPI_HOME' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'='+mpiPath+'\n' if not test : keyword = 'MPI_INC' kw = re.compile('^[ ]*'+keyword+'.*'+'isystem') lineVar = kw.match(line) if lineVar : line = keyword+'='+'-I$(MPI_HOME)/include \n' keyword = '\$\(NOM_ARCH\)' kw = re.compile(keyword) line = kw.sub(self.arch, line) macrosTmp.write(line) macrosFile.close() macrosTmp.close() os.rename(binPath+'/macros_'+self.arch+'.mk.tmp',binPath+'/macros_'+self.arch+'.mk') os.remove('tmp.c') error = os.system('make lib') if error != 0 : print "Error during make lib of "+nameLib sys.exit(1) error = os.system('make install') if error != 0 : print "Error during make install of "+nameLib sys.exit(1) os.chdir(self.installPath) if not os.path.isdir(namePath) : os.makedirs(namePath) if not os.path.isdir(namePath+'/bin'): os.makedirs(namePath+'/bin') if not os.path.isdir(namePath+'/include'): os.makedirs(namePath+'/include') if not os.path.isdir(namePath+'/lib'): os.makedirs(namePath+'/lib') os.chdir(srcPath) files = os.listdir(srcPath+'/lib') for file in files : try: shutil.copytree(srcPath+'/lib/'+file,namePath+'/lib/'+file) except: shutil.copy(srcPath+'/lib/'+file,namePath+'/lib/'+file) files = os.listdir(srcPath+'/bin') for file in files : try: shutil.copytree(srcPath+'/bin/'+file,namePath+'/bin/'+file) except: shutil.copy(srcPath+'/bin/'+file,namePath+'/bin/'+file) files = os.listdir(srcPath+'/include') for file in files : try: shutil.copytree(srcPath+'/include/'+file,namePath+'/include/'+file) except: shutil.copy(srcPath+'/include/'+file,namePath+'/include/'+file) self.path['syr_cs'] = namePath os.chdir(self.installPath+'/Install') def installICS(self): nameLib = self.name['ics'] srcPath = self.installPath+'/Interface/'+nameLib print '\nInstallation of '+self.name['ics']+' on architecture '+self.arch+'\n' pythonPath = self.path['python'] try: guiFile = file(srcPath+'/ics.py', mode='r') except IOError: print 'Error : opening '+srcPath+'/SaturneGUI' print ' Code_Saturne GUI not available' sys.exit(1) self.path['ics'] = srcPath os.chdir(self.installPath+'/Install') def installNCS(self): nameLib = self.name['ncs'] srcPath = self.installPath+'/Noyau/'+nameLib binPath = srcPath+'/bin' buildPath = srcPath+'/build' print '\nInstallation of '+self.name['ncs']+' on architecture '+self.arch+'\n' compCPath = self.name['compC'] compFPath = self.name['compF'] bftPath = self.path['bft']+'/arch/'+self.arch fvmPath = self.path['fvm']+'/arch/'+self.arch mpiPath = self.path['mpi']+'/arch/'+self.arch libxmlPath = self.path['libxml']+'/arch/'+self.arch tcltktixPath = self.path['tcltktix']+'/arch/'+self.arch pythonPath = self.path['python'] activeMpi = 0 activeXml = 0 for lib in self.usage : if lib == 'mpi' : activeMpi = 1 if lib == 'libxml' : activeXml = 1 os.chdir(binPath) if os.path.isdir(buildPath) : shutil.rmtree(buildPath) # adjust libraries location and -isystem in macros*.mk try: macrosFile = file(binPath+'/macros_'+self.arch+'.mk', mode='r') except IOError: print 'Error : opening '+binPath+'/macros_'+self.arch+'.mk' sys.exit(1) macrosTmp = open(binPath+'/macros_'+self.arch+'.mk.tmp', mode='w') filetmp = open('tmp.c', mode='w') filetmp.write('main(){\n return 0; \n}\n') filetmp.close() try: os.system('gcc -isystem . tmp.c') test = True except: test = False while 1 : line = macrosFile.readline() if (line == '') : break keyword = 'BFT_HOME ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+bftPath+'\n' keyword = 'FVM_HOME ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+fvmPath+'\n' keyword = 'MPI ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+str(activeMpi)+'\n' keyword = 'MPI_HOME ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+mpiPath+'\n' if not test : keyword = 'MPI_INC ' kw = re.compile('^[ ]*'+keyword+'.*'+'isystem') lineVar = kw.match(line) if lineVar : line = keyword+'= '+'-I$(MPI_HOME)/include \n' keyword = 'XML ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+str(activeXml)+'\n' keyword = 'XML_HOME ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+self.path['libxml']+'\n' keyword = 'CCOMP ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+compCPath+' \n' keyword = 'FTNCOMP ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+compFPath+' \n' keyword = 'LDEDL ' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'= '+compFPath+' \n' macrosTmp.write(line) macrosFile.close() macrosTmp.close() os.rename(binPath+'/macros_'+self.arch+'.mk.tmp',binPath+'/macros_'+self.arch+'.mk') # adjust environment variables in cs_profile try: profileFile = file(binPath+'/cs_profile', mode='r') except IOError: print 'Error : opening '+binPath+'/cs_profile' sys.exit(1) profileTmp = file(binPath+'/cs_profile.tmp', mode='w') while 1 : line = profileFile.readline() if (line == '') : break keyword = 'CS_HOME=' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+self.installPath+'/Noyau/'+self.name['ncs']+'\n' os.environ['CS_HOME'] = self.installPath+'/Noyau/'+self.name['ncs'] keyword = 'ECS_HOME=' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+self.installPath+'/Enveloppe/'+self.name['ecs']+'\n' os.environ['ECS_HOME'] = self.installPath+'/Enveloppe/'+self.name['ecs'] keyword = 'CSGUI_HOME=' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+self.installPath+'/Interface/'+self.name['ics']+'\n' os.environ['CSGUI_HOME'] = self.installPath+'/Interface/'+self.name['ics'] keyword = 'SYRCS_HOME=' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+self.installPath+'/opt/'+self.name['syr_cs']+'\n' os.environ['SYRCS_HOME'] = self.installPath+'/opt/'+self.name['syr_cs'] keyword = 'CS_MPI_PATH=' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+mpiPath+'/bin\n' os.environ['CS_MPI_PATH'] = mpiPath keyword = 'LD_LIBRARY_PATH=' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = keyword+'.:'+tcltktixPath+'/lib:'+libxmlPath+'/lib:$LD_LIBRARY_PATH \n' os.environ['LD_LIBRARY_PATH'] = '.:'+tcltktixPath+'/lib:'+libxmlPath+'/lib:$LD_LIBRARY_PATH' profileTmp.write(line) profileFile.close() profileTmp.close() os.rename(binPath+'/cs_profile.tmp',binPath+'/cs_profile') os.system('. ./cs_profile; ecs -h') os.system('. ./cs_profile; ./lance_install') os.system('. ./cs_profile; ./lance_install DOC') self.path['ncs'] = srcPath os.chdir(self.installPath+'/Install') def report(self): # # setup file update # setupFile = file('setup', mode='w') setupFile.write('#--------------------------------------------------------\n') setupFile.write('# Architecture Name\n') setupFile.write('#--------------------------------------------------------\n') setupFile.write('#nom_arch linux_MPICH <- for specific architecture\n') setupFile.write('#nom_arch <- leave empty for automatic default\n') setupFile.write('# value (based on uname)\n') setupFile.write('nom_arch '+self.arch+'\n#\n') setupFile.write('#--------------------------------------------------------\n') setupFile.write('# C compiler \n') setupFile.write('#--------------------------------------------------------\n') lib='compC' setupFile.write(lib+' '+self.name[lib]+"\n#\n") setupFile.write('#--------------------------------------------------------\n') setupFile.write('# Fortran compiler \n') setupFile.write('#--------------------------------------------------------\n') lib='compF' setupFile.write(lib+' '+self.name[lib]+"\n#\n") setupFile.write('#--------------------------------------------------------\n') setupFile.write('# Name Path NameLib Usage Install\n') setupFile.write('#--------------------------------------------------------\n') for lib in self.listLib: use = "no" for lib1 in self.usage: if lib1 == lib: use = "yes" install = "no" if lib in self.libraries : install = "yes" if self.install[lib] == 'ok': install = "no" setupFile.write(lib+' '+self.path[lib]+' '+self.name[lib]+' '+use+' '+install+"\n") setupFile.close() def prepareValid(self): nameLib = self.name['ncs'] srcPath = self.installPath+'/Noyau/'+nameLib binPath = srcPath+'/bin' baseRefPath = self.installPath+'/Validation' baseTestPath = self.installPath+'/test_Validation' if os.path.isdir(baseTestPath) : shutil.rmtree(baseTestPath) os.makedirs(baseTestPath) withMpi = 'no' for lib in self.usage : if lib == 'mpi' : withMpi = 'yes' # # autovalid.xml update # try: autoFile = file(binPath+'/autovalid.xml', mode='r') except IOError: print 'Error : opening '+binPath+'/autovalid.xml' sys.exit(1) autoTmp = file( baseTestPath+'/autovalid.xml.tmp', mode='w') while 1 : line = autoFile.readline() if (line == '') : break keyword = '' kw = re.compile('^[ ]*'+keyword) lineVar = kw.match(line) if lineVar : line = ' '+baseRefPath+'\n' if withMpi : keyword = "