/[escript]/trunk/SConstruct
ViewVC logotype

Annotation of /trunk/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2391 - (hide annotations)
Thu Apr 16 01:08:57 2009 UTC (10 years, 2 months ago) by jfenwick
File size: 34953 byte(s)
Minor tweak to title page.
Better handling of alternative names in SConstruct.

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 ksteube 1705 ############ Copy environment variables into scons env #########
251 gross 1163
252 ksteube 1705 try: env['ENV']['OMP_NUM_THREADS'] = os.environ['OMP_NUM_THREADS']
253     except KeyError: env['ENV']['OMP_NUM_THREADS'] = 1
254 phornby 1243
255 gross 2363 try: env['ENV']['ESCRIPT_NUM_THREADS'] = os.environ['ESCRIPT_NUM_THREADS']
256     except KeyError: pass
257    
258     try: env['ENV']['ESCRIPT_NUM_PROCS'] = os.environ['ESCRIPT_NUM_PROCS']
259     except KeyError: pass
260    
261     try: env['ENV']['ESCRIPT_NUM_NODES'] = os.environ['ESCRIPT_NUM_NODES']
262     except KeyError: pass
263    
264     try: env['ENV']['ESCRIPT_HOSTFILE'] = os.environ['ESCRIPT_HOSTFILE']
265     except KeyError: pass
266    
267 ksteube 1705 try: env['ENV']['PATH'] = os.environ['PATH']
268     except KeyError: pass
269 robwdcock 682
270 ksteube 1705 try: env['ENV']['PYTHONPATH'] = os.environ['PYTHONPATH']
271     except KeyError: pass
272 phornby 1244
273 ksteube 1705 try: env['ENV']['C_INCLUDE_PATH'] = os.environ['C_INCLUDE_PATH']
274     except KeyError: pass
275 robwdcock 682
276 ksteube 1705 try: env['ENV']['CPLUS_INCLUDE_PATH'] = os.environ['CPLUS_INCLUDE_PATH']
277     except KeyError: pass
278 robwdcock 682
279 ksteube 1705 try: env['ENV']['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH']
280     except KeyError: pass
281 ksteube 1312
282 ksteube 1705 try: env['ENV']['LIBRARY_PATH'] = os.environ['LIBRARY_PATH']
283     except KeyError: pass
284 ksteube 1312
285 ksteube 1705 try: env['ENV']['DISPLAY'] = os.environ['DISPLAY']
286     except KeyError: pass
287 ksteube 1312
288 ksteube 1705 try: env['ENV']['XAUTHORITY'] = os.environ['XAUTHORITY']
289     except KeyError: pass
290 ksteube 1312
291 ksteube 1705 try: env['ENV']['HOME'] = os.environ['HOME']
292     except KeyError: pass
293 ksteube 1312
294 ksteube 1705 # Configure for test suite
295     env.PrependENVPath('PYTHONPATH', prefix)
296     env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
297 ksteube 1312
298 ksteube 1756 env['ENV']['ESCRIPT_ROOT'] = prefix
299    
300 ksteube 1705 ############ Set up paths for Configure() ######################
301 ksteube 817
302 ksteube 1705 # Make a copy of an environment
303     # Use env.Clone if available, but fall back on env.Copy for older version of scons
304     def clone_env(env):
305     if 'Clone' in dir(env): return env.Clone() # scons-0.98
306     else: return env.Copy() # scons-0.96
307 phornby 1246
308 ksteube 1705 # Add cc option -I<Escript>/trunk/include
309     env.Append(CPPPATH = [Dir('include')])
310 phornby 1634
311 ksteube 1705 # Add cc option -L<Escript>/trunk/lib
312 ksteube 1729 env.Append(LIBPATH = [Dir(env['libinstall'])])
313 ksteube 1705
314     if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])
315 ksteube 1771 if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
316 ksteube 1705
317     if env['usepedantic']: env.Append(CCFLAGS = pedantic)
318    
319     # MS Windows
320     if IS_WINDOWS_PLATFORM:
321 jfenwick 2334 env.AppendENVPath('PATH', [env['boost_lib_path']])
322     env.AppendENVPath('PATH', [env['libinstall']])
323 phornby 2054 if not env['share_esysUtils'] :
324     env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
325     if not env['share_paso'] :
326     env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
327 phornby 2040
328 ksteube 1705 if env['usenetcdf']:
329 jfenwick 2334 env.AppendENVPath('PATH', [env['netCDF_lib_path']])
330 ksteube 1705
331     env.Append(ARFLAGS = env['ar_flags'])
332    
333     # Get the global Subversion revision number for getVersion() method
334 robwdcock 682 try:
335 ksteube 1705 global_revision = os.popen("svnversion -n .").read()
336     global_revision = re.sub(":.*", "", global_revision)
337     global_revision = re.sub("[^0-9]", "", global_revision)
338 ksteube 1312 except:
339 ksteube 1705 global_revision="-1"
340     if global_revision == "": global_revision="-2"
341     env.Append(CPPDEFINES = ["SVN_VERSION="+global_revision])
342 phornby 1634
343 ksteube 1705 ############ numarray (required) ###############################
344 robwdcock 682
345 ksteube 1705 try:
346     from numarray import identity
347     except ImportError:
348     print "Cannot import numarray, you need to set your PYTHONPATH"
349     sys.exit(1)
350 ksteube 1348
351 ksteube 1705 ############ C compiler (required) #############################
352 gross 700
353 ksteube 1705 # Create a Configure() environment for checking existence of required libraries and headers
354     conf = Configure(clone_env(env))
355 gross 700
356 ksteube 1705 # Test that the compiler is working
357     if not conf.CheckFunc('printf'):
358 gross 2284 print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])
359     sys.exit(1)
360 gross 806
361 phornby 1789 if conf.CheckFunc('gethostname'):
362     conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])
363 gross 806
364 ksteube 1705 ############ python libraries (required) #######################
365 gross 806
366 jfenwick 2130
367     if not sysheaderopt =="":
368     conf.env.Append(CCFLAGS=sysheaderopt+env['python_path'])
369     else:
370     conf.env.AppendUnique(CPPPATH = [env['python_path']])
371    
372 ksteube 1705 conf.env.AppendUnique(LIBPATH = [env['python_lib_path']])
373     conf.env.AppendUnique(LIBS = [env['python_libs']])
374 gross 805
375 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['python_lib_path']) # The wrapper script needs to find these libs
376 jfenwick 2296 conf.env.PrependENVPath('PYTHONPATH', prefix)
377     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
378 ksteube 1785
379 ksteube 1705 if not conf.CheckCHeader('Python.h'):
380     print "Cannot find python include files (tried 'Python.h' in directory %s)" % (env['python_path'])
381     sys.exit(1)
382 gross 2284 if not conf.CheckFunc('Py_Exit'):
383 ksteube 1705 print "Cannot find python library method Py_Main (tried lib %s in directory %s)" % (env['python_libs'], env['python_lib_path'])
384     sys.exit(1)
385 gross 805
386 ksteube 1705 ############ boost (required) ##################################
387 gross 805
388 jfenwick 2130 if not sysheaderopt =="":
389 jfenwick 2295 # This is required because we can't -isystem /usr/system because it breaks std includes
390     if os.path.normpath(env['boost_path']) =="/usr/include":
391     conf.env.Append(CCFLAGS=sysheaderopt+os.path.join(env['boost_path'],'boost'))
392     else:
393     conf.env.Append(CCFLAGS=sysheaderopt+env['boost_path'])
394 jfenwick 2130 else:
395     conf.env.AppendUnique(CPPPATH = [env['boost_path']])
396    
397 ksteube 1705 conf.env.AppendUnique(LIBPATH = [env['boost_lib_path']])
398     conf.env.AppendUnique(LIBS = [env['boost_libs']])
399 ksteube 1312
400 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['boost_lib_path']) # The wrapper script needs to find these libs
401 jfenwick 2296 #ensure that our path entries remain at the front
402     conf.env.PrependENVPath('PYTHONPATH', prefix)
403     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
404 ksteube 1785
405 ksteube 1705 if not conf.CheckCXXHeader('boost/python.hpp'):
406     print "Cannot find boost include files (tried boost/python.hpp in directory %s)" % (env['boost_path'])
407     sys.exit(1)
408 gross 2284
409 ksteube 1705 if not conf.CheckFunc('PyObject_SetAttr'):
410     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'])
411     sys.exit(1)
412 ksteube 1312
413 ksteube 1705 # Commit changes to environment
414     env = conf.Finish()
415 ksteube 1312
416 ksteube 1705 ############ VTK (optional) ####################################
417 ksteube 1312
418 ksteube 1705 if env['usevtk']:
419     try:
420     import vtk
421     env['usevtk'] = 1
422     except ImportError:
423     env['usevtk'] = 0
424 gross 806
425 ksteube 1705 # Add VTK to environment env if it was found
426     if env['usevtk']:
427     env.Append(CPPDEFINES = ['USE_VTK'])
428 gross 805
429 ksteube 1705 ############ NetCDF (optional) #################################
430 gross 805
431 ksteube 1705 conf = Configure(clone_env(env))
432 gross 806
433 ksteube 1705 if env['usenetcdf']:
434     conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])
435     conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])
436     conf.env.AppendUnique(LIBS = [env['netCDF_libs']])
437 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['netCDF_lib_path']) # The wrapper script needs to find these libs
438 jfenwick 2296 #ensure that our path entries remain at the front
439     conf.env.PrependENVPath('PYTHONPATH', prefix)
440     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
441 gross 806
442 ksteube 1705 if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0
443     if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0
444 ksteube 1312
445 ksteube 1705 # Add NetCDF to environment env if it was found
446     if env['usenetcdf']:
447     env = conf.Finish()
448     env.Append(CPPDEFINES = ['USE_NETCDF'])
449     else:
450     conf.Finish()
451 ksteube 1312
452 ksteube 1705 ############ PAPI (optional) ###################################
453    
454     # Start a new configure environment that reflects what we've already found
455     conf = Configure(clone_env(env))
456    
457     if env['usepapi']:
458     conf.env.AppendUnique(CPPPATH = [env['papi_path']])
459     conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])
460     conf.env.AppendUnique(LIBS = [env['papi_libs']])
461 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['papi_lib_path']) # The wrapper script needs to find these libs
462 jfenwick 2296 #ensure that our path entries remain at the front
463     conf.env.PrependENVPath('PYTHONPATH', prefix)
464     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
465 ksteube 1705
466     if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0
467     if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0
468    
469     # Add PAPI to environment env if it was found
470     if env['usepapi']:
471     env = conf.Finish()
472     env.Append(CPPDEFINES = ['BLOCKPAPI'])
473 ksteube 1312 else:
474 ksteube 1705 conf.Finish()
475 ksteube 1312
476 ksteube 1705 ############ MKL (optional) ####################################
477 gross 806
478 ksteube 1705 # Start a new configure environment that reflects what we've already found
479     conf = Configure(clone_env(env))
480 gross 806
481 ksteube 1705 if env['usemkl']:
482     conf.env.AppendUnique(CPPPATH = [env['mkl_path']])
483     conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])
484     conf.env.AppendUnique(LIBS = [env['mkl_libs']])
485 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mkl_lib_path']) # The wrapper script needs to find these libs
486 jfenwick 2296 #ensure that our path entries remain at the front
487     conf.env.PrependENVPath('PYTHONPATH', prefix)
488     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
489 gross 805
490 ksteube 1705 if env['usemkl'] and not conf.CheckCHeader('mkl_solver.h'): env['usemkl'] = 0
491 gross 2358 if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0
492 phornby 1246
493 ksteube 1705 # Add MKL to environment env if it was found
494     if env['usemkl']:
495     env = conf.Finish()
496     env.Append(CPPDEFINES = ['MKL'])
497     else:
498     conf.Finish()
499 gross 950
500 ksteube 1705 ############ UMFPACK (optional) ################################
501    
502     # Start a new configure environment that reflects what we've already found
503     conf = Configure(clone_env(env))
504    
505     if env['useumfpack']:
506     conf.env.AppendUnique(CPPPATH = [env['ufc_path']])
507     conf.env.AppendUnique(CPPPATH = [env['umf_path']])
508     conf.env.AppendUnique(LIBPATH = [env['umf_lib_path']])
509     conf.env.AppendUnique(LIBS = [env['umf_libs']])
510     conf.env.AppendUnique(CPPPATH = [env['amd_path']])
511     conf.env.AppendUnique(LIBPATH = [env['amd_lib_path']])
512     conf.env.AppendUnique(LIBS = [env['amd_libs']])
513     conf.env.AppendUnique(CPPPATH = [env['blas_path']])
514     conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])
515     conf.env.AppendUnique(LIBS = [env['blas_libs']])
516 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['umf_lib_path']) # The wrapper script needs to find these libs
517     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['amd_lib_path']) # The wrapper script needs to find these libs
518     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['blas_lib_path']) # The wrapper script needs to find these libs
519 jfenwick 2296 #ensure that our path entries remain at the front
520     conf.env.PrependENVPath('PYTHONPATH', prefix)
521     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
522 ksteube 1705
523 gross 2284 if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0
524 gross 2101 if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0
525 gross 2284 # if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?
526 ksteube 1705
527     # Add UMFPACK to environment env if it was found
528     if env['useumfpack']:
529     env = conf.Finish()
530     env.Append(CPPDEFINES = ['UMFPACK'])
531 gross 1023 else:
532 ksteube 1705 conf.Finish()
533 gross 1023
534 caltinay 2184 ############ Silo (optional) ###################################
535    
536     if env['usesilo']:
537     conf = Configure(clone_env(env))
538     conf.env.AppendUnique(CPPPATH = [env['silo_path']])
539     conf.env.AppendUnique(LIBPATH = [env['silo_lib_path']])
540     conf.env.AppendUnique(LIBS = [env['silo_libs']])
541     if not conf.CheckCHeader('silo.h'): env['usesilo'] = 0
542     if not conf.CheckFunc('DBMkDir'): env['usesilo'] = 0
543     conf.Finish()
544    
545     # Add the path to Silo to environment env if it was found.
546     # Note that we do not add the libs since they are only needed for the
547     # escriptreader library and tools.
548     if env['usesilo']:
549     env.AppendUnique(CPPPATH = [env['silo_path']])
550     env.AppendUnique(LIBPATH = [env['silo_lib_path']])
551     env.Append(CPPDEFINES = ['HAVE_SILO'])
552    
553 ksteube 1705 ############ Add the compiler flags ############################
554 ksteube 1459
555 ksteube 1705 # Enable debug by choosing either cc_debug or cc_optim
556     if env['usedebug']:
557     env.Append(CCFLAGS = env['cc_debug'])
558     env.Append(CCFLAGS = env['omp_debug'])
559     else:
560     env.Append(CCFLAGS = env['cc_optim'])
561     env.Append(CCFLAGS = env['omp_optim'])
562 robwdcock 682
563 ksteube 1705 # Always use cc_flags
564     env.Append(CCFLAGS = env['cc_flags'])
565     env.Append(LIBS = [env['omp_libs']])
566 gross 707
567 jfenwick 2232 ############ Add some custom builders ##########################
568    
569     py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
570     env.Append(BUILDERS = {'PyCompile' : py_builder});
571    
572     runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
573     env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
574    
575     runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
576     env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
577    
578 jfenwick 2387 epstopdfbuilder = Builder(action = scons_extensions.eps2pdf, suffix=".pdf", src_suffix=".eps", single_source=True)
579     env.Append(BUILDERS = {'EpsToPDF' : epstopdfbuilder});
580    
581 ksteube 1705 ############ MPI (optional) ####################################
582 gross 2364 if not env['usempi']: env['mpi_flavour']='none'
583 ksteube 1705
584     # Create a modified environment for MPI programs (identical to env if usempi=no)
585     env_mpi = clone_env(env)
586    
587     # Start a new configure environment that reflects what we've already found
588     conf = Configure(clone_env(env_mpi))
589    
590     if env_mpi['usempi']:
591 gross 2366 VALID_MPIs=[ "MPT", "MPICH", "MPICH2", "OPENMPI", "INTELMPI" ]
592 gross 2356 if not env_mpi['mpi_flavour'] in VALID_MPIs:
593 gross 2358 raise ValueError,"MPI is enabled but mpi_flavour = %s is not a valid key from %s."%( env_mpi['mpi_flavour'],VALID_MPIs)
594 ksteube 1705 conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])
595     conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])
596     conf.env.AppendUnique(LIBS = [env_mpi['mpi_libs']])
597 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mpi_lib_path']) # The wrapper script needs to find these libs
598 jfenwick 2296 #ensure that our path entries remain at the front
599     conf.env.PrependENVPath('PYTHONPATH', prefix)
600     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
601 ksteube 1705
602     if env_mpi['usempi'] and not conf.CheckCHeader('mpi.h'): env_mpi['usempi'] = 0
603 gross 2308 # if env_mpi['usempi'] and not conf.CheckFunc('MPI_Init'): env_mpi['usempi'] = 0
604 ksteube 1705
605     # Add MPI to environment env_mpi if it was found
606     if env_mpi['usempi']:
607     env_mpi = conf.Finish()
608     env_mpi.Append(CPPDEFINES = ['PASO_MPI', 'MPI_NO_CPPBIND', env_mpi['MPICH_IGNORE_CXX_SEEK']])
609 ksteube 1312 else:
610 ksteube 1705 conf.Finish()
611 ksteube 1312
612 ksteube 1705 env['usempi'] = env_mpi['usempi']
613 ksteube 1312
614 gross 2364
615 ksteube 1705 ############ ParMETIS (optional) ###############################
616 gross 700
617 ksteube 1705 # Start a new configure environment that reflects what we've already found
618     conf = Configure(clone_env(env_mpi))
619 gross 700
620 ksteube 1705 if not env_mpi['usempi']: env_mpi['useparmetis'] = 0
621 gross 700
622 ksteube 1705 if env_mpi['useparmetis']:
623     conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])
624     conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])
625     conf.env.AppendUnique(LIBS = [env_mpi['parmetis_libs']])
626 ksteube 1785 conf.env.PrependENVPath('LD_LIBRARY_PATH', env['parmetis_lib_path']) # The wrapper script needs to find these libs
627 jfenwick 2296 #ensure that our path entries remain at the front
628     conf.env.PrependENVPath('PYTHONPATH', prefix)
629     conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
630 gross 707
631 ksteube 1705 if env_mpi['useparmetis'] and not conf.CheckCHeader('parmetis.h'): env_mpi['useparmetis'] = 0
632     if env_mpi['useparmetis'] and not conf.CheckFunc('ParMETIS_V3_PartGeomKway'): env_mpi['useparmetis'] = 0
633 elspeth 712
634 ksteube 1705 # Add ParMETIS to environment env_mpi if it was found
635     if env_mpi['useparmetis']:
636     env_mpi = conf.Finish()
637     env_mpi.Append(CPPDEFINES = ['USE_PARMETIS'])
638     else:
639     conf.Finish()
640 ksteube 1215
641 ksteube 1705 env['useparmetis'] = env_mpi['useparmetis']
642 ksteube 1247
643 jfenwick 2026 ############ Now we switch on Warnings as errors ###############
644    
645     #this needs to be done after configuration because the scons test files have warnings in them
646    
647     if ((fatalwarning != "") and (env['usewarnings'])):
648     env.Append(CCFLAGS = fatalwarning)
649     env_mpi.Append(CCFLAGS = fatalwarning)
650    
651 ksteube 1705 ############ Summarize our environment #########################
652 phornby 1243
653 ksteube 1705 print ""
654     print "Summary of configuration (see ./config.log for information)"
655     print " Using python libraries"
656     print " Using numarray"
657     print " Using boost"
658     if env['usenetcdf']: print " Using NetCDF"
659     else: print " Not using NetCDF"
660     if env['usevtk']: print " Using VTK"
661     else: print " Not using VTK"
662     if env['usemkl']: print " Using MKL"
663     else: print " Not using MKL"
664     if env['useumfpack']: print " Using UMFPACK"
665     else: print " Not using UMFPACK"
666 caltinay 2184 if env['usesilo']: print " Using Silo"
667     else: print " Not using Silo"
668 ksteube 1705 if env['useopenmp']: print " Using OpenMP"
669     else: print " Not using OpenMP"
670 gross 2356 if env['usempi']: print " Using MPI (flavour = %s)"%env['mpi_flavour']
671 ksteube 1705 else: print " Not using MPI"
672     if env['useparmetis']: print " Using ParMETIS"
673     else: print " Not using ParMETIS (requires MPI)"
674     if env['usepapi']: print " Using PAPI"
675     else: print " Not using PAPI"
676     if env['usedebug']: print " Compiling for debug"
677     else: print " Not compiling for debug"
678     print " Installing in", prefix
679 jfenwick 2026 if ((fatalwarning != "") and (env['usewarnings'])): print " Treating warnings as errors"
680     else: print " Not treating warnings as errors"
681 ksteube 1705 print ""
682 phornby 1243
683 ksteube 1756 ############ Delete option-dependent files #####################
684    
685 jfenwick 2324 Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.debug")))
686     Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.mpi")))
687     Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.openmp")))
688     Execute(Delete(os.path.join(env['libinstall'],"pyversion")))
689     Execute(Delete(os.path.join(env['libinstall'],"buildvars")))
690     if not env['usempi']: Execute(Delete(os.path.join(env['libinstall'],"pythonMPI")))
691 ksteube 1756
692 phornby 1243
693 ksteube 1756 ############ Build the subdirectories ##########################
694 robwdcock 682
695 jfenwick 2235 from grouptest import *
696    
697     TestGroups=[]
698    
699 phornby 2027 Export(
700     ["env",
701     "env_mpi",
702     "clone_env",
703 jfenwick 2235 "IS_WINDOWS_PLATFORM",
704     "TestGroups"
705 phornby 2027 ]
706     )
707 ksteube 1705
708 robwdcock 682 env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)
709 caltinay 2184 env.SConscript(dirs = ['tools/libescriptreader/src'], build_dir='build/$PLATFORM/tools/libescriptreader', duplicate=0)
710 ksteube 1705 env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
711     env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
712 phornby 1628 env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
713 robwdcock 682 env.SConscript(dirs = ['finley/src'], build_dir='build/$PLATFORM/finley', duplicate=0)
714     env.SConscript(dirs = ['modellib/py_src'], build_dir='build/$PLATFORM/modellib', duplicate=0)
715 gross 707 env.SConscript(dirs = ['doc'], build_dir='build/$PLATFORM/doc', duplicate=0)
716 matt 863 env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0)
717 gross 898 env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0)
718 matt 863 env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)
719 ksteube 1756 env.SConscript(dirs = ['scripts'], build_dir='build/$PLATFORM/scripts', duplicate=0)
720 artak 2161 env.SConscript(dirs = ['paso/profiling'], build_dir='build/$PLATFORM/paso/profiling', duplicate=0)
721 phornby 1243
722 jfenwick 2235
723 ksteube 1705 ############ Remember what optimizations we used ###############
724 phornby 1243
725 ksteube 1705 remember_list = []
726 phornby 1243
727 ksteube 1705 if env['usedebug']:
728 jfenwick 2324 remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.debug"), None, Touch('$TARGET'))
729 ksteube 1705
730     if env['usempi']:
731 jfenwick 2324 remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.mpi"), None, Touch('$TARGET'))
732 ksteube 1705
733 jfenwick 2302 if env['useopenmp']:
734 jfenwick 2324 remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.openmp"), None, Touch('$TARGET'))
735 ksteube 1705
736     env.Alias('remember_options', remember_list)
737    
738 jfenwick 2297
739     ############### Record python interpreter version ##############
740    
741     if not IS_WINDOWS_PLATFORM:
742     versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])
743 jfenwick 2302 os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion"))
744 jfenwick 2297
745 jfenwick 2302 ############## Populate the buildvars file #####################
746    
747     buildvars=open(os.path.join(env['libinstall'],'buildvars'),'w')
748     buildvars.write('python='+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+'\n')
749    
750     # Find the boost version by extracting it from version.hpp
751     boosthpp=open(os.path.join(env['boost_path'],'boost','version.hpp'))
752     boostversion='unknown'
753     try:
754     for line in boosthpp:
755     ver=re.match(r'#define BOOST_VERSION (\d+)',line)
756     if ver:
757     boostversion=ver.group(1)
758     except StopIteration:
759     pass
760     buildvars.write("boost="+boostversion+"\n")
761     buildvars.write("svn_revision="+str(global_revision)+"\n")
762     out="usedebug="
763     if env['usedebug']:
764     out+="y"
765     else:
766     out+="n"
767     out+="\nusempi="
768     if env['usempi']:
769     out+="y"
770     else:
771     out+="n"
772     out+="\nuseopenmp="
773     if env['useopenmp']:
774     out+="y"
775     else:
776     out+="n"
777     buildvars.write(out+"\n")
778 jfenwick 2338 buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n')
779 jfenwick 2302
780     buildvars.close()
781    
782    
783 ksteube 1705 ############ Targets to build and install libraries ############
784    
785     target_init = env.Command(env['pyinstall']+'/__init__.py', None, Touch('$TARGET'))
786     env.Alias('target_init', [target_init])
787    
788     # The headers have to be installed prior to build in order to satisfy #include <paso/Common.h>
789     env.Alias('build_esysUtils', ['target_install_esysUtils_headers', 'target_esysUtils_a'])
790     env.Alias('install_esysUtils', ['build_esysUtils', 'target_install_esysUtils_a'])
791    
792     env.Alias('build_paso', ['target_install_paso_headers', 'target_paso_a'])
793     env.Alias('install_paso', ['build_paso', 'target_install_paso_a'])
794    
795     env.Alias('build_escript', ['target_install_escript_headers', 'target_escript_so', 'target_escriptcpp_so'])
796     env.Alias('install_escript', ['build_escript', 'target_install_escript_so', 'target_install_escriptcpp_so', 'target_install_escript_py'])
797    
798     env.Alias('build_finley', ['target_install_finley_headers', 'target_finley_so', 'target_finleycpp_so'])
799     env.Alias('install_finley', ['build_finley', 'target_install_finley_so', 'target_install_finleycpp_so', 'target_install_finley_py'])
800    
801     # Now gather all the above into a couple easy targets: build_all and install_all
802     build_all_list = []
803     build_all_list += ['build_esysUtils']
804     build_all_list += ['build_paso']
805     build_all_list += ['build_escript']
806     build_all_list += ['build_finley']
807 ksteube 1756 if env['usempi']: build_all_list += ['target_pythonMPI_exe']
808 jfenwick 2294 if not IS_WINDOWS_PLATFORM: build_all_list += ['target_escript_wrapper']
809 caltinay 2184 if env['usesilo']: build_all_list += ['target_escript2silo']
810 ksteube 1705 env.Alias('build_all', build_all_list)
811    
812     install_all_list = []
813     install_all_list += ['target_init']
814     install_all_list += ['install_esysUtils']
815     install_all_list += ['install_paso']
816     install_all_list += ['install_escript']
817     install_all_list += ['install_finley']
818     install_all_list += ['target_install_pyvisi_py']
819     install_all_list += ['target_install_modellib_py']
820     install_all_list += ['target_install_pycad_py']
821 ksteube 1756 if env['usempi']: install_all_list += ['target_install_pythonMPI_exe']
822 jfenwick 2294 if not IS_WINDOWS_PLATFORM: install_all_list += ['target_install_escript_wrapper']
823 caltinay 2184 if env['usesilo']: install_all_list += ['target_install_escript2silo']
824 ksteube 1705 install_all_list += ['remember_options']
825     env.Alias('install_all', install_all_list)
826    
827     # Default target is install
828     env.Default('install_all')
829    
830     ############ Targets to build and run the test suite ###########
831    
832     env.Alias('build_cppunittest', ['target_install_cppunittest_headers', 'target_cppunittest_a'])
833     env.Alias('install_cppunittest', ['build_cppunittest', 'target_install_cppunittest_a'])
834     env.Alias('run_tests', ['install_all', 'target_install_cppunittest_a'])
835     env.Alias('all_tests', ['install_all', 'target_install_cppunittest_a', 'run_tests', 'py_tests'])
836 jfenwick 2286 env.Alias('build_full',['install_all','build_tests','build_py_tests'])
837 ksteube 1705
838     ############ Targets to build the documentation ################
839    
840 jfenwick 2334 env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf'])
841 ksteube 1705
842 jfenwick 2235 if not IS_WINDOWS_PLATFORM:
843     try:
844     utest=open("utest.sh","w")
845 jfenwick 2276 build_platform=os.name #Sometimes Mac python says it is posix
846     if (build_platform=='posix') and platform.system()=="Darwin":
847     build_platform='darwin'
848     utest.write(GroupTest.makeHeader(build_platform))
849 jfenwick 2235 for tests in TestGroups:
850     utest.write(tests.makeString())
851     utest.close()
852 jfenwick 2299 os.chmod("utest.sh",stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH)
853 jfenwick 2235 print "utest.sh written"
854     except IOError:
855     print "Error attempting to write unittests file."
856     sys.exit(1)
857    

  ViewVC Help
Powered by ViewVC 1.1.26