/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1708 by ksteube, Thu Aug 14 22:42:24 2008 UTC revision 2388 by jfenwick, Wed Apr 15 06:21:25 2009 UTC
# Line 1  Line 1 
1  #         Copyright 2006 by ACcESS MNRF  
2    ########################################################
3    #
4    # 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  #              http://www.access.edu.au  ########################################################
13  #       Primary Business: Queensland, Australia  
 #  Licensed under the Open Software License version 3.0  
 #     http://www.opensource.org/licenses/osl-3.0.php  
14    
15  EnsureSConsVersion(0,96,91)  EnsureSConsVersion(0,96,91)
16  EnsurePythonVersion(2,3)  EnsurePythonVersion(2,3)
17    
18  import sys, os, re, socket  import sys, os, re, socket, platform, stat
19    
20  # Add our extensions  # Add our extensions
21  if os.path.isdir('scons'): sys.path.append('scons')  if os.path.isdir('scons'): sys.path.append('scons')
# Line 28  prefix = ARGUMENTS.get('prefix', Dir('#. Line 35  prefix = ARGUMENTS.get('prefix', Dir('#.
35    
36  # Read configuration options from file scons/<hostname>_options.py  # Read configuration options from file scons/<hostname>_options.py
37  hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])  hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])
38  tmp = os.path.join("scons",hostname+"_options.py")  ehostname = scons_extensions.effectiveName(hostname)
39    tmp = os.path.join("scons",ehostname+"_options.py")
40  options_file = ARGUMENTS.get('options_file', tmp)  options_file = ARGUMENTS.get('options_file', tmp)
41  if not os.path.isfile(options_file): options_file = False  if not os.path.isfile(options_file):
42  else: print "Options file is", options_file    options_file = False
43      print "Options file not found (expected '%s')" % tmp
44    else:
45      print "Options file is", options_file
46    
47  # Load options file and command-line arguments  # Load options file and command-line arguments
48  opts = Options(options_file, ARGUMENTS)  opts = Options(options_file, ARGUMENTS)
# Line 42  opts.AddOptions( Line 53  opts.AddOptions(
53  # Where to install esys stuff  # Where to install esys stuff
54    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),
55    ('incinstall', 'where the esys headers will be installed',             os.path.join(Dir('#.').abspath,'include')),    ('incinstall', 'where the esys headers will be installed',             os.path.join(Dir('#.').abspath,'include')),
56      ('bininstall', 'where the esys binaries will be installed',            os.path.join(prefix,'bin')),
57    ('libinstall', 'where the esys libraries will be installed',           os.path.join(prefix,'lib')),    ('libinstall', 'where the esys libraries will be installed',           os.path.join(prefix,'lib')),
58    ('pyinstall', 'where the esys python modules will be installed',       os.path.join(prefix,'esys')),    ('pyinstall', 'where the esys python modules will be installed',       os.path.join(prefix,'esys')),
59  # Compilation options  # Compilation options
# Line 49  opts.AddOptions( Line 61  opts.AddOptions(
61    BoolOption('usedebug', 'Do you want a debug build?', 'no'),    BoolOption('usedebug', 'Do you want a debug build?', 'no'),
62    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),
63    ('options_file', 'File of paths/options. Default: scons/<hostname>_options.py', options_file),    ('options_file', 'File of paths/options. Default: scons/<hostname>_options.py', options_file),
64      ('win_cc_name', 'windows C compiler name if needed', 'msvc'),
65    # The strings -DDEFAULT_ get replaced by scons/<hostname>_options.py or by defaults below    # The strings -DDEFAULT_ get replaced by scons/<hostname>_options.py or by defaults below
66    ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),    ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),
67    ('cc_optim', 'C compiler optimization flags to use', '-DEFAULT_2'),    ('cc_optim', 'C compiler optimization flags to use', '-DEFAULT_2'),
# Line 57  opts.AddOptions( Line 70  opts.AddOptions(
70    ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),    ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),
71    ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),    ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),
72    ('cc_extra', 'Extra C/C++ flags', ''),    ('cc_extra', 'Extra C/C++ flags', ''),
73      ('ld_extra', 'Extra linker flags', ''),
74    ('sys_libs', 'System libraries to link with', []),    ('sys_libs', 'System libraries to link with', []),
75    ('ar_flags', 'Static library archiver flags to use', ''),    ('ar_flags', 'Static library archiver flags to use', ''),
76    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'yes'),    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'no'),
77    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'yes'),    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'no'),
78      BoolOption('usewarnings','Compile with warnings as errors if using gcc','yes'),
79      ('forcelazy','for testing use only - set the default value for autolazy','leave_alone'),
80  # Python  # Python
81    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),
82    ('python_lib_path', 'Path to Python libs', usr_lib),    ('python_lib_path', 'Path to Python libs', usr_lib),
# Line 83  opts.AddOptions( Line 99  opts.AddOptions(
99    ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),    ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),
100    ('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib),    ('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib),
101    ('mpi_libs', 'MPI libraries to link with (needs to be shared!)', ['mpich' , 'pthread', 'rt']),    ('mpi_libs', 'MPI libraries to link with (needs to be shared!)', ['mpich' , 'pthread', 'rt']),
102      ('mpi_flavour','Type of MPI execution environment','none'),
103  # ParMETIS  # ParMETIS
104    BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),    BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),
105    ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),    ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),
# Line 105  opts.AddOptions( Line 122  opts.AddOptions(
122    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),
123    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),
124    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),
125    # Silo
126      BoolOption('usesilo', 'switch on/off the usage of Silo', 'yes'),
127      ('silo_path', 'Path to Silo includes', '/usr/include'),
128      ('silo_lib_path', 'Path to Silo libs', usr_lib),
129      ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
130  # AMD (used by UMFPACK)  # AMD (used by UMFPACK)
131    ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),    ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),
132    ('amd_lib_path', 'Path to AMD libs', usr_lib),    ('amd_lib_path', 'Path to AMD libs', usr_lib),
# Line 112  opts.AddOptions( Line 134  opts.AddOptions(
134  # BLAS (used by UMFPACK)  # BLAS (used by UMFPACK)
135    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),
136    ('blas_lib_path', 'Path to BLAS libs', usr_lib),    ('blas_lib_path', 'Path to BLAS libs', usr_lib),
137    ('blas_libs', 'BLAS libraries to link with', ['blas'])    ('blas_libs', 'BLAS libraries to link with', ['blas']),
138    # An option for specifying the compiler tools set (see windows branch).
139      ('tools_names', 'allow control over the tools in the env setup', ['intelc']),
140    # finer control over library building, intel aggressive global optimisation
141    # works with dynamic libraries on windows.
142      ('share_esysUtils', 'control static or dynamic esysUtils lib', False),
143      ('share_paso', 'control static or dynamic paso lib', False)
144  )  )
145    
146  ############ Specify which compilers to use ####################  ############ Specify which compilers to use ####################
# Line 121  opts.AddOptions( Line 149  opts.AddOptions(
149  # failing to find the compilers.  This warning can be safely ignored.  # failing to find the compilers.  This warning can be safely ignored.
150    
151  if IS_WINDOWS_PLATFORM:  if IS_WINDOWS_PLATFORM:
152        env = Environment(tools = ['default', 'msvc'], options = opts)        env = Environment(options = opts)
153          env = Environment(tools = ['default'] + env['tools_names'],
154                            options = opts)
155  else:  else:
156     if socket.gethostname().split('.')[0] == 'service0':     if socket.gethostname().split('.')[0] == 'service0':
157        env = Environment(tools = ['default', 'intelc'], options = opts)        env = Environment(tools = ['default', 'intelc'], options = opts)
# Line 142  if env['useMPI']: env['usempi'] = 1 Line 172  if env['useMPI']: env['usempi'] = 1
172  # Default compiler options (override allowed in hostname_options.py, but should not be necessary)  # Default compiler options (override allowed in hostname_options.py, but should not be necessary)
173  # For both C and C++ you get: cc_flags and either the optim flags or debug flags  # For both C and C++ you get: cc_flags and either the optim flags or debug flags
174    
175    sysheaderopt = ""       # how do we indicate that a header is a system header. Use "" for no action.
176    
177  if env["CC"] == "icc":  if env["CC"] == "icc":
178    # Intel compilers    # Intel compilers
179    cc_flags      = "-fPIC -ansi -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"    cc_flags      = "-fPIC -ansi -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"
180    cc_optim      = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"    cc_optim      = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"
181    cc_debug      = "-g -O0 -UDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
182    omp_optim     = "-openmp -openmp_report0"    omp_optim     = "-openmp -openmp_report0"
183    omp_debug     = "-openmp -openmp_report0"    omp_debug     = "-openmp -openmp_report0"
184    omp_libs      = ['guide', 'pthread']    omp_libs      = ['guide', 'pthread']
185    pedantic      = ""    pedantic      = ""
186      fatalwarning      = ""        # Switch to turn warnings into errors
187      sysheaderopt      = ""
188  elif env["CC"] == "gcc":  elif env["CC"] == "gcc":
189    # GNU C on any system    # GNU C on any system
190    cc_flags      = "-fPIC -ansi -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER"    cc_flags      = "-pedantic -Wall -fPIC -ansi -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER  -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing"
191    #the long long warning occurs on the Mac
192    cc_optim      = "-O3"    cc_optim      = "-O3"
193    cc_debug      = "-g -O0 -UDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
194    omp_optim     = ""    omp_optim     = "-fopenmp"
195    omp_debug     = ""    omp_debug     = "-fopenmp"
196    omp_libs      = []    omp_libs      = ['gomp']
197    pedantic      = "-pedantic-errors -Wno-long-long"    pedantic      = "-pedantic-errors -Wno-long-long"
198      fatalwarning      = "-Werror"
199      sysheaderopt      = "-isystem "
200  elif env["CC"] == "cl":  elif env["CC"] == "cl":
201    # Microsoft Visual C on Windows    # Microsoft Visual C on Windows
202    cc_flags      = "/FD /EHsc /GR /wd4068 -D_USE_MATH_DEFINES -DDLL_NETCDF"    cc_flags      = "/FD /EHsc /GR /wd4068 -D_USE_MATH_DEFINES -DDLL_NETCDF"
# Line 169  elif env["CC"] == "cl": Line 206  elif env["CC"] == "cl":
206    omp_debug     = ""    omp_debug     = ""
207    omp_libs      = []    omp_libs      = []
208    pedantic      = ""    pedantic      = ""
209      fatalwarning      = ""
210      sysheaderopt      = ""
211    elif env["CC"] == "icl":
212      # intel C on Windows, see windows_intelc_options.py for a start
213      pedantic      = ""
214      fatalwarning      = ""
215      sysheaderopt      = ""
216    
217    
218  # If not specified in hostname_options.py then set them here  # If not specified in hostname_options.py then set them here
219  if env["cc_flags"]  == "-DEFAULT_1": env['cc_flags'] = cc_flags  if env["cc_flags"]  == "-DEFAULT_1": env['cc_flags'] = cc_flags
# Line 178  if env["omp_optim"]    == "-DEFAULT_4": env Line 223  if env["omp_optim"]    == "-DEFAULT_4": env
223  if env["omp_debug"] == "-DEFAULT_5": env['omp_debug'] = omp_debug  if env["omp_debug"] == "-DEFAULT_5": env['omp_debug'] = omp_debug
224  if env["omp_libs"]  == "-DEFAULT_6": env['omp_libs'] = omp_libs  if env["omp_libs"]  == "-DEFAULT_6": env['omp_libs'] = omp_libs
225    
226    #set up the autolazy values
227    if env['forcelazy']    != "leave_alone":
228      if env['forcelazy'] == 'on':
229        env.Append(CPPDEFINES='FAUTOLAZYON')
230      else:
231         if env['forcelazy'] == 'off':
232        env.Append(CPPDEFINES='FAUTOLAZYOFF')
233    
234  # OpenMP is disabled if useopenmp=no or both variables omp_optim and omp_debug are empty  # OpenMP is disabled if useopenmp=no or both variables omp_optim and omp_debug are empty
235  if not env["useopenmp"]:  if not env["useopenmp"]:
236    env['omp_optim'] = ""    env['omp_optim'] = ""
# Line 191  if env['omp_optim'] == "" and env['omp_d Line 244  if env['omp_optim'] == "" and env['omp_d
244  try: env['ENV']['OMP_NUM_THREADS'] = os.environ['OMP_NUM_THREADS']  try: env['ENV']['OMP_NUM_THREADS'] = os.environ['OMP_NUM_THREADS']
245  except KeyError: env['ENV']['OMP_NUM_THREADS'] = 1  except KeyError: env['ENV']['OMP_NUM_THREADS'] = 1
246    
247    try: env['ENV']['ESCRIPT_NUM_THREADS'] = os.environ['ESCRIPT_NUM_THREADS']
248    except KeyError: pass
249    
250    try: env['ENV']['ESCRIPT_NUM_PROCS'] = os.environ['ESCRIPT_NUM_PROCS']
251    except KeyError: pass
252    
253    try: env['ENV']['ESCRIPT_NUM_NODES'] = os.environ['ESCRIPT_NUM_NODES']
254    except KeyError: pass
255    
256    try: env['ENV']['ESCRIPT_HOSTFILE'] = os.environ['ESCRIPT_HOSTFILE']
257    except KeyError: pass
258    
259  try: env['ENV']['PATH'] = os.environ['PATH']  try: env['ENV']['PATH'] = os.environ['PATH']
260  except KeyError: pass  except KeyError: pass
261    
# Line 222  except KeyError: pass Line 287  except KeyError: pass
287  env.PrependENVPath('PYTHONPATH', prefix)  env.PrependENVPath('PYTHONPATH', prefix)
288  env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])  env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
289    
290    env['ENV']['ESCRIPT_ROOT'] = prefix
291    
292  ############ Set up paths for Configure() ######################  ############ Set up paths for Configure() ######################
293    
294  # Make a copy of an environment  # Make a copy of an environment
# Line 234  def clone_env(env): Line 301  def clone_env(env):
301  env.Append(CPPPATH      = [Dir('include')])  env.Append(CPPPATH      = [Dir('include')])
302    
303  # Add cc option -L<Escript>/trunk/lib  # Add cc option -L<Escript>/trunk/lib
304  env.Append(LIBPATH      = [Dir('lib')])  env.Append(LIBPATH      = [Dir(env['libinstall'])])
   
 env.Append(CPPDEFINES = ['ESCRIPT_EXPORTS', 'FINLEY_EXPORTS'])  
305    
306  if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])  if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])
307    if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
308    
309  if env['usepedantic']: env.Append(CCFLAGS = pedantic)  if env['usepedantic']: env.Append(CCFLAGS = pedantic)
310    
311  # MS Windows  # MS Windows
312  if IS_WINDOWS_PLATFORM:  if IS_WINDOWS_PLATFORM:
313    env.PrependENVPath('PATH',    [env['boost_lib_path']])    env.AppendENVPath('PATH', [env['boost_lib_path']])
314    env.PrependENVPath('PATH',    [env['libinstall']])    env.AppendENVPath('PATH', [env['libinstall']])
315      if not env['share_esysUtils'] :
316        env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
317      if not env['share_paso'] :
318        env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
319    
320    if env['usenetcdf']:    if env['usenetcdf']:
321      env.PrependENVPath('PATH',  [env['netCDF_lib_path']])      env.AppendENVPath('PATH',   [env['netCDF_lib_path']])
322    
323  env.Append(ARFLAGS = env['ar_flags'])  env.Append(ARFLAGS = env['ar_flags'])
324    
# Line 276  conf = Configure(clone_env(env)) Line 347  conf = Configure(clone_env(env))
347    
348  # Test that the compiler is working  # Test that the compiler is working
349  if not conf.CheckFunc('printf'):  if not conf.CheckFunc('printf'):
350    print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])     print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])
351    sys.exit(1)     sys.exit(1)
352    
353  if not conf.CheckFunc('gethostname'):  if conf.CheckFunc('gethostname'):
354    env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])    conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])
355    
356  ############ python libraries (required) #######################  ############ python libraries (required) #######################
357    
358  conf.env.AppendUnique(CPPPATH       = [env['python_path']])  
359    if not sysheaderopt =="":
360      conf.env.Append(CCFLAGS=sysheaderopt+env['python_path'])
361    else:
362      conf.env.AppendUnique(CPPPATH     = [env['python_path']])
363    
364  conf.env.AppendUnique(LIBPATH       = [env['python_lib_path']])  conf.env.AppendUnique(LIBPATH       = [env['python_lib_path']])
365  conf.env.AppendUnique(LIBS      = [env['python_libs']])  conf.env.AppendUnique(LIBS      = [env['python_libs']])
366    
367    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['python_lib_path'])  # The wrapper script needs to find these libs
368    conf.env.PrependENVPath('PYTHONPATH', prefix)
369    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
370    
371  if not conf.CheckCHeader('Python.h'):  if not conf.CheckCHeader('Python.h'):
372    print "Cannot find python include files (tried 'Python.h' in directory %s)" % (env['python_path'])    print "Cannot find python include files (tried 'Python.h' in directory %s)" % (env['python_path'])
373    sys.exit(1)    sys.exit(1)
374  if not conf.CheckFunc('Py_Main'):  if not conf.CheckFunc('Py_Exit'):
375    print "Cannot find python library method Py_Main (tried lib %s in directory %s)" % (env['python_libs'], env['python_lib_path'])    print "Cannot find python library method Py_Main (tried lib %s in directory %s)" % (env['python_libs'], env['python_lib_path'])
376    sys.exit(1)    sys.exit(1)
377    
378  ############ boost (required) ##################################  ############ boost (required) ##################################
379    
380  conf.env.AppendUnique(CPPPATH       = [env['boost_path']])  if not sysheaderopt =="":
381    # This is required because we can't -isystem /usr/system because it breaks std includes
382      if os.path.normpath(env['boost_path']) =="/usr/include":
383        conf.env.Append(CCFLAGS=sysheaderopt+os.path.join(env['boost_path'],'boost'))
384      else:
385        conf.env.Append(CCFLAGS=sysheaderopt+env['boost_path'])
386    else:
387      conf.env.AppendUnique(CPPPATH     = [env['boost_path']])
388    
389  conf.env.AppendUnique(LIBPATH       = [env['boost_lib_path']])  conf.env.AppendUnique(LIBPATH       = [env['boost_lib_path']])
390  conf.env.AppendUnique(LIBS      = [env['boost_libs']])  conf.env.AppendUnique(LIBS      = [env['boost_libs']])
391    
392    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['boost_lib_path'])   # The wrapper script needs to find these libs
393    #ensure that our path entries remain at the front
394    conf.env.PrependENVPath('PYTHONPATH', prefix)
395    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
396    
397  if not conf.CheckCXXHeader('boost/python.hpp'):  if not conf.CheckCXXHeader('boost/python.hpp'):
398    print "Cannot find boost include files (tried boost/python.hpp in directory %s)" % (env['boost_path'])    print "Cannot find boost include files (tried boost/python.hpp in directory %s)" % (env['boost_path'])
399    sys.exit(1)    sys.exit(1)
400    
401  if not conf.CheckFunc('PyObject_SetAttr'):  if not conf.CheckFunc('PyObject_SetAttr'):
402    print "Cannot find boost library method PyObject_SetAttr (tried method PyObject_SetAttr in library %s in directory %s)" % (env['boost_libs'], env['boost_lib_path'])    print "Cannot find boost library method PyObject_SetAttr (tried method PyObject_SetAttr in library %s in directory %s)" % (env['boost_libs'], env['boost_lib_path'])
403    sys.exit(1)    sys.exit(1)
# Line 332  if env['usenetcdf']: Line 426  if env['usenetcdf']:
426    conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])    conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])
427    conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])
428    conf.env.AppendUnique(LIBS    = [env['netCDF_libs']])    conf.env.AppendUnique(LIBS    = [env['netCDF_libs']])
429      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['netCDF_lib_path'])    # The wrapper script needs to find these libs
430      #ensure that our path entries remain at the front
431      conf.env.PrependENVPath('PYTHONPATH', prefix)
432      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
433    
434  if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0  if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0
435  if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0  if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0
# Line 352  if env['usepapi']: Line 450  if env['usepapi']:
450    conf.env.AppendUnique(CPPPATH = [env['papi_path']])    conf.env.AppendUnique(CPPPATH = [env['papi_path']])
451    conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])
452    conf.env.AppendUnique(LIBS    = [env['papi_libs']])    conf.env.AppendUnique(LIBS    = [env['papi_libs']])
453      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['papi_lib_path'])  # The wrapper script needs to find these libs
454      #ensure that our path entries remain at the front
455      conf.env.PrependENVPath('PYTHONPATH', prefix)
456      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
457    
458  if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0  if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0
459  if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0  if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0
# Line 372  if env['usemkl']: Line 474  if env['usemkl']:
474    conf.env.AppendUnique(CPPPATH = [env['mkl_path']])    conf.env.AppendUnique(CPPPATH = [env['mkl_path']])
475    conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])
476    conf.env.AppendUnique(LIBS    = [env['mkl_libs']])    conf.env.AppendUnique(LIBS    = [env['mkl_libs']])
477      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mkl_lib_path'])   # The wrapper script needs to find these libs
478      #ensure that our path entries remain at the front
479      conf.env.PrependENVPath('PYTHONPATH', prefix)
480      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
481    
482  if env['usemkl'] and not conf.CheckCHeader('mkl_solver.h'): env['usemkl'] = 0  if env['usemkl'] and not conf.CheckCHeader('mkl_solver.h'): env['usemkl'] = 0
483  if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0  if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0
484    
485  # Add MKL to environment env if it was found  # Add MKL to environment env if it was found
486  if env['usemkl']:  if env['usemkl']:
# Line 399  if env['useumfpack']: Line 505  if env['useumfpack']:
505    conf.env.AppendUnique(CPPPATH = [env['blas_path']])    conf.env.AppendUnique(CPPPATH = [env['blas_path']])
506    conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])
507    conf.env.AppendUnique(LIBS    = [env['blas_libs']])    conf.env.AppendUnique(LIBS    = [env['blas_libs']])
508      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['umf_lib_path'])   # The wrapper script needs to find these libs
509      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['amd_lib_path'])   # The wrapper script needs to find these libs
510      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['blas_lib_path'])  # The wrapper script needs to find these libs
511      #ensure that our path entries remain at the front
512      conf.env.PrependENVPath('PYTHONPATH', prefix)
513      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
514    
 if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0  
515  if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0  if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0
516    if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0
517    # if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?
518    
519  # Add UMFPACK to environment env if it was found  # Add UMFPACK to environment env if it was found
520  if env['useumfpack']:  if env['useumfpack']:
# Line 410  if env['useumfpack']: Line 523  if env['useumfpack']:
523  else:  else:
524    conf.Finish()    conf.Finish()
525    
526    ############ Silo (optional) ###################################
527    
528    if env['usesilo']:
529      conf = Configure(clone_env(env))
530      conf.env.AppendUnique(CPPPATH = [env['silo_path']])
531      conf.env.AppendUnique(LIBPATH = [env['silo_lib_path']])
532      conf.env.AppendUnique(LIBS = [env['silo_libs']])
533      if not conf.CheckCHeader('silo.h'): env['usesilo'] = 0
534      if not conf.CheckFunc('DBMkDir'): env['usesilo'] = 0
535      conf.Finish()
536    
537    # Add the path to Silo to environment env if it was found.
538    # Note that we do not add the libs since they are only needed for the
539    # escriptreader library and tools.
540    if env['usesilo']:
541      env.AppendUnique(CPPPATH = [env['silo_path']])
542      env.AppendUnique(LIBPATH = [env['silo_lib_path']])
543      env.Append(CPPDEFINES = ['HAVE_SILO'])
544    
545  ############ Add the compiler flags ############################  ############ Add the compiler flags ############################
546    
547  # Enable debug by choosing either cc_debug or cc_optim  # Enable debug by choosing either cc_debug or cc_optim
# Line 424  else: Line 556  else:
556  env.Append(CCFLAGS      = env['cc_flags'])  env.Append(CCFLAGS      = env['cc_flags'])
557  env.Append(LIBS         = [env['omp_libs']])  env.Append(LIBS         = [env['omp_libs']])
558    
559    ############ Add some custom builders ##########################
560    
561    py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
562    env.Append(BUILDERS = {'PyCompile' : py_builder});
563    
564    runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
565    env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
566    
567    runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
568    env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
569    
570    epstopdfbuilder = Builder(action = scons_extensions.eps2pdf, suffix=".pdf", src_suffix=".eps", single_source=True)
571    env.Append(BUILDERS = {'EpsToPDF' : epstopdfbuilder});
572    
573  ############ MPI (optional) ####################################  ############ MPI (optional) ####################################
574    if not env['usempi']: env['mpi_flavour']='none'
575    
576  # Create a modified environment for MPI programs (identical to env if usempi=no)  # Create a modified environment for MPI programs (identical to env if usempi=no)
577  env_mpi = clone_env(env)  env_mpi = clone_env(env)
# Line 433  env_mpi = clone_env(env) Line 580  env_mpi = clone_env(env)
580  conf = Configure(clone_env(env_mpi))  conf = Configure(clone_env(env_mpi))
581    
582  if env_mpi['usempi']:  if env_mpi['usempi']:
583      VALID_MPIs=[ "MPT", "MPICH", "MPICH2", "OPENMPI", "INTELMPI" ]
584      if not env_mpi['mpi_flavour'] in VALID_MPIs:
585          raise ValueError,"MPI is enabled but mpi_flavour = %s is not a valid key from %s."%( env_mpi['mpi_flavour'],VALID_MPIs)
586    conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])    conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])
587    conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])    conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])
588    conf.env.AppendUnique(LIBS    = [env_mpi['mpi_libs']])    conf.env.AppendUnique(LIBS    = [env_mpi['mpi_libs']])
589      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mpi_lib_path'])   # The wrapper script needs to find these libs
590      #ensure that our path entries remain at the front
591      conf.env.PrependENVPath('PYTHONPATH', prefix)
592      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
593    
594  if env_mpi['usempi'] and not conf.CheckCHeader('mpi.h'): env_mpi['usempi'] = 0  if env_mpi['usempi'] and not conf.CheckCHeader('mpi.h'): env_mpi['usempi'] = 0
595  if env_mpi['usempi'] and not conf.CheckFunc('MPI_Init'): env_mpi['usempi'] = 0  # if env_mpi['usempi'] and not conf.CheckFunc('MPI_Init'): env_mpi['usempi'] = 0
596    
597  # Add MPI to environment env_mpi if it was found  # Add MPI to environment env_mpi if it was found
598  if env_mpi['usempi']:  if env_mpi['usempi']:
# Line 449  else: Line 603  else:
603    
604  env['usempi'] = env_mpi['usempi']  env['usempi'] = env_mpi['usempi']
605    
606    
607  ############ ParMETIS (optional) ###############################  ############ ParMETIS (optional) ###############################
608    
609  # Start a new configure environment that reflects what we've already found  # Start a new configure environment that reflects what we've already found
# Line 460  if env_mpi['useparmetis']: Line 615  if env_mpi['useparmetis']:
615    conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])    conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])
616    conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])    conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])
617    conf.env.AppendUnique(LIBS    = [env_mpi['parmetis_libs']])    conf.env.AppendUnique(LIBS    = [env_mpi['parmetis_libs']])
618      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['parmetis_lib_path'])  # The wrapper script needs to find these libs
619      #ensure that our path entries remain at the front
620      conf.env.PrependENVPath('PYTHONPATH', prefix)
621      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
622    
623  if env_mpi['useparmetis'] and not conf.CheckCHeader('parmetis.h'): env_mpi['useparmetis'] = 0  if env_mpi['useparmetis'] and not conf.CheckCHeader('parmetis.h'): env_mpi['useparmetis'] = 0
624  if env_mpi['useparmetis'] and not conf.CheckFunc('ParMETIS_V3_PartGeomKway'): env_mpi['useparmetis'] = 0  if env_mpi['useparmetis'] and not conf.CheckFunc('ParMETIS_V3_PartGeomKway'): env_mpi['useparmetis'] = 0
# Line 473  else: Line 632  else:
632    
633  env['useparmetis'] = env_mpi['useparmetis']  env['useparmetis'] = env_mpi['useparmetis']
634    
635    ############ Now we switch on Warnings as errors ###############
636    
637    #this needs to be done after configuration because the scons test files have warnings in them
638    
639    if ((fatalwarning != "") and (env['usewarnings'])):
640      env.Append(CCFLAGS        = fatalwarning)
641      env_mpi.Append(CCFLAGS        = fatalwarning)
642    
643  ############ Summarize our environment #########################  ############ Summarize our environment #########################
644    
645  print ""  print ""
# Line 488  if env['usemkl']: print "  Using MKL" Line 655  if env['usemkl']: print "  Using MKL"
655  else: print "   Not using MKL"  else: print "   Not using MKL"
656  if env['useumfpack']: print "   Using UMFPACK"  if env['useumfpack']: print "   Using UMFPACK"
657  else: print "   Not using UMFPACK"  else: print "   Not using UMFPACK"
658    if env['usesilo']: print "  Using Silo"
659    else: print "   Not using Silo"
660  if env['useopenmp']: print "    Using OpenMP"  if env['useopenmp']: print "    Using OpenMP"
661  else: print "   Not using OpenMP"  else: print "   Not using OpenMP"
662  if env['usempi']: print "   Using MPI"  if env['usempi']: print "   Using MPI (flavour = %s)"%env['mpi_flavour']
663  else: print "   Not using MPI"  else: print "   Not using MPI"
664  if env['useparmetis']: print "  Using ParMETIS"  if env['useparmetis']: print "  Using ParMETIS"
665  else: print "   Not using ParMETIS (requires MPI)"  else: print "   Not using ParMETIS (requires MPI)"
# Line 499  else: print "  Not using PAPI" Line 668  else: print "  Not using PAPI"
668  if env['usedebug']: print " Compiling for debug"  if env['usedebug']: print " Compiling for debug"
669  else: print "   Not compiling for debug"  else: print "   Not compiling for debug"
670  print " Installing in", prefix  print " Installing in", prefix
671    if ((fatalwarning != "") and (env['usewarnings'])): print " Treating warnings as errors"
672    else: print "   Not treating warnings as errors"
673  print ""  print ""
674    
675  ############ Add some custom builders ##########################  ############ Delete option-dependent files #####################
   
 py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)  
 env.Append(BUILDERS = {'PyCompile' : py_builder});  
   
 runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)  
 env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});  
676    
677  runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)  Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.debug")))
678  env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});  Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.mpi")))
679    Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.openmp")))
680  ############ Build the desired subdirectories ##################  Execute(Delete(os.path.join(env['libinstall'],"pyversion")))
681    Execute(Delete(os.path.join(env['libinstall'],"buildvars")))
682  Export(["env", "env_mpi", "clone_env"])  if not env['usempi']: Execute(Delete(os.path.join(env['libinstall'],"pythonMPI")))
683    
684    
685    ############ Build the subdirectories ##########################
686    
687    from grouptest import *
688    
689    TestGroups=[]
690    
691    Export(
692      ["env",
693       "env_mpi",
694       "clone_env",
695       "IS_WINDOWS_PLATFORM",
696       "TestGroups"
697       ]
698      )
699    
700  env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)  env.SConscript(dirs = ['tools/CppUnitTest/src'], build_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)
701    env.SConscript(dirs = ['tools/libescriptreader/src'], build_dir='build/$PLATFORM/tools/libescriptreader', duplicate=0)
702  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
703  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
704  env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)  env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
# Line 526  env.SConscript(dirs = ['doc'], build_dir Line 708  env.SConscript(dirs = ['doc'], build_dir
708  env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0)  env.SConscript(dirs = ['pyvisi/py_src'], build_dir='build/$PLATFORM/pyvisi', duplicate=0)
709  env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0)  env.SConscript(dirs = ['pycad/py_src'], build_dir='build/$PLATFORM/pycad', duplicate=0)
710  env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)  env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)
711    env.SConscript(dirs = ['scripts'], build_dir='build/$PLATFORM/scripts', duplicate=0)
712    env.SConscript(dirs = ['paso/profiling'], build_dir='build/$PLATFORM/paso/profiling', duplicate=0)
713    
714    
715  ############ Remember what optimizations we used ###############  ############ Remember what optimizations we used ###############
716    
717  remember_list = []  remember_list = []
718    
719  if env['usedebug']:  if env['usedebug']:
720    remember_list += env.Command(env['libinstall'] + "/Compiled.with.debug", None, Touch('$TARGET'))    remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.debug"), None, Touch('$TARGET'))
 else:  
   remember_list += env.Command(env['libinstall'] + "/Compiled.with.debug", None, Delete('$TARGET'))  
721    
722  if env['usempi']:  if env['usempi']:
723    remember_list += env.Command(env['libinstall'] + "/Compiled.with.mpi", None, Touch('$TARGET'))    remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.mpi"), None, Touch('$TARGET'))
 else:  
   remember_list += env.Command(env['libinstall'] + "/Compiled.with.mpi", None, Delete('$TARGET'))  
724    
725  if env['omp_optim'] != '':  if env['useopenmp']:
726    remember_list += env.Command(env['libinstall'] + "/Compiled.with.openmp", None, Touch('$TARGET'))    remember_list += env.Command(os.path.join(env['libinstall'],"Compiled.with.openmp"), None, Touch('$TARGET'))
 else:  
   remember_list += env.Command(env['libinstall'] + "/Compiled.with.openmp", None, Delete('$TARGET'))  
727    
728  env.Alias('remember_options', remember_list)  env.Alias('remember_options', remember_list)
729    
730    
731    ############### Record python interpreter version ##############
732    
733    if not IS_WINDOWS_PLATFORM:
734      versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])
735      os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion"))
736    
737    ############## Populate the buildvars file #####################
738    
739    buildvars=open(os.path.join(env['libinstall'],'buildvars'),'w')
740    buildvars.write('python='+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+'\n')
741    
742    # Find the boost version by extracting it from version.hpp
743    boosthpp=open(os.path.join(env['boost_path'],'boost','version.hpp'))
744    boostversion='unknown'
745    try:
746        for line in boosthpp:
747            ver=re.match(r'#define BOOST_VERSION (\d+)',line)
748            if ver:
749                boostversion=ver.group(1)
750    except StopIteration:
751        pass
752    buildvars.write("boost="+boostversion+"\n")
753    buildvars.write("svn_revision="+str(global_revision)+"\n")
754    out="usedebug="
755    if env['usedebug']:
756        out+="y"
757    else:
758        out+="n"
759    out+="\nusempi="
760    if env['usempi']:
761        out+="y"
762    else:
763        out+="n"
764    out+="\nuseopenmp="
765    if env['useopenmp']:
766        out+="y"
767    else:
768        out+="n"
769    buildvars.write(out+"\n")
770    buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n')
771    
772    buildvars.close()
773    
774    
775  ############ Targets to build and install libraries ############  ############ Targets to build and install libraries ############
776    
777  target_init = env.Command(env['pyinstall']+'/__init__.py', None, Touch('$TARGET'))  target_init = env.Command(env['pyinstall']+'/__init__.py', None, Touch('$TARGET'))
# Line 572  build_all_list += ['build_esysUtils'] Line 796  build_all_list += ['build_esysUtils']
796  build_all_list += ['build_paso']  build_all_list += ['build_paso']
797  build_all_list += ['build_escript']  build_all_list += ['build_escript']
798  build_all_list += ['build_finley']  build_all_list += ['build_finley']
799  if env['usempi']: build_all_list += ['target_pythonMPI_exe']  if env['usempi']:       build_all_list += ['target_pythonMPI_exe']
800    if not IS_WINDOWS_PLATFORM: build_all_list += ['target_escript_wrapper']
801    if env['usesilo']:  build_all_list += ['target_escript2silo']
802  env.Alias('build_all', build_all_list)  env.Alias('build_all', build_all_list)
803    
804  install_all_list = []  install_all_list = []
# Line 584  install_all_list += ['install_finley'] Line 810  install_all_list += ['install_finley']
810  install_all_list += ['target_install_pyvisi_py']  install_all_list += ['target_install_pyvisi_py']
811  install_all_list += ['target_install_modellib_py']  install_all_list += ['target_install_modellib_py']
812  install_all_list += ['target_install_pycad_py']  install_all_list += ['target_install_pycad_py']
813  if env['usempi']: install_all_list += ['target_install_pythonMPI_exe']  if env['usempi']:       install_all_list += ['target_install_pythonMPI_exe']
814    if not IS_WINDOWS_PLATFORM: install_all_list += ['target_install_escript_wrapper']
815    if env['usesilo']:  install_all_list += ['target_install_escript2silo']
816  install_all_list += ['remember_options']  install_all_list += ['remember_options']
817  env.Alias('install_all', install_all_list)  env.Alias('install_all', install_all_list)
818    
# Line 597  env.Alias('build_cppunittest', ['target_ Line 825  env.Alias('build_cppunittest', ['target_
825  env.Alias('install_cppunittest', ['build_cppunittest', 'target_install_cppunittest_a'])  env.Alias('install_cppunittest', ['build_cppunittest', 'target_install_cppunittest_a'])
826  env.Alias('run_tests', ['install_all', 'target_install_cppunittest_a'])  env.Alias('run_tests', ['install_all', 'target_install_cppunittest_a'])
827  env.Alias('all_tests', ['install_all', 'target_install_cppunittest_a', 'run_tests', 'py_tests'])  env.Alias('all_tests', ['install_all', 'target_install_cppunittest_a', 'run_tests', 'py_tests'])
828    env.Alias('build_full',['install_all','build_tests','build_py_tests'])
829    
830  ############ Targets to build the documentation ################  ############ Targets to build the documentation ################
831    
832  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html'])  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf'])
833    
834    if not IS_WINDOWS_PLATFORM:
835       try:
836        utest=open("utest.sh","w")
837        build_platform=os.name      #Sometimes Mac python says it is posix
838        if (build_platform=='posix') and platform.system()=="Darwin":
839            build_platform='darwin'
840        utest.write(GroupTest.makeHeader(build_platform))
841        for tests in TestGroups:
842            utest.write(tests.makeString())
843        utest.close()
844        os.chmod("utest.sh",stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH)
845        print "utest.sh written"
846       except IOError:
847        print "Error attempting to write unittests file."
848        sys.exit(1)
849    

Legend:
Removed from v.1708  
changed lines
  Added in v.2388

  ViewVC Help
Powered by ViewVC 1.1.26