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

Annotation of /branches/py3_attempt2/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3871 - (hide annotations)
Thu Mar 15 07:06:51 2012 UTC (7 years, 3 months ago) by jfenwick
File size: 39336 byte(s)
This version builds under py2 and has a problem with sorting.

1 ksteube 1811 ########################################################
2 jgs 214 #
3 jfenwick 2881 # Copyright (c) 2003-2010 by University of Queensland
4 ksteube 1811 # Earth Systems Science Computational Center (ESSCC)
5     # http://www.uq.edu.au/esscc
6     #
7     # Primary Business: Queensland, Australia
8     # Licensed under the Open Software License version 3.0
9     # http://www.opensource.org/licenses/osl-3.0.php
10     #
11     ########################################################
12 jgs 455
13 jfenwick 3259 EnsureSConsVersion(0,98,1)
14     EnsurePythonVersion(2,5)
15 ksteube 1811
16 jfenwick 3259 import sys, os, platform, re
17     from distutils import sysconfig
18     from site_init import *
19 jfenwick 3851 import subprocess
20     from subprocess import PIPE, Popen
21 jgs 214
22 jfenwick 3259 # Version number to check for in options file. Increment when new features are
23     # added or existing options changed.
24 caltinay 3597 REQUIRED_OPTS_VERSION=201
25 ksteube 1705
26     # MS Windows support, many thanks to PH
27 jfenwick 3259 IS_WINDOWS = (os.name == 'nt')
28 gross 806
29 jfenwick 3259 ########################## Determine options file ############################
30     # 1. command line
31     # 2. scons/<hostname>_options.py
32     # 3. name as part of a cluster
33 jfenwick 2391 options_file=ARGUMENTS.get('options_file', None)
34     if not options_file:
35 jfenwick 3259 ext_dir = os.path.join(os.getcwd(), 'scons')
36     hostname = platform.node().split('.')[0]
37     for name in hostname, effectiveName(hostname):
38     mangledhostname = re.sub('[^0-9a-zA-Z]', '_', hostname)
39     options_file = os.path.join(ext_dir, mangledhostname+'_options.py')
40     if os.path.isfile(options_file): break
41 jfenwick 2391
42 ksteube 1866 if not os.path.isfile(options_file):
43 jfenwick 3259 print("\nWARNING:\nOptions file %s" % options_file)
44     print("not found! Default options will be used which is most likely suboptimal.")
45     print("It is recommended that you copy one of the TEMPLATE files in the scons/")
46     print("subdirectory and customize it to your needs.\n")
47     options_file = None
48 ksteube 1217
49 jfenwick 3259 ############################### Build options ################################
50 gross 1149
51 jfenwick 3259 default_prefix='/usr'
52 jfenwick 3618 mpi_flavours=('no', 'none', 'MPT', 'MPICH', 'MPICH2', 'OPENMPI', 'INTELMPI')
53 jfenwick 3259 lapack_flavours=('none', 'clapack', 'mkl')
54 jfenwick 2430
55 jfenwick 3259 vars = Variables(options_file, ARGUMENTS)
56     vars.AddVariables(
57     PathVariable('options_file', 'Path to options file', options_file, PathVariable.PathIsFile),
58     PathVariable('prefix', 'Installation prefix', Dir('#.').abspath, PathVariable.PathIsDirCreate),
59 caltinay 3349 PathVariable('build_dir', 'Top-level build directory', Dir('#/build').abspath, PathVariable.PathIsDirCreate),
60 jfenwick 3259 BoolVariable('verbose', 'Output full compile/link lines', False),
61     # Compiler/Linker options
62     ('cc', 'Path to C compiler', 'default'),
63     ('cxx', 'Path to C++ compiler', 'default'),
64     ('cc_flags', 'Base C/C++ compiler flags', 'default'),
65     ('cc_optim', 'Additional C/C++ flags for a non-debug build', 'default'),
66     ('cc_debug', 'Additional C/C++ flags for a debug build', 'default'),
67 caltinay 2967 ('cc_extra', 'Extra C compiler flags', ''),
68     ('cxx_extra', 'Extra C++ compiler flags', ''),
69 ksteube 1771 ('ld_extra', 'Extra linker flags', ''),
70 jfenwick 3259 BoolVariable('werror','Treat compiler warnings as errors', True),
71     BoolVariable('debug', 'Compile with debug flags', False),
72     BoolVariable('openmp', 'Compile parallel version using OpenMP', False),
73     ('omp_flags', 'OpenMP compiler flags', 'default'),
74     ('omp_ldflags', 'OpenMP linker flags', 'default'),
75     # Mandatory libraries
76     ('boost_prefix', 'Prefix/Paths of boost installation', default_prefix),
77 jfenwick 3338 ('boost_libs', 'Boost libraries to link with', ['boost_python-mt']),
78 caltinay 3597 # Mandatory for tests
79     ('cppunit_prefix', 'Prefix/Paths of CppUnit installation', default_prefix),
80     ('cppunit_libs', 'CppUnit libraries to link with', ['cppunit']),
81 jfenwick 3259 # Optional libraries and options
82     EnumVariable('mpi', 'Compile parallel version using MPI flavour', 'none', allowed_values=mpi_flavours),
83     ('mpi_prefix', 'Prefix/Paths of MPI installation', default_prefix),
84     ('mpi_libs', 'MPI shared libraries to link with', ['mpi']),
85     BoolVariable('netcdf', 'Enable netCDF file support', False),
86     ('netcdf_prefix', 'Prefix/Paths of netCDF installation', default_prefix),
87     ('netcdf_libs', 'netCDF libraries to link with', ['netcdf_c++', 'netcdf']),
88     BoolVariable('parmetis', 'Enable ParMETIS (requires MPI)', False),
89     ('parmetis_prefix', 'Prefix/Paths of ParMETIS installation', default_prefix),
90     ('parmetis_libs', 'ParMETIS libraries to link with', ['parmetis', 'metis']),
91     BoolVariable('papi', 'Enable PAPI', False),
92     ('papi_prefix', 'Prefix/Paths to PAPI installation', default_prefix),
93 ksteube 1705 ('papi_libs', 'PAPI libraries to link with', ['papi']),
94 jfenwick 3259 BoolVariable('papi_instrument_solver', 'Use PAPI to instrument each iteration of the solver', False),
95     BoolVariable('mkl', 'Enable the Math Kernel Library', False),
96     ('mkl_prefix', 'Prefix/Paths to MKL installation', default_prefix),
97     ('mkl_libs', 'MKL libraries to link with', ['mkl_solver','mkl_em64t','guide','pthread']),
98     BoolVariable('umfpack', 'Enable UMFPACK', False),
99     ('umfpack_prefix', 'Prefix/Paths to UMFPACK installation', default_prefix),
100     ('umfpack_libs', 'UMFPACK libraries to link with', ['umfpack']),
101 lgao 3508 BoolVariable('boomeramg', 'Enable BoomerAMG', False),
102     ('boomeramg_prefix', 'Prefix/Paths to BoomerAMG installation', default_prefix),
103     ('boomeramg_libs', 'BoomerAMG libraries to link with', ['boomeramg']),
104 jfenwick 3259 EnumVariable('lapack', 'Set LAPACK flavour', 'none', allowed_values=lapack_flavours),
105     ('lapack_prefix', 'Prefix/Paths to LAPACK installation', default_prefix),
106     ('lapack_libs', 'LAPACK libraries to link with', []),
107     BoolVariable('silo', 'Enable the Silo file format in weipa', False),
108     ('silo_prefix', 'Prefix/Paths to Silo installation', default_prefix),
109 caltinay 2184 ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
110 jfenwick 3259 BoolVariable('visit', 'Enable the VisIt simulation interface', False),
111     ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),
112     ('visit_libs', 'VisIt libraries to link with', ['simV2']),
113     BoolVariable('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', False),
114 jfenwick 3506 BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
115 jfenwick 3259 # Advanced settings
116     #dudley_assemble_flags = -funroll-loops to actually do something
117     ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),
118     # To enable passing function pointers through python
119     BoolVariable('iknowwhatimdoing', 'Allow non-standard C', False),
120     # An option for specifying the compiler tools (see windows branch)
121     ('tools_names', 'Compiler tools to use', ['default']),
122     ('env_export', 'Environment variables to be passed to tools',[]),
123     EnumVariable('forcelazy', 'For testing use only - set the default value for autolazy', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),
124     EnumVariable('forcecollres', 'For testing use only - set the default value for force resolving collective ops', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),
125     # finer control over library building, intel aggressive global optimisation
126     # works with dynamic libraries on windows.
127 caltinay 3598 ('build_shared', 'Build dynamic libraries only', False),
128 jfenwick 3259 ('sys_libs', 'Extra libraries to link with', []),
129     ('escript_opts_version', 'Version of options file (do not specify on command line)'),
130 jfenwick 3618 ('SVN_VERSION', 'Do not use from options file', -2),
131 jfenwick 3851 ('pythoncmd', 'which python to compile with','python'),
132 robwdcock 682 )
133 phornby 1232
134 jfenwick 3259 ##################### Create environment and help text #######################
135 jfenwick 3078
136 jfenwick 3259 # Intel's compiler uses regular expressions improperly and emits a warning
137     # about failing to find the compilers. This warning can be safely ignored.
138 jfenwick 3078
139 caltinay 3319 # PATH is needed so the compiler, linker and tools are found if they are not
140     # in default locations.
141     env = Environment(tools = ['default'], options = vars,
142     ENV = {'PATH': os.environ['PATH']})
143 jfenwick 3259 if env['tools_names'] != 'default':
144 caltinay 3319 env = Environment(tools = ['default'] + env['tools_names'], options = vars,
145     ENV = {'PATH' : os.environ['PATH']})
146 jfenwick 3078
147 jfenwick 3259 if options_file:
148     opts_valid=False
149     if 'escript_opts_version' in env.Dictionary() and \
150     int(env['escript_opts_version']) >= REQUIRED_OPTS_VERSION:
151     opts_valid=True
152     if opts_valid:
153     print("Using options in %s." % options_file)
154     else:
155     print("\nOptions file %s" % options_file)
156     print("is outdated! Please update the file by examining one of the TEMPLATE")
157     print("files in the scons/ subdirectory and setting escript_opts_version to %d.\n"%REQUIRED_OPTS_VERSION)
158     Exit(1)
159 jfenwick 3078
160 jfenwick 3259 # Generate help text (scons -h)
161     Help(vars.GenerateHelpText(env))
162 jfenwick 3078
163 jfenwick 3259 # Check for superfluous options
164 caltinay 3268 if len(vars.UnknownVariables())>0:
165     for k in vars.UnknownVariables():
166     print("Unknown option '%s'" % k)
167     Exit(1)
168 jfenwick 3078
169 jfenwick 3259 #################### Make sure install directories exist #####################
170 ksteube 1705
171 caltinay 3349 env['BUILD_DIR']=env['build_dir']
172 jfenwick 3259 prefix=Dir(env['prefix']).abspath
173     env['incinstall'] = os.path.join(prefix, 'include')
174     env['bininstall'] = os.path.join(prefix, 'bin')
175     env['libinstall'] = os.path.join(prefix, 'lib')
176     env['pyinstall'] = os.path.join(prefix, 'esys')
177 jfenwick 2604 if not os.path.isdir(env['bininstall']):
178     os.makedirs(env['bininstall'])
179     if not os.path.isdir(env['libinstall']):
180     os.makedirs(env['libinstall'])
181     if not os.path.isdir(env['pyinstall']):
182     os.makedirs(env['pyinstall'])
183    
184 jfenwick 3259 env.Append(CPPPATH = [env['incinstall']])
185     env.Append(LIBPATH = [env['libinstall']])
186 jfenwick 2603
187 jfenwick 3259 ################# Fill in compiler options if not set above ##################
188 ksteube 1312
189 jfenwick 3259 if env['cc'] != 'default': env['CC']=env['cc']
190     if env['cxx'] != 'default': env['CXX']=env['cxx']
191 gross 1024
192 jfenwick 3259 # version >=9 of intel C++ compiler requires use of icpc to link in C++
193     # runtimes (icc does not)
194     if not IS_WINDOWS and os.uname()[4]=='ia64' and env['CXX']=='icpc':
195     env['LINK'] = env['CXX']
196 phornby 1243
197 jfenwick 3259 # default compiler/linker options
198     cc_flags = ''
199     cc_optim = ''
200     cc_debug = ''
201     omp_flags = ''
202     omp_ldflags = ''
203     fatalwarning = '' # switch to turn warnings into errors
204     sysheaderopt = '' # how to indicate that a header is a system header
205 jfenwick 2130
206 jfenwick 3259 # env['CC'] might be a full path
207     cc_name=os.path.basename(env['CC'])
208 caltinay 2882
209 jfenwick 3259 if cc_name == 'icc':
210     # Intel compiler
211     cc_flags = "-std=c99 -fPIC -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"
212     cc_optim = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"
213     cc_debug = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
214     omp_flags = "-openmp -openmp_report0"
215 caltinay 3814 omp_ldflags = "-openmp -openmp_report0 -lpthread"
216 jfenwick 3259 fatalwarning = "-Werror"
217     elif cc_name[:3] == 'gcc':
218     # GNU C on any system
219     cc_flags = "-pedantic -Wall -fPIC -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing -finline-functions"
220     cc_optim = "-O3"
221     cc_debug = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
222     omp_flags = "-fopenmp"
223     omp_ldflags = "-fopenmp"
224     fatalwarning = "-Werror"
225     sysheaderopt = "-isystem"
226     elif cc_name == 'cl':
227     # Microsoft Visual C on Windows
228     cc_flags = "/EHsc /MD /GR /wd4068 /D_USE_MATH_DEFINES /DDLL_NETCDF"
229     cc_optim = "/O2 /Op /W3"
230     cc_debug = "/Od /RTCcsu /ZI /DBOUNDS_CHECK"
231     fatalwarning = "/WX"
232     elif cc_name == 'icl':
233     # Intel C on Windows
234     cc_flags = '/EHsc /GR /MD'
235     cc_optim = '/fast /Oi /W3 /Qssp /Qinline-factor- /Qinline-min-size=0 /Qunroll'
236     cc_debug = '/Od /RTCcsu /Zi /Y- /debug:all /Qtrapuv'
237     omp_flags = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'
238     omp_ldflags = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'
239 phornby 1243
240 jfenwick 3259 # set defaults if not otherwise specified
241     if env['cc_flags'] == 'default': env['cc_flags'] = cc_flags
242     if env['cc_optim'] == 'default': env['cc_optim'] = cc_optim
243     if env['cc_debug'] == 'default': env['cc_debug'] = cc_debug
244     if env['omp_flags'] == 'default': env['omp_flags'] = omp_flags
245     if env['omp_ldflags'] == 'default': env['omp_ldflags'] = omp_ldflags
246     if env['cc_extra'] != '': env.Append(CFLAGS = env['cc_extra'])
247     if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
248     if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
249 jfenwick 2130
250 jfenwick 3871
251     env.Append(CPPDEFINES=['ESPYTHON3'])
252    
253 jfenwick 3259 # set up the autolazy values
254     if env['forcelazy'] == 'on':
255     env.Append(CPPDEFINES=['FAUTOLAZYON'])
256     elif env['forcelazy'] == 'off':
257     env.Append(CPPDEFINES=['FAUTOLAZYOFF'])
258 ksteube 1312
259 jfenwick 3259 # set up the collective resolve values
260     if env['forcecollres'] == 'on':
261     env.Append(CPPDEFINES=['FRESCOLLECTON'])
262     elif env['forcecollres'] == 'off':
263     env.Append(CPPDEFINES=['FRESCOLLECTOFF'])
264 jfenwick 2273
265 jfenwick 3259 # allow non-standard C if requested
266 jfenwick 2827 if env['iknowwhatimdoing']:
267 jfenwick 3259 env.Append(CPPDEFINES=['IKNOWWHATIMDOING'])
268 jfenwick 2827
269 jfenwick 3259 # Disable OpenMP if no flags provided
270     if env['openmp'] and env['omp_flags'] == '':
271     print("OpenMP requested but no flags provided - disabling OpenMP!")
272     env['openmp'] = False
273 gross 1160
274 jfenwick 3259 if env['openmp']:
275     env.Append(CCFLAGS = env['omp_flags'])
276     if env['omp_ldflags'] != '': env.Append(LINKFLAGS = env['omp_ldflags'])
277     else:
278     env['omp_flags']=''
279     env['omp_ldflags']=''
280 ksteube 1312
281 jfenwick 3259 # add debug/non-debug compiler flags
282     if env['debug']:
283     env.Append(CCFLAGS = env['cc_debug'])
284 gross 2423 else:
285 jfenwick 3259 env.Append(CCFLAGS = env['cc_optim'])
286 gross 1163
287 jfenwick 3259 # always add cc_flags
288     env.Append(CCFLAGS = env['cc_flags'])
289 phornby 1243
290 jfenwick 3259 # add system libraries
291     env.AppendUnique(LIBS = env['sys_libs'])
292 gross 2363
293 jfenwick 3618
294     global_revision=ARGUMENTS.get('SVN_VERSION', None)
295     if global_revision:
296     global_revision = re.sub(':.*', '', global_revision)
297     global_revision = re.sub('[^0-9]', '', global_revision)
298     if global_revision == '': global_revision='-2'
299     else:
300     # Get the global Subversion revision number for the getVersion() method
301     try:
302 jfenwick 3259 global_revision = os.popen('svnversion -n .').read()
303     global_revision = re.sub(':.*', '', global_revision)
304     global_revision = re.sub('[^0-9]', '', global_revision)
305     if global_revision == '': global_revision='-2'
306 jfenwick 3618 except:
307 jfenwick 3259 global_revision = '-1'
308 caltinay 3271 env['svn_revision']=global_revision
309 jfenwick 3259 env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
310 gross 2363
311 jfenwick 3259 if IS_WINDOWS:
312 caltinay 3602 if not env['build_shared']:
313 jfenwick 3259 env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
314     env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
315 gross 2363
316 jfenwick 3259 ###################### Copy required environment vars ########################
317 gross 2363
318 jfenwick 3259 # Windows doesn't use LD_LIBRARY_PATH but PATH instead
319     if IS_WINDOWS:
320     LD_LIBRARY_PATH_KEY='PATH'
321     env['ENV']['LD_LIBRARY_PATH']=''
322     else:
323     LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'
324 robwdcock 682
325 caltinay 3319 # the following env variables are exported for the unit tests
326 phornby 1244
327 jfenwick 3259 for key in 'OMP_NUM_THREADS', 'ESCRIPT_NUM_PROCS', 'ESCRIPT_NUM_NODES':
328     try:
329     env['ENV'][key] = os.environ[key]
330     except KeyError:
331     env['ENV'][key] = 1
332 robwdcock 682
333 jfenwick 3259 env_export=env['env_export']
334 caltinay 3466 env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','TMPDIR','TEMP','TMP'])
335 robwdcock 682
336 jfenwick 3259 for key in set(env_export):
337     try:
338     env['ENV'][key] = os.environ[key]
339     except KeyError:
340     pass
341 ksteube 1312
342 jfenwick 3259 try:
343     env.PrependENVPath(LD_LIBRARY_PATH_KEY, os.environ[LD_LIBRARY_PATH_KEY])
344     except KeyError:
345     pass
346 ksteube 1312
347 jfenwick 3259 # these shouldn't be needed
348     #for key in 'C_INCLUDE_PATH','CPLUS_INCLUDE_PATH','LIBRARY_PATH':
349     # try:
350     # env['ENV'][key] = os.environ[key]
351     # except KeyError:
352     # pass
353 ksteube 1312
354 jfenwick 3259 try:
355     env['ENV']['PYTHONPATH'] = os.environ['PYTHONPATH']
356     except KeyError:
357     pass
358 ksteube 1312
359 jfenwick 3259 ######################## Add some custom builders ############################
360 ksteube 1312
361 jfenwick 3851 if env['pythoncmd']=='python':
362     py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
363     else:
364 jfenwick 3871 py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
365 jfenwick 3259 env.Append(BUILDERS = {'PyCompile' : py_builder});
366 gross 2423
367 jfenwick 3259 runUnitTest_builder = Builder(action = runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
368     env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
369 gross 2423
370 jfenwick 3259 runPyUnitTest_builder = Builder(action = runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
371     env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
372 ksteube 1756
373 jfenwick 3259 epstopdfbuilder = Builder(action = eps2pdf, suffix='.pdf', src_suffix='.eps', single_source=True)
374     env.Append(BUILDERS = {'EpsToPDF' : epstopdfbuilder});
375 ksteube 817
376 jfenwick 3259 ############################ Dependency checks ###############################
377 phornby 1246
378 jfenwick 3259 # Create a Configure() environment to check for compilers and python
379     conf = Configure(env.Clone())
380 phornby 1634
381 jfenwick 3259 ######## Test that the compilers work
382 ksteube 1705
383 jfenwick 3259 if 'CheckCC' in dir(conf): # exists since scons 1.1.0
384     if not conf.CheckCC():
385     print("Cannot run C compiler '%s' (check config.log)" % (env['CC']))
386     Exit(1)
387     if not conf.CheckCXX():
388     print("Cannot run C++ compiler '%s' (check config.log)" % (env['CXX']))
389     Exit(1)
390     else:
391     if not conf.CheckFunc('printf', language='c'):
392     print("Cannot run C compiler '%s' (check config.log)" % (env['CC']))
393     Exit(1)
394     if not conf.CheckFunc('printf', language='c++'):
395     print("Cannot run C++ compiler '%s' (check config.log)" % (env['CXX']))
396     Exit(1)
397 ksteube 1705
398 phornby 1789 if conf.CheckFunc('gethostname'):
399 jfenwick 3259 conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])
400 gross 806
401 jfenwick 3259 ######## Python headers & library (required)
402 gross 806
403 jfenwick 3259 python_inc_path=sysconfig.get_python_inc()
404     if IS_WINDOWS:
405     python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
406 caltinay 3393 elif env['PLATFORM']=='darwin':
407     python_lib_path=sysconfig.get_config_var('LIBPL')
408 jfenwick 3259 else:
409     python_lib_path=sysconfig.get_config_var('LIBDIR')
410     #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
411     if IS_WINDOWS:
412     python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
413     else:
414     python_libs=['python'+sysconfig.get_python_version()]
415 jfenwick 2130
416 jfenwick 3851 #if we want to use a python other than the one scons is running
417     if env['pythoncmd']!='python':
418 jfenwick 3871 print "Need to try to use LDLIBRARY config variable to get real name of library if the setup fails ... may need to remove the old lib (or copy before adding)"
419 jfenwick 3851 py3scons=False # Is scons running on python3?
420     initstring='from __future__ import print_function;from distutils import sysconfig;'
421     if IS_WINDOWS:
422     cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
423     else:
424     cmd='print("python"+sysconfig.get_python_version())'
425     p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
426     python_libs=p.stdout.readline()
427     if type(python_libs)!=str():
428     py3scons=True
429     python_libs=python_libs.encode()
430     p.wait()
431     python_libs=python_libs.strip()
432 jfenwick 3871 python_libs="python3.2mu"
433    
434 jfenwick 3851 # Now we know whether we are using python3 or not
435     p=Popen([env['pythoncmd'], '-c', initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
436     python_inc_path=p.stdout.readline()
437     if py3scons:
438     python_inc_path=python_inc_path.encode()
439     p.wait()
440     python_inc_path=python_inc_path.strip()
441     if IS_WINDOWS:
442     cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
443     elif env['PLATFORM']=='darwin':
444     cmd="sysconfig.get_config_var(\"LIBPL\")"
445     else:
446     cmd="sysconfig.get_config_var(\"LIBDIR\")"
447    
448     p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
449     python_lib_path=p.stdout.readline()
450     if py3scons:
451     python_lib_path=python_lib_path.decode()
452     p.wait()
453     python_lib_path=python_lib_path.strip()
454    
455 jfenwick 3259 if sysheaderopt == '':
456     conf.env.AppendUnique(CPPPATH = [python_inc_path])
457 jfenwick 2130 else:
458 jfenwick 3259 conf.env.Append(CCFLAGS = [sysheaderopt, python_inc_path])
459 jfenwick 2130
460 jfenwick 3259 conf.env.AppendUnique(LIBPATH = [python_lib_path])
461     conf.env.AppendUnique(LIBS = python_libs)
462     # The wrapper script needs to find the libs
463     conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, python_lib_path)
464 gross 805
465 ksteube 1705 if not conf.CheckCHeader('Python.h'):
466 jfenwick 3259 print("Cannot find python include files (tried 'Python.h' in directory %s)" % (python_inc_path))
467     Exit(1)
468 gross 2284 if not conf.CheckFunc('Py_Exit'):
469 jfenwick 3259 print("Cannot find python library method Py_Main (tried %s in directory %s)" % (python_libs, python_lib_path))
470     Exit(1)
471 gross 805
472 jfenwick 3871 ## reuse conf to check for numpy header (optional)
473     #if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
474     # conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
475     # conf.env['numpy_h']=True
476     #else:
477     # conf.env['numpy_h']=False
478 caltinay 3784
479 jfenwick 3871
480     # This is until we can work out how to make the checks in python 3
481     conf.env['numpy_h']=False
482    
483    
484 ksteube 1705 # Commit changes to environment
485     env = conf.Finish()
486 ksteube 1312
487 jfenwick 3259 ######## boost (required)
488 ksteube 1312
489 jfenwick 3259 boost_inc_path,boost_lib_path=findLibWithHeader(env, env['boost_libs'], 'boost/python.hpp', env['boost_prefix'], lang='c++')
490     if sysheaderopt == '':
491     env.AppendUnique(CPPPATH = [boost_inc_path])
492 ksteube 1705 else:
493 jfenwick 3259 # This is required because we can't -isystem /usr/include since it breaks
494     # std includes
495     if os.path.normpath(boost_inc_path) == '/usr/include':
496     conf.env.Append(CCFLAGS=[sysheaderopt, os.path.join(boost_inc_path,'boost')])
497     else:
498     env.Append(CCFLAGS=[sysheaderopt, boost_inc_path])
499 ksteube 1312
500 jfenwick 3259 env.AppendUnique(LIBPATH = [boost_lib_path])
501     env.AppendUnique(LIBS = env['boost_libs'])
502     env.PrependENVPath(LD_LIBRARY_PATH_KEY, boost_lib_path)
503 ksteube 1705
504 jfenwick 3259 ######## numpy (required)
505 ksteube 1705
506 jfenwick 3851 if env['pythoncmd']=='python':
507     try:
508     from numpy import identity
509     except ImportError:
510     print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
511     Exit(1)
512     else:
513     p=subprocess.call([env['pythoncmd'],'-c','import numpy'])
514     if p!=0:
515     print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
516     Exit(1)
517 ksteube 1705
518 caltinay 3597 ######## CppUnit (required for tests)
519    
520     try:
521     cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')
522     env.AppendUnique(CPPPATH = [cppunit_inc_path])
523     env.AppendUnique(LIBPATH = [cppunit_lib_path])
524     env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)
525     env['cppunit']=True
526     except:
527     env['cppunit']=False
528    
529 jfenwick 3259 ######## VTK (optional)
530 ksteube 1705
531 jfenwick 3259 if env['pyvisi']:
532     try:
533     import vtk
534     env['pyvisi'] = True
535     except ImportError:
536     print("Cannot import vtk, disabling pyvisi.")
537     env['pyvisi'] = False
538 ksteube 1312
539 jfenwick 3259 ######## netCDF (optional)
540 gross 806
541 jfenwick 3259 netcdf_inc_path=''
542     netcdf_lib_path=''
543     if env['netcdf']:
544     netcdf_inc_path,netcdf_lib_path=findLibWithHeader(env, env['netcdf_libs'], 'netcdf.h', env['netcdf_prefix'], lang='c++')
545     env.AppendUnique(CPPPATH = [netcdf_inc_path])
546     env.AppendUnique(LIBPATH = [netcdf_lib_path])
547     env.AppendUnique(LIBS = env['netcdf_libs'])
548     env.PrependENVPath(LD_LIBRARY_PATH_KEY, netcdf_lib_path)
549     env.Append(CPPDEFINES = ['USE_NETCDF'])
550 gross 806
551 jfenwick 3259 ######## PAPI (optional)
552 gross 805
553 jfenwick 3259 papi_inc_path=''
554     papi_lib_path=''
555     if env['papi']:
556     papi_inc_path,papi_lib_path=findLibWithHeader(env, env['papi_libs'], 'papi.h', env['papi_prefix'], lang='c')
557     env.AppendUnique(CPPPATH = [papi_inc_path])
558     env.AppendUnique(LIBPATH = [papi_lib_path])
559     env.AppendUnique(LIBS = env['papi_libs'])
560     env.PrependENVPath(LD_LIBRARY_PATH_KEY, papi_lib_path)
561     env.Append(CPPDEFINES = ['BLOCKPAPI'])
562 phornby 1246
563 jfenwick 3259 ######## MKL (optional)
564 jfenwick 2787
565 jfenwick 3259 mkl_inc_path=''
566     mkl_lib_path=''
567     if env['mkl']:
568     mkl_inc_path,mkl_lib_path=findLibWithHeader(env, env['mkl_libs'], 'mkl_solver.h', env['mkl_prefix'], lang='c')
569     env.AppendUnique(CPPPATH = [mkl_inc_path])
570     env.AppendUnique(LIBPATH = [mkl_lib_path])
571     env.AppendUnique(LIBS = env['mkl_libs'])
572     env.PrependENVPath(LD_LIBRARY_PATH_KEY, mkl_lib_path)
573     env.Append(CPPDEFINES = ['MKL'])
574 gross 950
575 jfenwick 3259 ######## UMFPACK (optional)
576 ksteube 1705
577 jfenwick 3259 umfpack_inc_path=''
578     umfpack_lib_path=''
579     if env['umfpack']:
580     umfpack_inc_path,umfpack_lib_path=findLibWithHeader(env, env['umfpack_libs'], 'umfpack.h', env['umfpack_prefix'], lang='c')
581     env.AppendUnique(CPPPATH = [umfpack_inc_path])
582     env.AppendUnique(LIBPATH = [umfpack_lib_path])
583     env.AppendUnique(LIBS = env['umfpack_libs'])
584     env.PrependENVPath(LD_LIBRARY_PATH_KEY, umfpack_lib_path)
585     env.Append(CPPDEFINES = ['UMFPACK'])
586 ksteube 1705
587 jfenwick 3259 ######## LAPACK (optional)
588 ksteube 1705
589 jfenwick 3259 if env['lapack']=='mkl' and not env['mkl']:
590     print("mkl_lapack requires MKL!")
591     Exit(1)
592 ksteube 1705
593 jfenwick 3259 env['uselapack'] = env['lapack']!='none'
594     lapack_inc_path=''
595     lapack_lib_path=''
596 jfenwick 2742 if env['uselapack']:
597 jfenwick 3259 header='clapack.h'
598     if env['lapack']=='mkl':
599     env.AppendUnique(CPPDEFINES = ['MKL_LAPACK'])
600     header='mkl_lapack.h'
601     lapack_inc_path,lapack_lib_path=findLibWithHeader(env, env['lapack_libs'], header, env['lapack_prefix'], lang='c')
602     env.AppendUnique(CPPPATH = [lapack_inc_path])
603     env.AppendUnique(LIBPATH = [lapack_lib_path])
604     env.AppendUnique(LIBS = env['lapack_libs'])
605     env.Append(CPPDEFINES = ['USE_LAPACK'])
606 jfenwick 2742
607 jfenwick 3259 ######## Silo (optional)
608 jfenwick 2742
609 jfenwick 3259 silo_inc_path=''
610     silo_lib_path=''
611     if env['silo']:
612     silo_inc_path,silo_lib_path=findLibWithHeader(env, env['silo_libs'], 'silo.h', env['silo_prefix'], lang='c')
613     env.AppendUnique(CPPPATH = [silo_inc_path])
614     env.AppendUnique(LIBPATH = [silo_lib_path])
615     # Note that we do not add the libs since they are only needed for the
616     # weipa library and tools.
617     #env.AppendUnique(LIBS = [env['silo_libs']])
618 ksteube 1459
619 jfenwick 3506 ######## VSL random numbers (optional)
620     if env['vsl_random']:
621     env.Append(CPPDEFINES = ['MKLRANDOM'])
622    
623 jfenwick 3259 ######## VisIt (optional)
624 robwdcock 682
625 jfenwick 3259 visit_inc_path=''
626     visit_lib_path=''
627     if env['visit']:
628     visit_inc_path,visit_lib_path=findLibWithHeader(env, env['visit_libs'], 'VisItControlInterface_V2.h', env['visit_prefix'], lang='c')
629     env.AppendUnique(CPPPATH = [visit_inc_path])
630     env.AppendUnique(LIBPATH = [visit_lib_path])
631 gross 707
632 jfenwick 3259 ######## MPI (optional)
633 jfenwick 2232
634 jfenwick 3618 if env['mpi']=='no':
635     env['mpi']='none'
636    
637 jfenwick 3259 env['usempi'] = env['mpi']!='none'
638     mpi_inc_path=''
639     mpi_lib_path=''
640     if env['usempi']:
641     mpi_inc_path,mpi_lib_path=findLibWithHeader(env, env['mpi_libs'], 'mpi.h', env['mpi_prefix'], lang='c')
642     env.AppendUnique(CPPPATH = [mpi_inc_path])
643     env.AppendUnique(LIBPATH = [mpi_lib_path])
644     env.AppendUnique(LIBS = env['mpi_libs'])
645     env.PrependENVPath(LD_LIBRARY_PATH_KEY, mpi_lib_path)
646     env.Append(CPPDEFINES = ['ESYS_MPI', 'MPI_NO_CPPBIND', 'MPICH_IGNORE_CXX_SEEK'])
647     # NetCDF 4.1 defines MPI_Comm et al. if MPI_INCLUDED is not defined!
648     # On the other hand MPT and OpenMPI don't define the latter so we have to
649     # do that here
650     if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:
651     env.Append(CPPDEFINES = ['MPI_INCLUDED'])
652 jfenwick 2232
653 lgao 3508 ######## BOOMERAMG (optional)
654    
655 lgao 3511 if env['mpi'] == 'none': env['boomeramg'] = False
656 lgao 3508
657     boomeramg_inc_path=''
658     boomeramg_lib_path=''
659     if env['boomeramg']:
660     boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')
661     env.AppendUnique(CPPPATH = [boomeramg_inc_path])
662     env.AppendUnique(LIBPATH = [boomeramg_lib_path])
663     env.AppendUnique(LIBS = env['boomeramg_libs'])
664     env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)
665     env.Append(CPPDEFINES = ['BOOMERAMG'])
666    
667 jfenwick 3259 ######## ParMETIS (optional)
668 jfenwick 2232
669 jfenwick 3259 if not env['usempi']: env['parmetis'] = False
670 jfenwick 2232
671 jfenwick 3259 parmetis_inc_path=''
672     parmetis_lib_path=''
673     if env['parmetis']:
674     parmetis_inc_path,parmetis_lib_path=findLibWithHeader(env, env['parmetis_libs'], 'parmetis.h', env['parmetis_prefix'], lang='c')
675     env.AppendUnique(CPPPATH = [parmetis_inc_path])
676     env.AppendUnique(LIBPATH = [parmetis_lib_path])
677     env.AppendUnique(LIBS = env['parmetis_libs'])
678     env.PrependENVPath(LD_LIBRARY_PATH_KEY, parmetis_lib_path)
679     env.Append(CPPDEFINES = ['USE_PARMETIS'])
680 jfenwick 2387
681 caltinay 3463 ######## gmsh (optional, for tests)
682    
683     try:
684     import subprocess
685 caltinay 3585 p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)
686     _,e=p.communicate()
687     if e.split().count("MPI"):
688     env['gmsh']='m'
689     else:
690     env['gmsh']='s'
691 caltinay 3463 except OSError:
692     env['gmsh']=False
693    
694 caltinay 3604 ######## PDFLaTeX (for documentation)
695     if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):
696     env['pdflatex']=True
697     else:
698     env['pdflatex']=False
699    
700 jfenwick 3259 ######################## Summarize our environment ###########################
701 ksteube 1705
702 jfenwick 3259 # keep some of our install paths first in the list for the unit tests
703     env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
704     env.PrependENVPath('PYTHONPATH', prefix)
705     env['ENV']['ESCRIPT_ROOT'] = prefix
706 ksteube 1705
707 jfenwick 3259 if not env['verbose']:
708     env['CCCOMSTR'] = "Compiling $TARGET"
709     env['CXXCOMSTR'] = "Compiling $TARGET"
710     env['SHCCCOMSTR'] = "Compiling $TARGET"
711     env['SHCXXCOMSTR'] = "Compiling $TARGET"
712     env['ARCOMSTR'] = "Linking $TARGET"
713     env['LINKCOMSTR'] = "Linking $TARGET"
714     env['SHLINKCOMSTR'] = "Linking $TARGET"
715 caltinay 3271 env['PDFLATEXCOMSTR'] = "Building $TARGET from LaTeX input $SOURCES"
716     env['BIBTEXCOMSTR'] = "Generating bibliography $TARGET"
717     env['MAKEINDEXCOMSTR'] = "Generating index $TARGET"
718     env['PDFLATEXCOMSTR'] = "Building $TARGET from LaTeX input $SOURCES"
719 jfenwick 3259 #Progress(['Checking -\r', 'Checking \\\r', 'Checking |\r', 'Checking /\r'], interval=17)
720 ksteube 1705
721 jfenwick 3259 print("")
722     print("*** Config Summary (see config.log and lib/buildvars for details) ***")
723     print("Escript/Finley revision %s"%global_revision)
724     print(" Install prefix: %s"%env['prefix'])
725     print(" Python: %s"%sysconfig.PREFIX)
726     print(" boost: %s"%env['boost_prefix'])
727     print(" numpy: YES")
728     if env['usempi']:
729     print(" MPI: YES (flavour: %s)"%env['mpi'])
730 ksteube 1312 else:
731 jfenwick 3259 print(" MPI: DISABLED")
732     if env['uselapack']:
733     print(" LAPACK: YES (flavour: %s)"%env['lapack'])
734 ksteube 1705 else:
735 jfenwick 3259 print(" LAPACK: DISABLED")
736     d_list=[]
737     e_list=[]
738 caltinay 3784 for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':
739 jfenwick 3259 if env[i]: e_list.append(i)
740     else: d_list.append(i)
741     for i in e_list:
742     print("%16s: YES"%i)
743     for i in d_list:
744     print("%16s: DISABLED"%i)
745 caltinay 3597 if env['cppunit']:
746     print(" CppUnit: FOUND")
747     else:
748     print(" CppUnit: NOT FOUND")
749 caltinay 3585 if env['gmsh']=='m':
750     print(" gmsh: FOUND, MPI-ENABLED")
751     elif env['gmsh']=='s':
752 caltinay 3463 print(" gmsh: FOUND")
753     else:
754     print(" gmsh: NOT FOUND")
755 caltinay 3784 if env['numpy_h']:
756     print(" numpy headers: FOUND")
757     else:
758     print(" numpy headers: NOT FOUND")
759 jfenwick 3851 print(" vsl_random: %s"%env['vsl_random'])
760 jfenwick 3506
761 jfenwick 3259 if ((fatalwarning != '') and (env['werror'])):
762     print(" Treating warnings as errors")
763     else:
764     print(" NOT treating warnings as errors")
765     print("")
766 ksteube 1215
767 jfenwick 3259 ####################### Configure the subdirectories #########################
768 ksteube 1247
769 jfenwick 2235 from grouptest import *
770    
771     TestGroups=[]
772    
773 jfenwick 3259 # keep an environment without warnings-as-errors
774     dodgy_env=env.Clone()
775 jfenwick 2827
776 jfenwick 3259 # now add warnings-as-errors flags. This needs to be done after configuration
777     # because the scons test files have warnings in them
778     if ((fatalwarning != '') and (env['werror'])):
779     env.Append(CCFLAGS = fatalwarning)
780 jfenwick 2827
781 phornby 2027 Export(
782 jfenwick 3259 ['env',
783     'dodgy_env',
784     'IS_WINDOWS',
785     'TestGroups'
786     ]
787     )
788 ksteube 1705
789 jfenwick 3871 print "William"
790    
791    
792 caltinay 3349 env.SConscript(dirs = ['tools/escriptconvert'], variant_dir='$BUILD_DIR/$PLATFORM/tools/escriptconvert', duplicate=0)
793     env.SConscript(dirs = ['paso/src'], variant_dir='$BUILD_DIR/$PLATFORM/paso', duplicate=0)
794     env.SConscript(dirs = ['weipa/src'], variant_dir='$BUILD_DIR/$PLATFORM/weipa', duplicate=0)
795     env.SConscript(dirs = ['escript/src'], variant_dir='$BUILD_DIR/$PLATFORM/escript', duplicate=0)
796     env.SConscript(dirs = ['esysUtils/src'], variant_dir='$BUILD_DIR/$PLATFORM/esysUtils', duplicate=0)
797 jfenwick 3675 env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
798 caltinay 3349 env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)
799     env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)
800 caltinay 3792 env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
801 jfenwick 3871 print "Terry"
802 caltinay 3349 env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)
803 jfenwick 3871 print "X1"
804 caltinay 3349 env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
805 jfenwick 3871 print "X2"
806 caltinay 3349 env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pyvisi', duplicate=0)
807 jfenwick 3871 print "X3"
808 caltinay 3349 env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)
809     env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)
810     env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)
811 phornby 1243
812 jfenwick 3871 print "Bob"
813    
814 jfenwick 3259 ######################## Populate the buildvars file #########################
815 jfenwick 2235
816 jfenwick 3259 # remove obsolete file
817     if not env['usempi']:
818     Execute(Delete(os.path.join(env['libinstall'], 'pythonMPI')))
819     Execute(Delete(os.path.join(env['libinstall'], 'pythonMPIredirect')))
820 phornby 1243
821 jfenwick 3259 # Try to extract the boost version from version.hpp
822     boosthpp=open(os.path.join(boost_inc_path, 'boost', 'version.hpp'))
823 jfenwick 2302 boostversion='unknown'
824     try:
825     for line in boosthpp:
826     ver=re.match(r'#define BOOST_VERSION (\d+)',line)
827     if ver:
828     boostversion=ver.group(1)
829 jfenwick 3259 except StopIteration:
830 jfenwick 2302 pass
831 jfenwick 3259 boosthpp.close()
832    
833 jfenwick 3871 print "Tim"
834    
835 jfenwick 3259 buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
836 jfenwick 2302 buildvars.write("svn_revision="+str(global_revision)+"\n")
837 jfenwick 3259 buildvars.write("prefix="+prefix+"\n")
838     buildvars.write("cc="+env['CC']+"\n")
839     buildvars.write("cxx="+env['CXX']+"\n")
840 jfenwick 3851 if env['pythoncmd']=='python':
841     buildvars.write("python="+sys.executable+"\n")
842     buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
843     else:
844     buildvars.write("python="+env['pythoncmd']+"\n")
845 jfenwick 3871 p=Popen([env['pythoncmd'], '-c', 'from __future__ import print_function;import sys;print(str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]))'], stdout=PIPE)
846 jfenwick 3851 verstring=p.stdout.readline().strip()
847     p.wait()
848 jfenwick 3871 buildvars.write("python_version="+verstring+"\n")
849 jfenwick 3259 buildvars.write("boost_inc_path="+boost_inc_path+"\n")
850     buildvars.write("boost_lib_path="+boost_lib_path+"\n")
851     buildvars.write("boost_version="+boostversion+"\n")
852     buildvars.write("debug=%d\n"%int(env['debug']))
853     buildvars.write("openmp=%d\n"%int(env['openmp']))
854     buildvars.write("mpi=%s\n"%env['mpi'])
855     buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
856     buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
857     buildvars.write("lapack=%s\n"%env['lapack'])
858     buildvars.write("pyvisi=%d\n"%env['pyvisi'])
859 gross 3560 buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
860 lgao 3508 for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
861 jfenwick 3259 buildvars.write("%s=%d\n"%(i, int(env[i])))
862     if env[i]:
863     buildvars.write("%s_inc_path=%s\n"%(i, eval(i+'_inc_path')))
864     buildvars.write("%s_lib_path=%s\n"%(i, eval(i+'_lib_path')))
865 jfenwick 2302 buildvars.close()
866    
867 jfenwick 3871 print "Bozo"
868    
869 jfenwick 3259 ################### Targets to build and install libraries ###################
870 jfenwick 2302
871 caltinay 3604 target_init = env.Command(os.path.join(env['pyinstall'],'__init__.py'), None, Touch('$TARGET'))
872 ksteube 1705 env.Alias('target_init', [target_init])
873 caltinay 3604 # delete buildvars upon cleanup
874     env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
875 ksteube 1705
876 jfenwick 3259 # The headers have to be installed prior to build in order to satisfy
877     # #include <paso/Common.h>
878     env.Alias('build_esysUtils', ['install_esysUtils_headers', 'build_esysUtils_lib'])
879     env.Alias('install_esysUtils', ['build_esysUtils', 'install_esysUtils_lib'])
880 ksteube 1705
881 jfenwick 3259 env.Alias('build_paso', ['install_paso_headers', 'build_paso_lib'])
882     env.Alias('install_paso', ['build_paso', 'install_paso_lib'])
883 ksteube 1705
884 jfenwick 3259 env.Alias('build_escript', ['install_escript_headers', 'build_escript_lib', 'build_escriptcpp_lib'])
885     env.Alias('install_escript', ['build_escript', 'install_escript_lib', 'install_escriptcpp_lib', 'install_escript_py'])
886 caltinay 2810
887 jfenwick 3675 env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
888     env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
889    
890    
891 jfenwick 3871
892     print "Orange"
893    
894 jfenwick 3259 env.Alias('build_dudley', ['install_dudley_headers', 'build_dudley_lib', 'build_dudleycpp_lib'])
895     env.Alias('install_dudley', ['build_dudley', 'install_dudley_lib', 'install_dudleycpp_lib', 'install_dudley_py'])
896 caltinay 3096
897 jfenwick 3259 env.Alias('build_finley', ['install_finley_headers', 'build_finley_lib', 'build_finleycpp_lib'])
898     env.Alias('install_finley', ['build_finley', 'install_finley_lib', 'install_finleycpp_lib', 'install_finley_py'])
899 caltinay 2910
900 caltinay 3792 env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
901     env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
902    
903 jfenwick 3259 env.Alias('build_weipa', ['install_weipa_headers', 'build_weipa_lib', 'build_weipacpp_lib'])
904     env.Alias('install_weipa', ['build_weipa', 'install_weipa_lib', 'install_weipacpp_lib', 'install_weipa_py'])
905 ksteube 1705
906 jfenwick 3259 env.Alias('build_escriptreader', ['install_weipa_headers', 'build_escriptreader_lib'])
907     env.Alias('install_escriptreader', ['build_escriptreader', 'install_escriptreader_lib'])
908 ksteube 1705
909 jfenwick 3259 # Now gather all the above into some easy targets: build_all and install_all
910 ksteube 1705 build_all_list = []
911     build_all_list += ['build_esysUtils']
912     build_all_list += ['build_paso']
913     build_all_list += ['build_escript']
914 jfenwick 3675 build_all_list += ['build_pasowrap']
915 jfenwick 3259 build_all_list += ['build_dudley']
916 ksteube 1705 build_all_list += ['build_finley']
917 caltinay 3792 build_all_list += ['build_ripley']
918 jfenwick 3259 build_all_list += ['build_weipa']
919     if not IS_WINDOWS: build_all_list += ['build_escriptreader']
920     if env['usempi']: build_all_list += ['build_pythonMPI']
921     build_all_list += ['build_escriptconvert']
922 ksteube 1705 env.Alias('build_all', build_all_list)
923    
924     install_all_list = []
925     install_all_list += ['target_init']
926     install_all_list += ['install_esysUtils']
927     install_all_list += ['install_paso']
928     install_all_list += ['install_escript']
929 jfenwick 3675 install_all_list += ['install_pasowrap']
930 jfenwick 3259 install_all_list += ['install_dudley']
931 ksteube 1705 install_all_list += ['install_finley']
932 caltinay 3792 install_all_list += ['install_ripley']
933 jfenwick 3259 install_all_list += ['install_weipa']
934     if not IS_WINDOWS: install_all_list += ['install_escriptreader']
935 jfenwick 3851 #install_all_list += ['install_pyvisi_py']
936 jfenwick 3259 install_all_list += ['install_modellib_py']
937     install_all_list += ['install_pycad_py']
938     if env['usempi']: install_all_list += ['install_pythonMPI']
939     install_all_list += ['install_escriptconvert']
940 ksteube 1705 env.Alias('install_all', install_all_list)
941    
942     # Default target is install
943     env.Default('install_all')
944    
945 jfenwick 3259 ################## Targets to build and run the test suite ###################
946 ksteube 1705
947 caltinay 3597 test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
948     if not env['cppunit']:
949     env.Alias('run_tests', test_msg)
950     env.Alias('run_tests', ['install_all'])
951     env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
952 jfenwick 2286 env.Alias('build_full',['install_all','build_tests','build_py_tests'])
953 caltinay 3349 env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
954 ksteube 1705
955 jfenwick 3259 ##################### Targets to build the documentation #####################
956 artak 2820
957 jfenwick 2531 env.Alias('api_epydoc','install_all')
958 jfenwick 3343 env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'user_pdf', 'install_pdf', 'cookbook_pdf'])
959 jfenwick 3259 env.Alias('release_prep', ['docs', 'install_all'])
960 ksteube 1705
961 jfenwick 3259 if not IS_WINDOWS:
962     try:
963     utest=open('utest.sh','w')
964 caltinay 3804 utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
965 jfenwick 3259 for tests in TestGroups:
966     utest.write(tests.makeString())
967     utest.close()
968 jfenwick 3851 Execute(Chmod('utest.sh', 0o755))
969 jfenwick 3259 print("Generated utest.sh.")
970     except IOError:
971     print("Error attempting to write unittests file.")
972     Exit(1)
973 jfenwick 2879
974 caltinay 3604 # delete utest.sh upon cleanup
975     env.Clean('target_init', 'utest.sh')
976    
977 jfenwick 3259 # Make sure that the escript wrapper is in place
978     if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
979     print("Copying escript wrapper.")
980 jfenwick 3332 Execute(Copy(os.path.join(env['bininstall'],'run-escript'), 'bin/run-escript'))
981 jfenwick 2235

  ViewVC Help
Powered by ViewVC 1.1.26