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

Diff of /branches/dirac/SConstruct

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

revision 2423 by gross, Thu May 14 05:02:20 2009 UTC revision 2827 by jfenwick, Fri Dec 18 03:41:09 2009 UTC
# Line 1  Line 1 
1    
2  ########################################################  ########################################################
3  #  #
4  # Copyright (c) 2003-2008 by University of Queensland  # Copyright (c) 2003-2009 by University of Queensland
5  # Earth Systems Science Computational Center (ESSCC)  # Earth Systems Science Computational Center (ESSCC)
6  # http://www.uq.edu.au/esscc  # http://www.uq.edu.au/esscc
7  #  #
# Line 16  EnsureSConsVersion(0,96,91) Line 16  EnsureSConsVersion(0,96,91)
16  EnsurePythonVersion(2,3)  EnsurePythonVersion(2,3)
17    
18  import sys, os, re, socket, platform, stat  import sys, os, re, socket, platform, stat
19    # For copy()
20    import shutil
21    
22  # Add our extensions  # Add our extensions
23  if os.path.isdir('scons'): sys.path.append('scons')  if os.path.isdir('scons'): sys.path.append('scons')
# Line 33  IS_WINDOWS_PLATFORM = (os.name== "nt") Line 35  IS_WINDOWS_PLATFORM = (os.name== "nt")
35    
36  prefix = ARGUMENTS.get('prefix', Dir('#.').abspath)  prefix = ARGUMENTS.get('prefix', Dir('#.').abspath)
37    
38    #Holds names of variables from the calling environment which need to be passed
39    #to tools
40    env_export=[]
41    
42  #Determine where to read options from use:  #Determine where to read options from use:
43  #1. command line  #1. command line
44  #2. scons/<hostname>_options.py  #2. scons/<hostname>_options.py
45  #3. name as part of a cluster  #3. name as part of a cluster
46  options_file=ARGUMENTS.get('options_file', None)  options_file=ARGUMENTS.get('options_file', None)
47    effective_hostname=socket.gethostname().split('.')[0]
48  if not options_file:  if not options_file:
49    hostname = re.sub("[^0-9a-zA-Z]", "_", socket.gethostname().split('.')[0])    mangledhostname = re.sub("[^0-9a-zA-Z]", "_", effective_hostname)
50    options_file = os.path.join("scons",hostname+"_options.py")    options_file = os.path.join("scons",mangledhostname+"_options.py")
51    #If there is no options file with that name see if there is a substitute    #If there is no options file with that name see if there is a substitute
52    if not os.path.isfile(options_file):    if not os.path.isfile(options_file):
53      tmp = scons_extensions.effectiveName(hostname)      effective_hostname = scons_extensions.effectiveName(effective_hostname)
54      options_file = os.path.join("scons",tmp+"_options.py")      mangledhostname = re.sub("[^0-9a-zA-Z]", "_", effective_hostname)
55        options_file = os.path.join("scons",mangledhostname+"_options.py")
56    
57  if not os.path.isfile(options_file):  if not os.path.isfile(options_file):
58    print "Options file not found (expected '%s')" % options_file    print "Options file not found (expected '%s')" % options_file
# Line 52  if not os.path.isfile(options_file): Line 60  if not os.path.isfile(options_file):
60  else:  else:
61    print "Options file is", options_file    print "Options file is", options_file
62    
63  # Load options file and command-line arguments  #Does our scons support the newer Variables class or do we need to use Options?
64  opts = Options(options_file, ARGUMENTS)  
65    try:
66       dummyvar=Variables
67       opts = Variables(options_file, ARGUMENTS)
68       adder = opts.AddVariables
69    except:
70       opts = Options(options_file, ARGUMENTS)
71       adder = opts.AddOptions
72       BoolVariable = BoolOption
73    
74  ############ Load build options ################################  ############ Load build options ################################
75    
76  opts.AddOptions(  adder(
77    #opts.AddOptions(
78  # Where to install esys stuff  # Where to install esys stuff
79    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),    ('prefix', 'where everything will be installed',                       Dir('#.').abspath),
80    ('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')),
# Line 65  opts.AddOptions( Line 82  opts.AddOptions(
82    ('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')),
83    ('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')),
84  # Compilation options  # Compilation options
85    BoolOption('dodebug', 'For backwards compatibility', 'no'),    BoolVariable('dodebug', 'For backwards compatibility', 'no'),
86    BoolOption('usedebug', 'Do you want a debug build?', 'no'),    BoolVariable('usedebug', 'Do you want a debug build?', 'no'),
87    BoolOption('usevtk', 'Do you want to use VTK?', 'yes'),    BoolVariable('usevtk', 'Do you want to use VTK?', 'yes'),
88    ('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),
89    ('win_cc_name', 'windows C compiler name if needed', 'msvc'),    ('win_cc_name', 'windows C compiler name if needed', 'msvc'),
90    # 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
# Line 81  opts.AddOptions( Line 98  opts.AddOptions(
98    ('ld_extra', 'Extra linker flags', ''),    ('ld_extra', 'Extra linker flags', ''),
99    ('sys_libs', 'System libraries to link with', []),    ('sys_libs', 'System libraries to link with', []),
100    ('ar_flags', 'Static library archiver flags to use', ''),    ('ar_flags', 'Static library archiver flags to use', ''),
101    BoolOption('useopenmp', 'Compile parallel version using OpenMP', 'no'),    BoolVariable('useopenmp', 'Compile parallel version using OpenMP', 'no'),
102    BoolOption('usepedantic', 'Compile with -pedantic if using gcc', 'no'),    BoolVariable('usepedantic', 'Compile with -pedantic if using gcc', 'no'),
103    BoolOption('usewarnings','Compile with warnings as errors if using gcc','yes'),    BoolVariable('usewarnings','Compile with warnings as errors if using gcc','yes'),
104    ('forcelazy','for testing use only - set the default value for autolazy','leave_alone'),    ('forcelazy','for testing use only - set the default value for autolazy','leave_alone'),
105      ('forcecollres','for testing use only - set the default value for force resolving collective ops','leave_alone'),
106  # Python  # Python
107    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),    ('python_path', 'Path to Python includes', '/usr/include/'+python_version),
108    ('python_lib_path', 'Path to Python libs', usr_lib),    ('python_lib_path', 'Path to Python libs', usr_lib),
# Line 95  opts.AddOptions( Line 113  opts.AddOptions(
113    ('boost_lib_path', 'Path to Boost libs', usr_lib),    ('boost_lib_path', 'Path to Boost libs', usr_lib),
114    ('boost_libs', 'Boost libraries to link with', ['boost_python']),    ('boost_libs', 'Boost libraries to link with', ['boost_python']),
115  # NetCDF  # NetCDF
116    BoolOption('usenetcdf', 'switch on/off the usage of netCDF', 'yes'),    BoolVariable('usenetcdf', 'switch on/off the usage of netCDF', 'yes'),
117    ('netCDF_path', 'Path to netCDF includes', '/usr/include'),    ('netCDF_path', 'Path to netCDF includes', '/usr/include'),
118    ('netCDF_lib_path', 'Path to netCDF libs', usr_lib),    ('netCDF_lib_path', 'Path to netCDF libs', usr_lib),
119    ('netCDF_libs', 'netCDF C++ libraries to link with', ['netcdf_c++', 'netcdf']),    ('netCDF_libs', 'netCDF C++ libraries to link with', ['netcdf_c++', 'netcdf']),
120  # MPI  # MPI
121    BoolOption('useMPI', 'For backwards compatibility', 'no'),    BoolVariable('useMPI', 'For backwards compatibility', 'no'),
122    BoolOption('usempi', 'Compile parallel version using MPI', 'no'),    BoolVariable('usempi', 'Compile parallel version using MPI', 'no'),
123    ('MPICH_IGNORE_CXX_SEEK', 'name of macro to ignore MPI settings of C++ SEEK macro (for MPICH)' , 'MPICH_IGNORE_CXX_SEEK'),    ('MPICH_IGNORE_CXX_SEEK', 'name of macro to ignore MPI settings of C++ SEEK macro (for MPICH)' , 'MPICH_IGNORE_CXX_SEEK'),
124    ('mpi_path', 'Path to MPI includes', '/usr/include'),    ('mpi_path', 'Path to MPI includes', '/usr/include'),
125    ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),    ('mpi_run', 'mpirun name' , 'mpiexec -np 1'),
126    ('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),
127    ('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!)', []),
128    ('mpi_flavour','Type of MPI execution environment','none'),    ('mpi_flavour','Type of MPI execution environment','none'),
129  # ParMETIS  # ParMETIS
130    BoolOption('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),    BoolVariable('useparmetis', 'Compile parallel version using ParMETIS', 'yes'),
131    ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),    ('parmetis_path', 'Path to ParMETIS includes', '/usr/include'),
132    ('parmetis_lib_path', 'Path to ParMETIS library', usr_lib),    ('parmetis_lib_path', 'Path to ParMETIS library', usr_lib),
133    ('parmetis_libs', 'ParMETIS library to link with', ['parmetis', 'metis']),    ('parmetis_libs', 'ParMETIS library to link with', ['parmetis', 'metis']),
134  # PAPI  # PAPI
135    BoolOption('usepapi', 'switch on/off the usage of PAPI', 'no'),    BoolVariable('usepapi', 'switch on/off the usage of PAPI', 'no'),
136    ('papi_path', 'Path to PAPI includes', '/usr/include'),    ('papi_path', 'Path to PAPI includes', '/usr/include'),
137    ('papi_lib_path', 'Path to PAPI libs', usr_lib),    ('papi_lib_path', 'Path to PAPI libs', usr_lib),
138    ('papi_libs', 'PAPI libraries to link with', ['papi']),    ('papi_libs', 'PAPI libraries to link with', ['papi']),
139    BoolOption('papi_instrument_solver', 'use PAPI in Solver.c to instrument each iteration of the solver', False),    BoolVariable('papi_instrument_solver', 'use PAPI in Solver.c to instrument each iteration of the solver', False),
140  # MKL  # MKL
141    BoolOption('usemkl', 'switch on/off the usage of MKL', 'no'),    BoolVariable('usemkl', 'switch on/off the usage of MKL', 'no'),
142    ('mkl_path', 'Path to MKL includes', '/sw/sdev/cmkl/10.0.2.18/include'),    ('mkl_path', 'Path to MKL includes', '/sw/sdev/cmkl/10.0.2.18/include'),
143    ('mkl_lib_path', 'Path to MKL libs', '/sw/sdev/cmkl/10.0.2.18/lib/em64t'),    ('mkl_lib_path', 'Path to MKL libs', '/sw/sdev/cmkl/10.0.2.18/lib/em64t'),
144    ('mkl_libs', 'MKL libraries to link with', ['mkl_solver', 'mkl_em64t', 'guide', 'pthread']),    ('mkl_libs', 'MKL libraries to link with', ['mkl_solver', 'mkl_em64t', 'guide', 'pthread']),
145  # UMFPACK  # UMFPACK
146    BoolOption('useumfpack', 'switch on/off the usage of UMFPACK', 'no'),    BoolVariable('useumfpack', 'switch on/off the usage of UMFPACK', 'no'),
147    ('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'),    ('ufc_path', 'Path to UFconfig includes', '/usr/include/suitesparse'),
148    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),    ('umf_path', 'Path to UMFPACK includes', '/usr/include/suitesparse'),
149    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),    ('umf_lib_path', 'Path to UMFPACK libs', usr_lib),
150    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),    ('umf_libs', 'UMFPACK libraries to link with', ['umfpack']),
151  # Silo  # Silo
152    BoolOption('usesilo', 'switch on/off the usage of Silo', 'yes'),    BoolVariable('usesilo', 'switch on/off the usage of Silo', 'yes'),
153    ('silo_path', 'Path to Silo includes', '/usr/include'),    ('silo_path', 'Path to Silo includes', '/usr/include'),
154    ('silo_lib_path', 'Path to Silo libs', usr_lib),    ('silo_lib_path', 'Path to Silo libs', usr_lib),
155    ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),    ('silo_libs', 'Silo libraries to link with', ['siloh5', 'hdf5']),
# Line 143  opts.AddOptions( Line 161  opts.AddOptions(
161    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),    ('blas_path', 'Path to BLAS includes', '/usr/include/suitesparse'),
162    ('blas_lib_path', 'Path to BLAS libs', usr_lib),    ('blas_lib_path', 'Path to BLAS libs', usr_lib),
163    ('blas_libs', 'BLAS libraries to link with', ['blas']),    ('blas_libs', 'BLAS libraries to link with', ['blas']),
164    #Lapack options
165      BoolVariable('uselapack','switch on/off use of Lapack','no'),
166      ('lapack_path', 'Path to Lapack includes','/usr/include'),
167      ('lapack_lib_path', 'Path to Lapack libs', usr_lib),
168      ('lapack_libs', 'Lapack libraries to link with', []),
169      ('lapack_type', '{clapack,mkl}','clapack'),
170  # An option for specifying the compiler tools set (see windows branch).  # An option for specifying the compiler tools set (see windows branch).
171    ('tools_names', 'allow control over the tools in the env setup', ['intelc']),    ('tools_names', 'allow control over the tools in the env setup', ['intelc']),
172  # finer control over library building, intel aggressive global optimisation  # finer control over library building, intel aggressive global optimisation
173  # works with dynamic libraries on windows.  # works with dynamic libraries on windows.
174    ('share_esysUtils', 'control static or dynamic esysUtils lib', False),    ('share_esysUtils', 'control static or dynamic esysUtils lib', False),
175    ('share_paso', 'control static or dynamic paso lib', False)    ('share_paso', 'control static or dynamic paso lib', False),
176      ('env_export','Environment variables to be passed to children',[]),
177    #To enable passing function pointers through python
178      BoolVariable('iknowwhatimdoing','allow nonstandard C',False)
179  )  )
180    
181    
182    
183  ############ Specify which compilers to use ####################  ############ Specify which compilers to use ####################
184    
185  # intelc uses regular expressions improperly and emits a warning about  # intelc uses regular expressions improperly and emits a warning about
# Line 161  if IS_WINDOWS_PLATFORM: Line 190  if IS_WINDOWS_PLATFORM:
190        env = Environment(tools = ['default'] + env['tools_names'],        env = Environment(tools = ['default'] + env['tools_names'],
191                          options = opts)                          options = opts)
192  else:  else:
193     if socket.gethostname().split('.')[0] == 'service0':     if effective_hostname == 'service0':
194        env = Environment(tools = ['default', 'intelc'], options = opts)        env = Environment(tools = ['default', 'intelc'], options = opts)
195     elif os.uname()[4]=='ia64':     elif os.uname()[4]=='ia64':
196        env = Environment(tools = ['default', 'intelc'], options = opts)        env = Environment(tools = ['default', 'intelc'], options = opts)
# Line 171  else: Line 200  else:
200        env = Environment(tools = ['default'], options = opts)        env = Environment(tools = ['default'], options = opts)
201  Help(opts.GenerateHelpText(env))  Help(opts.GenerateHelpText(env))
202    
203    
204    ############ Make sure target directories exist ################
205    
206    if not os.path.isdir(env['bininstall']):
207        os.makedirs(env['bininstall'])
208    if not os.path.isdir(env['libinstall']):
209        os.makedirs(env['libinstall'])
210    if not os.path.isdir(env['pyinstall']):
211        os.makedirs(env['pyinstall'])
212    
213    ########## Copy required environment vars ######################
214    
215    for i in env['env_export']:
216       env.Append(ENV = {i:os.environ[i]})
217    
218  ############ Fill in compiler options if not set above #########  ############ Fill in compiler options if not set above #########
219    
220  # Backwards compatibility: allow dodebug=yes and useMPI=yes  # Backwards compatibility: allow dodebug=yes and useMPI=yes
# Line 201  elif env["CC"] == "gcc": Line 245  elif env["CC"] == "gcc":
245    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"    cc_debug      = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
246    omp_optim     = "-fopenmp"    omp_optim     = "-fopenmp"
247    omp_debug     = "-fopenmp"    omp_debug     = "-fopenmp"
248    omp_libs      = ['gomp']    omp_libs      = []
249    pedantic      = "-pedantic-errors -Wno-long-long"    pedantic      = "-pedantic-errors -Wno-long-long"
250    fatalwarning      = "-Werror"    fatalwarning      = "-Werror"
251    sysheaderopt      = "-isystem "    sysheaderopt      = "-isystem "
# Line 234  if env["omp_libs"] == "-DEFAULT_6": env[ Line 278  if env["omp_libs"] == "-DEFAULT_6": env[
278  #set up the autolazy values  #set up the autolazy values
279  if env['forcelazy']    != "leave_alone":  if env['forcelazy']    != "leave_alone":
280    if env['forcelazy'] == 'on':    if env['forcelazy'] == 'on':
281      env.Append(CPPDEFINES='FAUTOLAZYON')      env.Append(CPPDEFINES=['FAUTOLAZYON'])
282    else:    else:
283       if env['forcelazy'] == 'off':       if env['forcelazy'] == 'off':
284      env.Append(CPPDEFINES='FAUTOLAZYOFF')      env.Append(CPPDEFINES=['FAUTOLAZYOFF'])
285    
286    #set up the colective resolve values
287    if env['forcecollres']    != "leave_alone":
288      print env['forcecollres']
289      if env['forcecollres'] == 'on':
290        env.Append(CPPDEFINES=['FRESCOLLECTON'])
291      else:
292         if env['forcecollres'] == 'off':
293        env.Append(CPPDEFINES=['FRESCOLLECTOFF'])
294    
295    
296    if env['iknowwhatimdoing']:
297        env.Append(CPPDEFINES=['IKNOWWHATIMDOING'])
298    
299  # 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
300  if not env["useopenmp"]:  if not env["useopenmp"]:
# Line 282  except KeyError: pass Line 339  except KeyError: pass
339  try: env['ENV']['CPLUS_INCLUDE_PATH'] = os.environ['CPLUS_INCLUDE_PATH']  try: env['ENV']['CPLUS_INCLUDE_PATH'] = os.environ['CPLUS_INCLUDE_PATH']
340  except KeyError: pass  except KeyError: pass
341    
342  try: PrependENVPath['ENV'][LD_LIBRARY_PATH_KEY] = os.environ['LD_LIBRARY_PATH']  try: env.PrependENVPath(LD_LIBRARY_PATH_KEY,os.environ['LD_LIBRARY_PATH'])
343  except KeyError: pass  except KeyError: pass
344    
345  try: env['ENV']['LIBRARY_PATH'] = os.environ['LIBRARY_PATH']  try: env['ENV']['LIBRARY_PATH'] = os.environ['LIBRARY_PATH']
# Line 347  except: Line 404  except:
404  if global_revision == "": global_revision="-2"  if global_revision == "": global_revision="-2"
405  env.Append(CPPDEFINES = ["SVN_VERSION="+global_revision])  env.Append(CPPDEFINES = ["SVN_VERSION="+global_revision])
406    
407  ############ numarray (required) ###############################  ############ numpy (required) ###############################
408    
409  try:  try:
410    from numarray import identity    from numpy import identity
411  except ImportError:  except ImportError:
412    print "Cannot import numarray, you need to set your PYTHONPATH"    print "Cannot import numpy, you need to set your PYTHONPATH"
413    sys.exit(1)    sys.exit(1)
414    
415  ############ C compiler (required) #############################  ############ C compiler (required) #############################
# Line 497  if env['usemkl']: Line 554  if env['usemkl']:
554  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
555  if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0  if env['usemkl'] and not conf.CheckFunc('pardiso'): env['usemkl'] = 0
556    
557    
558  # Add MKL to environment env if it was found  # Add MKL to environment env if it was found
559  if env['usemkl']:  if env['usemkl']:
560    env = conf.Finish()    env = conf.Finish()
# Line 527  if env['useumfpack']: Line 585  if env['useumfpack']:
585    conf.env.PrependENVPath('PYTHONPATH', prefix)    conf.env.PrependENVPath('PYTHONPATH', prefix)
586    conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])    conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
587    
 if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0  
588  if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0  if env['useumfpack'] and not conf.CheckCHeader('umfpack.h'): env['useumfpack'] = 0
589    if env['useumfpack'] and not conf.CheckFunc('umfpack_di_symbolic'): env['useumfpack'] = 0
590  # if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?  # if env['useumfpack'] and not conf.CheckFunc('daxpy'): env['useumfpack'] = 0 # this does not work on shake73?
591    
592  # Add UMFPACK to environment env if it was found  # Add UMFPACK to environment env if it was found
# Line 551  if env['usesilo']: Line 609  if env['usesilo']:
609    
610  # Add the path to Silo to environment env if it was found.  # Add the path to Silo to environment env if it was found.
611  # Note that we do not add the libs since they are only needed for the  # Note that we do not add the libs since they are only needed for the
612  # escriptreader library and tools.  # escriptexport library and tools.
613  if env['usesilo']:  if env['usesilo']:
614    env.AppendUnique(CPPPATH = [env['silo_path']])    env.AppendUnique(CPPPATH = [env['silo_path']])
615    env.AppendUnique(LIBPATH = [env['silo_lib_path']])    env.AppendUnique(LIBPATH = [env['silo_lib_path']])
616    env.Append(CPPDEFINES = ['HAVE_SILO'])    env.Append(CPPDEFINES = ['USE_SILO'])
617    
618    ########### Lapack (optional) ##################################
619    
620    if env['uselapack']:
621        env.AppendUnique(CPPDEFINES='USE_LAPACK')
622        env.AppendUnique(CPPPATH = [env['lapack_path']])
623        env.AppendUnique(LIBPATH =[env['lapack_lib_path']])
624    
625        env.Append(LIBPATH = '/usr/lib/atlas')
626        env.Append(LIBS = [env['lapack_libs']])
627        if env['lapack_type']=='mkl':
628           if not env['usemkl']:
629            env['uselapack']=0
630            print "mkl_lapack requires mkl"
631           else:
632            env.AppendUnique(CPPDEFINES='MKL_LAPACK')
633          
634    
635  ############ Add the compiler flags ############################  ############ Add the compiler flags ############################
636    
# Line 618  else: Line 693  else:
693    
694  env['usempi'] = env_mpi['usempi']  env['usempi'] = env_mpi['usempi']
695    
   
696  ############ ParMETIS (optional) ###############################  ############ ParMETIS (optional) ###############################
697    
698  # 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 647  else: Line 721  else:
721    
722  env['useparmetis'] = env_mpi['useparmetis']  env['useparmetis'] = env_mpi['useparmetis']
723    
 ############ Now we switch on Warnings as errors ###############  
   
 #this needs to be done after configuration because the scons test files have warnings in them  
   
 if ((fatalwarning != "") and (env['usewarnings'])):  
   env.Append(CCFLAGS        = fatalwarning)  
   env_mpi.Append(CCFLAGS        = fatalwarning)  
   
724  ############ Summarize our environment #########################  ############ Summarize our environment #########################
725    
726  print ""  print ""
727  print "Summary of configuration (see ./config.log for information)"  print "Summary of configuration (see ./config.log for information)"
728  print " Using python libraries"  print " Using python libraries"
729  print " Using numarray"  print " Using numpy"
730  print " Using boost"  print " Using boost"
731  if env['usenetcdf']: print "    Using NetCDF"  if env['usenetcdf']: print "    Using NetCDF"
732  else: print "   Not using NetCDF"  else: print "   Not using NetCDF"
# Line 680  if env['useparmetis']: print " Using Par Line 746  if env['useparmetis']: print " Using Par
746  else: print "   Not using ParMETIS (requires MPI)"  else: print "   Not using ParMETIS (requires MPI)"
747  if env['usepapi']: print "  Using PAPI"  if env['usepapi']: print "  Using PAPI"
748  else: print "   Not using PAPI"  else: print "   Not using PAPI"
749    if env['uselapack']: print "    Using Lapack"
750    else: print "   Not using Lapack"
751  if env['usedebug']: print " Compiling for debug"  if env['usedebug']: print " Compiling for debug"
752  else: print "   Not compiling for debug"  else: print "   Not compiling for debug"
753  print " Installing in", prefix  print " Installing in", prefix
# Line 699  if not env['usempi']: Execute(Delete(os. Line 767  if not env['usempi']: Execute(Delete(os.
767    
768  ############ Build the subdirectories ##########################  ############ Build the subdirectories ##########################
769    
770    if env['usepedantic']: env_mpi.Append(CCFLAGS = pedantic)
771    
772    
773  from grouptest import *  from grouptest import *
774    
775  TestGroups=[]  TestGroups=[]
776    
777    dodgy_env=clone_env(env_mpi)    # Environment without pedantic options
778    
779    ############ Now we switch on Warnings as errors ###############
780    
781    #this needs to be done after configuration because the scons test files have warnings in them
782    
783    if ((fatalwarning != "") and (env['usewarnings'])):
784      env.Append(CCFLAGS        = fatalwarning)
785      env_mpi.Append(CCFLAGS        = fatalwarning)
786    
787    
788  Export(  Export(
789    ["env",    ["env",
790     "env_mpi",     "env_mpi",
791     "clone_env",     "clone_env",
792       "dodgy_env",
793     "IS_WINDOWS_PLATFORM",     "IS_WINDOWS_PLATFORM",
794     "TestGroups"     "TestGroups"
795     ]     ]
796    )    )
797    
798  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)
799  env.SConscript(dirs = ['tools/libescriptreader/src'], build_dir='build/$PLATFORM/tools/libescriptreader', duplicate=0)  env.SConscript(dirs = ['tools/escriptconvert'], build_dir='build/$PLATFORM/tools/escriptconvert', duplicate=0)
800  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)  env.SConscript(dirs = ['paso/src'], build_dir='build/$PLATFORM/paso', duplicate=0)
801    env.SConscript(dirs = ['dataexporter/src'], build_dir='build/$PLATFORM/dataexporter', duplicate=0)
802  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)  env.SConscript(dirs = ['escript/src'], build_dir='build/$PLATFORM/escript', duplicate=0)
803  env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)  env.SConscript(dirs = ['esysUtils/src'], build_dir='build/$PLATFORM/esysUtils', duplicate=0)
804  env.SConscript(dirs = ['finley/src'], build_dir='build/$PLATFORM/finley', duplicate=0)  env.SConscript(dirs = ['finley/src'], build_dir='build/$PLATFORM/finley', duplicate=0)
# Line 746  env.Alias('remember_options', remember_l Line 830  env.Alias('remember_options', remember_l
830  ############### Record python interpreter version ##############  ############### Record python interpreter version ##############
831    
832  if not IS_WINDOWS_PLATFORM:  if not IS_WINDOWS_PLATFORM:
833    
834    versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])    versionstring="Python "+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])
835      if sys.version_info[4] >0 : versionstring+="rc%s"%sys.version_info[4]
836    os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion"))    os.system("echo "+versionstring+" > "+os.path.join(env['libinstall'],"pyversion"))
837    
838  ############## Populate the buildvars file #####################  ############## Populate the buildvars file #####################
# Line 783  else: Line 869  else:
869      out+="n"      out+="n"
870  buildvars.write(out+"\n")  buildvars.write(out+"\n")
871  buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n')  buildvars.write("mpi_flavour="+env['mpi_flavour']+'\n')
872    out="lapack="
873    if env['uselapack']:
874       out+="y"
875    else:
876       out+="n"
877    out+="\nsilo="
878    if env['usesilo']:
879       out+="y"
880    else:
881       out+="n"
882    buildvars.write(out+"\n")
883  buildvars.close()  buildvars.close()
884    
885    
# Line 799  env.Alias('install_esysUtils', ['build_e Line 895  env.Alias('install_esysUtils', ['build_e
895  env.Alias('build_paso', ['target_install_paso_headers', 'target_paso_a'])  env.Alias('build_paso', ['target_install_paso_headers', 'target_paso_a'])
896  env.Alias('install_paso', ['build_paso', 'target_install_paso_a'])  env.Alias('install_paso', ['build_paso', 'target_install_paso_a'])
897    
898    env.Alias('build_dataexporter', ['target_install_escriptexport_headers', 'target_escriptexport_so', 'target_escriptexportcpp_so'])
899    env.Alias('install_dataexporter', ['build_dataexporter', 'target_install_escriptexport_so', 'target_install_escriptexportcpp_so', 'target_install_dataexporter_py'])
900    
901  env.Alias('build_escript', ['target_install_escript_headers', 'target_escript_so', 'target_escriptcpp_so'])  env.Alias('build_escript', ['target_install_escript_headers', 'target_escript_so', 'target_escriptcpp_so'])
902  env.Alias('install_escript', ['build_escript', 'target_install_escript_so', 'target_install_escriptcpp_so', 'target_install_escript_py'])  env.Alias('install_escript', ['build_escript', 'target_install_escript_so', 'target_install_escriptcpp_so', 'target_install_escript_py'])
903    
# Line 809  env.Alias('install_finley', ['build_finl Line 908  env.Alias('install_finley', ['build_finl
908  build_all_list = []  build_all_list = []
909  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
910  build_all_list += ['build_paso']  build_all_list += ['build_paso']
911    build_all_list += ['build_dataexporter']
912  build_all_list += ['build_escript']  build_all_list += ['build_escript']
913  build_all_list += ['build_finley']  build_all_list += ['build_finley']
914  if env['usempi']:       build_all_list += ['target_pythonMPI_exe']  if env['usempi']:       build_all_list += ['target_pythonMPI_exe']
915  #if not IS_WINDOWS_PLATFORM:    build_all_list += ['target_escript_wrapper']  #if not IS_WINDOWS_PLATFORM:    build_all_list += ['target_escript_wrapper']
916  if env['usesilo']:  build_all_list += ['target_escript2silo']  if env['usesilo']:  build_all_list += ['target_escriptconvert']
917  env.Alias('build_all', build_all_list)  env.Alias('build_all', build_all_list)
918    
919  install_all_list = []  install_all_list = []
920  install_all_list += ['target_init']  install_all_list += ['target_init']
921  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
922  install_all_list += ['install_paso']  install_all_list += ['install_paso']
923    install_all_list += ['install_dataexporter']
924  install_all_list += ['install_escript']  install_all_list += ['install_escript']
925  install_all_list += ['install_finley']  install_all_list += ['install_finley']
926  install_all_list += ['target_install_pyvisi_py']  install_all_list += ['target_install_pyvisi_py']
# Line 827  install_all_list += ['target_install_mod Line 928  install_all_list += ['target_install_mod
928  install_all_list += ['target_install_pycad_py']  install_all_list += ['target_install_pycad_py']
929  if env['usempi']:       install_all_list += ['target_install_pythonMPI_exe']  if env['usempi']:       install_all_list += ['target_install_pythonMPI_exe']
930  #if not IS_WINDOWS_PLATFORM:    install_all_list += ['target_install_escript_wrapper']  #if not IS_WINDOWS_PLATFORM:    install_all_list += ['target_install_escript_wrapper']
931  if env['usesilo']:  install_all_list += ['target_install_escript2silo']  if env['usesilo']:  install_all_list += ['target_install_escriptconvert']
932  install_all_list += ['remember_options']  install_all_list += ['remember_options']
933  env.Alias('install_all', install_all_list)  env.Alias('install_all', install_all_list)
934    
# Line 842  env.Alias('run_tests', ['install_all', ' Line 943  env.Alias('run_tests', ['install_all', '
943  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'])
944  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
945    
946    
947  ############ Targets to build the documentation ################  ############ Targets to build the documentation ################
948    
949    env.Alias('api_epydoc','install_all')
950    
951  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf'])  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf'])
952    
953  if not IS_WINDOWS_PLATFORM:  if not IS_WINDOWS_PLATFORM:
# Line 862  if not IS_WINDOWS_PLATFORM: Line 966  if not IS_WINDOWS_PLATFORM:
966      print "Error attempting to write unittests file."      print "Error attempting to write unittests file."
967      sys.exit(1)      sys.exit(1)
968    
969       #Make sure that the escript wrapper is in place
970       if not os.path.isfile(os.path.join(env['bininstall'],'escript')):
971           print "Copying escript wrapper"
972           shutil.copy("bin/escript",os.path.join(env['bininstall'],'escript'))
973    
974    ############ Targets to build PasoTests suite ################
975    
976    env.Alias('build_PasoTests','build/'+build_platform+'/paso/profiling/PasoTests')

Legend:
Removed from v.2423  
changed lines
  Added in v.2827

  ViewVC Help
Powered by ViewVC 1.1.26