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

Annotation of /branches/diaplayground/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2603 - (hide annotations)
Wed Aug 12 00:44:35 2009 UTC (9 years, 7 months ago) by jfenwick
Original Path: trunk/SConstruct
File size: 35974 byte(s)
Compute nodes will now read the correct options file and use the correct compiler.
I have added env_export to the service0 options file.
Use this if there are variables from the calling environment which need to be passed through scons. (In this case the INTEL_LICENSE_FILE variable).

There are still some issues with icpc linking.

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

  ViewVC Help
Powered by ViewVC 1.1.26