/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

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

revision 3506 by jfenwick, Wed May 11 01:59:45 2011 UTC revision 3911 by jfenwick, Thu Jun 14 01:01:03 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 93  vars.AddVariables( Line 98  vars.AddVariables(
98    BoolVariable('umfpack', 'Enable UMFPACK', False),    BoolVariable('umfpack', 'Enable UMFPACK', False),
99    ('umfpack_prefix', 'Prefix/Paths to UMFPACK installation', default_prefix),    ('umfpack_prefix', 'Prefix/Paths to UMFPACK installation', default_prefix),
100    ('umfpack_libs', 'UMFPACK libraries to link with', ['umfpack']),    ('umfpack_libs', 'UMFPACK libraries to link with', ['umfpack']),
101      BoolVariable('boomeramg', 'Enable BoomerAMG', False),
102      ('boomeramg_prefix', 'Prefix/Paths to BoomerAMG installation', default_prefix),
103      ('boomeramg_libs', 'BoomerAMG libraries to link with', ['boomeramg']),
104    EnumVariable('lapack', 'Set LAPACK flavour', 'none', allowed_values=lapack_flavours),    EnumVariable('lapack', 'Set LAPACK flavour', 'none', allowed_values=lapack_flavours),
105    ('lapack_prefix', 'Prefix/Paths to LAPACK installation', default_prefix),    ('lapack_prefix', 'Prefix/Paths to LAPACK installation', default_prefix),
106    ('lapack_libs', 'LAPACK libraries to link with', []),    ('lapack_libs', 'LAPACK libraries to link with', []),
# Line 116  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  )  )
135    
136  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 203  if cc_name == 'icc': Line 214  if cc_name == 'icc':
214      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"
215      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
216      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp -openmp_report0"
217      omp_ldflags = "-openmp -openmp_report0 -lguide -lpthread"      omp_ldflags = "-openmp -openmp_report0 -lpthread"
218      fatalwarning = "-Werror"      fatalwarning = "-Werror"
219  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
220      # GNU C on any system      # GNU C on any system
# Line 238  if env['cc_extra']  != '': env.Append(CF Line 249  if env['cc_extra']  != '': env.Append(CF
249  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
250  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
251    
252    if env['usepython3']:
253        env.Append(CPPDEFINES=['ESPYTHON3'])
254    
255  # set up the autolazy values  # set up the autolazy values
256  if env['forcelazy'] == 'on':  if env['forcelazy'] == 'on':
257      env.Append(CPPDEFINES=['FAUTOLAZYON'])      env.Append(CPPDEFINES=['FAUTOLAZYON'])
# Line 278  env.Append(CCFLAGS = env['cc_flags']) Line 292  env.Append(CCFLAGS = env['cc_flags'])
292  # add system libraries  # add system libraries
293  env.AppendUnique(LIBS = env['sys_libs'])  env.AppendUnique(LIBS = env['sys_libs'])
294    
295  # Get the global Subversion revision number for the getVersion() method  
296  try:  global_revision=ARGUMENTS.get('SVN_VERSION', None)
297    if global_revision:
298        global_revision = re.sub(':.*', '', global_revision)
299        global_revision = re.sub('[^0-9]', '', global_revision)
300        if global_revision == '': global_revision='-2'
301    else:
302      # Get the global Subversion revision number for the getVersion() method
303      try:
304      global_revision = os.popen('svnversion -n .').read()      global_revision = os.popen('svnversion -n .').read()
305      global_revision = re.sub(':.*', '', global_revision)      global_revision = re.sub(':.*', '', global_revision)
306      global_revision = re.sub('[^0-9]', '', global_revision)      global_revision = re.sub('[^0-9]', '', global_revision)
307      if global_revision == '': global_revision='-2'      if global_revision == '': global_revision='-2'
308  except:    except:
309      global_revision = '-1'      global_revision = '-1'
310  env['svn_revision']=global_revision  env['svn_revision']=global_revision
311  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
312    
313  if IS_WINDOWS:  if IS_WINDOWS:
314      if not env['share_esysutils']:      if not env['build_shared']:
315          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
     if not env['share_paso']:  
316          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
317    
318  ###################### Copy required environment vars ########################  ###################### Copy required environment vars ########################
# Line 340  except KeyError: Line 360  except KeyError:
360    
361  ######################## Add some custom builders ############################  ######################## Add some custom builders ############################
362    
363  py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)  if env['pythoncmd']=='python':
364        py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
365    else:
366        py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
367  env.Append(BUILDERS = {'PyCompile' : py_builder});  env.Append(BUILDERS = {'PyCompile' : py_builder});
368    
369  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 379  if conf.CheckFunc('gethostname'): Line 402  if conf.CheckFunc('gethostname'):
402    
403  ######## Python headers & library (required)  ######## Python headers & library (required)
404    
405  python_inc_path=sysconfig.get_python_inc()  # Use the python scons is running
406  if IS_WINDOWS:  if env['pythoncmd']=='python':
407      python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')      python_inc_path=sysconfig.get_python_inc()
408  elif env['PLATFORM']=='darwin':      if IS_WINDOWS:
409      python_lib_path=sysconfig.get_config_var('LIBPL')          python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
410  else:      elif env['PLATFORM']=='darwin':
411      python_lib_path=sysconfig.get_config_var('LIBDIR')          python_lib_path=sysconfig.get_config_var('LIBPL')
412  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux      else:
413  if IS_WINDOWS:          python_lib_path=sysconfig.get_config_var('LIBDIR')
414      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]  
415        #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
416        if IS_WINDOWS:
417            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
418        else:
419            python_libs=['python'+sysconfig.get_python_version()]
420    
421    #if we want to use a python other than the one scons is running
422  else:  else:
423      python_libs=['python'+sysconfig.get_python_version()]      initstring='from __future__ import print_function;from distutils import sysconfig;'
424        if env['pythonlibname']!='':
425            python_libs=env['pythonlibname']
426        else:   # work it out by calling python    
427            if IS_WINDOWS:
428                cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
429            else:
430                cmd='print("python"+sysconfig.get_python_version())'
431            p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
432            python_libs=p.stdout.readline()
433            if env['usepython3']:       # This is to convert unicode str into py2 string
434                python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
435            p.wait()
436            python_libs=python_libs.strip()
437    
438      
439        # Now we know whether we are using python3 or not
440        p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
441        python_inc_path=p.stdout.readline()
442        if env['usepython3']:
443             python_inc_path=python_inc_path.encode()
444        p.wait()  
445        python_inc_path=python_inc_path.strip()
446        if IS_WINDOWS:
447            cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
448        elif env['PLATFORM']=='darwin':
449            cmd="sysconfig.get_config_var(\"LIBPL\")"
450        else:
451            cmd="sysconfig.get_config_var(\"LIBDIR\")"
452    
453        p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
454        python_lib_path=p.stdout.readline()
455        if env['usepython3']:
456            python_lib_path=python_lib_path.decode()
457        p.wait()
458        python_lib_path=python_lib_path.strip()
459    
460  if sysheaderopt == '':  if sysheaderopt == '':
461      conf.env.AppendUnique(CPPPATH = [python_inc_path])      conf.env.AppendUnique(CPPPATH = [python_inc_path])
# Line 409  if not conf.CheckFunc('Py_Exit'): Line 474  if not conf.CheckFunc('Py_Exit'):
474      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))
475      Exit(1)      Exit(1)
476    
477    ## reuse conf to check for numpy header (optional)
478    if env['usepython3']:
479        # FIXME: This is until we can work out how to make the checks in python 3
480        conf.env['numpy_h']=False
481    else:
482        if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
483            conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
484            conf.env['numpy_h']=True
485        else:
486            conf.env['numpy_h']=False
487    
488  # Commit changes to environment  # Commit changes to environment
489  env = conf.Finish()  env = conf.Finish()
490    
# Line 431  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 507  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
507    
508  ######## numpy (required)  ######## numpy (required)
509    
510    if env['pythoncmd']=='python':
511        try:
512          from numpy import identity
513        except ImportError:
514          print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
515          Exit(1)
516    else:
517        p=subprocess.call([env['pythoncmd'],'-c','import numpy'])
518        if p!=0:
519          print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
520          Exit(1)
521    
522    ######## CppUnit (required for tests)
523    
524  try:  try:
525      from numpy import identity      cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')
526  except ImportError:      env.AppendUnique(CPPPATH = [cppunit_inc_path])
527      print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)      env.AppendUnique(LIBPATH = [cppunit_lib_path])
528      Exit(1)      env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)
529        env['cppunit']=True
530    except:
531        env['cppunit']=False
532    
533  ######## VTK (optional)  ######## VTK (optional)
534    
# Line 542  if env['visit']: Line 635  if env['visit']:
635    
636  ######## MPI (optional)  ######## MPI (optional)
637    
638    if env['mpi']=='no':
639        env['mpi']='none'
640    
641  env['usempi'] = env['mpi']!='none'  env['usempi'] = env['mpi']!='none'
642  mpi_inc_path=''  mpi_inc_path=''
643  mpi_lib_path=''  mpi_lib_path=''
# Line 558  if env['usempi']: Line 654  if env['usempi']:
654      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:
655          env.Append(CPPDEFINES = ['MPI_INCLUDED'])          env.Append(CPPDEFINES = ['MPI_INCLUDED'])
656    
657    ######## BOOMERAMG (optional)
658    
659    if env['mpi'] == 'none': env['boomeramg'] = False
660    
661    boomeramg_inc_path=''
662    boomeramg_lib_path=''
663    if env['boomeramg']:
664        boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')
665        env.AppendUnique(CPPPATH = [boomeramg_inc_path])
666        env.AppendUnique(LIBPATH = [boomeramg_lib_path])
667        env.AppendUnique(LIBS = env['boomeramg_libs'])
668        env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)
669        env.Append(CPPDEFINES = ['BOOMERAMG'])
670    
671  ######## ParMETIS (optional)  ######## ParMETIS (optional)
672    
673  if not env['usempi']: env['parmetis'] = False  if not env['usempi']: env['parmetis'] = False
# Line 576  if env['parmetis']: Line 686  if env['parmetis']:
686    
687  try:  try:
688      import subprocess      import subprocess
689      p=subprocess.Popen(['gmsh', '-version'], stderr=subprocess.PIPE)      p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)
690      p.poll()      _,e=p.communicate()
691      env['gmsh']=True      if e.split().count("MPI"):
692            env['gmsh']='m'
693        else:
694            env['gmsh']='s'
695  except OSError:  except OSError:
696      env['gmsh']=False      env['gmsh']=False
697    
698    ######## PDFLaTeX (for documentation)
699    if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):
700        env['pdflatex']=True
701    else:
702        env['pdflatex']=False
703    
704  ######################## Summarize our environment ###########################  ######################## Summarize our environment ###########################
705    
706  # 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 620  else: Line 739  else:
739      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
740  d_list=[]  d_list=[]
741  e_list=[]  e_list=[]
742  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','silo','visit':  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':
743      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
744      else: d_list.append(i)      else: d_list.append(i)
745  for i in e_list:  for i in e_list:
746      print("%16s:  YES"%i)      print("%16s:  YES"%i)
747  for i in d_list:  for i in d_list:
748      print("%16s:  DISABLED"%i)      print("%16s:  DISABLED"%i)
749  if env['gmsh']:  if env['cppunit']:
750        print("         CppUnit:  FOUND")
751    else:
752        print("         CppUnit:  NOT FOUND")
753    if env['gmsh']=='m':
754        print("            gmsh:  FOUND, MPI-ENABLED")
755    elif env['gmsh']=='s':
756      print("            gmsh:  FOUND")      print("            gmsh:  FOUND")
757  else:  else:
758      print("            gmsh:  NOT FOUND")      print("            gmsh:  NOT FOUND")
759  print("      vsl_random:  %s"%env['vsl_random'])  if env['numpy_h']:
760        print("   numpy headers:  FOUND")
761    else:
762        print("   numpy headers:  NOT FOUND")
763    print("   vsl_random:  %s"%env['vsl_random'])
764            
765  if ((fatalwarning != '') and (env['werror'])):  if ((fatalwarning != '') and (env['werror'])):
766      print("  Treating warnings as errors")      print("  Treating warnings as errors")
# Line 661  Export( Line 790  Export(
790    ]    ]
791  )  )
792    
 env.SConscript(dirs = ['tools/CppUnitTest/src'], variant_dir='$BUILD_DIR/$PLATFORM/tools/CppUnitTest', duplicate=0)  
793  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)
794  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)
795  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)
796  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)
797  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)
798    env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
799  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)
800  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)
801    env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
802  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)
803  env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)  env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
804  env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pyvisi', duplicate=0)  env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pyvisi', duplicate=0)
# Line 676  env.SConscript(dirs = ['pycad/py_src'], Line 806  env.SConscript(dirs = ['pycad/py_src'],
806  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)
807  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)
808    
809    
810  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
811    
812  # remove obsolete file  # remove obsolete file
# Line 695  except StopIteration: Line 826  except StopIteration:
826      pass      pass
827  boosthpp.close()  boosthpp.close()
828    
829    
830  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
831  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
832  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
833  buildvars.write("cc="+env['CC']+"\n")  buildvars.write("cc="+env['CC']+"\n")
834  buildvars.write("cxx="+env['CXX']+"\n")  buildvars.write("cxx="+env['CXX']+"\n")
835  buildvars.write("python="+sys.executable+"\n")  if env['pythoncmd']=='python':
836  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")
837        buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
838    else:
839        buildvars.write("python="+env['pythoncmd']+"\n")
840        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)
841        verstring=p.stdout.readline().strip()
842        p.wait()
843        buildvars.write("python_version="+verstring+"\n")
844  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
845  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
846  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 712  buildvars.write("mpi_inc_path=%s\n"%mpi_ Line 851  buildvars.write("mpi_inc_path=%s\n"%mpi_
851  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
852  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
853  buildvars.write("pyvisi=%d\n"%env['pyvisi'])  buildvars.write("pyvisi=%d\n"%env['pyvisi'])
854  buildvars.write("vsl_random=%d"%int(env['vsl_random']))  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
855  for i in 'netcdf','parmetis','papi','mkl','umfpack','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
856      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
857      if env[i]:      if env[i]:
858          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 722  buildvars.close() Line 861  buildvars.close()
861    
862  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
863    
864  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'))
865  env.Alias('target_init', [target_init])  env.Alias('target_init', [target_init])
866    # delete buildvars upon cleanup
867    env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
868    
869  # 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
870  # #include <paso/Common.h>  # #include <paso/Common.h>
# Line 736  env.Alias('install_paso', ['build_paso', Line 877  env.Alias('install_paso', ['build_paso',
877  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'])
878  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'])
879    
880    env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
881    env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
882    
883  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'])
884  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'])
885    
886  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'])
887  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'])
888    
889    env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
890    env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
891    
892  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'])
893  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'])
894    
# Line 753  build_all_list = [] Line 900  build_all_list = []
900  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
901  build_all_list += ['build_paso']  build_all_list += ['build_paso']
902  build_all_list += ['build_escript']  build_all_list += ['build_escript']
903    build_all_list += ['build_pasowrap']
904  build_all_list += ['build_dudley']  build_all_list += ['build_dudley']
905  build_all_list += ['build_finley']  build_all_list += ['build_finley']
906    build_all_list += ['build_ripley']
907  build_all_list += ['build_weipa']  build_all_list += ['build_weipa']
908  if not IS_WINDOWS: build_all_list += ['build_escriptreader']  if not IS_WINDOWS: build_all_list += ['build_escriptreader']
909  if env['usempi']:   build_all_list += ['build_pythonMPI']  if env['usempi']:   build_all_list += ['build_pythonMPI']
# Line 766  install_all_list += ['target_init'] Line 915  install_all_list += ['target_init']
915  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
916  install_all_list += ['install_paso']  install_all_list += ['install_paso']
917  install_all_list += ['install_escript']  install_all_list += ['install_escript']
918    install_all_list += ['install_pasowrap']
919  install_all_list += ['install_dudley']  install_all_list += ['install_dudley']
920  install_all_list += ['install_finley']  install_all_list += ['install_finley']
921    install_all_list += ['install_ripley']
922  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
923  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
924  install_all_list += ['install_pyvisi_py']  #install_all_list += ['install_pyvisi_py']
925  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
926  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
927  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 782  env.Default('install_all') Line 933  env.Default('install_all')
933    
934  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
935    
936  env.Alias('build_cppunittest', ['install_cppunittest_headers', 'build_cppunittest_lib'])  test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
937  env.Alias('install_cppunittest', ['build_cppunittest', 'install_cppunittest_lib'])  if not env['cppunit']:
938  env.Alias('run_tests', ['install_all', 'install_cppunittest_lib'])      env.Alias('run_tests', test_msg)
939  env.Alias('all_tests', ['install_all', 'install_cppunittest_lib', 'run_tests', 'py_tests'])  env.Alias('run_tests', ['install_all'])
940    env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
941  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
942  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
943    
# Line 798  env.Alias('release_prep', ['docs', 'inst Line 950  env.Alias('release_prep', ['docs', 'inst
950  if not IS_WINDOWS:  if not IS_WINDOWS:
951      try:      try:
952          utest=open('utest.sh','w')          utest=open('utest.sh','w')
953          utest.write(GroupTest.makeHeader(env['PLATFORM']))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
954          for tests in TestGroups:          for tests in TestGroups:
955              utest.write(tests.makeString())              utest.write(tests.makeString())
956          utest.close()          utest.close()
957          Execute(Chmod('utest.sh', 0755))          Execute(Chmod('utest.sh', 0o755))
958          print("Generated utest.sh.")          print("Generated utest.sh.")
959      except IOError:      except IOError:
960          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
961          Exit(1)          Exit(1)
962    
963        # delete utest.sh upon cleanup
964        env.Clean('target_init', 'utest.sh')
965    
966      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
967      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
968          print("Copying escript wrapper.")          print("Copying escript wrapper.")

Legend:
Removed from v.3506  
changed lines
  Added in v.3911

  ViewVC Help
Powered by ViewVC 1.1.26