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

Annotation of /branches/py3_attempt2/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1246 - (hide annotations)
Mon Aug 13 22:09:00 2007 UTC (12 years ago) by phornby
Original Path: trunk/SConstruct
File size: 25288 byte(s)
Add the esys and lib directories to the repository.
Remove the IS_WINDOWS_PLATFORM from the SConscripts, and
do the logic once in SConstruct.
SConstruct now includes example options files if the hostname_options file is not present. 
This needs some more work for the altix.
The tests now depend upon the build target. This is important it seems, as there appears to be the
possibility of calling linking different libraries
against incompatible versions of sub-libraries. 
This addressed most of the exceptions we were getting on windows.
All the useNetCDF logic is now done by SConstruct.
Made the init_target part of the build alias so that __ini__.py is created on a fresh checkout.

py_tests mostly pass on windows, only need to track down the exception in run_tests.
1 jongui 961 # Copyright 2006 by ACcESS MNRF
2 jgs 214 #
3 matt 863 # http://www.access.edu.au
4     # Primary Business: Queensland, Australia
5     # Licensed under the Open Software License version 3.0
6     # http://www.opensource.org/licenses/osl-3.0.php
7 jgs 455
8 robwdcock 682 # top-level Scons configuration file for all esys13 modules
9     # Begin initialisation Section
10 matt 863 # all of this section just intialises default environments and helper
11 robwdcock 682 # scripts. You shouldn't need to modify this section.
12     EnsureSConsVersion(0,96,91)
13     EnsurePythonVersion(2,3)
14 jgs 214
15 gross 1133 #===============================================================
16     # import tools:
17 gross 700 import glob
18 robwdcock 682 import sys, os
19     # Add our extensions
20     if sys.path.count('scons')==0: sys.path.append('scons')
21     import scons_extensions
22 jgs 192
23 gross 1133 #===============================================================
24 gross 806
25 phornby 1232 tools_prefix="/usr"
26 gross 806
27 gross 1133 #==============================================================================================
28     #
29 ksteube 1215 # get the installation prefix
30 gross 1133 #
31 phornby 1243 prefix = ARGUMENTS.get('prefix', '/usr')
32 ksteube 1217
33     # We may also need to know where python's site-packages subdirectory lives
34     python_version = 'python%s.%s'%(sys.version_info[0],sys.version_info[1])
35    
36 phornby 1243 # Install as a standard python package in /usr/lib64 if available, else in /usr/lib
37     if os.path.isdir( prefix+"/lib64/"+python_version+"/site-packages"):
38     sys_dir_packages = prefix+"/lib64/"+python_version+"/site-packages/esys"
39     sys_dir_libraries = prefix+"/lib64"
40 ksteube 1217 else:
41 phornby 1243 sys_dir_packages = prefix+"/lib/"+python_version+"/site-packages/esys"
42     sys_dir_libraries = prefix+"/lib"
43 ksteube 1217
44 phornby 1243 sys_dir_examples = prefix+"/share/doc/esys"
45    
46     source_root = Dir('#.').abspath
47    
48     dir_packages = os.path.join(source_root,"esys")
49     dir_examples = os.path.join(source_root,"examples")
50     dir_libraries = os.path.join(source_root,"lib")
51    
52     print " Default packages local installation: ", dir_packages
53     print " Default library local installation ", dir_libraries
54     print " Default example local installation: ", dir_examples
55 gross 1133 print "Install prefix is: ", prefix
56 phornby 1243 print " Default packages system installation: ", sys_dir_packages
57     print " Default library system installation ", sys_dir_libraries
58     print " Default example system installation: ", sys_dir_examples
59 gross 806
60 ksteube 1217 #==============================================================================================
61    
62 robwdcock 682 # Default options and options help text
63     # These are defaults and can be overridden using command line arguments or an options file.
64     # if the options_file or ARGUMENTS do not exist then the ones listed as default here are used
65     # DO NOT CHANGE THEM HERE
66 ksteube 1083 # Where to install?
67 gross 1133 #==============================================================================================
68     #
69     # get the options file if present:
70     #
71 phornby 1246 options_file = ARGUMENTS.get('options_file','')
72    
73     if not os.path.isfile(options_file) :
74     options_file = False
75    
76     if not options_file :
77     import socket
78 robwdcock 682 from string import ascii_letters,digits
79     hostname=""
80     for s in socket.gethostname().split('.')[0]:
81     if s in ascii_letters+digits:
82     hostname+=s
83     else:
84     hostname+="_"
85 phornby 1246 tmp = os.path.join("scons",hostname+"_options.py")
86    
87     if os.path.isfile(tmp) :
88     options_file = tmp
89    
90     IS_WINDOWS_PLATFORM = (os.name== "nt")
91    
92     # If you're not going to tell me then......
93     # FIXME: add one for the altix too.
94     if not options_file :
95     if IS_WINDOWS_PLATFORM :
96     options_file = "scons/windows_mscv71_options.py"
97     else:
98     options_file = "scons/linux_gcc_eg_options.py"
99    
100 gross 1133 # and load it
101     opts = Options(options_file, ARGUMENTS)
102     #================================================================
103     #
104     # check if UMFPACK is installed on the system:
105     #
106 gross 1149 uf_root=None
107     for i in [ 'UMFPACK', 'umfpack', 'ufsparse', 'UFSPARSE']:
108     if os.path.isdir(os.path.join(tools_prefix,'include',i)):
109     uf_root=i
110     print i," is used form ",tools_prefix
111     break
112     if not uf_root==None:
113     umf_path_default=os.path.join(tools_prefix,'include',uf_root)
114     umf_lib_path_default=os.path.join(tools_prefix,'lib')
115     umf_libs_default=['umfpack']
116     amd_path_default=os.path.join(tools_prefix,'include',uf_root)
117     amd_lib_path_default=os.path.join(tools_prefix,'lib')
118     amd_libs_default=['amd']
119     ufc_path_default=os.path.join(tools_prefix,'include',uf_root)
120 gross 1133 else:
121 gross 1149 umf_path_default=None
122     umf_lib_path_default=None
123     umf_libs_default=None
124     amd_path_default=None
125     amd_lib_path_default=None
126     amd_libs_default=None
127     ufc_path_default=None
128     #
129 gross 1133 #==========================================================================
130     #
131     # python installation:
132     #
133 phornby 1232 python_path_default=os.path.join(tools_prefix,'include','python%s.%s'%(sys.version_info[0],sys.version_info[1]))
134     python_lib_path_default=os.path.join(tools_prefix,'lib')
135 phornby 1235 python_lib_default="python%s.%s"%(sys.version_info[0],sys.version_info[1])
136 gross 1149
137 gross 1133 #==========================================================================
138     #
139     # boost installation:
140     #
141 phornby 1232 boost_path_default=os.path.join(tools_prefix,'include')
142 phornby 1235 boost_lib_path_default=os.path.join(tools_prefix,'lib')
143     boost_lib_default=['boost_python']
144 gross 1133 #==========================================================================
145     #
146     # check if netCDF is installed on the system:
147     #
148 phornby 1232 netCDF_path_default=os.path.join(tools_prefix,'include','netcdf-3')
149     netCDF_lib_path_default=os.path.join(tools_prefix,'lib','netcdf-3')
150 gross 1149
151     if os.path.isdir(netCDF_path_default) and os.path.isdir(netCDF_lib_path_default):
152     useNetCDF_default='yes'
153     netCDF_libs_default=[ 'netcdf_c++', 'netcdf' ]
154     else:
155     useNetCDF_default='no'
156     netCDF_path_default=None
157     netCDF_lib_path_default=None
158     netCDF_libs_default=None
159    
160 gross 1133 #==========================================================================
161     #
162     # compile:
163     #
164 phornby 1232 cc_flags_default='-O3 -std=c99 -ffast-math -fpic -Wno-unknown-pragmas -ansi -pedantic-errors'
165     cc_flags_debug_default='-g -O0 -ffast-math -std=c99 -fpic -Wno-unknown-pragmas -ansi -pedantic-errors'
166     cxx_flags_default='--no-warn -ansi'
167     cxx_flags_debug_default='--no-warn -ansi -DDOASSERT'
168 gross 1133 #==============================================================================================
169     # Default options and options help text
170     # These are defaults and can be overridden using command line arguments or an options file.
171     # if the options_file or ARGUMENTS do not exist then the ones listed as default here are used
172     # DO NOT CHANGE THEM HERE
173 robwdcock 682 opts.AddOptions(
174     # Where to install esys stuff
175 ksteube 1217 ('incinstall', 'where the esys headers will be installed', Dir('#.').abspath+'/include'),
176     ('libinstall', 'where the esys libraries will be installed', dir_libraries),
177     ('pyinstall', 'where the esys python modules will be installed', dir_packages),
178     ('exinstall', 'where the esys examples will be installed', dir_examples),
179 phornby 1243 ('sys_libinstall', 'where the system esys libraries will be installed', sys_dir_libraries),
180     ('sys_pyinstall', 'where the system esys python modules will be installed', sys_dir_packages),
181     ('sys_exinstall', 'where the system esys examples will be installed', sys_dir_examples),
182 ksteube 1217 ('src_zipfile', 'the source zip file will be installed.', Dir('#.').abspath+"/release/escript_src.zip"),
183     ('test_zipfile', 'the test zip file will be installed.', Dir('#.').abspath+"/release/escript_tests.zip"),
184     ('src_tarfile', 'the source tar file will be installed.', Dir('#.').abspath+"/release/escript_src.tar.gz"),
185     ('test_tarfile', 'the test tar file will be installed.', Dir('#.').abspath+"/release/escript_tests.tar.gz"),
186     ('examples_tarfile', 'the examples tar file will be installed.', Dir('#.').abspath+"/release/doc/escript_examples.tar.gz"),
187     ('examples_zipfile', 'the examples zip file will be installed.', Dir('#.').abspath+"/release/doc/escript_examples.zip"),
188     ('guide_pdf', 'name of the user guide in pdf format', Dir('#.').abspath+"/release/doc/user/guide.pdf"),
189     ('api_epydoc', 'name of the epydoc api docs directory', Dir('#.').abspath+"/release/doc/epydoc"),
190     ('guide_html', 'name of the directory for user guide in html format', Dir('#.').abspath+"/release/doc/user/html"),
191 ksteube 1215 ('api_doxygen', 'name of the doxygen api docs directory',prefix+"/release/doc/doxygen"),
192 robwdcock 682 # Compilation options
193 gross 700 BoolOption('dodebug', 'Do you want a debug build?', 'no'),
194 gross 1133 ('options_file', "Optional file containing preferred options. Ignored if it doesn't exist (default: scons/<hostname>_options.py)", options_file),
195 robwdcock 682 ('cc_defines','C/C++ defines to use', None),
196 gross 1133 ('cc_flags','C compiler flags to use (Release build)', cc_flags_default),
197     ('cc_flags_debug', 'C compiler flags to use (Debug build)', cc_flags_debug_default),
198     ('cxx_flags', 'C++ compiler flags to use (Release build)', cxx_flags_default),
199     ('cxx_flags_debug', 'C++ compiler flags to use (Debug build)', cxx_flags_debug_default),
200 robwdcock 682 ('ar_flags', 'Static library archiver flags to use', None),
201     ('sys_libs', 'System libraries to link with', None),
202 gross 700 ('tar_flags','flags for zip files','-c -z'),
203 robwdcock 682 # MKL
204 matt 863 PathOption('mkl_path', 'Path to MKL includes', None),
205     PathOption('mkl_lib_path', 'Path to MKL libs', None),
206 robwdcock 682 ('mkl_libs', 'MKL libraries to link with', None),
207     # SCSL
208 matt 863 PathOption('scsl_path', 'Path to SCSL includes', None),
209     PathOption('scsl_lib_path', 'Path to SCSL libs', None),
210 robwdcock 682 ('scsl_libs', 'SCSL libraries to link with', None),
211 bcumming 759 ('scsl_libs_MPI', 'SCSL libraries to link with for MPI build', None),
212 matt 863 # UMFPACK
213     PathOption('ufc_path', 'Path to UFconfig includes', ufc_path_default),
214     PathOption('umf_path', 'Path to UMFPACK includes', umf_path_default),
215     PathOption('umf_lib_path', 'Path to UMFPACK libs', umf_lib_path_default),
216 gross 806 ('umf_libs', 'UMFPACK libraries to link with', umf_libs_default),
217     # AMD (used by UMFPACK)
218 matt 863 PathOption('amd_path', 'Path to AMD includes', amd_path_default),
219     PathOption('amd_lib_path', 'Path to AMD libs', amd_lib_path_default),
220 gross 806 ('amd_libs', 'AMD libraries to link with', amd_libs_default),
221 gross 805 # BLAS
222 matt 863 PathOption('blas_path', 'Path to BLAS includes', None),
223     PathOption('blas_lib_path', 'Path to BLAS libs', None),
224 gross 806 ('blas_libs', 'BLAS libraries to link with', None),
225 gross 950 # netCDF
226 gross 1133 ('useNetCDF', 'switch on/off the usage of netCDF', useNetCDF_default),
227 gross 1028 PathOption('netCDF_path', 'Path to netCDF includes', netCDF_path_default),
228     PathOption('netCDF_lib_path', 'Path to netCDF libs', netCDF_lib_path_default),
229 gross 1133 ('netCDF_libs', 'netCDF C++ libraries to link with', netCDF_libs_default),
230 robwdcock 682 # Python
231 gross 685 # locations of include files for python
232 phornby 1243 # FIXME: python_path should be python_inc_path and the same for boost etc.
233 gross 1133 PathOption('python_path', 'Path to Python includes', python_path_default),
234     PathOption('python_lib_path', 'Path to Python libs', python_lib_path_default),
235 phornby 1235 ('python_lib', 'Python libraries to link with', python_lib_default),
236 phornby 1243 ('python_cmd', 'Python command', 'python'),
237 robwdcock 682 # Boost
238 gross 1133 PathOption('boost_path', 'Path to Boost includes', boost_path_default),
239 phornby 1235 PathOption('boost_lib_path', 'Path to Boost libs', boost_lib_path_default),
240     ('boost_lib', 'Boost libraries to link with', boost_lib_default),
241 robwdcock 682 # Doc building
242 ksteube 1216 # PathOption('doxygen_path', 'Path to Doxygen executable', None),
243 matt 863 # PathOption('epydoc_path', 'Path to Epydoc executable', None),
244 robwdcock 682 # PAPI
245 matt 863 PathOption('papi_path', 'Path to PAPI includes', None),
246     PathOption('papi_lib_path', 'Path to PAPI libs', None),
247 robwdcock 682 ('papi_libs', 'PAPI libraries to link with', None),
248 bcumming 759 # MPI
249     BoolOption('useMPI', 'Compile parallel version using MPI', 'no'),
250 robwdcock 682 )
251 gross 1133 #=================================================================================================
252     #
253     # Note: On the Altix the intel compilers are not automatically
254     # detected by scons intelc.py script. The Altix has a different directory
255     # path and in some locations the "modules" facility is used to support
256     # multiple compiler versions. This forces the need to import the users PATH
257     # environment which isn't the "scons way"
258     # This doesn't impact linux and windows which will use the default compiler (g++ or msvc, or the intel compiler if it is installed on both platforms)
259     # FIXME: Perhaps a modification to intelc.py will allow better support for ia64 on altix
260     #
261 phornby 1232
262 gross 1133 if IS_WINDOWS_PLATFORM:
263     env = Environment(tools = ['default', 'msvc'], options = opts)
264 robwdcock 682 else:
265 gross 1133 if os.uname()[4]=='ia64':
266     env = Environment(tools = ['default', 'intelc'], options = opts)
267     if env['CXX'] == 'icpc':
268     env['LINK'] = env['CXX'] # version >=9 of intel c++ compiler requires use of icpc to link in C++ runtimes (icc does not). FIXME: this behaviour could be directly incorporated into scons intelc.py
269     else:
270     env = Environment(tools = ['default'], options = opts)
271     Help(opts.GenerateHelpText(env))
272 phornby 1232
273 gross 1133 #=================================================================================================
274     #
275     # Initialise Scons Build Environment
276     # check for user environment variables we are interested in
277 gross 1024 try:
278 phornby 1243 tmp = os.environ['PYTHONPATH']
279     env['ENV']['PYTHONPATH'] = tmp
280 gross 1024 except KeyError:
281 phornby 1243 pass
282 gross 1024
283 phornby 1243 env.PrependENVPath('PYTHONPATH', source_root)
284    
285 gross 1024 try:
286 gross 1160 omp_num_threads = os.environ['OMP_NUM_THREADS']
287     except KeyError:
288     omp_num_threads = 1
289 phornby 1243
290 gross 1160 env['ENV']['OMP_NUM_THREADS'] = omp_num_threads
291    
292     try:
293 gross 1163 env['ENV']['DISPLAY'] = os.environ['DISPLAY']
294 jongui 1164 env['ENV']['XAUTHORITY'] = os.environ['XAUTHORITY']
295 gross 1163 except KeyError:
296     pass
297    
298     try:
299 phornby 1243 tmp = os.environ['PATH']
300     env['ENV']['PATH'] = tmp
301 gross 1024 except KeyError:
302 phornby 1243 pass
303    
304 gross 1024 try:
305 phornby 1243 tmp = os.environ['LD_LIBRARY_PATH']
306     env['ENV']['LD_LIBRARY_PATH'] = tmp
307 gross 1024 except KeyError:
308 phornby 1243 pass
309 gross 1133 #==========================================================================
310     #
311     # Add some customer builders
312     #
313 robwdcock 682 py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
314     env.Append(BUILDERS = {'PyCompile' : py_builder});
315    
316 phornby 1244 runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed',
317     src_suffix=env['PROGSUFFIX'], single_source=True)
318    
319 robwdcock 682 env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
320    
321     runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
322     env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
323    
324     # Convert the options which are held in environment variable into python variables for ease of handling and configure compilation options
325     try:
326     incinstall = env['incinstall']
327     env.Append(CPPPATH = [incinstall,])
328     except KeyError:
329 matt 863 incinstall = None
330 robwdcock 682 try:
331     libinstall = env['libinstall']
332 ksteube 1215 env.Append(LIBPATH = [libinstall,]) # Adds -L for building of libescript.so libfinley.so escriptcpp.so finleycpp.so
333 robwdcock 682 env.PrependENVPath('LD_LIBRARY_PATH', libinstall)
334 woo409 757 if env['PLATFORM'] == "win32":
335     env.PrependENVPath('PATH', libinstall)
336 phornby 1235 env.PrependENVPath('PATH', env['boost_lib_path'])
337 robwdcock 682 except KeyError:
338 matt 863 libinstall = None
339 robwdcock 682 try:
340 ksteube 1217 pyinstall = env['pyinstall'] # all targets will install into pyinstall/esys but PYTHONPATH points at straight pyinstall so you go import esys.escript etc
341 robwdcock 682 except KeyError:
342 matt 863 pyinstall = None
343 robwdcock 682 try:
344 ksteube 1217 exinstall = env['exinstall']
345     except KeyError:
346     exinstall = None
347     try:
348 phornby 1243 sys_libinstall = env['sys_libinstall']
349     except KeyError:
350     sys_libinstall = None
351     try:
352     sys_pyinstall = env['sys_pyinstall']
353     except KeyError:
354     sys_pyinstall = None
355     try:
356     sys_exinstall = env['sys_exinstall']
357     except KeyError:
358     sys_exinstall = None
359     try:
360 robwdcock 682 dodebug = env['dodebug']
361     except KeyError:
362 matt 863 dodebug = None
363 robwdcock 682 try:
364 bcumming 759 useMPI = env['useMPI']
365     except KeyError:
366 matt 863 useMPI = None
367 bcumming 759 try:
368 robwdcock 682 cc_defines = env['cc_defines']
369 woo409 757 env.Append(CPPDEFINES = cc_defines)
370 robwdcock 682 except KeyError:
371     pass
372 ksteube 817
373 phornby 1246
374 robwdcock 682 if dodebug:
375 bcumming 759 if useMPI:
376     try:
377     flags = env['cc_flags_debug_MPI']
378     env.Append(CCFLAGS = flags)
379     except KeyError:
380     pass
381 matt 863 else:
382 bcumming 759 try:
383 robwdcock 682 flags = env['cc_flags_debug']
384     env.Append(CCFLAGS = flags)
385 bcumming 759 except KeyError:
386 robwdcock 682 pass
387     else:
388 bcumming 759 if useMPI:
389 robwdcock 682 try:
390 bcumming 759 flags = env['cc_flags_MPI']
391     env.Append(CCFLAGS = flags)
392     except KeyError:
393     pass
394     else:
395     try:
396 robwdcock 682 flags = env['cc_flags']
397     env.Append(CCFLAGS = flags)
398     except KeyError:
399     pass
400     if dodebug:
401 bcumming 759 if useMPI:
402     try:
403     flags = env['cxx_flags_debug_MPI']
404     env.Append(CXXFLAGS = flags)
405     except KeyError:
406     pass
407     else:
408     try:
409     flags = env['cxx_flags_debug']
410     env.Append(CXXFLAGS = flags)
411     except KeyError:
412     pass
413 robwdcock 682 else:
414 bcumming 759 if useMPI:
415     try:
416     flags = env['cxx_flags_MPI']
417     env.Append(CXXFLAGS = flags)
418     except KeyError:
419     pass
420     else:
421     try:
422     flags = env['cxx_flags']
423     env.Append(CXXFLAGS = flags)
424     except KeyError:
425     pass
426 robwdcock 682 try:
427     flags = env['ar_flags']
428     env.Append(ARFLAGS = flags)
429     except KeyError:
430 matt 863 ar_flags = None
431 robwdcock 682 try:
432     sys_libs = env['sys_libs']
433     except KeyError:
434 gross 1133 sys_libs = []
435 robwdcock 682
436     try:
437 gross 700 tar_flags = env['tar_flags']
438     env.Replace(TARFLAGS = tar_flags)
439     except KeyError:
440     pass
441    
442     try:
443 robwdcock 682 includes = env['mkl_path']
444     env.Append(CPPPATH = [includes,])
445     except KeyError:
446     pass
447 gross 700
448 robwdcock 682 try:
449     lib_path = env['mkl_lib_path']
450     env.Append(LIBPATH = [lib_path,])
451     except KeyError:
452     pass
453 gross 700
454 gross 806 if useMPI:
455 gross 1133 mkl_libs = []
456 gross 806 else:
457     try:
458     mkl_libs = env['mkl_libs']
459     except KeyError:
460 gross 1133 mkl_libs = []
461 gross 806
462 robwdcock 682 try:
463     includes = env['scsl_path']
464     env.Append(CPPPATH = [includes,])
465     except KeyError:
466     pass
467 gross 806
468 robwdcock 682 try:
469     lib_path = env['scsl_lib_path']
470     env.Append(LIBPATH = [lib_path,])
471     except KeyError:
472     pass
473 gross 806
474 matt 863 if useMPI:
475 bcumming 759 try:
476     scsl_libs = env['scsl_libs_MPI']
477     except KeyError:
478 gross 1133 scsl_libs = []
479 matt 863 else:
480 bcumming 759 try:
481     scsl_libs = env['scsl_libs']
482     except KeyError:
483 gross 1133 scsl_libs = []
484 gross 805
485 robwdcock 682 try:
486     includes = env['umf_path']
487     env.Append(CPPPATH = [includes,])
488     except KeyError:
489     pass
490 gross 805
491 robwdcock 682 try:
492     lib_path = env['umf_lib_path']
493     env.Append(LIBPATH = [lib_path,])
494     except KeyError:
495     pass
496 gross 805
497 matt 863 if useMPI:
498 gross 1133 umf_libs = []
499 gross 806 else:
500     try:
501     umf_libs = env['umf_libs']
502     except KeyError:
503 gross 1133 umf_libs = []
504 gross 806
505 robwdcock 682 try:
506 gross 806 includes = env['ufc_path']
507     env.Append(CPPPATH = [includes,])
508 gross 805 except KeyError:
509     pass
510    
511     try:
512 gross 806 includes = env['amd_path']
513     env.Append(CPPPATH = [includes,])
514 robwdcock 682 except KeyError:
515 gross 806 pass
516 gross 805
517 robwdcock 682 try:
518 gross 806 lib_path = env['amd_lib_path']
519     env.Append(LIBPATH = [lib_path,])
520     except KeyError:
521     pass
522    
523 matt 863 if useMPI:
524 gross 1133 amd_libs = []
525 gross 806 else:
526     try:
527     amd_libs = env['amd_libs']
528     except KeyError:
529 gross 1133 amd_libs = []
530 gross 806
531     try:
532 gross 805 includes = env['blas_path']
533     env.Append(CPPPATH = [includes,])
534     except KeyError:
535     pass
536 gross 806
537 gross 805 try:
538     lib_path = env['blas_lib_path']
539     env.Append(LIBPATH = [lib_path,])
540     except KeyError:
541     pass
542 gross 806
543 gross 805 try:
544     blas_libs = env['blas_libs']
545     except KeyError:
546 gross 1133 blas_libs = []
547 gross 805
548     try:
549 gross 1023 useNetCDF = env['useNetCDF']
550 gross 950 except KeyError:
551 gross 1023 useNetCDF = 'yes'
552 gross 950 pass
553    
554 gross 1023 if useNetCDF == 'yes':
555     try:
556 phornby 1246 netCDF_libs = env['netCDF_libs']
557     except KeyError:
558     pass
559    
560     env.Append(LIBS = netCDF_libs)
561     env.Append(CPPDEFINES = [ 'USE_NETCDF' ])
562     try:
563 gross 1023 includes = env['netCDF_path']
564     env.Append(CPPPATH = [includes,])
565     except KeyError:
566     pass
567 gross 950
568 gross 1023 try:
569     lib_path = env['netCDF_lib_path']
570 gross 1133 if IS_WINDOWS_PLATFORM: env['ENV']['PATH']+=";"+lib_path
571     env.Append(LIBPATH = [ lib_path, ])
572 gross 1023 except KeyError:
573     pass
574     else:
575 phornby 1246 print "Warning: Installation is not configured with netCDF. Some I/O function may not be available."
576 gross 1133 netCDF_libs=[ ]
577 gross 1023
578 gross 950 try:
579 robwdcock 682 includes = env['boost_path']
580     env.Append(CPPPATH = [includes,])
581     except KeyError:
582     pass
583     try:
584 phornby 1235 lib_path = env['boost_lib_path']
585 robwdcock 682 env.Append(LIBPATH = [lib_path,])
586     except KeyError:
587     pass
588     try:
589 phornby 1235 boost_lib = env['boost_lib']
590 robwdcock 682 except KeyError:
591 phornby 1235 boost_lib = None
592 robwdcock 682 try:
593     includes = env['python_path']
594     env.Append(CPPPATH = [includes,])
595     except KeyError:
596     pass
597     try:
598     lib_path = env['python_lib_path']
599     env.Append(LIBPATH = [lib_path,])
600     except KeyError:
601     pass
602     try:
603 phornby 1235 python_lib = env['python_lib']
604 robwdcock 682 except KeyError:
605 phornby 1235 python_lib = None
606 robwdcock 682 try:
607     doxygen_path = env['doxygen_path']
608     except KeyError:
609 matt 863 doxygen_path = None
610 robwdcock 682 try:
611     epydoc_path = env['epydoc_path']
612     except KeyError:
613 matt 863 epydoc_path = None
614 robwdcock 682 try:
615     includes = env['papi_path']
616     env.Append(CPPPATH = [includes,])
617     except KeyError:
618     pass
619     try:
620     lib_path = env['papi_lib_path']
621     env.Append(LIBPATH = [lib_path,])
622     except KeyError:
623     pass
624     try:
625     papi_libs = env['papi_libs']
626     except KeyError:
627 matt 863 papi_libs = None
628 robwdcock 682
629 gross 707
630 gross 700 try:
631 gross 707 src_zipfile = env.File(env['src_zipfile'])
632 gross 700 except KeyError:
633 matt 863 src_zipfile = None
634 gross 700 try:
635 gross 707 test_zipfile = env.File(env['test_zipfile'])
636 gross 700 except KeyError:
637 matt 863 test_zipfile = None
638 gross 707 try:
639     examples_zipfile = env.File(env['examples_zipfile'])
640     except KeyError:
641 matt 863 examples_zipfile = None
642 gross 700
643     try:
644 gross 707 src_tarfile = env.File(env['src_tarfile'])
645 gross 700 except KeyError:
646 matt 863 src_tarfile = None
647 gross 700 try:
648 gross 707 test_tarfile = env.File(env['test_tarfile'])
649 gross 700 except KeyError:
650 matt 863 test_tarfile = None
651 gross 707 try:
652     examples_tarfile = env.File(env['examples_tarfile'])
653     except KeyError:
654 matt 863 examples_tarfile = None
655 gross 700
656     try:
657 gross 707 guide_pdf = env.File(env['guide_pdf'])
658 gross 700 except KeyError:
659 matt 863 guide_pdf = None
660 gross 700
661 gross 707 try:
662     guide_html_index = env.File('index.htm',env['guide_html'])
663     except KeyError:
664 matt 863 guide_html_index = None
665 gross 707
666 elspeth 712 try:
667     api_epydoc = env.Dir(env['api_epydoc'])
668     except KeyError:
669 matt 863 api_epydoc = None
670 elspeth 712
671 ksteube 1215 try:
672     api_doxygen = env.Dir(env['api_doxygen'])
673     except KeyError:
674     api_doxygen = None
675    
676 phornby 1246 # Python install - esys __init__.py
677     init_target = env.Command(pyinstall+'/__init__.py', None, Touch('$TARGET'))
678 phornby 1243
679     # FIXME: exinstall and friends related to examples are not working.
680 phornby 1246 build_target = env.Alias('build',[libinstall,incinstall,pyinstall,init_target])
681 phornby 1243
682     env.Default(build_target)
683    
684 gross 700 # Zipgets
685 matt 863 env.Alias('release_src',[ src_zipfile, src_tarfile ])
686 gross 700 env.Alias('release_tests',[ test_zipfile, test_tarfile])
687 gross 707 env.Alias('release_examples',[ examples_zipfile, examples_tarfile])
688 ksteube 1215 env.Alias('examples_zipfile',examples_zipfile)
689     env.Alias('examples_tarfile',examples_tarfile)
690 gross 720 env.Alias('api_epydoc',api_epydoc)
691 ksteube 1215 env.Alias('api_doxygen',api_doxygen)
692     env.Alias('guide_html_index',guide_html_index)
693 gross 807 env.Alias('guide_pdf', guide_pdf)
694 ksteube 1216 env.Alias('docs',[ 'release_examples', 'guide_pdf', api_epydoc, api_doxygen, guide_html_index])
695 gross 707 env.Alias('release', ['release_src', 'release_tests', 'docs'])
696 phornby 1243
697 phornby 1246 env.Alias('build_tests',build_target) # target to build all C++ tests
698     env.Alias('build_py_tests',build_target) # target to build all python tests
699 gross 706 env.Alias('build_all_tests', [ 'build_tests', 'build_py_tests' ] ) # target to build all python tests
700     env.Alias('run_tests', 'build_tests') # target to run all C++ test
701     env.Alias('py_tests', 'build_py_tests') # taget to run all released python tests
702 gross 705 env.Alias('all_tests', ['run_tests', 'py_tests']) # target to run all C++ and released python tests
703 robwdcock 682
704    
705     # Allow sconscripts to see the env
706 phornby 1246 Export(["env", "incinstall", "libinstall", "pyinstall", "exinstall", "dodebug",
707     "mkl_libs", "scsl_libs", "umf_libs", "amd_libs", "blas_libs",
708     "netCDF_libs",
709 phornby 1235 "boost_lib", "python_lib", "doxygen_path", "epydoc_path", "papi_libs",
710 phornby 1246 "sys_libs", "test_zipfile", "src_zipfile", "test_tarfile",
711     "src_tarfile", "examples_tarfile", "examples_zipfile",
712     "guide_pdf", "guide_html_index", "api_epydoc", "api_doxygen", "useMPI"
713     ])
714 robwdcock 682
715     # End initialisation section
716     # Begin configuration section
717 gross 700 # adds this file and the scons option directore to the source tar
718     release_srcfiles=[env.File('SConstruct'),]+[ env.File(x) for x in glob.glob('scons/*.py') ]
719     release_testfiles=[env.File('README_TESTS'),]
720 gross 706 env.Zip(src_zipfile, release_srcfiles)
721 gross 700 env.Zip(test_zipfile, release_testfiles)
722 gross 1133 try:
723     env.Tar(src_tarfile, release_srcfiles)
724     env.Tar(test_tarfile, release_testfiles)
725     except AttributeError:
726     pass
727 robwdcock 682 # Insert new components to be build here
728     # FIXME: might be nice to replace this verbosity with a list of targets and some
729     # FIXME: nifty python to create the lengthy but very similar env.Sconscript lines
730     # Third Party libraries
731     env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)
732     # C/C++ Libraries
733     env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
734 gross 958 # bruce is removed for now as it doesn't really do anything
735     # env.SConscript(dirs = ['bruce/src'], build_dir='build/$PLATFORM/bruce', duplicate=0)
736 robwdcock 682 env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
737     env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
738     env.SConscript(dirs = ['finley/src'], build_dir='build/$PLATFORM/finley', duplicate=0)
739     env.SConscript(dirs = ['modellib/py_src'], build_dir='build/$PLATFORM/modellib', duplicate=0)
740 gross 707 env.SConscript(dirs = ['doc'], build_dir='build/$PLATFORM/doc', duplicate=0)
741 matt 863 env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0)
742 gross 898 env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0)
743 bcumming 751
744     # added by Ben Cumming
745 matt 863 env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)
746 bcumming 784 #env.SConscript(dirs = ['../test'], build_dir='../test/build', duplicate=0)
747 phornby 1243
748    
749     syslib_install_target = env.installDirectory(sys_libinstall,libinstall)
750     syspy_install_target = env.installDirectory(sys_pyinstall,pyinstall,recursive=True)
751    
752     install_target = env.Alias("install", env.Flatten([syslib_install_target, syspy_install_target]) )

  ViewVC Help
Powered by ViewVC 1.1.26