/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

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

revision 3466 by caltinay, Tue Feb 8 05:16:21 2011 UTC revision 3982 by jfenwick, Fri Sep 21 03:23:22 2012 UTC
# Line 1  Line 1 
1  ########################################################  ##############################################################################
2  #  #
3  # Copyright (c) 2003-2010 by University of Queensland  # Copyright (c) 2003-2012 by University of Queensland
4  # Earth Systems Science Computational Center (ESSCC)  # http://www.uq.edu.au
 # http://www.uq.edu.au/esscc  
5  #  #
6  # Primary Business: Queensland, Australia  # Primary Business: Queensland, Australia
7  # Licensed under the Open Software License version 3.0  # Licensed under the Open Software License version 3.0
8  # http://www.opensource.org/licenses/osl-3.0.php  # http://www.opensource.org/licenses/osl-3.0.php
9  #  #
10  ########################################################  # Development until 2012 by Earth Systems Science Computational Center (ESSCC)
11    # Development since 2012 by School of Earth Sciences
12    #
13    ##############################################################################
14    
15  EnsureSConsVersion(0,98,1)  EnsureSConsVersion(0,98,1)
16  EnsurePythonVersion(2,5)  EnsurePythonVersion(2,5)
# Line 16  EnsurePythonVersion(2,5) Line 18  EnsurePythonVersion(2,5)
18  import sys, os, platform, re  import sys, os, platform, re
19  from distutils import sysconfig  from distutils import sysconfig
20  from site_init import *  from site_init import *
21    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.
25  REQUIRED_OPTS_VERSION=200  REQUIRED_OPTS_VERSION=201
26    
27  # MS Windows support, many thanks to PH  # MS Windows support, many thanks to PH
28  IS_WINDOWS = (os.name == 'nt')  IS_WINDOWS = (os.name == 'nt')
# Line 47  if not os.path.isfile(options_file): Line 50  if not os.path.isfile(options_file):
50  ############################### Build options ################################  ############################### Build options ################################
51    
52  default_prefix='/usr'  default_prefix='/usr'
53  mpi_flavours=('none', 'MPT', 'MPICH', 'MPICH2', 'OPENMPI', 'INTELMPI')  mpi_flavours=('no', 'none', 'MPT', 'MPICH', 'MPICH2', 'OPENMPI', 'INTELMPI')
54  lapack_flavours=('none', 'clapack', 'mkl')  lapack_flavours=('none', 'clapack', 'mkl')
55    
56  vars = Variables(options_file, ARGUMENTS)  vars = Variables(options_file, ARGUMENTS)
# Line 73  vars.AddVariables( Line 76  vars.AddVariables(
76  # Mandatory libraries  # Mandatory libraries
77    ('boost_prefix', 'Prefix/Paths of boost installation', default_prefix),    ('boost_prefix', 'Prefix/Paths of boost installation', default_prefix),
78    ('boost_libs', 'Boost libraries to link with', ['boost_python-mt']),    ('boost_libs', 'Boost libraries to link with', ['boost_python-mt']),
79    # Mandatory for tests
80      ('cppunit_prefix', 'Prefix/Paths of CppUnit installation', default_prefix),
81      ('cppunit_libs', 'CppUnit libraries to link with', ['cppunit']),
82  # Optional libraries and options  # Optional libraries and options
83    EnumVariable('mpi', 'Compile parallel version using MPI flavour', 'none', allowed_values=mpi_flavours),    EnumVariable('mpi', 'Compile parallel version using MPI flavour', 'none', allowed_values=mpi_flavours),
84    ('mpi_prefix', 'Prefix/Paths of MPI installation', default_prefix),    ('mpi_prefix', 'Prefix/Paths of MPI installation', default_prefix),
# Line 93  vars.AddVariables( Line 99  vars.AddVariables(
99    BoolVariable('umfpack', 'Enable UMFPACK', False),    BoolVariable('umfpack', 'Enable UMFPACK', False),
100    ('umfpack_prefix', 'Prefix/Paths to UMFPACK installation', default_prefix),    ('umfpack_prefix', 'Prefix/Paths to UMFPACK installation', default_prefix),
101    ('umfpack_libs', 'UMFPACK libraries to link with', ['umfpack']),    ('umfpack_libs', 'UMFPACK libraries to link with', ['umfpack']),
102      BoolVariable('boomeramg', 'Enable BoomerAMG', False),
103      ('boomeramg_prefix', 'Prefix/Paths to BoomerAMG installation', default_prefix),
104      ('boomeramg_libs', 'BoomerAMG libraries to link with', ['boomeramg']),
105    EnumVariable('lapack', 'Set LAPACK flavour', 'none', allowed_values=lapack_flavours),    EnumVariable('lapack', 'Set LAPACK flavour', 'none', allowed_values=lapack_flavours),
106    ('lapack_prefix', 'Prefix/Paths to LAPACK installation', default_prefix),    ('lapack_prefix', 'Prefix/Paths to LAPACK installation', default_prefix),
107    ('lapack_libs', 'LAPACK libraries to link with', []),    ('lapack_libs', 'LAPACK libraries to link with', []),
# Line 102  vars.AddVariables( Line 111  vars.AddVariables(
111    BoolVariable('visit', 'Enable the VisIt simulation interface', False),    BoolVariable('visit', 'Enable the VisIt simulation interface', False),
112    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),
113    ('visit_libs', 'VisIt libraries to link with', ['simV2']),    ('visit_libs', 'VisIt libraries to link with', ['simV2']),
114    BoolVariable('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', False),    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
115  # Advanced settings  # Advanced settings
116    #dudley_assemble_flags = -funroll-loops      to actually do something    #dudley_assemble_flags = -funroll-loops      to actually do something
117    ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),    ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),
# Line 115  vars.AddVariables( Line 124  vars.AddVariables(
124    EnumVariable('forcecollres', 'For testing use only - set the default value for force resolving collective ops', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),    EnumVariable('forcecollres', 'For testing use only - set the default value for force resolving collective ops', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),
125    # finer control over library building, intel aggressive global optimisation    # finer control over library building, intel aggressive global optimisation
126    # works with dynamic libraries on windows.    # works with dynamic libraries on windows.
127    ('share_esysutils', 'Build a dynamic esysUtils library', False),    ('build_shared', 'Build dynamic libraries only', False),
   ('share_paso', 'Build a dynamic paso library', False),  
128    ('sys_libs', 'Extra libraries to link with', []),    ('sys_libs', 'Extra libraries to link with', []),
129    ('escript_opts_version', 'Version of options file (do not specify on command line)'),    ('escript_opts_version', 'Version of options file (do not specify on command line)'),
130      ('SVN_VERSION', 'Do not use from options file', -2),
131      ('pythoncmd', 'which python to compile with','python'),
132      ('usepython3', 'Is this a python3 build? (experimental)', False),
133      ('pythonlibname', 'Name of the python library to link. (This is found automatically for python2.X.)', ''),
134      ('pythonlibpath', 'Path to the python library. (You should not need to set this unless your python has moved)',''),
135      ('pythonincpath','Path to python include files. (You should not need to set this unless your python has moved',''),
136      BoolVariable('BADPYTHONMACROS','Extra \#include to get around a python bug.', True),
137  )  )
138    
139  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 130  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    
150    #set the vars for clang
151    def mkclang(env):
152      env['CC']='clang'
153      env['CXX']='clang++'
154                      
155                      
156  if env['tools_names'] != 'default':  if env['tools_names'] != 'default':
157        zz=env['tools_names']
158        if 'clang' in zz:
159            zz.remove('clang')
160            zz.insert(0, mkclang)
161      env = Environment(tools = ['default'] + env['tools_names'], options = vars,      env = Environment(tools = ['default'] + env['tools_names'], options = vars,
162                        ENV = {'PATH' : os.environ['PATH']})                        ENV = {'PATH' : os.environ['PATH']})
163    
# Line 202  if cc_name == 'icc': Line 229  if cc_name == 'icc':
229      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"
230      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
231      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp -openmp_report0"
232      omp_ldflags = "-openmp -openmp_report0 -lguide -lpthread"      omp_ldflags = "-openmp -openmp_report0 -lpthread"
233      fatalwarning = "-Werror"      fatalwarning = "-Werror"
234  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
235      # GNU C on any system      # GNU C on any system
# Line 237  if env['cc_extra']  != '': env.Append(CF Line 264  if env['cc_extra']  != '': env.Append(CF
264  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
265  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
266    
267    if env['BADPYTHONMACROS']: env.Append(CXXFLAGS = ' -DBADPYTHONMACROS')
268    
269    if env['usepython3']:
270        env.Append(CPPDEFINES=['ESPYTHON3'])
271    
272  # set up the autolazy values  # set up the autolazy values
273  if env['forcelazy'] == 'on':  if env['forcelazy'] == 'on':
274      env.Append(CPPDEFINES=['FAUTOLAZYON'])      env.Append(CPPDEFINES=['FAUTOLAZYON'])
# Line 277  env.Append(CCFLAGS = env['cc_flags']) Line 309  env.Append(CCFLAGS = env['cc_flags'])
309  # add system libraries  # add system libraries
310  env.AppendUnique(LIBS = env['sys_libs'])  env.AppendUnique(LIBS = env['sys_libs'])
311    
312  # Get the global Subversion revision number for the getVersion() method  
313  try:  global_revision=ARGUMENTS.get('SVN_VERSION', None)
314    if global_revision:
315        global_revision = re.sub(':.*', '', global_revision)
316        global_revision = re.sub('[^0-9]', '', global_revision)
317        if global_revision == '': global_revision='-2'
318    else:
319      # Get the global Subversion revision number for the getVersion() method
320      try:
321      global_revision = os.popen('svnversion -n .').read()      global_revision = os.popen('svnversion -n .').read()
322      global_revision = re.sub(':.*', '', global_revision)      global_revision = re.sub(':.*', '', global_revision)
323      global_revision = re.sub('[^0-9]', '', global_revision)      global_revision = re.sub('[^0-9]', '', global_revision)
324      if global_revision == '': global_revision='-2'      if global_revision == '': global_revision='-2'
325  except:    except:
326      global_revision = '-1'      global_revision = '-1'
327  env['svn_revision']=global_revision  env['svn_revision']=global_revision
328  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
329    
330  if IS_WINDOWS:  if IS_WINDOWS:
331      if not env['share_esysutils']:      if not env['build_shared']:
332          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
     if not env['share_paso']:  
333          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
334    
335  ###################### Copy required environment vars ########################  ###################### Copy required environment vars ########################
# Line 312  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N Line 350  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N
350          env['ENV'][key] = 1          env['ENV'][key] = 1
351    
352  env_export=env['env_export']  env_export=env['env_export']
353  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','TMPDIR','TEMP','TMP'])  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','KMP_MONITOR_STACKSIZE','TMPDIR','TEMP','TMP'])
354    
355  for key in set(env_export):  for key in set(env_export):
356      try:      try:
# Line 339  except KeyError: Line 377  except KeyError:
377    
378  ######################## Add some custom builders ############################  ######################## Add some custom builders ############################
379    
380  py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)  if env['pythoncmd']=='python':
381        py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
382    else:
383        py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
384  env.Append(BUILDERS = {'PyCompile' : py_builder});  env.Append(BUILDERS = {'PyCompile' : py_builder});
385    
386  runUnitTest_builder = Builder(action = runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)  runUnitTest_builder = Builder(action = runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
# Line 378  if conf.CheckFunc('gethostname'): Line 419  if conf.CheckFunc('gethostname'):
419    
420  ######## Python headers & library (required)  ######## Python headers & library (required)
421    
422  python_inc_path=sysconfig.get_python_inc()  #First we check to see if the config file has specified
423  if IS_WINDOWS:  ##Where to find the filae. Ideally, this should be automatic
424      python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')  #But we need to deal with the case where python is not in its INSTALL
425  elif env['PLATFORM']=='darwin':  #Directory
426      python_lib_path=sysconfig.get_config_var('LIBPL')  # Use the python scons is running
427  else:  if env['pythoncmd']=='python':
428      python_lib_path=sysconfig.get_config_var('LIBDIR')      python_inc_path=sysconfig.get_python_inc()
429  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux      if IS_WINDOWS:
430  if IS_WINDOWS:          python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
431      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]      elif env['PLATFORM']=='darwin':
432            python_lib_path=sysconfig.get_config_var('LIBPL')
433        else:
434            python_lib_path=sysconfig.get_config_var('LIBDIR')
435    
436        #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
437        if IS_WINDOWS:
438            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
439        else:
440            python_libs=['python'+sysconfig.get_python_version()]
441    
442    #if we want to use a python other than the one scons is running
443  else:  else:
444      python_libs=['python'+sysconfig.get_python_version()]      initstring='from __future__ import print_function;from distutils import sysconfig;'
445        if env['pythonlibname']!='':
446            python_libs=env['pythonlibname']
447        else:   # work it out by calling python    
448            if IS_WINDOWS:
449                cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
450            else:
451                cmd='print("python"+sysconfig.get_python_version())'
452            p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
453            python_libs=p.stdout.readline()
454            if env['usepython3']:       # This is to convert unicode str into py2 string
455                python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
456            p.wait()
457            python_libs=python_libs.strip()
458    
459      
460        # Now we know whether we are using python3 or not
461        p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
462        python_inc_path=p.stdout.readline()
463        if env['usepython3']:
464             python_inc_path=python_inc_path.encode()
465        p.wait()  
466        python_inc_path=python_inc_path.strip()
467        if IS_WINDOWS:
468            cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
469        elif env['PLATFORM']=='darwin':
470            cmd="sysconfig.get_config_var(\"LIBPL\")"
471        else:
472            cmd="sysconfig.get_config_var(\"LIBDIR\")"
473    
474        p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
475        python_lib_path=p.stdout.readline()
476        if env['usepython3']:
477            python_lib_path=python_lib_path.decode()
478        p.wait()
479        python_lib_path=python_lib_path.strip()
480    
481    #Check for an override from the config file.
482    #Ideally, this should be automatic
483    #But we need to deal with the case where python is not in its INSTALL
484    #Directory
485    if env['pythonlibpath']!='':
486        python_lib_path=env['pythonlibpath']
487    
488    if env['pythonincpath']!='':
489        python_inc_path=env['pythonincpath']
490    
491    
492  if sysheaderopt == '':  if sysheaderopt == '':
493      conf.env.AppendUnique(CPPPATH = [python_inc_path])      conf.env.AppendUnique(CPPPATH = [python_inc_path])
# Line 408  if not conf.CheckFunc('Py_Exit'): Line 506  if not conf.CheckFunc('Py_Exit'):
506      print("Cannot find python library method Py_Main (tried %s in directory %s)" % (python_libs, python_lib_path))      print("Cannot find python library method Py_Main (tried %s in directory %s)" % (python_libs, python_lib_path))
507      Exit(1)      Exit(1)
508    
509    ## reuse conf to check for numpy header (optional)
510    if env['usepython3']:
511        # FIXME: This is until we can work out how to make the checks in python 3
512        conf.env['numpy_h']=False
513    else:
514        if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
515            conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
516            conf.env['numpy_h']=True
517        else:
518            conf.env['numpy_h']=False
519    
520  # Commit changes to environment  # Commit changes to environment
521  env = conf.Finish()  env = conf.Finish()
522    
# Line 430  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 539  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
539    
540  ######## numpy (required)  ######## numpy (required)
541    
542  try:  if not detectModule(env, 'numpy'):
543      from numpy import identity      print("Cannot import numpy. If it is installed try setting your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
 except ImportError:  
     print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
544      Exit(1)      Exit(1)
545    
546  ######## VTK (optional)  ######## CppUnit (required for tests)
547    
548  if env['pyvisi']:  try:
549      try:      cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')
550          import vtk      env.AppendUnique(CPPPATH = [cppunit_inc_path])
551          env['pyvisi'] = True      env.AppendUnique(LIBPATH = [cppunit_lib_path])
552      except ImportError:      env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)
553          print("Cannot import vtk, disabling pyvisi.")      env['cppunit']=True
554          env['pyvisi'] = False  except:
555        env['cppunit']=False
556    
557    ######## sympy (optional)
558    
559    if detectModule(env, 'sympy'):
560        env['sympy'] = True
561    else:
562        print("Cannot import sympy. Symbolic toolbox and nonlinear PDEs will not be available.")
563        env['sympy'] = False
564    
565  ######## netCDF (optional)  ######## netCDF (optional)
566    
# Line 526  if env['silo']: Line 642  if env['silo']:
642      # weipa library and tools.      # weipa library and tools.
643      #env.AppendUnique(LIBS = [env['silo_libs']])      #env.AppendUnique(LIBS = [env['silo_libs']])
644    
645    ######## VSL random numbers (optional)
646    if env['vsl_random']:
647        env.Append(CPPDEFINES = ['MKLRANDOM'])
648    
649  ######## VisIt (optional)  ######## VisIt (optional)
650    
651  visit_inc_path=''  visit_inc_path=''
# Line 537  if env['visit']: Line 657  if env['visit']:
657    
658  ######## MPI (optional)  ######## MPI (optional)
659    
660    if env['mpi']=='no':
661        env['mpi']='none'
662    
663  env['usempi'] = env['mpi']!='none'  env['usempi'] = env['mpi']!='none'
664  mpi_inc_path=''  mpi_inc_path=''
665  mpi_lib_path=''  mpi_lib_path=''
# Line 553  if env['usempi']: Line 676  if env['usempi']:
676      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:
677          env.Append(CPPDEFINES = ['MPI_INCLUDED'])          env.Append(CPPDEFINES = ['MPI_INCLUDED'])
678    
679    ######## BOOMERAMG (optional)
680    
681    if env['mpi'] == 'none': env['boomeramg'] = False
682    
683    boomeramg_inc_path=''
684    boomeramg_lib_path=''
685    if env['boomeramg']:
686        boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')
687        env.AppendUnique(CPPPATH = [boomeramg_inc_path])
688        env.AppendUnique(LIBPATH = [boomeramg_lib_path])
689        env.AppendUnique(LIBS = env['boomeramg_libs'])
690        env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)
691        env.Append(CPPDEFINES = ['BOOMERAMG'])
692    
693  ######## ParMETIS (optional)  ######## ParMETIS (optional)
694    
695  if not env['usempi']: env['parmetis'] = False  if not env['usempi']: env['parmetis'] = False
# Line 570  if env['parmetis']: Line 707  if env['parmetis']:
707  ######## gmsh (optional, for tests)  ######## gmsh (optional, for tests)
708    
709  try:  try:
710      import subprocess      p=Popen(['gmsh', '-info'], stderr=PIPE)
711      p=subprocess.Popen(['gmsh', '-version'], stderr=subprocess.PIPE)      _,e=p.communicate()
712      p.poll()      if e.split().count("MPI"):
713      env['gmsh']=True          env['gmsh']='m'
714        else:
715            env['gmsh']='s'
716  except OSError:  except OSError:
717      env['gmsh']=False      env['gmsh']=False
718    
719    ######## PDFLaTeX (for documentation)
720    if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):
721        env['pdflatex']=True
722    else:
723        env['pdflatex']=False
724    
725  ######################## Summarize our environment ###########################  ######################## Summarize our environment ###########################
726    
727  # 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
# Line 615  else: Line 760  else:
760      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
761  d_list=[]  d_list=[]
762  e_list=[]  e_list=[]
763  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','silo','visit','pyvisi':  for i in 'debug','openmp','boomeramg','mkl','netcdf','papi','parmetis','silo','sympy','umfpack','visit','vsl_random':
764      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
765      else: d_list.append(i)      else: d_list.append(i)
766  for i in e_list:  for i in e_list:
767      print("%16s:  YES"%i)      print("%16s:  YES"%i)
768  for i in d_list:  for i in d_list:
769      print("%16s:  DISABLED"%i)      print("%16s:  DISABLED"%i)
770  if env['gmsh']:  if env['cppunit']:
771        print("         CppUnit:  FOUND")
772    else:
773        print("         CppUnit:  NOT FOUND")
774    if env['gmsh']=='m':
775        print("            gmsh:  FOUND, MPI-ENABLED")
776    elif env['gmsh']=='s':
777      print("            gmsh:  FOUND")      print("            gmsh:  FOUND")
778  else:  else:
779      print("            gmsh:  NOT FOUND")      print("            gmsh:  NOT FOUND")
780    if env['numpy_h']:
781        print("   numpy headers:  FOUND")
782    else:
783        print("   numpy headers:  NOT FOUND")
784    print("   vsl_random:  %s"%env['vsl_random'])
785        
786  if ((fatalwarning != '') and (env['werror'])):  if ((fatalwarning != '') and (env['werror'])):
787      print("  Treating warnings as errors")      print("  Treating warnings as errors")
788  else:  else:
# Line 654  Export( Line 811  Export(
811    ]    ]
812  )  )
813    
 env.SConscript(dirs = ['tools/CppUnitTest/src'], variant_dir='$BUILD_DIR/$PLATFORM/tools/CppUnitTest', duplicate=0)  
814  env.SConscript(dirs = ['tools/escriptconvert'], variant_dir='$BUILD_DIR/$PLATFORM/tools/escriptconvert', duplicate=0)  env.SConscript(dirs = ['tools/escriptconvert'], variant_dir='$BUILD_DIR/$PLATFORM/tools/escriptconvert', duplicate=0)
815  env.SConscript(dirs = ['paso/src'], variant_dir='$BUILD_DIR/$PLATFORM/paso', duplicate=0)  env.SConscript(dirs = ['paso/src'], variant_dir='$BUILD_DIR/$PLATFORM/paso', duplicate=0)
816  env.SConscript(dirs = ['weipa/src'], variant_dir='$BUILD_DIR/$PLATFORM/weipa', duplicate=0)  env.SConscript(dirs = ['weipa/src'], variant_dir='$BUILD_DIR/$PLATFORM/weipa', duplicate=0)
817  env.SConscript(dirs = ['escript/src'], variant_dir='$BUILD_DIR/$PLATFORM/escript', duplicate=0)  env.SConscript(dirs = ['escript/src'], variant_dir='$BUILD_DIR/$PLATFORM/escript', duplicate=0)
818  env.SConscript(dirs = ['esysUtils/src'], variant_dir='$BUILD_DIR/$PLATFORM/esysUtils', duplicate=0)  env.SConscript(dirs = ['esysUtils/src'], variant_dir='$BUILD_DIR/$PLATFORM/esysUtils', duplicate=0)
819    env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
820  env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)  env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)
821  env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)  env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)
822    env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
823    env.SConscript(dirs = ['downunder/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/downunder', duplicate=0)
824  env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)  env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)
 env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)  
 env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pyvisi', duplicate=0)  
825  env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)  env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)
826  env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)  env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)
827    env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
828  env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)  env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)
829    
830    
831  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
832    
833  # remove obsolete file  # remove obsolete file
# Line 688  except StopIteration: Line 847  except StopIteration:
847      pass      pass
848  boosthpp.close()  boosthpp.close()
849    
850    
851  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
852  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
853  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
854  buildvars.write("cc="+env['CC']+"\n")  buildvars.write("cc="+env['CC']+"\n")
855  buildvars.write("cxx="+env['CXX']+"\n")  buildvars.write("cxx="+env['CXX']+"\n")
856  buildvars.write("python="+sys.executable+"\n")  if env['pythoncmd']=='python':
857  buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")      buildvars.write("python="+sys.executable+"\n")
858        buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
859    else:
860        buildvars.write("python="+env['pythoncmd']+"\n")
861        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)
862        verstring=p.stdout.readline().strip()
863        p.wait()
864        buildvars.write("python_version="+verstring+"\n")
865  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
866  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
867  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 704  buildvars.write("mpi=%s\n"%env['mpi']) Line 871  buildvars.write("mpi=%s\n"%env['mpi'])
871  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
872  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
873  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
874  buildvars.write("pyvisi=%d\n"%env['pyvisi'])  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
875  for i in 'netcdf','parmetis','papi','mkl','umfpack','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
876      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
877      if env[i]:      if env[i]:
878          buildvars.write("%s_inc_path=%s\n"%(i, eval(i+'_inc_path')))          buildvars.write("%s_inc_path=%s\n"%(i, eval(i+'_inc_path')))
# Line 714  buildvars.close() Line 881  buildvars.close()
881    
882  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
883    
884  target_init = env.Command(env['pyinstall']+'/__init__.py', None, Touch('$TARGET'))  target_init = env.Command(os.path.join(env['pyinstall'],'__init__.py'), None, Touch('$TARGET'))
885  env.Alias('target_init', [target_init])  env.Alias('target_init', [target_init])
886    # delete buildvars upon cleanup
887    env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
888    
889  # The headers have to be installed prior to build in order to satisfy  # The headers have to be installed prior to build in order to satisfy
890  # #include <paso/Common.h>  # #include <paso/Common.h>
# Line 728  env.Alias('install_paso', ['build_paso', Line 897  env.Alias('install_paso', ['build_paso',
897  env.Alias('build_escript', ['install_escript_headers', 'build_escript_lib', 'build_escriptcpp_lib'])  env.Alias('build_escript', ['install_escript_headers', 'build_escript_lib', 'build_escriptcpp_lib'])
898  env.Alias('install_escript', ['build_escript', 'install_escript_lib', 'install_escriptcpp_lib', 'install_escript_py'])  env.Alias('install_escript', ['build_escript', 'install_escript_lib', 'install_escriptcpp_lib', 'install_escript_py'])
899    
900    env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
901    env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
902    
903  env.Alias('build_dudley', ['install_dudley_headers', 'build_dudley_lib', 'build_dudleycpp_lib'])  env.Alias('build_dudley', ['install_dudley_headers', 'build_dudley_lib', 'build_dudleycpp_lib'])
904  env.Alias('install_dudley', ['build_dudley', 'install_dudley_lib', 'install_dudleycpp_lib', 'install_dudley_py'])  env.Alias('install_dudley', ['build_dudley', 'install_dudley_lib', 'install_dudleycpp_lib', 'install_dudley_py'])
905    
906  env.Alias('build_finley', ['install_finley_headers', 'build_finley_lib', 'build_finleycpp_lib'])  env.Alias('build_finley', ['install_finley_headers', 'build_finley_lib', 'build_finleycpp_lib'])
907  env.Alias('install_finley', ['build_finley', 'install_finley_lib', 'install_finleycpp_lib', 'install_finley_py'])  env.Alias('install_finley', ['build_finley', 'install_finley_lib', 'install_finleycpp_lib', 'install_finley_py'])
908    
909    env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
910    env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
911    
912  env.Alias('build_weipa', ['install_weipa_headers', 'build_weipa_lib', 'build_weipacpp_lib'])  env.Alias('build_weipa', ['install_weipa_headers', 'build_weipa_lib', 'build_weipacpp_lib'])
913  env.Alias('install_weipa', ['build_weipa', 'install_weipa_lib', 'install_weipacpp_lib', 'install_weipa_py'])  env.Alias('install_weipa', ['build_weipa', 'install_weipa_lib', 'install_weipacpp_lib', 'install_weipa_py'])
914    
# Line 745  build_all_list = [] Line 920  build_all_list = []
920  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
921  build_all_list += ['build_paso']  build_all_list += ['build_paso']
922  build_all_list += ['build_escript']  build_all_list += ['build_escript']
923    build_all_list += ['build_pasowrap']
924  build_all_list += ['build_dudley']  build_all_list += ['build_dudley']
925  build_all_list += ['build_finley']  build_all_list += ['build_finley']
926    build_all_list += ['build_ripley']
927  build_all_list += ['build_weipa']  build_all_list += ['build_weipa']
928  if not IS_WINDOWS: build_all_list += ['build_escriptreader']  if not IS_WINDOWS: build_all_list += ['build_escriptreader']
929  if env['usempi']:   build_all_list += ['build_pythonMPI']  if env['usempi']:   build_all_list += ['build_pythonMPI']
# Line 758  install_all_list += ['target_init'] Line 935  install_all_list += ['target_init']
935  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
936  install_all_list += ['install_paso']  install_all_list += ['install_paso']
937  install_all_list += ['install_escript']  install_all_list += ['install_escript']
938    install_all_list += ['install_pasowrap']
939  install_all_list += ['install_dudley']  install_all_list += ['install_dudley']
940  install_all_list += ['install_finley']  install_all_list += ['install_finley']
941    install_all_list += ['install_ripley']
942  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
943  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
944  install_all_list += ['install_pyvisi_py']  install_all_list += ['install_downunder_py']
945  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
946  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
947  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 774  env.Default('install_all') Line 953  env.Default('install_all')
953    
954  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
955    
956  env.Alias('build_cppunittest', ['install_cppunittest_headers', 'build_cppunittest_lib'])  if not env['cppunit']:
957  env.Alias('install_cppunittest', ['build_cppunittest', 'install_cppunittest_lib'])      test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
958  env.Alias('run_tests', ['install_all', 'install_cppunittest_lib'])      env.Alias('run_tests', test_msg)
959  env.Alias('all_tests', ['install_all', 'install_cppunittest_lib', 'run_tests', 'py_tests'])  env.Alias('run_tests', ['install_all'])
960    env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
961  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
962  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
963    
# Line 790  env.Alias('release_prep', ['docs', 'inst Line 970  env.Alias('release_prep', ['docs', 'inst
970  if not IS_WINDOWS:  if not IS_WINDOWS:
971      try:      try:
972          utest=open('utest.sh','w')          utest=open('utest.sh','w')
973          utest.write(GroupTest.makeHeader(env['PLATFORM']))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
974          for tests in TestGroups:          for tests in TestGroups:
975              utest.write(tests.makeString())              utest.write(tests.makeString())
976          utest.close()          utest.close()
977          Execute(Chmod('utest.sh', 0755))          Execute(Chmod('utest.sh', 0o755))
978          print("Generated utest.sh.")          print("Generated utest.sh.")
979      except IOError:      except IOError:
980          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
981          Exit(1)          Exit(1)
982    
983        # delete utest.sh upon cleanup
984        env.Clean('target_init', 'utest.sh')
985    
986      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
987      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
988          print("Copying escript wrapper.")          print("Copying escript wrapper.")

Legend:
Removed from v.3466  
changed lines
  Added in v.3982

  ViewVC Help
Powered by ViewVC 1.1.26