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

Diff of /branches/escript3047_with_pastix2995/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 2416 by gross, Wed May 13 06:03:59 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 26  IS_WINDOWS_PLATFORM = (os.name== "nt") Line 33  IS_WINDOWS_PLATFORM = (os.name== "nt")
33    
34  prefix = ARGUMENTS.get('prefix', Dir('#.').abspath)  prefix = ARGUMENTS.get('prefix', Dir('#.').abspath)
35    
36  # Read configuration options from file scons/<hostname>_options.py  #Determine where to read options from use:
37  hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])  #1. command line
38  tmp = os.path.join("scons",hostname+"_options.py")  #2. scons/<hostname>_options.py
39  options_file = ARGUMENTS.get('options_file', tmp)  #3. name as part of a cluster
40  if not os.path.isfile(options_file): options_file = False  options_file=ARGUMENTS.get('options_file', None)
41  else: print "Options file is", options_file  if not options_file:
42      hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])
43      options_file = os.path.join("scons",hostname+"_options.py")
44      #If there is no options file with that name see if there is a substitute
45      if not os.path.isfile(options_file):
46        tmp = scons_extensions.effectiveName(hostname)
47        options_file = os.path.join("scons",tmp+"_options.py")
48    
49    if not os.path.isfile(options_file):
50      print "Options file not found (expected '%s')" % options_file
51      options_file = False
52    else:
53      print "Options file is", options_file
54    
55  # Load options file and command-line arguments  # Load options file and command-line arguments
56  opts = Options(options_file, ARGUMENTS)  opts = Options(options_file, ARGUMENTS)
# Line 42  opts.AddOptions( Line 61  opts.AddOptions(
61  # Where to install esys stuff  # Where to install esys stuff
62    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),
63    ('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')),
64      ('bininstall', 'where the esys binaries will be installed',            os.path.join(prefix,'bin')),
65    ('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')),
66    ('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')),
67  # Compilation options  # Compilation options
# Line 49  opts.AddOptions( Line 69  opts.AddOptions(
69    BoolOption('usedebug', 'Do you want a debug build?', 'no'),    BoolOption('usedebug', 'Do you want a debug build?', 'no'),
70    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),
71    ('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),
72      ('win_cc_name', 'windows C compiler name if needed', 'msvc'),
73    # 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
74    ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),    ('cc_flags', 'C compiler flags to use', '-DEFAULT_1'),
75    ('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 78  opts.AddOptions(
78    ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),    ('omp_debug', 'OpenMP compiler flags to use (Debug build)', '-DEFAULT_5'),
79    ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),    ('omp_libs', 'OpenMP compiler libraries to link with', '-DEFAULT_6'),
80    ('cc_extra', 'Extra C/C++ flags', ''),    ('cc_extra', 'Extra C/C++ flags', ''),
81      ('ld_extra', 'Extra linker flags', ''),
82    ('sys_libs', 'System libraries to link with', []),    ('sys_libs', 'System libraries to link with', []),
83    ('ar_flags', 'Static library archiver flags to use', ''),    ('ar_flags', 'Static library archiver flags to use', ''),
84    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'yes'),    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'no'),
85    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'yes'),    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'no'),
86      BoolOption('usewarnings','Compile with warnings as errors if using gcc','yes'),
87      ('forcelazy','for testing use only - set the default value for autolazy','leave_alone'),
88  # Python  # Python
89    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),
90    ('python_lib_path', 'Path to Python libs', usr_lib),    ('python_lib_path', 'Path to Python libs', usr_lib),
# Line 83  opts.AddOptions( Line 107  opts.AddOptions(
107    ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),    ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),
108    ('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib),    ('mpi_lib_path', 'Path to MPI libs (needs to be added to the LD_LIBRARY_PATH)', usr_lib),
109    ('mpi_libs', 'MPI libraries to link with (needs to be shared!)', ['mpich' , 'pthread', 'rt']),    ('mpi_libs', 'MPI libraries to link with (needs to be shared!)', ['mpich' , 'pthread', 'rt']),
110      ('mpi_flavour','Type of MPI execution environment','none'),
111  # ParMETIS  # ParMETIS
112    BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),    BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),
113    ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),    ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),
# Line 105  opts.AddOptions( Line 130  opts.AddOptions(
130    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),
131    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),
132    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),
133    # Silo
134      BoolOption('usesilo', 'switch on/off the usage of Silo', 'yes'),
135      ('silo_path', 'Path to Silo includes', '/usr/include'),
136      ('silo_lib_path', 'Path to Silo libs', usr_lib),
137      ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
138  # AMD (used by UMFPACK)  # AMD (used by UMFPACK)
139    ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),    ('amd_path', 'Path to AMD includes', '/usr/include/suitesparse'),
140    ('amd_lib_path', 'Path to AMD libs', usr_lib),    ('amd_lib_path', 'Path to AMD libs', usr_lib),
# Line 112  opts.AddOptions( Line 142  opts.AddOptions(
142  # BLAS (used by UMFPACK)  # BLAS (used by UMFPACK)
143    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),
144    ('blas_lib_path', 'Path to BLAS libs', usr_lib),    ('blas_lib_path', 'Path to BLAS libs', usr_lib),
145    ('blas_libs', 'BLAS libraries to link with', ['blas'])    ('blas_libs', 'BLAS libraries to link with', ['blas']),
146    # An option for specifying the compiler tools set (see windows branch).
147      ('tools_names', 'allow control over the tools in the env setup', ['intelc']),
148    # finer control over library building, intel aggressive global optimisation
149    # works with dynamic libraries on windows.
150      ('share_esysUtils', 'control static or dynamic esysUtils lib', False),
151      ('share_paso', 'control static or dynamic paso lib', False)
152  )  )
153    
154  ############ Specify which compilers to use ####################  ############ Specify which compilers to use ####################
# Line 121  opts.AddOptions( Line 157  opts.AddOptions(
157  # failing to find the compilers.  This warning can be safely ignored.  # failing to find the compilers.  This warning can be safely ignored.
158    
159  if IS_WINDOWS_PLATFORM:  if IS_WINDOWS_PLATFORM:
160        env = Environment(tools = ['default', 'msvc'], options = opts)        env = Environment(options = opts)
161          env = Environment(tools = ['default'] + env['tools_names'],
162                            options = opts)
163  else:  else:
164     if socket.gethostname().split('.')[0] == 'service0':     if socket.gethostname().split('.')[0] == 'service0':
165        env = Environment(tools = ['default', 'intelc'], options = opts)        env = Environment(tools = ['default', 'intelc'], options = opts)
# Line 142  if env['useMPI']: env['usempi'] = 1 Line 180  if env['useMPI']: env['usempi'] = 1
180  # 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)
181  # 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
182    
183    sysheaderopt = ""       # how do we indicate that a header is a system header. Use "" for no action.
184    
185  if env["CC"] == "icc":  if env["CC"] == "icc":
186    # Intel compilers    # Intel compilers
187    cc_flags      = "-fPIC -ansi -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"    cc_flags      = "-fPIC -ansi -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"
188    cc_optim      = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"    cc_optim      = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias"
189    cc_debug      = "-g -O0 -UDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
190    omp_optim     = "-openmp -openmp_report0"    omp_optim     = "-openmp -openmp_report0"
191    omp_debug     = "-openmp -openmp_report0"    omp_debug     = "-openmp -openmp_report0"
192    omp_libs      = ['guide', 'pthread']    omp_libs      = ['guide', 'pthread']
193    pedantic      = ""    pedantic      = ""
194      fatalwarning      = ""        # Switch to turn warnings into errors
195      sysheaderopt      = ""
196  elif env["CC"] == "gcc":  elif env["CC"] == "gcc":
197    # GNU C on any system    # GNU C on any system
198    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"
199    #the long long warning occurs on the Mac
200    cc_optim      = "-O3"    cc_optim      = "-O3"
201    cc_debug      = "-g -O0 -UDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
202    omp_optim     = ""    omp_optim     = "-fopenmp"
203    omp_debug     = ""    omp_debug     = "-fopenmp"
204    omp_libs      = []    omp_libs      = ['gomp']
205    pedantic      = "-pedantic-errors -Wno-long-long"    pedantic      = "-pedantic-errors -Wno-long-long"
206      fatalwarning      = "-Werror"
207      sysheaderopt      = "-isystem "
208  elif env["CC"] == "cl":  elif env["CC"] == "cl":
209    # Microsoft Visual C on Windows    # Microsoft Visual C on Windows
210    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 214  elif env["CC"] == "cl":
214    omp_debug     = ""    omp_debug     = ""
215    omp_libs      = []    omp_libs      = []
216    pedantic      = ""    pedantic      = ""
217      fatalwarning      = ""
218      sysheaderopt      = ""
219    elif env["CC"] == "icl":
220      # intel C on Windows, see windows_intelc_options.py for a start
221      pedantic      = ""
222      fatalwarning      = ""
223      sysheaderopt      = ""
224    
225    
226  # If not specified in hostname_options.py then set them here  # If not specified in hostname_options.py then set them here
227  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 231  if env["omp_optim"]    == "-DEFAULT_4": env
231  if env["omp_debug"] == "-DEFAULT_5": env['omp_debug'] = omp_debug  if env["omp_debug"] == "-DEFAULT_5": env['omp_debug'] = omp_debug
232  if env["omp_libs"]  == "-DEFAULT_6": env['omp_libs'] = omp_libs  if env["omp_libs"]  == "-DEFAULT_6": env['omp_libs'] = omp_libs
233    
234    #set up the autolazy values
235    if env['forcelazy']    != "leave_alone":
236      if env['forcelazy'] == 'on':
237        env.Append(CPPDEFINES='FAUTOLAZYON')
238      else:
239         if env['forcelazy'] == 'off':
240        env.Append(CPPDEFINES='FAUTOLAZYOFF')
241    
242  # 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
243  if not env["useopenmp"]:  if not env["useopenmp"]:
244    env['omp_optim'] = ""    env['omp_optim'] = ""
# Line 191  if env['omp_optim'] == "" and env['omp_d Line 252  if env['omp_optim'] == "" and env['omp_d
252  try: env['ENV']['OMP_NUM_THREADS'] = os.environ['OMP_NUM_THREADS']  try: env['ENV']['OMP_NUM_THREADS'] = os.environ['OMP_NUM_THREADS']
253  except KeyError: env['ENV']['OMP_NUM_THREADS'] = 1  except KeyError: env['ENV']['OMP_NUM_THREADS'] = 1
254    
255    try: env['ENV']['ESCRIPT_NUM_THREADS'] = os.environ['ESCRIPT_NUM_THREADS']
256    except KeyError: pass
257    
258    try: env['ENV']['ESCRIPT_NUM_PROCS'] = os.environ['ESCRIPT_NUM_PROCS']
259    except KeyError: env['ENV']['ESCRIPT_NUM_PROCS']=1
260    
261    try: env['ENV']['ESCRIPT_NUM_NODES'] = os.environ['ESCRIPT_NUM_NODES']
262    except KeyError: env['ENV']['ESCRIPT_NUM_NODES']=1
263    
264    try: env['ENV']['ESCRIPT_HOSTFILE'] = os.environ['ESCRIPT_HOSTFILE']
265    except KeyError: pass
266    
267  try: env['ENV']['PATH'] = os.environ['PATH']  try: env['ENV']['PATH'] = os.environ['PATH']
268  except KeyError: pass  except KeyError: pass
269    
# Line 222  except KeyError: pass Line 295  except KeyError: pass
295  env.PrependENVPath('PYTHONPATH', prefix)  env.PrependENVPath('PYTHONPATH', prefix)
296  env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])  env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
297    
298    env['ENV']['ESCRIPT_ROOT'] = prefix
299    
300  ############ Set up paths for Configure() ######################  ############ Set up paths for Configure() ######################
301    
302  # Make a copy of an environment  # Make a copy of an environment
# Line 234  def clone_env(env): Line 309  def clone_env(env):
309  env.Append(CPPPATH      = [Dir('include')])  env.Append(CPPPATH      = [Dir('include')])
310    
311  # Add cc option -L<Escript>/trunk/lib  # Add cc option -L<Escript>/trunk/lib
312  env.Append(LIBPATH      = [Dir('lib')])  env.Append(LIBPATH      = [Dir(env['libinstall'])])
   
 env.Append(CPPDEFINES = ['ESCRIPT_EXPORTS', 'FINLEY_EXPORTS'])  
313    
314  if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])  if env['cc_extra'] != '': env.Append(CCFLAGS = env['cc_extra'])
315    if env['ld_extra'] != '': env.Append(LINKFLAGS = env['ld_extra'])
316    
317  if env['usepedantic']: env.Append(CCFLAGS = pedantic)  if env['usepedantic']: env.Append(CCFLAGS = pedantic)
318    
319  # MS Windows  # MS Windows
320  if IS_WINDOWS_PLATFORM:  if IS_WINDOWS_PLATFORM:
321    env.PrependENVPath('PATH',    [env['boost_lib_path']])    env.AppendENVPath('PATH', [env['boost_lib_path']])
322    env.PrependENVPath('PATH',    [env['libinstall']])    env.AppendENVPath('PATH', [env['libinstall']])
323      if not env['share_esysUtils'] :
324        env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
325      if not env['share_paso'] :
326        env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
327    
328    if env['usenetcdf']:    if env['usenetcdf']:
329      env.PrependENVPath('PATH',  [env['netCDF_lib_path']])      env.AppendENVPath('PATH',   [env['netCDF_lib_path']])
330    
331  env.Append(ARFLAGS = env['ar_flags'])  env.Append(ARFLAGS = env['ar_flags'])
332    
# Line 276  conf = Configure(clone_env(env)) Line 355  conf = Configure(clone_env(env))
355    
356  # Test that the compiler is working  # Test that the compiler is working
357  if not conf.CheckFunc('printf'):  if not conf.CheckFunc('printf'):
358    print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])     print "Cannot run C compiler '%s' (or libc is missing)" % (env['CC'])
359    sys.exit(1)     sys.exit(1)
360    
361  if not conf.CheckFunc('gethostname'):  if conf.CheckFunc('gethostname'):
362    env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])    conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])
363    
364  ############ python libraries (required) #######################  ############ python libraries (required) #######################
365    
366  conf.env.AppendUnique(CPPPATH       = [env['python_path']])  
367    if not sysheaderopt =="":
368      conf.env.Append(CCFLAGS=sysheaderopt+env['python_path'])
369    else:
370      conf.env.AppendUnique(CPPPATH     = [env['python_path']])
371    
372  conf.env.AppendUnique(LIBPATH       = [env['python_lib_path']])  conf.env.AppendUnique(LIBPATH       = [env['python_lib_path']])
373  conf.env.AppendUnique(LIBS      = [env['python_libs']])  conf.env.AppendUnique(LIBS      = [env['python_libs']])
374    
375    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['python_lib_path'])  # The wrapper script needs to find these libs
376    conf.env.PrependENVPath('PYTHONPATH', prefix)
377    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
378    
379  if not conf.CheckCHeader('Python.h'):  if not conf.CheckCHeader('Python.h'):
380    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'])
381    sys.exit(1)    sys.exit(1)
382  if not conf.CheckFunc('Py_Main'):  if not conf.CheckFunc('Py_Exit'):
383    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'])
384    sys.exit(1)    sys.exit(1)
385    
386  ############ boost (required) ##################################  ############ boost (required) ##################################
387    
388  conf.env.AppendUnique(CPPPATH       = [env['boost_path']])  if not sysheaderopt =="":
389    # This is required because we can't -isystem /usr/system because it breaks std includes
390      if os.path.normpath(env['boost_path']) =="/usr/include":
391        conf.env.Append(CCFLAGS=sysheaderopt+os.path.join(env['boost_path'],'boost'))
392      else:
393        conf.env.Append(CCFLAGS=sysheaderopt+env['boost_path'])
394    else:
395      conf.env.AppendUnique(CPPPATH     = [env['boost_path']])
396    
397  conf.env.AppendUnique(LIBPATH       = [env['boost_lib_path']])  conf.env.AppendUnique(LIBPATH       = [env['boost_lib_path']])
398  conf.env.AppendUnique(LIBS      = [env['boost_libs']])  conf.env.AppendUnique(LIBS      = [env['boost_libs']])
399    
400    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['boost_lib_path'])   # The wrapper script needs to find these libs
401    #ensure that our path entries remain at the front
402    conf.env.PrependENVPath('PYTHONPATH', prefix)
403    conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
404    
405  if not conf.CheckCXXHeader('boost/python.hpp'):  if not conf.CheckCXXHeader('boost/python.hpp'):
406    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'])
407    sys.exit(1)    sys.exit(1)
408    
409  if not conf.CheckFunc('PyObject_SetAttr'):  if not conf.CheckFunc('PyObject_SetAttr'):
410    print "Cannot find boost library method PyObject_SetAttr (tried method PyObject_SetAttr in library %s in directory %s)" % (env['boost_libs'], env['boost_lib_path'])    print "Cannot find boost library method PyObject_SetAttr (tried method PyObject_SetAttr in library %s in directory %s)" % (env['boost_libs'], env['boost_lib_path'])
411    sys.exit(1)    sys.exit(1)
# Line 332  if env['usenetcdf']: Line 434  if env['usenetcdf']:
434    conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])    conf.env.AppendUnique(CPPPATH = [env['netCDF_path']])
435    conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['netCDF_lib_path']])
436    conf.env.AppendUnique(LIBS    = [env['netCDF_libs']])    conf.env.AppendUnique(LIBS    = [env['netCDF_libs']])
437      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['netCDF_lib_path'])    # The wrapper script needs to find these libs
438      #ensure that our path entries remain at the front
439      conf.env.PrependENVPath('PYTHONPATH', prefix)
440      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
441    
442  if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0  if env['usenetcdf'] and not conf.CheckCHeader('netcdf.h'): env['usenetcdf'] = 0
443  if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0  if env['usenetcdf'] and not conf.CheckFunc('nc_open'): env['usenetcdf'] = 0
# Line 352  if env['usepapi']: Line 458  if env['usepapi']:
458    conf.env.AppendUnique(CPPPATH = [env['papi_path']])    conf.env.AppendUnique(CPPPATH = [env['papi_path']])
459    conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['papi_lib_path']])
460    conf.env.AppendUnique(LIBS    = [env['papi_libs']])    conf.env.AppendUnique(LIBS    = [env['papi_libs']])
461      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['papi_lib_path'])  # The wrapper script needs to find these libs
462      #ensure that our path entries remain at the front
463      conf.env.PrependENVPath('PYTHONPATH', prefix)
464      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
465    
466  if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0  if env['usepapi'] and not conf.CheckCHeader('papi.h'): env['usepapi'] = 0
467  if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0  if env['usepapi'] and not conf.CheckFunc('PAPI_start_counters'): env['usepapi'] = 0
# Line 372  if env['usemkl']: Line 482  if env['usemkl']:
482    conf.env.AppendUnique(CPPPATH = [env['mkl_path']])    conf.env.AppendUnique(CPPPATH = [env['mkl_path']])
483    conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['mkl_lib_path']])
484    conf.env.AppendUnique(LIBS    = [env['mkl_libs']])    conf.env.AppendUnique(LIBS    = [env['mkl_libs']])
485      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mkl_lib_path'])   # The wrapper script needs to find these libs
486      #ensure that our path entries remain at the front
487      conf.env.PrependENVPath('PYTHONPATH', prefix)
488      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
489    
490  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
491  if env['usemkl'] and not conf.CheckFunc('pardiso_'): env['usemkl'] = 0  if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0
492    
493  # Add MKL to environment env if it was found  # Add MKL to environment env if it was found
494  if env['usemkl']:  if env['usemkl']:
# Line 399  if env['useumfpack']: Line 513  if env['useumfpack']:
513    conf.env.AppendUnique(CPPPATH = [env['blas_path']])    conf.env.AppendUnique(CPPPATH = [env['blas_path']])
514    conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])    conf.env.AppendUnique(LIBPATH = [env['blas_lib_path']])
515    conf.env.AppendUnique(LIBS    = [env['blas_libs']])    conf.env.AppendUnique(LIBS    = [env['blas_libs']])
516      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['umf_lib_path'])   # The wrapper script needs to find these libs
517      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['amd_lib_path'])   # The wrapper script needs to find these libs
518      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['blas_lib_path'])  # The wrapper script needs to find these libs
519      #ensure that our path entries remain at the front
520      conf.env.PrependENVPath('PYTHONPATH', prefix)
521      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
522    
 if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0  
523  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
524    if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0
525    # if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?
526    
527  # Add UMFPACK to environment env if it was found  # Add UMFPACK to environment env if it was found
528  if env['useumfpack']:  if env['useumfpack']:
# Line 410  if env['useumfpack']: Line 531  if env['useumfpack']:
531  else:  else:
532    conf.Finish()    conf.Finish()
533    
534    ############ Silo (optional) ###################################
535    
536    if env['usesilo']:
537      conf = Configure(clone_env(env))
538      conf.env.AppendUnique(CPPPATH = [env['silo_path']])
539      conf.env.AppendUnique(LIBPATH = [env['silo_lib_path']])
540      conf.env.AppendUnique(LIBS = [env['silo_libs']])
541      if not conf.CheckCHeader('silo.h'): env['usesilo'] = 0
542      if not conf.CheckFunc('DBMkDir'): env['usesilo'] = 0
543      conf.Finish()
544    
545    # Add the path to Silo to environment env if it was found.
546    # Note that we do not add the libs since they are only needed for the
547    # escriptreader library and tools.
548    if env['usesilo']:
549      env.AppendUnique(CPPPATH = [env['silo_path']])
550      env.AppendUnique(LIBPATH = [env['silo_lib_path']])
551      env.Append(CPPDEFINES = ['HAVE_SILO'])
552    
553  ############ Add the compiler flags ############################  ############ Add the compiler flags ############################
554    
555  # Enable debug by choosing either cc_debug or cc_optim  # Enable debug by choosing either cc_debug or cc_optim
# Line 424  else: Line 564  else:
564  env.Append(CCFLAGS      = env['cc_flags'])  env.Append(CCFLAGS      = env['cc_flags'])
565  env.Append(LIBS         = [env['omp_libs']])  env.Append(LIBS         = [env['omp_libs']])
566    
567    ############ Add some custom builders ##########################
568    
569    py_builder = Builder(action = scons_extensions.build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
570    env.Append(BUILDERS = {'PyCompile' : py_builder});
571    
572    runUnitTest_builder = Builder(action = scons_extensions.runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
573    env.Append(BUILDERS = {'RunUnitTest' : runUnitTest_builder});
574    
575    runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)
576    env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});
577    
578    epstopdfbuilder = Builder(action = scons_extensions.eps2pdf, suffix=".pdf", src_suffix=".eps", single_source=True)
579    env.Append(BUILDERS = {'EpsToPDF' : epstopdfbuilder});
580    
581  ############ MPI (optional) ####################################  ############ MPI (optional) ####################################
582    if not env['usempi']: env['mpi_flavour']='none'
583    
584  # 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)
585  env_mpi = clone_env(env)  env_mpi = clone_env(env)
# Line 433  env_mpi = clone_env(env) Line 588  env_mpi = clone_env(env)
588  conf = Configure(clone_env(env_mpi))  conf = Configure(clone_env(env_mpi))
589    
590  if env_mpi['usempi']:  if env_mpi['usempi']:
591      VALID_MPIs=[ "MPT", "MPICH", "MPICH2", "OPENMPI", "INTELMPI" ]
592      if not env_mpi['mpi_flavour'] in VALID_MPIs:
593          raise ValueError,"MPI is enabled but mpi_flavour = %s is not a valid key from %s."%( env_mpi['mpi_flavour'],VALID_MPIs)
594    conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])    conf.env.AppendUnique(CPPPATH = [env_mpi['mpi_path']])
595    conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])    conf.env.AppendUnique(LIBPATH = [env_mpi['mpi_lib_path']])
596    conf.env.AppendUnique(LIBS    = [env_mpi['mpi_libs']])    conf.env.AppendUnique(LIBS    = [env_mpi['mpi_libs']])
597      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['mpi_lib_path'])   # The wrapper script needs to find these libs
598      #ensure that our path entries remain at the front
599      conf.env.PrependENVPath('PYTHONPATH', prefix)
600      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
601    
602  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
603  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
604    
605  # Add MPI to environment env_mpi if it was found  # Add MPI to environment env_mpi if it was found
606  if env_mpi['usempi']:  if env_mpi['usempi']:
# Line 449  else: Line 611  else:
611    
612  env['usempi'] = env_mpi['usempi']  env['usempi'] = env_mpi['usempi']
613    
614    
615  ############ ParMETIS (optional) ###############################  ############ ParMETIS (optional) ###############################
616    
617  # 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 623  if env_mpi['useparmetis']:
623    conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])    conf.env.AppendUnique(CPPPATH = [env_mpi['parmetis_path']])
624    conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])    conf.env.AppendUnique(LIBPATH = [env_mpi['parmetis_lib_path']])
625    conf.env.AppendUnique(LIBS    = [env_mpi['parmetis_libs']])    conf.env.AppendUnique(LIBS    = [env_mpi['parmetis_libs']])
626      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['parmetis_lib_path'])  # The wrapper script needs to find these libs
627      #ensure that our path entries remain at the front
628      conf.env.PrependENVPath('PYTHONPATH', prefix)
629      conf.env.PrependENVPath('LD_LIBRARY_PATH', env['libinstall'])
630    
631  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
632  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 640  else:
640    
641  env['useparmetis'] = env_mpi['useparmetis']  env['useparmetis'] = env_mpi['useparmetis']
642    
643    ############ Now we switch on Warnings as errors ###############
644    
645    #this needs to be done after configuration because the scons test files have warnings in them
646    
647    if ((fatalwarning != "") and (env['usewarnings'])):
648      env.Append(CCFLAGS        = fatalwarning)
649      env_mpi.Append(CCFLAGS        = fatalwarning)
650    
651  ############ Summarize our environment #########################  ############ Summarize our environment #########################
652    
653  print ""  print ""
# Line 488  if env['usemkl']: print "  Using MKL" Line 663  if env['usemkl']: print "  Using MKL"
663  else: print "   Not using MKL"  else: print "   Not using MKL"
664  if env['useumfpack']: print "   Using UMFPACK"  if env['useumfpack']: print "   Using UMFPACK"
665  else: print "   Not using UMFPACK"  else: print "   Not using UMFPACK"
666    if env['usesilo']: print "  Using Silo"
667    else: print "   Not using Silo"
668  if env['useopenmp']: print "    Using OpenMP"  if env['useopenmp']: print "    Using OpenMP"
669  else: print "   Not using OpenMP"  else: print "   Not using OpenMP"
670  if env['usempi']: print "   Using MPI"  if env['usempi']: print "   Using MPI (flavour = %s)"%env['mpi_flavour']
671  else: print "   Not using MPI"  else: print "   Not using MPI"
672  if env['useparmetis']: print "  Using ParMETIS"  if env['useparmetis']: print "  Using ParMETIS"
673  else: print "   Not using ParMETIS (requires MPI)"  else: print "   Not using ParMETIS (requires MPI)"
# Line 499  else: print "  Not using PAPI" Line 676  else: print "  Not using PAPI"
676  if env['usedebug']: print " Compiling for debug"  if env['usedebug']: print " Compiling for debug"
677  else: print "   Not compiling for debug"  else: print "   Not compiling for debug"
678  print " Installing in", prefix  print " Installing in", prefix
679    if ((fatalwarning != "") and (env['usewarnings'])): print " Treating warnings as errors"
680    else: print "   Not treating warnings as errors"
681  print ""  print ""
682    
683  ############ 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});  
   
 runPyUnitTest_builder = Builder(action = scons_extensions.runPyUnitTest, suffix = '.passed', src_suffic='.py', single_source=True)  
 env.Append(BUILDERS = {'RunPyUnitTest' : runPyUnitTest_builder});  
   
 ############ Build the desired subdirectories ##################  
684    
685  Export(["env", "env_mpi", "clone_env"])  Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.debug")))
686    Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.mpi")))
687    Execute(Delete(os.path.join(env['libinstall'],"Compiled.with.openmp")))
688    Execute(Delete(os.path.join(env['libinstall'],"pyversion")))
689    Execute(Delete(os.path.join(env['libinstall'],"buildvars")))
690    if not env['usempi']: Execute(Delete(os.path.join(env['libinstall'],"pythonMPI")))
691    
692    
693    ############ Build the subdirectories ##########################
694    
695    from grouptest import *
696    
697    TestGroups=[]
698    
699    Export(
700      ["env",
701       "env_mpi",
702       "clone_env",
703       "IS_WINDOWS_PLATFORM",
704       "TestGroups"
705       ]
706      )
707    
708  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)
709    env.SConscript(dirs = ['tools/libescriptreader/src'], build_dir='build/$PLATFORM/tools/libescriptreader', duplicate=0)
710  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
711  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
712  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 716  env.SConscript(dirs = ['doc'], build_dir
716  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)
717  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)
718  env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)  env.SConscript(dirs = ['pythonMPI/src'], build_dir='build/$PLATFORM/pythonMPI', duplicate=0)
719    env.SConscript(dirs = ['scripts'], build_dir='build/$PLATFORM/scripts', duplicate=0)
720    env.SConscript(dirs = ['paso/profiling'], build_dir='build/$PLATFORM/paso/profiling', duplicate=0)
721    
722    
723  ############ Remember what optimizations we used ###############  ############ Remember what optimizations we used ###############
724    
725  remember_list = []  remember_list = []
726    
727  if env['usedebug']:  if env['usedebug']:
728    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'))  
729    
730  if env['usempi']:  if env['usempi']:
731    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'))  
732    
733  if env['omp_optim'] != '':  if env['useopenmp']:
734    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'))  
735    
736  env.Alias('remember_options', remember_list)  env.Alias('remember_options', remember_list)
737    
738    
739    ############### Record python interpreter version ##############
740    
741    if not IS_WINDOWS_PLATFORM:
742      versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])
743      os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion"))
744    
745    ############## Populate the buildvars file #####################
746    
747    buildvars=open(os.path.join(env['libinstall'],'buildvars'),'w')
748    buildvars.write('python='+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+'\n')
749    
750    # Find the boost version by extracting it from version.hpp
751    boosthpp=open(os.path.join(env['boost_path'],'boost','version.hpp'))
752    boostversion='unknown'
753    try:
754        for line in boosthpp:
755            ver=re.match(r'#define BOOST_VERSION (\d+)',line)
756            if ver:
757                boostversion=ver.group(1)
758    except StopIteration:
759        pass
760    buildvars.write("boost="+boostversion+"\n")
761    buildvars.write("svn_revision="+str(global_revision)+"\n")
762    out="usedebug="
763    if env['usedebug']:
764        out+="y"
765    else:
766        out+="n"
767    out+="\nusempi="
768    if env['usempi']:
769        out+="y"
770    else:
771        out+="n"
772    out+="\nuseopenmp="
773    if env['useopenmp']:
774        out+="y"
775    else:
776        out+="n"
777    buildvars.write(out+"\n")
778    buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n')
779    
780    buildvars.close()
781    
782    
783  ############ Targets to build and install libraries ############  ############ Targets to build and install libraries ############
784    
785  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 804  build_all_list += ['build_esysUtils']
804  build_all_list += ['build_paso']  build_all_list += ['build_paso']
805  build_all_list += ['build_escript']  build_all_list += ['build_escript']
806  build_all_list += ['build_finley']  build_all_list += ['build_finley']
807  if env['usempi']: build_all_list += ['target_pythonMPI_exe']  if env['usempi']:       build_all_list += ['target_pythonMPI_exe']
808    #if not IS_WINDOWS_PLATFORM:    build_all_list += ['target_escript_wrapper']
809    if env['usesilo']:  build_all_list += ['target_escript2silo']
810  env.Alias('build_all', build_all_list)  env.Alias('build_all', build_all_list)
811    
812  install_all_list = []  install_all_list = []
# Line 584  install_all_list += ['install_finley'] Line 818  install_all_list += ['install_finley']
818  install_all_list += ['target_install_pyvisi_py']  install_all_list += ['target_install_pyvisi_py']
819  install_all_list += ['target_install_modellib_py']  install_all_list += ['target_install_modellib_py']
820  install_all_list += ['target_install_pycad_py']  install_all_list += ['target_install_pycad_py']
821  if env['usempi']: install_all_list += ['target_install_pythonMPI_exe']  if env['usempi']:       install_all_list += ['target_install_pythonMPI_exe']
822    #if not IS_WINDOWS_PLATFORM:    install_all_list += ['target_install_escript_wrapper']
823    if env['usesilo']:  install_all_list += ['target_install_escript2silo']
824  install_all_list += ['remember_options']  install_all_list += ['remember_options']
825  env.Alias('install_all', install_all_list)  env.Alias('install_all', install_all_list)
826    
# Line 597  env.Alias('build_cppunittest', ['target_ Line 833  env.Alias('build_cppunittest', ['target_
833  env.Alias('install_cppunittest', ['build_cppunittest', 'target_install_cppunittest_a'])  env.Alias('install_cppunittest', ['build_cppunittest', 'target_install_cppunittest_a'])
834  env.Alias('run_tests', ['install_all', 'target_install_cppunittest_a'])  env.Alias('run_tests', ['install_all', 'target_install_cppunittest_a'])
835  env.Alias('all_tests', ['install_all', 'target_install_cppunittest_a', 'run_tests', 'py_tests'])  env.Alias('all_tests', ['install_all', 'target_install_cppunittest_a', 'run_tests', 'py_tests'])
836    env.Alias('build_full',['install_all','build_tests','build_py_tests'])
837    
838  ############ Targets to build the documentation ################  ############ Targets to build the documentation ################
839    
840  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'])
841    
842    if not IS_WINDOWS_PLATFORM:
843       try:
844        utest=open("utest.sh","w")
845        build_platform=os.name      #Sometimes Mac python says it is posix
846        if (build_platform=='posix') and platform.system()=="Darwin":
847            build_platform='darwin'
848        utest.write(GroupTest.makeHeader(build_platform))
849        for tests in TestGroups:
850            utest.write(tests.makeString())
851        utest.close()
852        os.chmod("utest.sh",stat.S_IRWXU|stat.S_IRGRP|stat.S_IXGRP|stat.S_IROTH|stat.S_IXOTH)
853        print "utest.sh written"
854       except IOError:
855        print "Error attempting to write unittests file."
856        sys.exit(1)
857    

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

  ViewVC Help
Powered by ViewVC 1.1.26