Salome HOME
c8f4e4ab97760418ae5f7f755bf8810741846892
[tools/pvdeliv.git] / scripts / BuildSalomeMini.py
1 #! /usr/bin/env python
2
3 import os,sys,shutil,glob
4
5 from salome_misc import AutoChdir
6 from salome_config import read_config_file, initialize, update_config_file
7 from salome_check_version import check_gcc_version
8 from salome_download import extractSrc, download_archives
9 from salome_build_options import *
10 from salome_compile import compileOld, compileVeryOld, compileNew
11 from salome_environ import accumulateEnv, generateFileEnv
12
13 current_directory=os.path.dirname(os.path.abspath(__file__))
14
15 def __init(envAcc={}, paraview_version=None):
16   # Read configuration
17   filename=os.path.join(current_directory, "SalomeMiniConfig.cfg")
18   config=read_config_file(filename)
19   if paraview_version:
20     config["paraview_version"] = paraview_version[0]
21     config["paraview_git_version"] = paraview_version[1]
22     update_config_file(filename, {"paraview_version": paraview_version[0], "paraview_git_version":paraview_version[1]})
23   # Check system prerequisites
24   check_gcc_version(config["gcc_version_min"], envAcc)
25   # Download archives
26   download_archives(current_directory, config)
27   # Manage dependencies
28   initialize(config)
29   return config
30
31 ####################
32 def __patchCMakeLists(topSrcDir,srcDir):
33   realSrcDirSrc=os.path.join(srcDir,'src','Plugins','MEDReader')
34   destReal=os.path.join(topSrcDir,'MEDReader')
35   if os.path.exists(destReal):
36       shutil.rmtree(destReal)
37   shutil.copytree(realSrcDirSrc,destReal)
38   linesToAdd0="""LIST(APPEND CMAKE_MODULE_PATH "${CONFIGURATION_ROOT_DIR}/cmake")
39 """
40   linesToAdd1="""INCLUDE(UseQtExt)
41 """
42   linesToAdd2="""IF (NOT SALOME_GUI_BUILD_WITH_QT5)
43   FIND_PACKAGE(SalomeQt4 REQUIRED COMPONENTS QtCore QtGui QtXml QtHelp)
44 ELSE()
45   FIND_PACKAGE(SalomeQt5 REQUIRED)
46 ENDIF()
47 """
48   #
49   cmakeToPatch=os.path.join(destReal,"CMakeLists.txt")
50   assert(os.path.exists(cmakeToPatch))
51   f=file(cmakeToPatch) ; lines=f.readlines()
52
53   pos0=filter(lambda (x,y): "INCLUDE(SalomeMacros)" in y,enumerate(lines))
54   assert(len(pos0)==1) ; pos0=pos0[0]
55   lines=lines[0:pos0[0]]+[linesToAdd0]+lines[pos0[0]:]
56
57   pos1=filter(lambda (x,y): "INCLUDE(SalomeSetupPlatform)" in y,enumerate(lines))
58   assert(len(pos1)==1) ; pos1=pos1[0]
59   lines=lines[0:pos1[0]+1]+[linesToAdd1]+lines[pos1[0]+1:]
60
61   pos2=filter(lambda (x,y): "FIND_PACKAGE(SalomeMEDFile REQUIRED)" in y,enumerate(lines))
62   assert(len(pos2)==1) ; pos2=pos2[0]
63   lines=lines[0:pos2[0]+1]+[linesToAdd2]+lines[pos2[0]+1:]
64
65   f=file(cmakeToPatch,"w") ; f.writelines(lines)
66   return os.path.abspath(destReal)
67 ####################
68
69 def __let_us_go(paraview_version=None):
70   envAcc={}
71   config=__init(paraview_version=paraview_version)
72
73   # Prepare build
74   rootDir="SalomeMini"
75   if not os.path.exists(rootDir):
76     os.mkdir(rootDir)
77     pass
78   zz=AutoChdir(rootDir)
79
80   topSrcDir="src"
81   topBuildDir="build"
82   topInstallDir="install"
83   for d in [topSrcDir,topBuildDir,topInstallDir]:
84     if not os.path.exists(d):
85       os.mkdir(d)
86
87   # Build softwares
88   #
89   pattern="cmake"
90   srcDir=extractSrc(topSrcDir,pattern,config)
91   installDir=compileOld(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,[],False)
92   accumulateEnv(installDir,pattern,config,envAcc)
93   #
94   pattern="python"
95   srcDir=extractSrc(topSrcDir,pattern,config)
96   installDir=compileOld(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
97                         get_python_build_options(),False)
98   accumulateEnv(installDir,pattern,config,envAcc)
99   #
100   pattern="hdf5"
101   srcDir=extractSrc(topSrcDir,pattern,config)
102   installDir=compileNew(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
103                         get_hdf5_build_options(),False)
104   accumulateEnv(installDir,pattern,config,envAcc)
105   #
106   pattern="swig"
107   srcDir=extractSrc(topSrcDir,pattern,config)
108   installDir=compileVeryOld(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
109                             get_swig_build_options(),False)
110   accumulateEnv(installDir,pattern,config,envAcc)
111   #
112   pattern="qt"
113   srcDir=extractSrc(topSrcDir,pattern,config)
114   installDir=compileVeryOld(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
115                             get_qt_build_options(),False)
116   accumulateEnv(installDir,pattern,config,envAcc)
117   #
118   pattern="med"
119   srcDir=extractSrc(topSrcDir,pattern,config)
120   installDir=compileOld(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
121                         get_med_build_options(envAcc),False)
122   accumulateEnv(installDir,pattern,config,envAcc)
123   #
124   pattern="repoConfig"
125   srcDir=extractSrc(topSrcDir,pattern,config)
126   accumulateEnv(srcDir,pattern,config,envAcc)
127   #
128   pattern="medcoupling"
129   srcDir=extractSrc(topSrcDir,pattern,config)
130   installDir=compileNew(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
131                         get_medcoupling_build_options(envAcc),False)
132   accumulateEnv(installDir,pattern,config,envAcc)
133   #
134   pattern="paraview"
135   srcDir=extractSrc(topSrcDir,pattern,config)
136   installDir=compileNew(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
137                         get_paraview_build_options(envAcc),False)
138   accumulateEnv(installDir,pattern,config,envAcc)
139   #
140   pattern="paravis"# for MEDReader
141   srcDir=extractSrc(topSrcDir,pattern,config)
142   srcDir=__patchCMakeLists(topSrcDir,srcDir)# change Reference for source
143   installDir=compileNew(topSrcDir,pattern,config,envAcc,srcDir,topBuildDir,topInstallDir,
144                         get_paravis_build_options(envAcc,topInstallDir),False)
145   accumulateEnv(installDir,pattern,config,envAcc)
146   #
147
148   # generate env file
149   envFile=os.path.abspath(os.path.join(topInstallDir,"environment.sh"))
150   f=file(envFile,"w")
151   f.write(generateFileEnv(envAcc)) ; f.flush() ; del f
152   print("Env file generated : %s"%envFile)
153   pass
154
155 def __usage(exe):
156   return """
157 Usage: %s [--with-paraview-version=number,sha1]\n
158 Use option --with-paraview-version to build a specific paraview version. Give the
159 version number (e.g. 5.1) and a git sha1.
160 """%(exe)
161
162 ###
163 if __name__ == "__main__":
164   if len(sys.argv) not in [1,2]:
165     print __usage(sys.argv[0])
166     sys.exit(1)
167
168   paraview_version = None
169   if len(sys.argv) == 2:
170     if sys.argv[1].startswith("--with-paraview-version="):
171       try:
172         number,sha1 = sys.argv[1].split("=")[1].split(",")
173         paraview_version = (number.strip(),sha1.strip())
174       except:
175         print "Syntax error in paraview version"
176         print __usage(sys.argv[0])
177         sys.exit(1)
178     else:
179       print __usage(sys.argv[0])
180       sys.exit(1)
181
182   __let_us_go(paraview_version)