#!/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 = '<referencepath>'
kw = re.compile('^[ ]*'+keyword)
lineVar = kw.match(line)
if lineVar :
line = ' <referencepath>'+baseRefPath+'</referencepath>\n'
if withMpi :
keyword = "<case label='CAS1-2PROCS'"
kw = re.compile('^[ ]*'+keyword)
lineVar = kw.match(line)
if lineVar :
line = "<case label='CAS1-2PROCS' status='on' compute='on'>\n"
autoTmp.write(line)
autoFile.close()
autoTmp.close()
os.rename( baseTestPath+'/autovalid.xml.tmp', baseTestPath+'/autovalid.xml')
print 'It is suggested to test Code_Saturne installation with ./lance_valid.sh'
print 'Thank you for choosing Code_Saturne'
if __name__ == '__main__':
main()
syntax highlighted by Code2HTML, v. 0.9.1