/[escript]/trunk/SConstruct
ViewVC logotype

Annotation of /trunk/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2388 - (hide annotations)
Wed Apr 15 06:21:25 2009 UTC (10 years, 8 months ago) by jfenwick
File size: 34685 byte(s)
scons files executed on compute nodes will use the config file for the service node (when we get the other issues 
sorted).

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

  ViewVC Help
Powered by ViewVC 1.1.26