/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

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

revision 4110 by jfenwick, Fri Dec 14 01:21:33 2012 UTC revision 4300 by caltinay, Mon Mar 11 00:50:19 2013 UTC
# Line 1  Line 1 
1  ##############################################################################  ##############################################################################
2  #  #
3  # Copyright (c) 2003-2012 by University of Queensland  # Copyright (c) 2003-2013 by University of Queensland
4  # http://www.uq.edu.au  # http://www.uq.edu.au
5  #  #
6  # Primary Business: Queensland, Australia  # Primary Business: Queensland, Australia
# Line 15  Line 15 
15  EnsureSConsVersion(0,98,1)  EnsureSConsVersion(0,98,1)
16  EnsurePythonVersion(2,5)  EnsurePythonVersion(2,5)
17    
18  import sys, os, platform, re  import atexit, sys, os, platform, re
19  from distutils import sysconfig  from distutils import sysconfig
20    from dependencies import *
21  from site_init import *  from site_init import *
 from subprocess import PIPE, Popen  
22    
23  # Version number to check for in options file. Increment when new features are  # Version number to check for in options file. Increment when new features are
24  # added or existing options changed.  # added or existing options changed.
# Line 145  vars.AddVariables( Line 145  vars.AddVariables(
145  # in default locations.  # in default locations.
146  env = Environment(tools = ['default'], options = vars,  env = Environment(tools = ['default'], options = vars,
147                    ENV = {'PATH': os.environ['PATH']})                    ENV = {'PATH': os.environ['PATH']})
                     
148    
149  #set the vars for clang  # set the vars for clang
150  def mkclang(env):  def mkclang(env):
151    env['CC']='clang'      env['CC']='clang'
152    env['CXX']='clang++'      env['CXX']='clang++'
153                      
                     
154  if env['tools_names'] != 'default':  if env['tools_names'] != 'default':
155      zz=env['tools_names']      zz=env['tools_names']
156      if 'clang' in zz:      if 'clang' in zz:
# Line 183  if len(vars.UnknownVariables())>0: Line 181  if len(vars.UnknownVariables())>0:
181          print("Unknown option '%s'" % k)          print("Unknown option '%s'" % k)
182      Exit(1)      Exit(1)
183    
184    # create dictionary which will be populated with info for buildvars file
185    env['buildvars']={}
186    # create list which will be populated with warnings if there are any
187    env['warnings']=[]
188    
189  #################### Make sure install directories exist #####################  #################### Make sure install directories exist #####################
190    
191  env['BUILD_DIR']=Dir(env['build_dir']).abspath  env['BUILD_DIR']=Dir(env['build_dir']).abspath
192  prefix=Dir(env['prefix']).abspath  prefix=Dir(env['prefix']).abspath
193    env['buildvars']['prefix']=prefix
194  env['incinstall'] = os.path.join(prefix, 'include')  env['incinstall'] = os.path.join(prefix, 'include')
195  env['bininstall'] = os.path.join(prefix, 'bin')  env['bininstall'] = os.path.join(prefix, 'bin')
196  env['libinstall'] = os.path.join(prefix, 'lib')  env['libinstall'] = os.path.join(prefix, 'lib')
# Line 234  if cc_name == 'icc': Line 238  if cc_name == 'icc':
238      fatalwarning = "-Werror"      fatalwarning = "-Werror"
239  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
240      # GNU C on any system      # GNU C on any system
241      cc_flags     = "-pedantic -Wall -fPIC -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER  -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing -finline-functions"      # note that -ffast-math is not used because it breaks isnan(),
242        # see mantis #691
243        cc_flags     = "-pedantic -Wall -fPIC -Wno-unknown-pragmas -DBLOCKTIMER  -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing -finline-functions"
244      cc_optim     = "-O3"      cc_optim     = "-O3"
245      cc_debug     = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug     = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
246      omp_flags    = "-fopenmp"      omp_flags    = "-fopenmp"
# Line 255  elif cc_name == 'icl': Line 261  elif cc_name == 'icl':
261      omp_flags    = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'      omp_flags    = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'
262      omp_ldflags  = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'      omp_ldflags  = '/Qvec-report0 /Qopenmp /Qopenmp-report0 /Qparallel'
263    
264    env['sysheaderopt']=sysheaderopt
265    
266  # set defaults if not otherwise specified  # set defaults if not otherwise specified
267  if env['cc_flags']    == 'default': env['cc_flags'] = cc_flags  if env['cc_flags']    == 'default': env['cc_flags'] = cc_flags
268  if env['cc_optim']    == 'default': env['cc_optim'] = cc_optim  if env['cc_optim']    == 'default': env['cc_optim'] = cc_optim
# Line 288  if env['iknowwhatimdoing']: Line 296  if env['iknowwhatimdoing']:
296    
297  # Disable OpenMP if no flags provided  # Disable OpenMP if no flags provided
298  if env['openmp'] and env['omp_flags'] == '':  if env['openmp'] and env['omp_flags'] == '':
299     print("OpenMP requested but no flags provided - disabling OpenMP!")     env['warnings'].append("OpenMP requested but no flags provided - disabling OpenMP!")
300     env['openmp'] = False     env['openmp'] = False
301    
302  if env['openmp']:  if env['openmp']:
# Line 298  else: Line 306  else:
306      env['omp_flags']=''      env['omp_flags']=''
307      env['omp_ldflags']=''      env['omp_ldflags']=''
308    
309    env['buildvars']['openmp']=int(env['openmp'])
310    
311  # add debug/non-debug compiler flags  # add debug/non-debug compiler flags
312    env['buildvars']['debug']=int(env['debug'])
313  if env['debug']:  if env['debug']:
314      env.Append(CCFLAGS = env['cc_debug'])      env.Append(CCFLAGS = env['cc_debug'])
315  else:  else:
# Line 310  env.Append(CCFLAGS = env['cc_flags']) Line 321  env.Append(CCFLAGS = env['cc_flags'])
321  # add system libraries  # add system libraries
322  env.AppendUnique(LIBS = env['sys_libs'])  env.AppendUnique(LIBS = env['sys_libs'])
323    
324    # determine svn revision
325  global_revision=ARGUMENTS.get('SVN_VERSION', None)  global_revision=ARGUMENTS.get('SVN_VERSION', None)
326  if global_revision:  if global_revision:
327      global_revision = re.sub(':.*', '', global_revision)      global_revision = re.sub(':.*', '', global_revision)
# Line 326  else: Line 337  else:
337    except:    except:
338      global_revision = '-1'      global_revision = '-1'
339  env['svn_revision']=global_revision  env['svn_revision']=global_revision
340    env['buildvars']['svn_revision']=global_revision
341  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
342    
343  if IS_WINDOWS:  if IS_WINDOWS:
# Line 333  if IS_WINDOWS: Line 345  if IS_WINDOWS:
345          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
346          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
347    
348    # VSL random numbers
349    env['buildvars']['vsl_random']=int(env['vsl_random'])
350    if env['vsl_random']:
351        env.Append(CPPDEFINES = ['MKLRANDOM'])
352    
353    env['IS_WINDOWS']=IS_WINDOWS
354    
355  ###################### Copy required environment vars ########################  ###################### Copy required environment vars ########################
356    
357  # Windows doesn't use LD_LIBRARY_PATH but PATH instead  # Windows doesn't use LD_LIBRARY_PATH but PATH instead
# Line 342  if IS_WINDOWS: Line 361  if IS_WINDOWS:
361  else:  else:
362      LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'      LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'
363    
364    env['LD_LIBRARY_PATH_KEY']=LD_LIBRARY_PATH_KEY
365    
366  # the following env variables are exported for the unit tests  # the following env variables are exported for the unit tests
367    
368  for key in 'OMP_NUM_THREADS', 'ESCRIPT_NUM_PROCS', 'ESCRIPT_NUM_NODES':  for key in 'OMP_NUM_THREADS', 'ESCRIPT_NUM_PROCS', 'ESCRIPT_NUM_NODES':
# Line 395  env.Append(BUILDERS = {'EpsToPDF' : epst Line 416  env.Append(BUILDERS = {'EpsToPDF' : epst
416    
417  ############################ Dependency checks ###############################  ############################ Dependency checks ###############################
418    
419  # Create a Configure() environment to check for compilers and python  ######## Compiler
420  conf = Configure(env.Clone())  env=checkCompiler(env)
   
 ######## Test that the compilers work  
   
 if 'CheckCC' in dir(conf): # exists since scons 1.1.0  
     if not conf.CheckCC():  
         print("Cannot run C compiler '%s' (check config.log)" % (env['CC']))  
         Exit(1)  
     if not conf.CheckCXX():  
         print("Cannot run C++ compiler '%s' (check config.log)" % (env['CXX']))  
         Exit(1)  
 else:  
     if not conf.CheckFunc('printf', language='c'):  
         print("Cannot run C compiler '%s' (check config.log)" % (env['CC']))  
         Exit(1)  
     if not conf.CheckFunc('printf', language='c++'):  
         print("Cannot run C++ compiler '%s' (check config.log)" % (env['CXX']))  
         Exit(1)  
   
 if conf.CheckFunc('gethostname'):  
     conf.env.Append(CPPDEFINES = ['HAVE_GETHOSTNAME'])  
421    
422  ######## Python headers & library (required)  ######## Python headers & library (required)
423    env=checkPython(env)
424    
425  #First we check to see if the config file has specified  ######## boost & boost-python (required)
426  ##Where to find the filae. Ideally, this should be automatic  env=checkBoost(env)
 #But we need to deal with the case where python is not in its INSTALL  
 #Directory  
 # Use the python scons is running  
 if env['pythoncmd']=='python':  
     python_inc_path=sysconfig.get_python_inc()  
     if IS_WINDOWS:  
         python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')  
     elif env['PLATFORM']=='darwin':  
         python_lib_path=sysconfig.get_config_var('LIBPL')  
     else:  
         python_lib_path=sysconfig.get_config_var('LIBDIR')  
   
     #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux  
     if IS_WINDOWS:  
         python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]  
     else:  
         python_libs=['python'+sysconfig.get_python_version()]  
   
 #if we want to use a python other than the one scons is running  
 else:  
     initstring='from __future__ import print_function;from distutils import sysconfig;'  
     if env['pythonlibname']!='':  
         python_libs=env['pythonlibname']  
     else:   # work it out by calling python      
         if IS_WINDOWS:  
             cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'  
         else:  
             cmd='print("python"+sysconfig.get_python_version())'  
         p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)  
         python_libs=p.stdout.readline()  
         if env['usepython3']:       # This is to convert unicode str into py2 string  
             python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought  
         p.wait()  
         python_libs=python_libs.strip()  
   
     
     # Now we know whether we are using python3 or not  
     p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)  
     python_inc_path=p.stdout.readline()  
     if env['usepython3']:  
          python_inc_path=python_inc_path.encode()  
     p.wait()    
     python_inc_path=python_inc_path.strip()  
     if IS_WINDOWS:  
         cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"  
     elif env['PLATFORM']=='darwin':  
         cmd="sysconfig.get_config_var(\"LIBPL\")"  
     else:  
         cmd="sysconfig.get_config_var(\"LIBDIR\")"  
   
     p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)  
     python_lib_path=p.stdout.readline()  
     if env['usepython3']:  
         python_lib_path=python_lib_path.decode()  
     p.wait()  
     python_lib_path=python_lib_path.strip()  
   
 #Check for an override from the config file.  
 #Ideally, this should be automatic  
 #But we need to deal with the case where python is not in its INSTALL  
 #Directory  
 if env['pythonlibpath']!='':  
     python_lib_path=env['pythonlibpath']  
427    
428  if env['pythonincpath']!='':  ######## numpy (required) and numpy headers (optional)
429      python_inc_path=env['pythonincpath']  env=checkNumpy(env)
   
   
 if sysheaderopt == '':  
     conf.env.AppendUnique(CPPPATH = [python_inc_path])  
 else:  
     conf.env.Append(CCFLAGS = [sysheaderopt, python_inc_path])  
   
 conf.env.AppendUnique(LIBPATH = [python_lib_path])  
 conf.env.AppendUnique(LIBS = python_libs)  
 # The wrapper script needs to find the libs  
 conf.env.PrependENVPath(LD_LIBRARY_PATH_KEY, python_lib_path)  
   
 if not conf.CheckCHeader('Python.h'):  
     print("Cannot find python include files (tried 'Python.h' in directory %s)" % (python_inc_path))  
     Exit(1)  
 if not conf.CheckFunc('Py_Exit'):  
     print("Cannot find python library method Py_Main (tried %s in directory %s)" % (python_libs, python_lib_path))  
     Exit(1)  
   
 ## reuse conf to check for numpy header (optional)  
 if env['usepython3']:  
     # FIXME: This is until we can work out how to make the checks in python 3  
     conf.env['numpy_h']=False  
 else:  
     if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):  
         conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])  
         conf.env['numpy_h']=True  
     else:  
         conf.env['numpy_h']=False  
   
 # Commit changes to environment  
 env = conf.Finish()  
   
 ######## boost (required)  
   
 boost_inc_path,boost_lib_path=findLibWithHeader(env, env['boost_libs'], 'boost/python.hpp', env['boost_prefix'], lang='c++')  
 if sysheaderopt == '':  
     env.AppendUnique(CPPPATH = [boost_inc_path])  
 else:  
     # This is required because we can't -isystem /usr/include since it breaks  
     # std includes  
     if os.path.normpath(boost_inc_path) == '/usr/include':  
         conf.env.Append(CCFLAGS=[sysheaderopt, os.path.join(boost_inc_path,'boost')])  
     else:  
         env.Append(CCFLAGS=[sysheaderopt, boost_inc_path])  
   
 env.AppendUnique(LIBPATH = [boost_lib_path])  
 env.AppendUnique(LIBS = env['boost_libs'])  
 env.PrependENVPath(LD_LIBRARY_PATH_KEY, boost_lib_path)  
   
 ######## numpy (required)  
   
 if not detectModule(env, 'numpy'):  
     print("Cannot import numpy. If it is installed try setting your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
     Exit(1)  
430    
431  ######## CppUnit (required for tests)  ######## CppUnit (required for tests)
432    env=checkCppUnit(env)
433    
434  try:  ######## optional python modules (sympy, pyproj)
435      cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')  env=checkOptionalModules(env)
     env.AppendUnique(CPPPATH = [cppunit_inc_path])  
     env.AppendUnique(LIBPATH = [cppunit_lib_path])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)  
     env['cppunit']=True  
 except:  
     env['cppunit']=False  
   
 ######## sympy (optional)  
   
 if detectModule(env, 'sympy'):  
     env['sympy'] = True  
 else:  
     print("Cannot import sympy. Symbolic toolbox and nonlinear PDEs will not be available.")  
     env['sympy'] = False  
   
 ######## netCDF (optional)  
   
 netcdf_inc_path=''  
 netcdf_lib_path=''  
 if env['netcdf']:  
     netcdf_inc_path,netcdf_lib_path=findLibWithHeader(env, env['netcdf_libs'], 'netcdf.h', env['netcdf_prefix'], lang='c++')  
     env.AppendUnique(CPPPATH = [netcdf_inc_path])  
     env.AppendUnique(LIBPATH = [netcdf_lib_path])  
     env.AppendUnique(LIBS = env['netcdf_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, netcdf_lib_path)  
     env.Append(CPPDEFINES = ['USE_NETCDF'])  
   
 ######## PAPI (optional)  
   
 papi_inc_path=''  
 papi_lib_path=''  
 if env['papi']:  
     papi_inc_path,papi_lib_path=findLibWithHeader(env, env['papi_libs'], 'papi.h', env['papi_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [papi_inc_path])  
     env.AppendUnique(LIBPATH = [papi_lib_path])  
     env.AppendUnique(LIBS = env['papi_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, papi_lib_path)  
     env.Append(CPPDEFINES = ['BLOCKPAPI'])  
   
 ######## MKL (optional)  
   
 mkl_inc_path=''  
 mkl_lib_path=''  
 if env['mkl']:  
     mkl_inc_path,mkl_lib_path=findLibWithHeader(env, env['mkl_libs'], 'mkl_solver.h', env['mkl_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [mkl_inc_path])  
     env.AppendUnique(LIBPATH = [mkl_lib_path])  
     env.AppendUnique(LIBS = env['mkl_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, mkl_lib_path)  
     env.Append(CPPDEFINES = ['MKL'])  
   
 ######## UMFPACK (optional)  
   
 umfpack_inc_path=''  
 umfpack_lib_path=''  
 if env['umfpack']:  
     umfpack_inc_path,umfpack_lib_path=findLibWithHeader(env, env['umfpack_libs'], 'umfpack.h', env['umfpack_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [umfpack_inc_path])  
     env.AppendUnique(LIBPATH = [umfpack_lib_path])  
     env.AppendUnique(LIBS = env['umfpack_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, umfpack_lib_path)  
     env.Append(CPPDEFINES = ['UMFPACK'])  
436    
437  ######## LAPACK (optional)  ######## optional dependencies (netCDF, PAPI, MKL, UMFPACK, Lapack, Silo, ...)
438    env=checkOptionalLibraries(env)
 if env['lapack']=='mkl' and not env['mkl']:  
     print("mkl_lapack requires MKL!")  
     Exit(1)  
   
 env['uselapack'] = env['lapack']!='none'  
 lapack_inc_path=''  
 lapack_lib_path=''  
 if env['uselapack']:  
     header='clapack.h'  
     if env['lapack']=='mkl':  
         env.AppendUnique(CPPDEFINES = ['MKL_LAPACK'])  
         header='mkl_lapack.h'  
     lapack_inc_path,lapack_lib_path=findLibWithHeader(env, env['lapack_libs'], header, env['lapack_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [lapack_inc_path])  
     env.AppendUnique(LIBPATH = [lapack_lib_path])  
     env.AppendUnique(LIBS = env['lapack_libs'])  
     env.Append(CPPDEFINES = ['USE_LAPACK'])  
   
 ######## Silo (optional)  
   
 silo_inc_path=''  
 silo_lib_path=''  
 if env['silo']:  
     silo_inc_path,silo_lib_path=findLibWithHeader(env, env['silo_libs'], 'silo.h', env['silo_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [silo_inc_path])  
     env.AppendUnique(LIBPATH = [silo_lib_path])  
     # Note that we do not add the libs since they are only needed for the  
     # weipa library and tools.  
     #env.AppendUnique(LIBS = [env['silo_libs']])  
   
 ######## VSL random numbers (optional)  
 if env['vsl_random']:  
     env.Append(CPPDEFINES = ['MKLRANDOM'])  
   
 ######## VisIt (optional)  
   
 visit_inc_path=''  
 visit_lib_path=''  
 if env['visit']:  
     visit_inc_path,visit_lib_path=findLibWithHeader(env, env['visit_libs'], 'VisItControlInterface_V2.h', env['visit_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [visit_inc_path])  
     env.AppendUnique(LIBPATH = [visit_lib_path])  
   
 ######## MPI (optional)  
   
 if env['mpi']=='no':  
     env['mpi']='none'  
   
 env['usempi'] = env['mpi']!='none'  
 mpi_inc_path=''  
 mpi_lib_path=''  
 if env['usempi']:  
     mpi_inc_path,mpi_lib_path=findLibWithHeader(env, env['mpi_libs'], 'mpi.h', env['mpi_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [mpi_inc_path])  
     env.AppendUnique(LIBPATH = [mpi_lib_path])  
     env.AppendUnique(LIBS = env['mpi_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, mpi_lib_path)  
     env.Append(CPPDEFINES = ['ESYS_MPI', 'MPI_NO_CPPBIND', 'MPICH_IGNORE_CXX_SEEK'])  
     # NetCDF 4.1 defines MPI_Comm et al. if MPI_INCLUDED is not defined!  
     # On the other hand MPT and OpenMPI don't define the latter so we have to  
     # do that here  
     if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:  
         env.Append(CPPDEFINES = ['MPI_INCLUDED'])  
   
 ######## BOOMERAMG (optional)  
   
 if env['mpi'] == 'none': env['boomeramg'] = False  
   
 boomeramg_inc_path=''  
 boomeramg_lib_path=''  
 if env['boomeramg']:  
     boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [boomeramg_inc_path])  
     env.AppendUnique(LIBPATH = [boomeramg_lib_path])  
     env.AppendUnique(LIBS = env['boomeramg_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)  
     env.Append(CPPDEFINES = ['BOOMERAMG'])  
   
 ######## ParMETIS (optional)  
   
 if not env['usempi']: env['parmetis'] = False  
   
 parmetis_inc_path=''  
 parmetis_lib_path=''  
 if env['parmetis']:  
     parmetis_inc_path,parmetis_lib_path=findLibWithHeader(env, env['parmetis_libs'], 'parmetis.h', env['parmetis_prefix'], lang='c')  
     env.AppendUnique(CPPPATH = [parmetis_inc_path])  
     env.AppendUnique(LIBPATH = [parmetis_lib_path])  
     env.AppendUnique(LIBS = env['parmetis_libs'])  
     env.PrependENVPath(LD_LIBRARY_PATH_KEY, parmetis_lib_path)  
     env.Append(CPPDEFINES = ['USE_PARMETIS'])  
   
 ######## gmsh (optional, for tests)  
   
 try:  
     p=Popen(['gmsh', '-info'], stderr=PIPE)  
     _,e=p.communicate()  
     if e.split().count("MPI"):  
         env['gmsh']='m'  
     else:  
         env['gmsh']='s'  
 except OSError:  
     env['gmsh']=False  
439    
440  ######## PDFLaTeX (for documentation)  ######## PDFLaTeX (for documentation)
441  if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):  env=checkPDFLatex(env)
     env['pdflatex']=True  
 else:  
     env['pdflatex']=False  
   
 ######################## Summarize our environment ###########################  
442    
443  # keep some of our install paths first in the list for the unit tests  # keep some of our install paths first in the list for the unit tests
444  env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])  env.PrependENVPath(LD_LIBRARY_PATH_KEY, env['libinstall'])
# Line 744  if not env['verbose']: Line 459  if not env['verbose']:
459      env['PDFLATEXCOMSTR'] = "Building $TARGET from LaTeX input $SOURCES"      env['PDFLATEXCOMSTR'] = "Building $TARGET from LaTeX input $SOURCES"
460      #Progress(['Checking -\r', 'Checking \\\r', 'Checking |\r', 'Checking /\r'], interval=17)      #Progress(['Checking -\r', 'Checking \\\r', 'Checking |\r', 'Checking /\r'], interval=17)
461    
 print("")  
 print("*** Config Summary (see config.log and lib/buildvars for details) ***")  
 print("Escript/Finley revision %s"%global_revision)  
 print("  Install prefix:  %s"%env['prefix'])  
 print("          Python:  %s"%sysconfig.PREFIX)  
 print("           boost:  %s"%env['boost_prefix'])  
 print("           numpy:  YES")  
 if env['usempi']:  
     print("             MPI:  YES (flavour: %s)"%env['mpi'])  
 else:  
     print("             MPI:  DISABLED")  
 if env['uselapack']:  
     print("          LAPACK:  YES (flavour: %s)"%env['lapack'])  
 else:  
     print("          LAPACK:  DISABLED")  
 d_list=[]  
 e_list=[]  
 for i in 'debug','openmp','boomeramg','mkl','netcdf','papi','parmetis','silo','sympy','umfpack','visit','vsl_random':  
     if env[i]: e_list.append(i)  
     else: d_list.append(i)  
 for i in e_list:  
     print("%16s:  YES"%i)  
 for i in d_list:  
     print("%16s:  DISABLED"%i)  
 if env['cppunit']:  
     print("         CppUnit:  FOUND")  
 else:  
     print("         CppUnit:  NOT FOUND")  
 if env['gmsh']=='m':  
     print("            gmsh:  FOUND, MPI-ENABLED")  
 elif env['gmsh']=='s':  
     print("            gmsh:  FOUND")  
 else:  
     print("            gmsh:  NOT FOUND")  
 if env['numpy_h']:  
     print("   numpy headers:  FOUND")  
 else:  
     print("   numpy headers:  NOT FOUND")  
 print("   vsl_random:  %s"%env['vsl_random'])  
       
 if ((fatalwarning != '') and (env['werror'])):  
     print("  Treating warnings as errors")  
 else:  
     print("  NOT treating warnings as errors")  
 print("")  
   
462  ####################### Configure the subdirectories #########################  ####################### Configure the subdirectories #########################
463    
464  from grouptest import *  # remove obsolete files
465    if not env['usempi']:
466        Execute(Delete(os.path.join(env['libinstall'], 'pythonMPI')))
467        Execute(Delete(os.path.join(env['libinstall'], 'pythonMPIredirect')))
468    
469    from grouptest import *
470  TestGroups=[]  TestGroups=[]
471    
472  # keep an environment without warnings-as-errors  # keep an environment without warnings-as-errors
# Line 831  env.SConscript(dirs = ['paso/profiling'] Line 504  env.SConscript(dirs = ['paso/profiling']
504    
505  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
506    
507  # remove obsolete file  write_buildvars(env)
 if not env['usempi']:  
     Execute(Delete(os.path.join(env['libinstall'], 'pythonMPI')))  
     Execute(Delete(os.path.join(env['libinstall'], 'pythonMPIredirect')))  
   
 # Try to extract the boost version from version.hpp  
 boosthpp=open(os.path.join(boost_inc_path, 'boost', 'version.hpp'))  
 boostversion='unknown'  
 try:  
     for line in boosthpp:  
         ver=re.match(r'#define BOOST_VERSION (\d+)',line)  
         if ver:  
             boostversion=ver.group(1)  
 except StopIteration:  
     pass  
 boosthpp.close()  
   
   
 buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  
 buildvars.write("svn_revision="+str(global_revision)+"\n")  
 buildvars.write("prefix="+prefix+"\n")  
 buildvars.write("cc="+env['CC']+"\n")  
 buildvars.write("cxx="+env['CXX']+"\n")  
 if env['pythoncmd']=='python':  
     buildvars.write("python="+sys.executable+"\n")  
     buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")  
 else:  
     buildvars.write("python="+env['pythoncmd']+"\n")  
     p=Popen([env['pythoncmd'], '-c', 'from __future__ import print_function;import sys;print(str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]))'], stdout=PIPE)  
     verstring=p.stdout.readline().strip()  
     p.wait()  
     buildvars.write("python_version="+verstring+"\n")  
 buildvars.write("boost_inc_path="+boost_inc_path+"\n")  
 buildvars.write("boost_lib_path="+boost_lib_path+"\n")  
 buildvars.write("boost_version="+boostversion+"\n")  
 buildvars.write("debug=%d\n"%int(env['debug']))  
 buildvars.write("openmp=%d\n"%int(env['openmp']))  
 buildvars.write("mpi=%s\n"%env['mpi'])  
 buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  
 buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  
 buildvars.write("lapack=%s\n"%env['lapack'])  
 buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))  
 for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':  
     buildvars.write("%s=%d\n"%(i, int(env[i])))  
     if env[i]:  
         buildvars.write("%s_inc_path=%s\n"%(i, eval(i+'_inc_path')))  
         buildvars.write("%s_lib_path=%s\n"%(i, eval(i+'_lib_path')))  
 buildvars.close()  
508    
509  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
510    
# Line 957  env.Default('install_all') Line 583  env.Default('install_all')
583  if not env['cppunit']:  if not env['cppunit']:
584      test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')      test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
585      env.Alias('run_tests', test_msg)      env.Alias('run_tests', test_msg)
586        env.Alias('build_tests', '')
587  env.Alias('run_tests', ['install_all'])  env.Alias('run_tests', ['install_all'])
588  env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])  env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
589  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
# Line 964  env.Alias('build_PasoTests','$BUILD_DIR/ Line 591  env.Alias('build_PasoTests','$BUILD_DIR/
591    
592  ##################### Targets to build the documentation #####################  ##################### Targets to build the documentation #####################
593    
594  env.Alias('api_epydoc','install_all')  env.Alias('pdfdocs',['user_pdf', 'install_pdf', 'cookbook_pdf', 'inversion_pdf'])
595  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'sphinxdoc', 'api_doxygen', 'user_pdf', 'install_pdf', 'cookbook_pdf', 'inversion_pdf'])  env.Alias('basedocs', ['pdfdocs','examples_tarfile', 'examples_zipfile', 'api_doxygen'])
596    env.Alias('docs', ['basedocs', 'sphinxdoc'])
597  env.Alias('release_prep', ['docs', 'install_all'])  env.Alias('release_prep', ['docs', 'install_all'])
598    env.Alias('release_prep_old', ['basedocs', 'api_epydoc', 'install_all'])
599    
600  # The test scripts are always generated, this target allows us to  # The test scripts are always generated, this target allows us to
601  # generate the testscripts without doing a full build  # generate the testscripts without doing a full build
602  env.Alias('testscripts',[])  env.Alias('testscripts',[])
603    
604  if not IS_WINDOWS:  if not IS_WINDOWS:
605      try:      generateTestScripts(env, TestGroups)
606          utest=open('utest.sh','w')  
607          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix, False))  
608          for tests in TestGroups:  
609              utest.write(tests.makeString())  ######################## Summarize our environment ###########################
610          utest.close()  def print_summary():
611          Execute(Chmod('utest.sh', 0o755))      print("")
612          print("Generated utest.sh.")      print("*** Config Summary (see config.log and <prefix>/lib/buildvars for details) ***")
613          # This version contains only python tests - I want this to be usable      print("Escript/Finley revision %s"%global_revision)
614          # From a binary only install if you have the test files      print("  Install prefix:  %s"%env['prefix'])
615          utest=open('itest.sh','w')      print("          Python:  %s"%sysconfig.PREFIX)
616          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix, True))      print("           boost:  %s"%env['boost_prefix'])
617          for tests in TestGroups:      if env['numpy_h']:
618            if tests.exec_cmd=='$PYTHONRUNNER ':          print("           numpy:  YES (with headers)")
619              utest.write(tests.makeString())      else:
620          utest.close()          print("           numpy:  YES (without headers)")
621          Execute(Chmod('itest.sh', 0o755))      if env['usempi']:
622          print("Generated itest.sh.")                  print("             MPI:  YES (flavour: %s)"%env['mpi'])
623      except IOError:      else:
624          print("Error attempting to write unittests file.")          print("             MPI:  DISABLED")
625          Exit(1)      if env['uselapack']:
626            print("          LAPACK:  YES (flavour: %s)"%env['lapack'])
627        else:
628            print("          LAPACK:  DISABLED")
629        d_list=[]
630        e_list=[]
631        for i in 'debug','openmp','boomeramg','gdal','mkl','netcdf','papi','parmetis','pyproj','scipy','silo','sympy','umfpack','visit','vsl_random':
632            if env[i]: e_list.append(i)
633            else: d_list.append(i)
634        for i in e_list:
635            print("%16s:  YES"%i)
636        for i in d_list:
637            print("%16s:  DISABLED"%i)
638        if env['cppunit']:
639            print("         CppUnit:  FOUND")
640        else:
641            print("         CppUnit:  NOT FOUND")
642        if env['gmsh']=='m':
643            print("            gmsh:  FOUND, MPI-ENABLED")
644        elif env['gmsh']=='s':
645            print("            gmsh:  FOUND")
646        else:
647            print("            gmsh:  NOT FOUND")
648    
649        if ((fatalwarning != '') and (env['werror'])):
650            print("  Treating warnings as errors")
651        else:
652            print("  NOT treating warnings as errors")
653        print("")
654        for w in env['warnings']:
655            print("WARNING: %s"%w)
656    
657      # delete utest.sh upon cleanup  atexit.register(print_summary)
     env.Clean('target_init', 'utest.sh')  
     env.Clean('target_init', 'itest.sh')  
   
     # Make sure that the escript wrapper is in place  
     if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):  
         print("Copying escript wrapper.")  
         Execute(Copy(os.path.join(env['bininstall'],'run-escript'), 'bin/run-escript'))  
658    

Legend:
Removed from v.4110  
changed lines
  Added in v.4300

  ViewVC Help
Powered by ViewVC 1.1.26