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

Annotation of /branches/py3_attempt2/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.26