/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

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

revision 3511 by lgao, Tue May 17 23:56:13 2011 UTC revision 3961 by jfenwick, Tue Sep 11 07:21:41 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)  # Earth Systems Science Computational Center (ESSCC)
5  # http://www.uq.edu.au/esscc  # http://www.uq.edu.au/esscc
6  #  #
# Line 16  EnsurePythonVersion(2,5) Line 16  EnsurePythonVersion(2,5)
16  import sys, os, platform, re  import sys, os, platform, re
17  from distutils import sysconfig  from distutils import sysconfig
18  from site_init import *  from site_init import *
19    import subprocess
20    from subprocess import PIPE, Popen
21    
22  # 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
23  # added or existing options changed.  # added or existing options changed.
24  REQUIRED_OPTS_VERSION=200  REQUIRED_OPTS_VERSION=201
25    
26  # MS Windows support, many thanks to PH  # MS Windows support, many thanks to PH
27  IS_WINDOWS = (os.name == 'nt')  IS_WINDOWS = (os.name == 'nt')
# Line 47  if not os.path.isfile(options_file): Line 49  if not os.path.isfile(options_file):
49  ############################### Build options ################################  ############################### Build options ################################
50    
51  default_prefix='/usr'  default_prefix='/usr'
52  mpi_flavours=('none', 'MPT', 'MPICH', 'MPICH2', 'OPENMPI', 'INTELMPI')  mpi_flavours=('no', 'none', 'MPT', 'MPICH', 'MPICH2', 'OPENMPI', 'INTELMPI')
53  lapack_flavours=('none', 'clapack', 'mkl')  lapack_flavours=('none', 'clapack', 'mkl')
54    
55  vars = Variables(options_file, ARGUMENTS)  vars = Variables(options_file, ARGUMENTS)
# Line 73  vars.AddVariables( Line 75  vars.AddVariables(
75  # Mandatory libraries  # Mandatory libraries
76    ('boost_prefix', 'Prefix/Paths of boost installation', default_prefix),    ('boost_prefix', 'Prefix/Paths of boost installation', default_prefix),
77    ('boost_libs', 'Boost libraries to link with', ['boost_python-mt']),    ('boost_libs', 'Boost libraries to link with', ['boost_python-mt']),
78    # Mandatory for tests
79      ('cppunit_prefix', 'Prefix/Paths of CppUnit installation', default_prefix),
80      ('cppunit_libs', 'CppUnit libraries to link with', ['cppunit']),
81  # Optional libraries and options  # Optional libraries and options
82    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),
83    ('mpi_prefix', 'Prefix/Paths of MPI installation', default_prefix),    ('mpi_prefix', 'Prefix/Paths of MPI installation', default_prefix),
# Line 105  vars.AddVariables( Line 110  vars.AddVariables(
110    BoolVariable('visit', 'Enable the VisIt simulation interface', False),    BoolVariable('visit', 'Enable the VisIt simulation interface', False),
111    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),
112    ('visit_libs', 'VisIt libraries to link with', ['simV2']),    ('visit_libs', 'VisIt libraries to link with', ['simV2']),
   BoolVariable('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', False),  
113    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
114  # Advanced settings  # Advanced settings
115    #dudley_assemble_flags = -funroll-loops      to actually do something    #dudley_assemble_flags = -funroll-loops      to actually do something
# Line 119  vars.AddVariables( Line 123  vars.AddVariables(
123    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')),
124    # finer control over library building, intel aggressive global optimisation    # finer control over library building, intel aggressive global optimisation
125    # works with dynamic libraries on windows.    # works with dynamic libraries on windows.
126    ('share_esysutils', 'Build a dynamic esysUtils library', False),    ('build_shared', 'Build dynamic libraries only', False),
   ('share_paso', 'Build a dynamic paso library', False),  
127    ('sys_libs', 'Extra libraries to link with', []),    ('sys_libs', 'Extra libraries to link with', []),
128    ('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)'),
129      ('SVN_VERSION', 'Do not use from options file', -2),
130      ('pythoncmd', 'which python to compile with','python'),
131      ('usepython3', 'Is this a python3 build? (experimental)', False),
132      ('pythonlibname', 'Name of the python library to link. (This is found automatically for python2.X.)', ''),
133      ('pythonlibpath', 'Path to the python library. (You should not need to set this unless your python has moved)',''),
134      ('pythonincpath','Path to python include files. (You should not need to set this unless your python has moved',''),
135      BoolVariable('BADPYTHONMACROS','Extra \#include to get around a python bug.', True),
136  )  )
137    
138  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 206  if cc_name == 'icc': Line 216  if cc_name == 'icc':
216      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"
217      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
218      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp -openmp_report0"
219      omp_ldflags = "-openmp -openmp_report0 -lguide -lpthread"      omp_ldflags = "-openmp -openmp_report0 -lpthread"
220      fatalwarning = "-Werror"      fatalwarning = "-Werror"
221  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
222      # GNU C on any system      # GNU C on any system
# Line 241  if env['cc_extra']  != '': env.Append(CF Line 251  if env['cc_extra']  != '': env.Append(CF
251  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
252  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
253    
254    if env['BADPYTHONMACROS']: env.Append(CXXFLAGS = ' -DBADPYTHONMACROS')
255    
256    if env['usepython3']:
257        env.Append(CPPDEFINES=['ESPYTHON3'])
258    
259  # set up the autolazy values  # set up the autolazy values
260  if env['forcelazy'] == 'on':  if env['forcelazy'] == 'on':
261      env.Append(CPPDEFINES=['FAUTOLAZYON'])      env.Append(CPPDEFINES=['FAUTOLAZYON'])
# Line 281  env.Append(CCFLAGS = env['cc_flags']) Line 296  env.Append(CCFLAGS = env['cc_flags'])
296  # add system libraries  # add system libraries
297  env.AppendUnique(LIBS = env['sys_libs'])  env.AppendUnique(LIBS = env['sys_libs'])
298    
299  # Get the global Subversion revision number for the getVersion() method  
300  try:  global_revision=ARGUMENTS.get('SVN_VERSION', None)
301    if global_revision:
302        global_revision = re.sub(':.*', '', global_revision)
303        global_revision = re.sub('[^0-9]', '', global_revision)
304        if global_revision == '': global_revision='-2'
305    else:
306      # Get the global Subversion revision number for the getVersion() method
307      try:
308      global_revision = os.popen('svnversion -n .').read()      global_revision = os.popen('svnversion -n .').read()
309      global_revision = re.sub(':.*', '', global_revision)      global_revision = re.sub(':.*', '', global_revision)
310      global_revision = re.sub('[^0-9]', '', global_revision)      global_revision = re.sub('[^0-9]', '', global_revision)
311      if global_revision == '': global_revision='-2'      if global_revision == '': global_revision='-2'
312  except:    except:
313      global_revision = '-1'      global_revision = '-1'
314  env['svn_revision']=global_revision  env['svn_revision']=global_revision
315  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
316    
317  if IS_WINDOWS:  if IS_WINDOWS:
318      if not env['share_esysutils']:      if not env['build_shared']:
319          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
     if not env['share_paso']:  
320          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
321    
322  ###################### Copy required environment vars ########################  ###################### Copy required environment vars ########################
# Line 343  except KeyError: Line 364  except KeyError:
364    
365  ######################## Add some custom builders ############################  ######################## Add some custom builders ############################
366    
367  py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)  if env['pythoncmd']=='python':
368        py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
369    else:
370        py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
371  env.Append(BUILDERS = {'PyCompile' : py_builder});  env.Append(BUILDERS = {'PyCompile' : py_builder});
372    
373  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 382  if conf.CheckFunc('gethostname'): Line 406  if conf.CheckFunc('gethostname'):
406    
407  ######## Python headers & library (required)  ######## Python headers & library (required)
408    
409  python_inc_path=sysconfig.get_python_inc()  #First we check to see if the config file has specified
410  if IS_WINDOWS:  ##Where to find the filae. Ideally, this should be automatic
411      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
412  elif env['PLATFORM']=='darwin':  #Directory
413      python_lib_path=sysconfig.get_config_var('LIBPL')  # Use the python scons is running
414  else:  if env['pythoncmd']=='python':
415      python_lib_path=sysconfig.get_config_var('LIBDIR')      python_inc_path=sysconfig.get_python_inc()
416  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux      if IS_WINDOWS:
417  if IS_WINDOWS:          python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
418      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]      elif env['PLATFORM']=='darwin':
419            python_lib_path=sysconfig.get_config_var('LIBPL')
420        else:
421            python_lib_path=sysconfig.get_config_var('LIBDIR')
422    
423        #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
424        if IS_WINDOWS:
425            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
426        else:
427            python_libs=['python'+sysconfig.get_python_version()]
428    
429    #if we want to use a python other than the one scons is running
430  else:  else:
431      python_libs=['python'+sysconfig.get_python_version()]      initstring='from __future__ import print_function;from distutils import sysconfig;'
432        if env['pythonlibname']!='':
433            python_libs=env['pythonlibname']
434        else:   # work it out by calling python    
435            if IS_WINDOWS:
436                cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
437            else:
438                cmd='print("python"+sysconfig.get_python_version())'
439            p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
440            python_libs=p.stdout.readline()
441            if env['usepython3']:       # This is to convert unicode str into py2 string
442                python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
443            p.wait()
444            python_libs=python_libs.strip()
445    
446      
447        # Now we know whether we are using python3 or not
448        p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
449        python_inc_path=p.stdout.readline()
450        if env['usepython3']:
451             python_inc_path=python_inc_path.encode()
452        p.wait()  
453        python_inc_path=python_inc_path.strip()
454        if IS_WINDOWS:
455            cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
456        elif env['PLATFORM']=='darwin':
457            cmd="sysconfig.get_config_var(\"LIBPL\")"
458        else:
459            cmd="sysconfig.get_config_var(\"LIBDIR\")"
460    
461        p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
462        python_lib_path=p.stdout.readline()
463        if env['usepython3']:
464            python_lib_path=python_lib_path.decode()
465        p.wait()
466        python_lib_path=python_lib_path.strip()
467    
468    #Check for an override from the config file.
469    #Ideally, this should be automatic
470    #But we need to deal with the case where python is not in its INSTALL
471    #Directory
472    if env['pythonlibpath']!='':
473        python_lib_path=env['pythonlibpath']
474    
475    if env['pythonincpath']!='':
476        python_inc_path=env['pythonincpath']
477    
478    
479  if sysheaderopt == '':  if sysheaderopt == '':
480      conf.env.AppendUnique(CPPPATH = [python_inc_path])      conf.env.AppendUnique(CPPPATH = [python_inc_path])
# Line 412  if not conf.CheckFunc('Py_Exit'): Line 493  if not conf.CheckFunc('Py_Exit'):
493      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))
494      Exit(1)      Exit(1)
495    
496    ## reuse conf to check for numpy header (optional)
497    if env['usepython3']:
498        # FIXME: This is until we can work out how to make the checks in python 3
499        conf.env['numpy_h']=False
500    else:
501        if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
502            conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
503            conf.env['numpy_h']=True
504        else:
505            conf.env['numpy_h']=False
506    
507  # Commit changes to environment  # Commit changes to environment
508  env = conf.Finish()  env = conf.Finish()
509    
# Line 434  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 526  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
526    
527  ######## numpy (required)  ######## numpy (required)
528    
529  try:  if env['pythoncmd']=='python':
     from numpy import identity  
 except ImportError:  
     print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
     Exit(1)  
   
 ######## VTK (optional)  
   
 if env['pyvisi']:  
530      try:      try:
531          import vtk        from numpy import identity
         env['pyvisi'] = True  
532      except ImportError:      except ImportError:
533          print("Cannot import vtk, disabling pyvisi.")        print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
534          env['pyvisi'] = False        Exit(1)
535    else:
536        p=subprocess.call([env['pythoncmd'],'-c','import numpy'])
537        if p!=0:
538          print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
539          Exit(1)
540    
541    ######## CppUnit (required for tests)
542    
543    try:
544        cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')
545        env.AppendUnique(CPPPATH = [cppunit_inc_path])
546        env.AppendUnique(LIBPATH = [cppunit_lib_path])
547        env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)
548        env['cppunit']=True
549    except:
550        env['cppunit']=False
551    
552  ######## netCDF (optional)  ######## netCDF (optional)
553    
# Line 545  if env['visit']: Line 644  if env['visit']:
644    
645  ######## MPI (optional)  ######## MPI (optional)
646    
647    if env['mpi']=='no':
648        env['mpi']='none'
649    
650  env['usempi'] = env['mpi']!='none'  env['usempi'] = env['mpi']!='none'
651  mpi_inc_path=''  mpi_inc_path=''
652  mpi_lib_path=''  mpi_lib_path=''
# Line 563  if env['usempi']: Line 665  if env['usempi']:
665    
666  ######## BOOMERAMG (optional)  ######## BOOMERAMG (optional)
667    
 #if env['boomeramg'] and env['mpi'] == 'none':  
 #    print("boomeramg requires mpi!")  
 #    Exit(1)  
668  if env['mpi'] == 'none': env['boomeramg'] = False  if env['mpi'] == 'none': env['boomeramg'] = False
669    
670  boomeramg_inc_path=''  boomeramg_inc_path=''
# Line 574  if env['boomeramg']: Line 673  if env['boomeramg']:
673      boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')      boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')
674      env.AppendUnique(CPPPATH = [boomeramg_inc_path])      env.AppendUnique(CPPPATH = [boomeramg_inc_path])
675      env.AppendUnique(LIBPATH = [boomeramg_lib_path])      env.AppendUnique(LIBPATH = [boomeramg_lib_path])
     # Note that we do not add the libs since they are only needed for the  
     # weipa library and tools.  
676      env.AppendUnique(LIBS = env['boomeramg_libs'])      env.AppendUnique(LIBS = env['boomeramg_libs'])
677      env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)      env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)
678      env.Append(CPPDEFINES = ['BOOMERAMG'])      env.Append(CPPDEFINES = ['BOOMERAMG'])
# Line 598  if env['parmetis']: Line 695  if env['parmetis']:
695    
696  try:  try:
697      import subprocess      import subprocess
698      p=subprocess.Popen(['gmsh', '-version'], stderr=subprocess.PIPE)      p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)
699      p.poll()      _,e=p.communicate()
700      env['gmsh']=True      if e.split().count("MPI"):
701            env['gmsh']='m'
702        else:
703            env['gmsh']='s'
704  except OSError:  except OSError:
705      env['gmsh']=False      env['gmsh']=False
706    
707    ######## PDFLaTeX (for documentation)
708    if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):
709        env['pdflatex']=True
710    else:
711        env['pdflatex']=False
712    
713  ######################## Summarize our environment ###########################  ######################## Summarize our environment ###########################
714    
715  # 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 642  else: Line 748  else:
748      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
749  d_list=[]  d_list=[]
750  e_list=[]  e_list=[]
751  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':
752      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
753      else: d_list.append(i)      else: d_list.append(i)
754  for i in e_list:  for i in e_list:
755      print("%16s:  YES"%i)      print("%16s:  YES"%i)
756  for i in d_list:  for i in d_list:
757      print("%16s:  DISABLED"%i)      print("%16s:  DISABLED"%i)
758  if env['gmsh']:  if env['cppunit']:
759        print("         CppUnit:  FOUND")
760    else:
761        print("         CppUnit:  NOT FOUND")
762    if env['gmsh']=='m':
763        print("            gmsh:  FOUND, MPI-ENABLED")
764    elif env['gmsh']=='s':
765      print("            gmsh:  FOUND")      print("            gmsh:  FOUND")
766  else:  else:
767      print("            gmsh:  NOT FOUND")      print("            gmsh:  NOT FOUND")
768  print("      vsl_random:  %s"%env['vsl_random'])  if env['numpy_h']:
769        print("   numpy headers:  FOUND")
770    else:
771        print("   numpy headers:  NOT FOUND")
772    print("   vsl_random:  %s"%env['vsl_random'])
773            
774  if ((fatalwarning != '') and (env['werror'])):  if ((fatalwarning != '') and (env['werror'])):
775      print("  Treating warnings as errors")      print("  Treating warnings as errors")
# Line 683  Export( Line 799  Export(
799    ]    ]
800  )  )
801    
 env.SConscript(dirs = ['tools/CppUnitTest/src'], variant_dir='$BUILD_DIR/$PLATFORM/tools/CppUnitTest', duplicate=0)  
802  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)
803  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)
804  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)
805  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)
806  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)
807    env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
808  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)
809  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)
810    env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
811    env.SConscript(dirs = ['downunder/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/downunder', duplicate=0)
812  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)  
813  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)
814  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)
815    env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
816  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)
817    
818    
819  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
820    
821  # remove obsolete file  # remove obsolete file
# Line 717  except StopIteration: Line 835  except StopIteration:
835      pass      pass
836  boosthpp.close()  boosthpp.close()
837    
838    
839  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
840  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
841  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
842  buildvars.write("cc="+env['CC']+"\n")  buildvars.write("cc="+env['CC']+"\n")
843  buildvars.write("cxx="+env['CXX']+"\n")  buildvars.write("cxx="+env['CXX']+"\n")
844  buildvars.write("python="+sys.executable+"\n")  if env['pythoncmd']=='python':
845  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")
846        buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
847    else:
848        buildvars.write("python="+env['pythoncmd']+"\n")
849        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)
850        verstring=p.stdout.readline().strip()
851        p.wait()
852        buildvars.write("python_version="+verstring+"\n")
853  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
854  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
855  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 733  buildvars.write("mpi=%s\n"%env['mpi']) Line 859  buildvars.write("mpi=%s\n"%env['mpi'])
859  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
860  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
861  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
862  buildvars.write("pyvisi=%d\n"%env['pyvisi'])  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
 buildvars.write("vsl_random=%d"%int(env['vsl_random']))  
863  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
864      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
865      if env[i]:      if env[i]:
# Line 744  buildvars.close() Line 869  buildvars.close()
869    
870  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
871    
872  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'))
873  env.Alias('target_init', [target_init])  env.Alias('target_init', [target_init])
874    # delete buildvars upon cleanup
875    env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
876    
877  # 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
878  # #include <paso/Common.h>  # #include <paso/Common.h>
# Line 758  env.Alias('install_paso', ['build_paso', Line 885  env.Alias('install_paso', ['build_paso',
885  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'])
886  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'])
887    
888    env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
889    env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
890    
891  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'])
892  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'])
893    
894  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'])
895  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'])
896    
897    env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
898    env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
899    
900  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'])
901  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'])
902    
# Line 775  build_all_list = [] Line 908  build_all_list = []
908  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
909  build_all_list += ['build_paso']  build_all_list += ['build_paso']
910  build_all_list += ['build_escript']  build_all_list += ['build_escript']
911    build_all_list += ['build_pasowrap']
912  build_all_list += ['build_dudley']  build_all_list += ['build_dudley']
913  build_all_list += ['build_finley']  build_all_list += ['build_finley']
914    build_all_list += ['build_ripley']
915  build_all_list += ['build_weipa']  build_all_list += ['build_weipa']
916  if not IS_WINDOWS: build_all_list += ['build_escriptreader']  if not IS_WINDOWS: build_all_list += ['build_escriptreader']
917  if env['usempi']:   build_all_list += ['build_pythonMPI']  if env['usempi']:   build_all_list += ['build_pythonMPI']
# Line 788  install_all_list += ['target_init'] Line 923  install_all_list += ['target_init']
923  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
924  install_all_list += ['install_paso']  install_all_list += ['install_paso']
925  install_all_list += ['install_escript']  install_all_list += ['install_escript']
926    install_all_list += ['install_pasowrap']
927  install_all_list += ['install_dudley']  install_all_list += ['install_dudley']
928  install_all_list += ['install_finley']  install_all_list += ['install_finley']
929    install_all_list += ['install_ripley']
930  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
931  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
932  install_all_list += ['install_pyvisi_py']  install_all_list += ['install_downunder_py']
933  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
934  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
935  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 804  env.Default('install_all') Line 941  env.Default('install_all')
941    
942  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
943    
944  env.Alias('build_cppunittest', ['install_cppunittest_headers', 'build_cppunittest_lib'])  if not env['cppunit']:
945  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')
946  env.Alias('run_tests', ['install_all', 'install_cppunittest_lib'])      env.Alias('run_tests', test_msg)
947  env.Alias('all_tests', ['install_all', 'install_cppunittest_lib', 'run_tests', 'py_tests'])  env.Alias('run_tests', ['install_all'])
948    env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
949  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
950  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
951    
# Line 820  env.Alias('release_prep', ['docs', 'inst Line 958  env.Alias('release_prep', ['docs', 'inst
958  if not IS_WINDOWS:  if not IS_WINDOWS:
959      try:      try:
960          utest=open('utest.sh','w')          utest=open('utest.sh','w')
961          utest.write(GroupTest.makeHeader(env['PLATFORM']))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
962          for tests in TestGroups:          for tests in TestGroups:
963              utest.write(tests.makeString())              utest.write(tests.makeString())
964          utest.close()          utest.close()
965          Execute(Chmod('utest.sh', 0755))          Execute(Chmod('utest.sh', 0o755))
966          print("Generated utest.sh.")          print("Generated utest.sh.")
967      except IOError:      except IOError:
968          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
969          Exit(1)          Exit(1)
970    
971        # delete utest.sh upon cleanup
972        env.Clean('target_init', 'utest.sh')
973    
974      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
975      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
976          print("Copying escript wrapper.")          print("Copying escript wrapper.")

Legend:
Removed from v.3511  
changed lines
  Added in v.3961

  ViewVC Help
Powered by ViewVC 1.1.26