/[escript]/branches/amg_from_3530/SConstruct
ViewVC logotype

Annotation of /branches/amg_from_3530/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2930 - (hide annotations)
Mon Feb 8 06:25:43 2010 UTC (9 years, 3 months ago) by caltinay
Original Path: trunk/SConstruct
File size: 39566 byte(s)
escriptconvert can now convert both to Silo and VTK and is thus built by
default

1 ksteube 1811
2     ########################################################
3 jgs 214 #
4 jfenwick 2881 # Copyright (c) 2003-2010 by University of Queensland
5 ksteube 1811 # Earth Systems Science Computational Center (ESSCC)
6     # http://www.uq.edu.au/esscc
7     #
8     # Primary Business: Queensland, Australia
9     # Licensed under the Open Software License version 3.0
10     # http://www.opensource.org/licenses/osl-3.0.php
11     #
12     ########################################################
13 jgs 455
14 ksteube 1811
15 robwdcock 682 EnsureSConsVersion(0,96,91)
16     EnsurePythonVersion(2,3)
17 jgs 214
18 jfenwick 2299 import sys, os, re, socket, platform, stat
19 jfenwick 2604 # For copy()
20     import shutil
21 ksteube 1705
22 robwdcock 682 # Add our extensions
23 ksteube 1705 if os.path.isdir('scons'): sys.path.append('scons')
24 robwdcock 682 import scons_extensions
25 jgs 192
26 ksteube 1705 # Use /usr/lib64 if available, else /usr/lib
27     usr_lib = '/usr/lib'
28     if os.path.isfile('/usr/lib64/libc.so'): usr_lib = '/usr/lib64'
29 gross 1374
30 ksteube 1705 # The string python2.4 or python2.5
31     python_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
32 gross 806
33 ksteube 1705 # MS Windows support, many thanks to PH
34     IS_WINDOWS_PLATFORM = (os.name== "nt")
35 gross 806
36 ksteube 1705 prefix = ARGUMENTS.get('prefix', Dir('#.').abspath)
37 ksteube 1217
38 jfenwick 2603 #Holds names of variables from the calling environment which need to be passed
39     #to tools
40     env_export=[]
41    
42 jfenwick 2391 #Determine where to read options from use:
43     #1. command line
44     #2. scons/<hostname>_options.py
45     #3. name as part of a cluster
46     options_file=ARGUMENTS.get('options_file', None)
47 jfenwick 2603 effective_hostname=socket.gethostname().split('.')[0]
48 jfenwick 2391 if not options_file:
49 jfenwick 2603 mangledhostname = re.sub("[^0-9a-zA-Z]", "_", effective_hostname)
50     options_file = os.path.join("scons",mangledhostname+"_options.py")
51 jfenwick 2391 #If there is no options file with that name see if there is a substitute
52     if not os.path.isfile(options_file):
53 jfenwick 2603 effective_hostname = scons_extensions.effectiveName(effective_hostname)
54     mangledhostname = re.sub("[^0-9a-zA-Z]", "_", effective_hostname)
55     options_file = os.path.join("scons",mangledhostname+"_options.py")
56 jfenwick 2391
57 ksteube 1866 if not os.path.isfile(options_file):
58 jfenwick 2391 print "Options file not found (expected '%s')" % options_file
59 ksteube 1866 options_file = False
60     else:
61     print "Options file is", options_file
62 ksteube 1217
63 jfenwick 2430 #Does our scons support the newer Variables class or do we need to use Options?
64 gross 1149
65 jfenwick 2430 try:
66     dummyvar=Variables
67     opts = Variables(options_file, ARGUMENTS)
68     adder = opts.AddVariables
69     except:
70     opts = Options(options_file, ARGUMENTS)
71     adder = opts.AddOptions
72     BoolVariable = BoolOption
73    
74 ksteube 1705 ############ Load build options ################################
75 ksteube 1312
76 jfenwick 2430 adder(
77     #opts.AddOptions(
78 robwdcock 682 # Where to install esys stuff
79 ksteube 1705 ('prefix', 'where everything will be installed', Dir('#.').abspath),
80     ('incinstall', 'where the esys headers will be installed', os.path.join(Dir('#.').abspath,'include')),
81 ksteube 1756 ('bininstall', 'where the esys binaries will be installed', os.path.join(prefix,'bin')),
82 ksteube 1705 ('libinstall', 'where the esys libraries will be installed', os.path.join(prefix,'lib')),
83     ('pyinstall', 'where the esys python modules will be installed', os.path.join(prefix,'esys')),
84 robwdcock 682 # Compilation options
85 jfenwick 2430 BoolVariable('dodebug', 'For backwards compatibility', 'no'),
86     BoolVariable('usedebug', 'Do you want a debug build?', 'no'),
87     BoolVariable('usevtk', 'Do you want to use VTK?', 'yes'),
88 ksteube 1705 ('options_file', 'File of paths/options. Default: scons/<hostname>_options.py', options_file),
89 caltinay 2882 ('cc', 'path to C compiler', 'DEFAULT'),
90     ('cxx', 'path to C++ compiler', 'DEFAULT'),
91 phornby 1930 ('win_cc_name', 'windows C compiler name if needed', 'msvc'),
92 ksteube 1705 # The strings -DDEFAULT_ get replaced by scons/<hostname>_options.py or by defaults below
93     ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),
94     ('cc_optim', 'C compiler optimization flags to use', '-DEFAULT_2'),
95     ('cc_debug', 'C compiler debug flags to use', '-DEFAULT_3'),
96     ('omp_optim', 'OpenMP compiler flags to use (Release build)', '-DEFAULT_4'),
97     ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),
98     ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),
99     ('cc_extra', 'Extra C/C++ flags', ''),
100 ksteube 1771 ('ld_extra', 'Extra linker flags', ''),
101 ksteube 1705 ('sys_libs', 'System libraries to link with', []),
102     ('ar_flags', 'Static library archiver flags to use', ''),
103 jfenwick 2430 BoolVariable('useopenmp', 'Compile parallel version using OpenMP', 'no'),
104     BoolVariable('usepedantic', 'Compile with -pedantic if using gcc', 'no'),
105     BoolVariable('usewarnings','Compile with warnings as errors if using gcc','yes'),
106 jfenwick 2273 ('forcelazy','for testing use only - set the default value for autolazy','leave_alone'),
107 jfenwick 2721 ('forcecollres','for testing use only - set the default value for force resolving collective ops','leave_alone'),
108 robwdcock 682 # Python
109 ksteube 1705 ('python_path', 'Path to Python includes', '/usr/include/'+python_version),
110     ('python_lib_path', 'Path to Python libs', usr_lib),
111     ('python_libs', 'Python libraries to link with', [python_version]),
112 phornby 1243 ('python_cmd', 'Python command', 'python'),
113 robwdcock 682 # Boost
114 ksteube 1705 ('boost_path', 'Path to Boost includes', '/usr/include'),
115     ('boost_lib_path', 'Path to Boost libs', usr_lib),
116     ('boost_libs', 'Boost libraries to link with', ['boost_python']),
117     # NetCDF
118 jfenwick 2430 BoolVariable('usenetcdf', 'switch on/off the usage of netCDF', 'yes'),
119 ksteube 1705 ('netCDF_path', 'Path to netCDF includes', '/usr/include'),
120     ('netCDF_lib_path', 'Path to netCDF libs', usr_lib),
121     ('netCDF_libs', 'netCDF C++ libraries to link with', ['netcdf_c++', 'netcdf']),
122 bcumming 759 # MPI
123 jfenwick 2430 BoolVariable('useMPI', 'For backwards compatibility', 'no'),
124     BoolVariable('usempi', 'Compile parallel version using MPI', 'no'),
125 ksteube 1312 ('MPICH_IGNORE_CXX_SEEK', 'name of macro to ignore MPI settings of C++ SEEK macro (for MPICH)' , 'MPICH_IGNORE_CXX_SEEK'),
126 ksteube 1705 ('mpi_path', 'Path to MPI includes', '/usr/include'),
127     ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),
128     ('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib),
129 jfenwick 2729 ('mpi_libs', 'MPI libraries to link with (needs to be shared!)', []),
130 jfenwick 2338 ('mpi_flavour','Type of MPI execution environment','none'),
131 ksteube 1705 # ParMETIS
132 jfenwick 2430 BoolVariable('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),
133 ksteube 1705 ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),
134     ('parmetis_lib_path', 'Path to ParMETIS library', usr_lib),
135     ('parmetis_libs', 'ParMETIS library to link with', ['parmetis', 'metis']),
136     # PAPI
137 jfenwick 2430 BoolVariable('usepapi', 'switch on/off the usage of PAPI', 'no'),
138 ksteube 1705 ('papi_path', 'Path to PAPI includes', '/usr/include'),
139     ('papi_lib_path', 'Path to PAPI libs', usr_lib),
140     ('papi_libs', 'PAPI libraries to link with', ['papi']),
141 jfenwick 2430 BoolVariable('papi_instrument_solver', 'use PAPI in Solver.c to instrument each iteration of the solver', False),
142 ksteube 1705 # MKL
143 jfenwick 2430 BoolVariable('usemkl', 'switch on/off the usage of MKL', 'no'),
144 ksteube 1705 ('mkl_path', 'Path to MKL includes', '/sw/sdev/cmkl/10.0.2.18/include'),
145     ('mkl_lib_path', 'Path to MKL libs', '/sw/sdev/cmkl/10.0.2.18/lib/em64t'),
146     ('mkl_libs', 'MKL libraries to link with', ['mkl_solver', 'mkl_em64t', 'guide', 'pthread']),
147     # UMFPACK
148 jfenwick 2430 BoolVariable('useumfpack', 'switch on/off the usage of UMFPACK', 'no'),
149 ksteube 1705 ('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'),
150     ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),
151     ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),
152     ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),
153 caltinay 2184 # Silo
154 jfenwick 2430 BoolVariable('usesilo', 'switch on/off the usage of Silo', 'yes'),
155 caltinay 2184 ('silo_path', 'Path to Silo includes', '/usr/include'),
156     ('silo_lib_path', 'Path to Silo libs', usr_lib),
157     ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
158 ksteube 1705 # AMD (used by UMFPACK)
159     ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),
160     ('amd_lib_path', 'Path to AMD libs', usr_lib),
161     ('amd_libs', 'AMD libraries to link with', ['amd']),
162     # BLAS (used by UMFPACK)
163     ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),
164     ('blas_lib_path', 'Path to BLAS libs', usr_lib),
165 phornby 2012 ('blas_libs', 'BLAS libraries to link with', ['blas']),
166 jfenwick 2742 #Lapack options
167     BoolVariable('uselapack','switch on/off use of Lapack','no'),
168     ('lapack_path', 'Path to Lapack includes','/usr/include'),
169     ('lapack_lib_path', 'Path to Lapack libs', usr_lib),
170     ('lapack_libs', 'Lapack libraries to link with', []),
171     ('lapack_type', '{clapack,mkl}','clapack'),
172 phornby 2012 # An option for specifying the compiler tools set (see windows branch).
173 phornby 2054 ('tools_names', 'allow control over the tools in the env setup', ['intelc']),
174     # finer control over library building, intel aggressive global optimisation
175     # works with dynamic libraries on windows.
176     ('share_esysUtils', 'control static or dynamic esysUtils lib', False),
177 jfenwick 2603 ('share_paso', 'control static or dynamic paso lib', False),
178 jfenwick 2827 ('env_export','Environment variables to be passed to children',[]),
179     #To enable passing function pointers through python
180     BoolVariable('iknowwhatimdoing','allow nonstandard C',False)
181 robwdcock 682 )
182 phornby 1232
183 jfenwick 2604
184    
185 ksteube 1705 ############ Specify which compilers to use ####################
186    
187     # intelc uses regular expressions improperly and emits a warning about
188     # failing to find the compilers. This warning can be safely ignored.
189    
190 gross 1133 if IS_WINDOWS_PLATFORM:
191 phornby 2012 env = Environment(options = opts)
192     env = Environment(tools = ['default'] + env['tools_names'],
193     options = opts)
194 robwdcock 682 else:
195 jfenwick 2603 if effective_hostname == 'service0':
196 gross 1133 env = Environment(tools = ['default', 'intelc'], options = opts)
197 ksteube 1559 elif os.uname()[4]=='ia64':
198     env = Environment(tools = ['default', 'intelc'], options = opts)
199 gross 1133 if env['CXX'] == 'icpc':
200 ksteube 1705 env['LINK'] = env['CXX'] # version >=9 of intel c++ compiler requires use of icpc to link in C++ runtimes (icc does not)
201 gross 1133 else:
202     env = Environment(tools = ['default'], options = opts)
203 caltinay 2882
204     # Override compiler choice if provided
205     if env['cc'] != 'DEFAULT': env['CC']=env['cc']
206     if env['cxx'] != 'DEFAULT': env['CXX']=env['cxx']
207    
208 gross 1133 Help(opts.GenerateHelpText(env))
209 phornby 1232
210 jfenwick 2604 ############ Make sure target directories exist ################
211    
212     if not os.path.isdir(env['bininstall']):
213     os.makedirs(env['bininstall'])
214     if not os.path.isdir(env['libinstall']):
215     os.makedirs(env['libinstall'])
216     if not os.path.isdir(env['pyinstall']):
217     os.makedirs(env['pyinstall'])
218    
219 jfenwick 2603 ########## Copy required environment vars ######################
220    
221     for i in env['env_export']:
222     env.Append(ENV = {i:os.environ[i]})
223    
224 ksteube 1705 ############ Fill in compiler options if not set above #########
225 ksteube 1312
226 ksteube 1705 # Backwards compatibility: allow dodebug=yes and useMPI=yes
227     if env['dodebug']: env['usedebug'] = 1
228     if env['useMPI']: env['usempi'] = 1
229 gross 1024
230 ksteube 1705 # Default compiler options (override allowed in hostname_options.py, but should not be necessary)
231     # For both C and C++ you get: cc_flags and either the optim flags or debug flags
232 phornby 1243
233 jfenwick 2130 sysheaderopt = "" # how do we indicate that a header is a system header. Use "" for no action.
234    
235 caltinay 2882 cc_flags = ""
236     cc_optim = ""
237     cc_debug = ""
238     omp_optim = ""
239     omp_debug = ""
240     omp_libs = []
241    
242 ksteube 1705 if env["CC"] == "icc":
243     # Intel compilers
244 jfenwick 2884 cc_flags = "-std=c99 -fPIC -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"
245 ksteube 1705 cc_optim = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"
246 jfenwick 1796 cc_debug = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
247 ksteube 1705 omp_optim = "-openmp -openmp_report0"
248     omp_debug = "-openmp -openmp_report0"
249     omp_libs = ['guide', 'pthread']
250     pedantic = ""
251 jfenwick 2026 fatalwarning = "" # Switch to turn warnings into errors
252 jfenwick 2130 sysheaderopt = ""
253 caltinay 2882 elif env["CC"][:3] == "gcc":
254 ksteube 1705 # GNU C on any system
255 jfenwick 2884 cc_flags = "-pedantic -Wall -fPIC -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing"
256 jfenwick 2063 #the long long warning occurs on the Mac
257 ksteube 1705 cc_optim = "-O3"
258 jfenwick 1796 cc_debug = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
259 gross 2300 omp_optim = "-fopenmp"
260     omp_debug = "-fopenmp"
261 jfenwick 2729 omp_libs = []
262 ksteube 1705 pedantic = "-pedantic-errors -Wno-long-long"
263 jfenwick 2026 fatalwarning = "-Werror"
264 jfenwick 2130 sysheaderopt = "-isystem "
265 ksteube 1705 elif env["CC"] == "cl":
266     # Microsoft Visual C on Windows
267     cc_flags = "/FD /EHsc /GR /wd4068 -D_USE_MATH_DEFINES -DDLL_NETCDF"
268     cc_optim = "/O2 /Op /MT /W3"
269     cc_debug = "/Od /RTC1 /MTd /ZI -DBOUNDS_CHECK"
270     omp_optim = ""
271     omp_debug = ""
272     omp_libs = []
273     pedantic = ""
274 jfenwick 2026 fatalwarning = ""
275 jfenwick 2130 sysheaderopt = ""
276 phornby 1930 elif env["CC"] == "icl":
277 phornby 2027 # intel C on Windows, see windows_intelc_options.py for a start
278 phornby 1930 pedantic = ""
279 jfenwick 2026 fatalwarning = ""
280 jfenwick 2130 sysheaderopt = ""
281 phornby 1243
282 jfenwick 2130
283 ksteube 1705 # If not specified in hostname_options.py then set them here
284     if env["cc_flags"] == "-DEFAULT_1": env['cc_flags'] = cc_flags
285     if env["cc_optim"] == "-DEFAULT_2": env['cc_optim'] = cc_optim
286     if env["cc_debug"] == "-DEFAULT_3": env['cc_debug'] = cc_debug
287     if env["omp_optim"] == "-DEFAULT_4": env['omp_optim'] = omp_optim
288     if env["omp_debug"] == "-DEFAULT_5": env['omp_debug'] = omp_debug
289     if env["omp_libs"] == "-DEFAULT_6": env['omp_libs'] = omp_libs
290 ksteube 1312
291 jfenwick 2273 #set up the autolazy values
292     if env['forcelazy'] != "leave_alone":
293     if env['forcelazy'] == 'on':
294 jfenwick 2721 env.Append(CPPDEFINES=['FAUTOLAZYON'])
295 jfenwick 2273 else:
296     if env['forcelazy'] == 'off':
297 jfenwick 2721 env.Append(CPPDEFINES=['FAUTOLAZYOFF'])
298 jfenwick 2273
299 jfenwick 2721 #set up the colective resolve values
300     if env['forcecollres'] != "leave_alone":
301     print env['forcecollres']
302     if env['forcecollres'] == 'on':
303     env.Append(CPPDEFINES=['FRESCOLLECTON'])
304     else:
305     if env['forcecollres'] == 'off':
306     env.Append(CPPDEFINES=['FRESCOLLECTOFF'])
307    
308    
309 jfenwick 2827 if env['iknowwhatimdoing']:
310     env.Append(CPPDEFINES=['IKNOWWHATIMDOING'])
311    
312 ksteube 1705 # OpenMP is disabled if useopenmp=no or both variables omp_optim and omp_debug are empty
313     if not env["useopenmp"]:
314     env['omp_optim'] = ""
315     env['omp_debug'] = ""
316     env['omp_libs'] = []
317 gross 1160
318 ksteube 1705 if env['omp_optim'] == "" and env['omp_debug'] == "": env["useopenmp"] = 0
319 ksteube 1312
320 gross 2423 # Windows doesn't use LD_LIBRARY_PATH but PATH instead
321     if IS_WINDOWS_PLATFORM:
322     LD_LIBRARY_PATH_KEY='PATH'
323     env['ENV']['LD_LIBRARY_PATH']=''
324     else:
325     LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'
326 ksteube 1705 ############ Copy environment variables into scons env #########
327 gross 1163
328 ksteube 1705 try: env['ENV']['OMP_NUM_THREADS'] = os.environ['OMP_NUM_THREADS']
329     except KeyError: env['ENV']['OMP_NUM_THREADS'] = 1
330 phornby 1243
331 gross 2363 try: env['ENV']['ESCRIPT_NUM_THREADS'] = os.environ['ESCRIPT_NUM_THREADS']
332     except KeyError: pass
333    
334     try: env['ENV']['ESCRIPT_NUM_PROCS'] = os.environ['ESCRIPT_NUM_PROCS']
335 gross 2416 except KeyError: env['ENV']['ESCRIPT_NUM_PROCS']=1
336 gross 2363
337     try: env['ENV']['ESCRIPT_NUM_NODES'] = os.environ['ESCRIPT_NUM_NODES']
338 gross 2416 except KeyError: env['ENV']['ESCRIPT_NUM_NODES']=1
339 gross 2363
340     try: env['ENV']['ESCRIPT_HOSTFILE'] = os.environ['ESCRIPT_HOSTFILE']
341     except KeyError: pass
342    
343 ksteube 1705 try: env['ENV']['PATH'] = os.environ['PATH']
344     except KeyError: pass
345 robwdcock 682
346 ksteube 1705 try: env['ENV']['PYTHONPATH'] = os.environ['PYTHONPATH']
347     except KeyError: pass
348 phornby 1244
349 ksteube 1705 try: env['ENV']['C_INCLUDE_PATH'] = os.environ['C_INCLUDE_PATH']
350     except KeyError: pass
351 robwdcock 682
352 ksteube 1705 try: env['ENV']['CPLUS_INCLUDE_PATH'] = os.environ['CPLUS_INCLUDE_PATH']
353     except KeyError: pass
354 robwdcock 682
355 gross 2424 try: env.PrependENVPath(LD_LIBRARY_PATH_KEY,os.environ['LD_LIBRARY_PATH'])
356 ksteube 1705 except KeyError: pass
357 ksteube 1312
358 ksteube 1705 try: env['ENV']['LIBRARY_PATH'] = os.environ['LIBRARY_PATH']
359     except KeyError: pass
360 ksteube 1312
361 ksteube 1705 try: env['ENV']['DISPLAY'] = os.environ['DISPLAY']
362     except KeyError: pass
363 ksteube 1312
364 ksteube 1705 try: env['ENV']['XAUTHORITY'] = os.environ['XAUTHORITY']
365     except KeyError: pass
366 ksteube 1312
367 ksteube 1705 try: env['ENV']['HOME'] = os.environ['HOME']
368     except KeyError: pass
369 ksteube 1312
370 ksteube 1705 # Configure for test suite
371 gross 2423
372    
373     env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
374 ksteube 1705 env.PrependENVPath('PYTHONPATH', prefix)
375 ksteube 1756 env['ENV']['ESCRIPT_ROOT'] = prefix
376    
377 ksteube 1705 ############ Set up paths for Configure() ######################
378 ksteube 817
379 ksteube 1705 # Make a copy of an environment
380     # Use env.Clone if available, but fall back on env.Copy for older version of scons
381     def clone_env(env):
382     if 'Clone' in dir(env): return env.Clone() # scons-0.98
383     else: return env.Copy() # scons-0.96
384 phornby 1246
385 ksteube 1705 # Add cc option -I<Escript>/trunk/include
386     env.Append(CPPPATH = [Dir('include')])
387 phornby 1634
388 ksteube 1705 # Add cc option -L<Escript>/trunk/lib
389 ksteube 1729 env.Append(LIBPATH = [Dir(env['libinstall'])])
390 ksteube 1705
391     if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])
392 ksteube 1771 if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
393 ksteube 1705
394     if env['usepedantic']: env.Append(CCFLAGS = pedantic)
395    
396     # MS Windows
397     if IS_WINDOWS_PLATFORM:
398 jfenwick 2334 env.AppendENVPath('PATH', [env['boost_lib_path']])
399     env.AppendENVPath('PATH', [env['libinstall']])
400 phornby 2054 if not env['share_esysUtils'] :
401     env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
402     if not env['share_paso'] :
403     env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
404 phornby 2040
405 ksteube 1705 if env['usenetcdf']:
406 jfenwick 2334 env.AppendENVPath('PATH', [env['netCDF_lib_path']])
407 ksteube 1705
408     env.Append(ARFLAGS = env['ar_flags'])
409    
410     # Get the global Subversion revision number for getVersion() method
411 robwdcock 682 try:
412 ksteube 1705 global_revision = os.popen("svnversion -n .").read()
413     global_revision = re.sub(":.*", "", global_revision)
414     global_revision = re.sub("[^0-9]", "", global_revision)
415 ksteube 1312 except:
416 ksteube 1705 global_revision="-1"
417     if global_revision == "": global_revision="-2"
418     env.Append(CPPDEFINES = ["SVN_VERSION="+global_revision])
419 phornby 1634
420 jfenwick 2455 ############ numpy (required) ###############################
421 robwdcock 682
422 ksteube 1705 try:
423 jfenwick 2455 from numpy import identity
424 ksteube 1705 except ImportError:
425 jfenwick 2455 print "Cannot import numpy, you need to set your PYTHONPATH"
426 ksteube 1705 sys.exit(1)
427 ksteube 1348
428 ksteube 1705 ############ C compiler (required) #############################
429 gross 700
430 ksteube 1705 # Create a Configure() environment for checking existence of required libraries and headers
431     conf = Configure(clone_env(env))
432 gross 700
433 ksteube 1705 # Test that the compiler is working
434     if not conf.CheckFunc('printf'):
435 gross 2284 print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])
436     sys.exit(1)
437 gross 806
438 phornby 1789 if conf.CheckFunc('gethostname'):
439     conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])
440 gross 806
441 ksteube 1705 ############ python libraries (required) #######################
442 gross 806
443 jfenwick 2130
444     if not sysheaderopt =="":
445     conf.env.Append(CCFLAGS=sysheaderopt+env['python_path'])
446     else:
447     conf.env.AppendUnique(CPPPATH = [env['python_path']])
448    
449 ksteube 1705 conf.env.AppendUnique(LIBPATH = [env['python_lib_path']])
450     conf.env.AppendUnique(LIBS = [env['python_libs']])
451 gross 805
452 jfenwick 2296 conf.env.PrependENVPath('PYTHONPATH', prefix)
453 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['python_lib_path']) # The wrapper script needs to find these libs
454     conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
455 ksteube 1785
456 ksteube 1705 if not conf.CheckCHeader('Python.h'):
457     print "Cannot find python include files (tried 'Python.h' in directory %s)" % (env['python_path'])
458     sys.exit(1)
459 gross 2284 if not conf.CheckFunc('Py_Exit'):
460 ksteube 1705 print "Cannot find python library method Py_Main (tried lib %s in directory %s)" % (env['python_libs'], env['python_lib_path'])
461     sys.exit(1)
462 gross 805
463 ksteube 1705 ############ boost (required) ##################################
464 gross 805
465 jfenwick 2130 if not sysheaderopt =="":
466 jfenwick 2295 # This is required because we can't -isystem /usr/system because it breaks std includes
467     if os.path.normpath(env['boost_path']) =="/usr/include":
468     conf.env.Append(CCFLAGS=sysheaderopt+os.path.join(env['boost_path'],'boost'))
469     else:
470     conf.env.Append(CCFLAGS=sysheaderopt+env['boost_path'])
471 jfenwick 2130 else:
472     conf.env.AppendUnique(CPPPATH = [env['boost_path']])
473    
474 ksteube 1705 conf.env.AppendUnique(LIBPATH = [env['boost_lib_path']])
475     conf.env.AppendUnique(LIBS = [env['boost_libs']])
476 ksteube 1312
477 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['boost_lib_path']) # The wrapper script needs to find these libs
478 jfenwick 2296 #ensure that our path entries remain at the front
479     conf.env.PrependENVPath('PYTHONPATH', prefix)
480 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
481 ksteube 1785
482 gross 2284
483 trankine 2924 #Yep we still cant figure this one out. - working on it.
484     if not IS_WINDOWS_PLATFORM:
485     if not conf.CheckCXXHeader('boost/python.hpp'):
486     print "Cannot find boost include files (tried boost/python.hpp in directory %s)" % (env['boost_path'])
487     sys.exit(1)
488 ksteube 1312
489 trankine 2924 if not conf.CheckFunc('PyObject_SetAttr'):
490     print "Cannot find boost library method PyObject_SetAttr (tried method PyObject_SetAttr in library %s in directory %s)" % (env['boost_libs'], env['boost_lib_path'])
491     sys.exit(1)
492    
493    
494 ksteube 1705 # Commit changes to environment
495     env = conf.Finish()
496 ksteube 1312
497 ksteube 1705 ############ VTK (optional) ####################################
498 ksteube 1312
499 ksteube 1705 if env['usevtk']:
500     try:
501     import vtk
502     env['usevtk'] = 1
503     except ImportError:
504     env['usevtk'] = 0
505 gross 806
506 ksteube 1705 # Add VTK to environment env if it was found
507     if env['usevtk']:
508     env.Append(CPPDEFINES = ['USE_VTK'])
509 gross 805
510 ksteube 1705 ############ NetCDF (optional) #################################
511 gross 805
512 ksteube 1705 conf = Configure(clone_env(env))
513 gross 806
514 ksteube 1705 if env['usenetcdf']:
515     conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])
516     conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])
517     conf.env.AppendUnique(LIBS = [env['netCDF_libs']])
518 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['netCDF_lib_path']) # The wrapper script needs to find these libs
519 jfenwick 2296 #ensure that our path entries remain at the front
520     conf.env.PrependENVPath('PYTHONPATH', prefix)
521 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
522 gross 806
523 ksteube 1705 if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0
524     if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0
525 ksteube 1312
526 ksteube 1705 # Add NetCDF to environment env if it was found
527     if env['usenetcdf']:
528     env = conf.Finish()
529     env.Append(CPPDEFINES = ['USE_NETCDF'])
530     else:
531     conf.Finish()
532 ksteube 1312
533 ksteube 1705 ############ PAPI (optional) ###################################
534    
535     # Start a new configure environment that reflects what we've already found
536     conf = Configure(clone_env(env))
537    
538     if env['usepapi']:
539     conf.env.AppendUnique(CPPPATH = [env['papi_path']])
540     conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])
541     conf.env.AppendUnique(LIBS = [env['papi_libs']])
542 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['papi_lib_path']) # The wrapper script needs to find these libs
543 jfenwick 2296 #ensure that our path entries remain at the front
544     conf.env.PrependENVPath('PYTHONPATH', prefix)
545 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
546 ksteube 1705
547     if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0
548     if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0
549    
550     # Add PAPI to environment env if it was found
551     if env['usepapi']:
552     env = conf.Finish()
553     env.Append(CPPDEFINES = ['BLOCKPAPI'])
554 ksteube 1312 else:
555 ksteube 1705 conf.Finish()
556 ksteube 1312
557 ksteube 1705 ############ MKL (optional) ####################################
558 gross 806
559 ksteube 1705 # Start a new configure environment that reflects what we've already found
560     conf = Configure(clone_env(env))
561 gross 806
562 ksteube 1705 if env['usemkl']:
563     conf.env.AppendUnique(CPPPATH = [env['mkl_path']])
564     conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])
565     conf.env.AppendUnique(LIBS = [env['mkl_libs']])
566 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['mkl_lib_path']) # The wrapper script needs to find these libs
567 jfenwick 2296 #ensure that our path entries remain at the front
568     conf.env.PrependENVPath('PYTHONPATH', prefix)
569 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
570 gross 805
571 ksteube 1705 if env['usemkl'] and not conf.CheckCHeader('mkl_solver.h'): env['usemkl'] = 0
572 gross 2358 if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0
573 phornby 1246
574 jfenwick 2787
575 ksteube 1705 # Add MKL to environment env if it was found
576     if env['usemkl']:
577     env = conf.Finish()
578     env.Append(CPPDEFINES = ['MKL'])
579     else:
580     conf.Finish()
581 gross 950
582 ksteube 1705 ############ UMFPACK (optional) ################################
583    
584     # Start a new configure environment that reflects what we've already found
585     conf = Configure(clone_env(env))
586    
587     if env['useumfpack']:
588     conf.env.AppendUnique(CPPPATH = [env['ufc_path']])
589     conf.env.AppendUnique(CPPPATH = [env['umf_path']])
590     conf.env.AppendUnique(LIBPATH = [env['umf_lib_path']])
591     conf.env.AppendUnique(LIBS = [env['umf_libs']])
592     conf.env.AppendUnique(CPPPATH = [env['amd_path']])
593     conf.env.AppendUnique(LIBPATH = [env['amd_lib_path']])
594     conf.env.AppendUnique(LIBS = [env['amd_libs']])
595     conf.env.AppendUnique(CPPPATH = [env['blas_path']])
596     conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])
597     conf.env.AppendUnique(LIBS = [env['blas_libs']])
598 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['umf_lib_path']) # The wrapper script needs to find these libs
599     conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['amd_lib_path']) # The wrapper script needs to find these libs
600     conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['blas_lib_path']) # The wrapper script needs to find these libs
601 jfenwick 2296 #ensure that our path entries remain at the front
602     conf.env.PrependENVPath('PYTHONPATH', prefix)
603 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
604 ksteube 1705
605 gross 2474 if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0
606 gross 2284 if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0
607     # if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?
608 ksteube 1705
609     # Add UMFPACK to environment env if it was found
610     if env['useumfpack']:
611     env = conf.Finish()
612     env.Append(CPPDEFINES = ['UMFPACK'])
613 gross 1023 else:
614 ksteube 1705 conf.Finish()
615 gross 1023
616 caltinay 2184 ############ Silo (optional) ###################################
617    
618     if env['usesilo']:
619     conf = Configure(clone_env(env))
620     conf.env.AppendUnique(CPPPATH = [env['silo_path']])
621     conf.env.AppendUnique(LIBPATH = [env['silo_lib_path']])
622     conf.env.AppendUnique(LIBS = [env['silo_libs']])
623     if not conf.CheckCHeader('silo.h'): env['usesilo'] = 0
624     if not conf.CheckFunc('DBMkDir'): env['usesilo'] = 0
625     conf.Finish()
626    
627     # Add the path to Silo to environment env if it was found.
628     # Note that we do not add the libs since they are only needed for the
629 caltinay 2810 # escriptexport library and tools.
630 caltinay 2184 if env['usesilo']:
631     env.AppendUnique(CPPPATH = [env['silo_path']])
632     env.AppendUnique(LIBPATH = [env['silo_lib_path']])
633    
634 jfenwick 2742 ########### Lapack (optional) ##################################
635    
636     if env['uselapack']:
637     env.AppendUnique(CPPDEFINES='USE_LAPACK')
638     env.AppendUnique(CPPPATH = [env['lapack_path']])
639     env.AppendUnique(LIBPATH =[env['lapack_lib_path']])
640    
641     env.Append(LIBPATH = '/usr/lib/atlas')
642     env.Append(LIBS = [env['lapack_libs']])
643     if env['lapack_type']=='mkl':
644 jfenwick 2787 if not env['usemkl']:
645     env['uselapack']=0
646     print "mkl_lapack requires mkl"
647     else:
648     env.AppendUnique(CPPDEFINES='MKL_LAPACK')
649    
650 jfenwick 2742
651 ksteube 1705 ############ Add the compiler flags ############################
652 ksteube 1459
653 ksteube 1705 # Enable debug by choosing either cc_debug or cc_optim
654     if env['usedebug']:
655     env.Append(CCFLAGS = env['cc_debug'])
656     env.Append(CCFLAGS = env['omp_debug'])
657     else:
658     env.Append(CCFLAGS = env['cc_optim'])
659     env.Append(CCFLAGS = env['omp_optim'])
660 robwdcock 682
661 ksteube 1705 # Always use cc_flags
662     env.Append(CCFLAGS = env['cc_flags'])
663     env.Append(LIBS = [env['omp_libs']])
664 gross 707
665 jfenwick 2232 ############ Add some custom builders ##########################
666    
667     py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
668     env.Append(BUILDERS = {'PyCompile' : py_builder});
669    
670     runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
671     env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
672    
673     runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
674     env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
675    
676 jfenwick 2387 epstopdfbuilder = Builder(action = scons_extensions.eps2pdf, suffix=".pdf", src_suffix=".eps", single_source=True)
677     env.Append(BUILDERS = {'EpsToPDF' : epstopdfbuilder});
678    
679 ksteube 1705 ############ MPI (optional) ####################################
680 gross 2364 if not env['usempi']: env['mpi_flavour']='none'
681 ksteube 1705
682     # Create a modified environment for MPI programs (identical to env if usempi=no)
683     env_mpi = clone_env(env)
684    
685     # Start a new configure environment that reflects what we've already found
686     conf = Configure(clone_env(env_mpi))
687    
688     if env_mpi['usempi']:
689 gross 2366 VALID_MPIs=[ "MPT", "MPICH", "MPICH2", "OPENMPI", "INTELMPI" ]
690 gross 2356 if not env_mpi['mpi_flavour'] in VALID_MPIs:
691 gross 2358 raise ValueError,"MPI is enabled but mpi_flavour = %s is not a valid key from %s."%( env_mpi['mpi_flavour'],VALID_MPIs)
692 ksteube 1705 conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])
693     conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])
694     conf.env.AppendUnique(LIBS = [env_mpi['mpi_libs']])
695 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['mpi_lib_path']) # The wrapper script needs to find these libs
696 jfenwick 2296 #ensure that our path entries remain at the front
697     conf.env.PrependENVPath('PYTHONPATH', prefix)
698 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
699 ksteube 1705
700     if env_mpi['usempi'] and not conf.CheckCHeader('mpi.h'): env_mpi['usempi'] = 0
701 gross 2308 # if env_mpi['usempi'] and not conf.CheckFunc('MPI_Init'): env_mpi['usempi'] = 0
702 ksteube 1705
703     # Add MPI to environment env_mpi if it was found
704     if env_mpi['usempi']:
705     env_mpi = conf.Finish()
706     env_mpi.Append(CPPDEFINES = ['PASO_MPI', 'MPI_NO_CPPBIND', env_mpi['MPICH_IGNORE_CXX_SEEK']])
707 ksteube 1312 else:
708 ksteube 1705 conf.Finish()
709 ksteube 1312
710 ksteube 1705 env['usempi'] = env_mpi['usempi']
711 ksteube 1312
712 ksteube 1705 ############ ParMETIS (optional) ###############################
713 gross 700
714 ksteube 1705 # Start a new configure environment that reflects what we've already found
715     conf = Configure(clone_env(env_mpi))
716 gross 700
717 ksteube 1705 if not env_mpi['usempi']: env_mpi['useparmetis'] = 0
718 gross 700
719 ksteube 1705 if env_mpi['useparmetis']:
720     conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])
721     conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])
722     conf.env.AppendUnique(LIBS = [env_mpi['parmetis_libs']])
723 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['parmetis_lib_path']) # The wrapper script needs to find these libs
724 jfenwick 2296 #ensure that our path entries remain at the front
725     conf.env.PrependENVPath('PYTHONPATH', prefix)
726 gross 2423 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
727 gross 707
728 ksteube 1705 if env_mpi['useparmetis'] and not conf.CheckCHeader('parmetis.h'): env_mpi['useparmetis'] = 0
729     if env_mpi['useparmetis'] and not conf.CheckFunc('ParMETIS_V3_PartGeomKway'): env_mpi['useparmetis'] = 0
730 elspeth 712
731 ksteube 1705 # Add ParMETIS to environment env_mpi if it was found
732     if env_mpi['useparmetis']:
733     env_mpi = conf.Finish()
734     env_mpi.Append(CPPDEFINES = ['USE_PARMETIS'])
735     else:
736     conf.Finish()
737 ksteube 1215
738 ksteube 1705 env['useparmetis'] = env_mpi['useparmetis']
739 ksteube 1247
740 ksteube 1705 ############ Summarize our environment #########################
741 phornby 1243
742 ksteube 1705 print ""
743     print "Summary of configuration (see ./config.log for information)"
744     print " Using python libraries"
745 jfenwick 2458 print " Using numpy"
746 ksteube 1705 print " Using boost"
747     if env['usenetcdf']: print " Using NetCDF"
748     else: print " Not using NetCDF"
749     if env['usevtk']: print " Using VTK"
750     else: print " Not using VTK"
751     if env['usemkl']: print " Using MKL"
752     else: print " Not using MKL"
753     if env['useumfpack']: print " Using UMFPACK"
754     else: print " Not using UMFPACK"
755 caltinay 2184 if env['usesilo']: print " Using Silo"
756     else: print " Not using Silo"
757 ksteube 1705 if env['useopenmp']: print " Using OpenMP"
758     else: print " Not using OpenMP"
759 gross 2356 if env['usempi']: print " Using MPI (flavour = %s)"%env['mpi_flavour']
760 ksteube 1705 else: print " Not using MPI"
761     if env['useparmetis']: print " Using ParMETIS"
762     else: print " Not using ParMETIS (requires MPI)"
763     if env['usepapi']: print " Using PAPI"
764     else: print " Not using PAPI"
765 jfenwick 2787 if env['uselapack']: print " Using Lapack"
766     else: print " Not using Lapack"
767 ksteube 1705 if env['usedebug']: print " Compiling for debug"
768     else: print " Not compiling for debug"
769     print " Installing in", prefix
770 jfenwick 2026 if ((fatalwarning != "") and (env['usewarnings'])): print " Treating warnings as errors"
771     else: print " Not treating warnings as errors"
772 ksteube 1705 print ""
773 phornby 1243
774 ksteube 1756 ############ Delete option-dependent files #####################
775    
776 jfenwick 2324 Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.debug")))
777     Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.mpi")))
778     Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.openmp")))
779     Execute(Delete(os.path.join(env['libinstall'],"pyversion")))
780     Execute(Delete(os.path.join(env['libinstall'],"buildvars")))
781     if not env['usempi']: Execute(Delete(os.path.join(env['libinstall'],"pythonMPI")))
782 ksteube 1756
783 phornby 1243
784 ksteube 1756 ############ Build the subdirectories ##########################
785 robwdcock 682
786 jfenwick 2827 if env['usepedantic']: env_mpi.Append(CCFLAGS = pedantic)
787    
788    
789 jfenwick 2235 from grouptest import *
790    
791     TestGroups=[]
792    
793 jfenwick 2827 dodgy_env=clone_env(env_mpi) # Environment without pedantic options
794    
795     ############ Now we switch on Warnings as errors ###############
796    
797     #this needs to be done after configuration because the scons test files have warnings in them
798    
799     if ((fatalwarning != "") and (env['usewarnings'])):
800     env.Append(CCFLAGS = fatalwarning)
801     env_mpi.Append(CCFLAGS = fatalwarning)
802    
803    
804 phornby 2027 Export(
805     ["env",
806     "env_mpi",
807     "clone_env",
808 jfenwick 2827 "dodgy_env",
809 jfenwick 2235 "IS_WINDOWS_PLATFORM",
810     "TestGroups"
811 phornby 2027 ]
812     )
813 ksteube 1705
814 robwdcock 682 env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)
815 caltinay 2810 env.SConscript(dirs = ['tools/escriptconvert'], build_dir='build/$PLATFORM/tools/escriptconvert', duplicate=0)
816 ksteube 1705 env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
817 caltinay 2810 env.SConscript(dirs = ['dataexporter/src'], build_dir='build/$PLATFORM/dataexporter', duplicate=0)
818 ksteube 1705 env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
819 phornby 1628 env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
820 robwdcock 682 env.SConscript(dirs = ['finley/src'], build_dir='build/$PLATFORM/finley', duplicate=0)
821     env.SConscript(dirs = ['modellib/py_src'], build_dir='build/$PLATFORM/modellib', duplicate=0)
822 gross 707 env.SConscript(dirs = ['doc'], build_dir='build/$PLATFORM/doc', duplicate=0)
823 matt 863 env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0)
824 gross 898 env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0)
825 matt 863 env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)
826 ksteube 1756 env.SConscript(dirs = ['scripts'], build_dir='build/$PLATFORM/scripts', duplicate=0)
827 artak 2161 env.SConscript(dirs = ['paso/profiling'], build_dir='build/$PLATFORM/paso/profiling', duplicate=0)
828 phornby 1243
829 jfenwick 2235
830 ksteube 1705 ############ Remember what optimizations we used ###############
831 phornby 1243
832 ksteube 1705 remember_list = []
833 phornby 1243
834 ksteube 1705 if env['usedebug']:
835 jfenwick 2324 remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.debug"), None, Touch('$TARGET'))
836 ksteube 1705
837     if env['usempi']:
838 jfenwick 2324 remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.mpi"), None, Touch('$TARGET'))
839 ksteube 1705
840 jfenwick 2302 if env['useopenmp']:
841 jfenwick 2324 remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.openmp"), None, Touch('$TARGET'))
842 ksteube 1705
843     env.Alias('remember_options', remember_list)
844    
845 jfenwick 2297
846     ############### Record python interpreter version ##############
847    
848     if not IS_WINDOWS_PLATFORM:
849 gross 2748
850 jfenwick 2297 versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])
851 gross 2748 if sys.version_info[4] >0 : versionstring+="rc%s"%sys.version_info[4]
852 jfenwick 2302 os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion"))
853 jfenwick 2297
854 jfenwick 2302 ############## Populate the buildvars file #####################
855    
856     buildvars=open(os.path.join(env['libinstall'],'buildvars'),'w')
857     buildvars.write('python='+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+'\n')
858    
859     # Find the boost version by extracting it from version.hpp
860     boosthpp=open(os.path.join(env['boost_path'],'boost','version.hpp'))
861     boostversion='unknown'
862     try:
863     for line in boosthpp:
864     ver=re.match(r'#define BOOST_VERSION (\d+)',line)
865     if ver:
866     boostversion=ver.group(1)
867     except StopIteration:
868     pass
869     buildvars.write("boost="+boostversion+"\n")
870     buildvars.write("svn_revision="+str(global_revision)+"\n")
871     out="usedebug="
872     if env['usedebug']:
873     out+="y"
874     else:
875     out+="n"
876     out+="\nusempi="
877     if env['usempi']:
878     out+="y"
879     else:
880     out+="n"
881     out+="\nuseopenmp="
882     if env['useopenmp']:
883     out+="y"
884     else:
885     out+="n"
886     buildvars.write(out+"\n")
887 jfenwick 2338 buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n')
888 caltinay 2810 out="lapack="
889 jfenwick 2742 if env['uselapack']:
890 caltinay 2810 out+="y"
891 jfenwick 2742 else:
892 caltinay 2810 out+="n"
893     out+="\nsilo="
894     if env['usesilo']:
895     out+="y"
896     else:
897     out+="n"
898     buildvars.write(out+"\n")
899 jfenwick 2302 buildvars.close()
900    
901    
902 ksteube 1705 ############ Targets to build and install libraries ############
903    
904     target_init = env.Command(env['pyinstall']+'/__init__.py', None, Touch('$TARGET'))
905     env.Alias('target_init', [target_init])
906    
907     # The headers have to be installed prior to build in order to satisfy #include <paso/Common.h>
908     env.Alias('build_esysUtils', ['target_install_esysUtils_headers', 'target_esysUtils_a'])
909     env.Alias('install_esysUtils', ['build_esysUtils', 'target_install_esysUtils_a'])
910    
911     env.Alias('build_paso', ['target_install_paso_headers', 'target_paso_a'])
912     env.Alias('install_paso', ['build_paso', 'target_install_paso_a'])
913    
914 caltinay 2812 env.Alias('build_dataexporter', ['target_install_escriptexport_headers', 'target_escriptexport_so', 'target_escriptexportcpp_so'])
915     env.Alias('install_dataexporter', ['build_dataexporter', 'target_install_escriptexport_so', 'target_install_escriptexportcpp_so', 'target_install_dataexporter_py'])
916 caltinay 2810
917 caltinay 2910 env.Alias('build_escriptreader', ['target_install_escriptexport_headers', 'target_escriptreader_a'])
918     env.Alias('install_escriptreader', ['build_escriptreader', 'target_install_escriptreader_a'])
919    
920 ksteube 1705 env.Alias('build_escript', ['target_install_escript_headers', 'target_escript_so', 'target_escriptcpp_so'])
921     env.Alias('install_escript', ['build_escript', 'target_install_escript_so', 'target_install_escriptcpp_so', 'target_install_escript_py'])
922    
923     env.Alias('build_finley', ['target_install_finley_headers', 'target_finley_so', 'target_finleycpp_so'])
924     env.Alias('install_finley', ['build_finley', 'target_install_finley_so', 'target_install_finleycpp_so', 'target_install_finley_py'])
925    
926     # Now gather all the above into a couple easy targets: build_all and install_all
927     build_all_list = []
928     build_all_list += ['build_esysUtils']
929     build_all_list += ['build_paso']
930 caltinay 2810 build_all_list += ['build_dataexporter']
931 ksteube 1705 build_all_list += ['build_escript']
932     build_all_list += ['build_finley']
933 ksteube 1756 if env['usempi']: build_all_list += ['target_pythonMPI_exe']
934 jfenwick 2409 #if not IS_WINDOWS_PLATFORM: build_all_list += ['target_escript_wrapper']
935 caltinay 2930 build_all_list += ['target_escriptconvert']
936 ksteube 1705 env.Alias('build_all', build_all_list)
937    
938     install_all_list = []
939     install_all_list += ['target_init']
940     install_all_list += ['install_esysUtils']
941     install_all_list += ['install_paso']
942 caltinay 2810 install_all_list += ['install_dataexporter']
943 ksteube 1705 install_all_list += ['install_escript']
944     install_all_list += ['install_finley']
945     install_all_list += ['target_install_pyvisi_py']
946     install_all_list += ['target_install_modellib_py']
947     install_all_list += ['target_install_pycad_py']
948 ksteube 1756 if env['usempi']: install_all_list += ['target_install_pythonMPI_exe']
949 jfenwick 2409 #if not IS_WINDOWS_PLATFORM: install_all_list += ['target_install_escript_wrapper']
950 caltinay 2810 if env['usesilo']: install_all_list += ['target_install_escriptconvert']
951 ksteube 1705 install_all_list += ['remember_options']
952     env.Alias('install_all', install_all_list)
953    
954     # Default target is install
955     env.Default('install_all')
956    
957     ############ Targets to build and run the test suite ###########
958    
959     env.Alias('build_cppunittest', ['target_install_cppunittest_headers', 'target_cppunittest_a'])
960     env.Alias('install_cppunittest', ['build_cppunittest', 'target_install_cppunittest_a'])
961     env.Alias('run_tests', ['install_all', 'target_install_cppunittest_a'])
962     env.Alias('all_tests', ['install_all', 'target_install_cppunittest_a', 'run_tests', 'py_tests'])
963 jfenwick 2286 env.Alias('build_full',['install_all','build_tests','build_py_tests'])
964 ksteube 1705
965 artak 2820
966 ksteube 1705 ############ Targets to build the documentation ################
967    
968 jfenwick 2531 env.Alias('api_epydoc','install_all')
969    
970 jfenwick 2923 env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf', 'cookbook_pdf'])
971 ksteube 1705
972 jfenwick 2879 build_platform=os.name
973    
974 jfenwick 2235 if not IS_WINDOWS_PLATFORM:
975     try:
976     utest=open("utest.sh","w")
977 jfenwick 2879 #Sometimes Mac python says it is posix
978 jfenwick 2276 if (build_platform=='posix') and platform.system()=="Darwin":
979     build_platform='darwin'
980     utest.write(GroupTest.makeHeader(build_platform))
981 jfenwick 2235 for tests in TestGroups:
982     utest.write(tests.makeString())
983     utest.close()
984 jfenwick 2299 os.chmod("utest.sh",stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH)
985 jfenwick 2235 print "utest.sh written"
986     except IOError:
987     print "Error attempting to write unittests file."
988     sys.exit(1)
989    
990 jfenwick 2604 #Make sure that the escript wrapper is in place
991     if not os.path.isfile(os.path.join(env['bininstall'],'escript')):
992     print "Copying escript wrapper"
993     shutil.copy("bin/escript",os.path.join(env['bininstall'],'escript'))
994 artak 2820
995     ############ Targets to build PasoTests suite ################
996    
997     env.Alias('build_PasoTests','build/'+build_platform+'/paso/profiling/PasoTests')
998 jfenwick 2923
999 caltinay 2930 env.Alias('release_prep', ['docs', 'install_all'])

  ViewVC Help
Powered by ViewVC 1.1.26