/[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 3947 by caltinay, Wed Aug 22 23:19:10 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 102  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']),
113    BoolVariable('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', 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
116    ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),    ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),
# Line 115  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  )  )
136    
137  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 202  if cc_name == 'icc': Line 215  if cc_name == 'icc':
215      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"
216      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
217      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp -openmp_report0"
218      omp_ldflags = "-openmp -openmp_report0 -lguide -lpthread"      omp_ldflags = "-openmp -openmp_report0 -lpthread"
219      fatalwarning = "-Werror"      fatalwarning = "-Werror"
220  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
221      # GNU C on any system      # GNU C on any system
# Line 237  if env['cc_extra']  != '': env.Append(CF Line 250  if env['cc_extra']  != '': env.Append(CF
250  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
251  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
252    
253    if env['usepython3']:
254        env.Append(CPPDEFINES=['ESPYTHON3'])
255    
256  # set up the autolazy values  # set up the autolazy values
257  if env['forcelazy'] == 'on':  if env['forcelazy'] == 'on':
258      env.Append(CPPDEFINES=['FAUTOLAZYON'])      env.Append(CPPDEFINES=['FAUTOLAZYON'])
# Line 277  env.Append(CCFLAGS = env['cc_flags']) Line 293  env.Append(CCFLAGS = env['cc_flags'])
293  # add system libraries  # add system libraries
294  env.AppendUnique(LIBS = env['sys_libs'])  env.AppendUnique(LIBS = env['sys_libs'])
295    
296  # Get the global Subversion revision number for the getVersion() method  
297  try:  global_revision=ARGUMENTS.get('SVN_VERSION', None)
298    if global_revision:
299        global_revision = re.sub(':.*', '', global_revision)
300        global_revision = re.sub('[^0-9]', '', global_revision)
301        if global_revision == '': global_revision='-2'
302    else:
303      # Get the global Subversion revision number for the getVersion() method
304      try:
305      global_revision = os.popen('svnversion -n .').read()      global_revision = os.popen('svnversion -n .').read()
306      global_revision = re.sub(':.*', '', global_revision)      global_revision = re.sub(':.*', '', global_revision)
307      global_revision = re.sub('[^0-9]', '', global_revision)      global_revision = re.sub('[^0-9]', '', global_revision)
308      if global_revision == '': global_revision='-2'      if global_revision == '': global_revision='-2'
309  except:    except:
310      global_revision = '-1'      global_revision = '-1'
311  env['svn_revision']=global_revision  env['svn_revision']=global_revision
312  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
313    
314  if IS_WINDOWS:  if IS_WINDOWS:
315      if not env['share_esysutils']:      if not env['build_shared']:
316          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
     if not env['share_paso']:  
317          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
318    
319  ###################### Copy required environment vars ########################  ###################### Copy required environment vars ########################
# Line 339  except KeyError: Line 361  except KeyError:
361    
362  ######################## Add some custom builders ############################  ######################## Add some custom builders ############################
363    
364  py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)  if env['pythoncmd']=='python':
365        py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
366    else:
367        py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
368  env.Append(BUILDERS = {'PyCompile' : py_builder});  env.Append(BUILDERS = {'PyCompile' : py_builder});
369    
370  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 403  if conf.CheckFunc('gethostname'):
403    
404  ######## Python headers & library (required)  ######## Python headers & library (required)
405    
406  python_inc_path=sysconfig.get_python_inc()  #First we check to see if the config file has specified
407  if IS_WINDOWS:  ##Where to find the filae. Ideally, this should be automatic
408      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
409  elif env['PLATFORM']=='darwin':  #Directory
410      python_lib_path=sysconfig.get_config_var('LIBPL')  # Use the python scons is running
411  else:  if env['pythoncmd']=='python':
412      python_lib_path=sysconfig.get_config_var('LIBDIR')      python_inc_path=sysconfig.get_python_inc()
413  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux      if IS_WINDOWS:
414  if IS_WINDOWS:          python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
415      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]      elif env['PLATFORM']=='darwin':
416            python_lib_path=sysconfig.get_config_var('LIBPL')
417        else:
418            python_lib_path=sysconfig.get_config_var('LIBDIR')
419    
420        #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
421        if IS_WINDOWS:
422            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
423        else:
424            python_libs=['python'+sysconfig.get_python_version()]
425    
426    #if we want to use a python other than the one scons is running
427  else:  else:
428      python_libs=['python'+sysconfig.get_python_version()]      initstring='from __future__ import print_function;from distutils import sysconfig;'
429        if env['pythonlibname']!='':
430            python_libs=env['pythonlibname']
431        else:   # work it out by calling python    
432            if IS_WINDOWS:
433                cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
434            else:
435                cmd='print("python"+sysconfig.get_python_version())'
436            p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
437            python_libs=p.stdout.readline()
438            if env['usepython3']:       # This is to convert unicode str into py2 string
439                python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
440            p.wait()
441            python_libs=python_libs.strip()
442    
443      
444        # Now we know whether we are using python3 or not
445        p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
446        python_inc_path=p.stdout.readline()
447        if env['usepython3']:
448             python_inc_path=python_inc_path.encode()
449        p.wait()  
450        python_inc_path=python_inc_path.strip()
451        if IS_WINDOWS:
452            cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
453        elif env['PLATFORM']=='darwin':
454            cmd="sysconfig.get_config_var(\"LIBPL\")"
455        else:
456            cmd="sysconfig.get_config_var(\"LIBDIR\")"
457    
458        p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
459        python_lib_path=p.stdout.readline()
460        if env['usepython3']:
461            python_lib_path=python_lib_path.decode()
462        p.wait()
463        python_lib_path=python_lib_path.strip()
464    
465    #Check for an override from the config file.
466    #Ideally, this should be automatic
467    #But we need to deal with the case where python is not in its INSTALL
468    #Directory
469    if env['pythonlibpath']!='':
470        python_lib_path=env['pythonlibpath']
471    
472    if env['pythonincpath']!='':
473        python_inc_path=env['pythonincpath']
474    
475    
476  if sysheaderopt == '':  if sysheaderopt == '':
477      conf.env.AppendUnique(CPPPATH = [python_inc_path])      conf.env.AppendUnique(CPPPATH = [python_inc_path])
# Line 408  if not conf.CheckFunc('Py_Exit'): Line 490  if not conf.CheckFunc('Py_Exit'):
490      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))
491      Exit(1)      Exit(1)
492    
493    ## reuse conf to check for numpy header (optional)
494    if env['usepython3']:
495        # FIXME: This is until we can work out how to make the checks in python 3
496        conf.env['numpy_h']=False
497    else:
498        if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
499            conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
500            conf.env['numpy_h']=True
501        else:
502            conf.env['numpy_h']=False
503    
504  # Commit changes to environment  # Commit changes to environment
505  env = conf.Finish()  env = conf.Finish()
506    
# Line 430  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 523  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
523    
524  ######## numpy (required)  ######## numpy (required)
525    
526  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']:  
527      try:      try:
528          import vtk        from numpy import identity
         env['pyvisi'] = True  
529      except ImportError:      except ImportError:
530          print("Cannot import vtk, disabling pyvisi.")        print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
531          env['pyvisi'] = False        Exit(1)
532    else:
533        p=subprocess.call([env['pythoncmd'],'-c','import numpy'])
534        if p!=0:
535          print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
536          Exit(1)
537    
538    ######## CppUnit (required for tests)
539    
540    try:
541        cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')
542        env.AppendUnique(CPPPATH = [cppunit_inc_path])
543        env.AppendUnique(LIBPATH = [cppunit_lib_path])
544        env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)
545        env['cppunit']=True
546    except:
547        env['cppunit']=False
548    
549  ######## netCDF (optional)  ######## netCDF (optional)
550    
# Line 526  if env['silo']: Line 626  if env['silo']:
626      # weipa library and tools.      # weipa library and tools.
627      #env.AppendUnique(LIBS = [env['silo_libs']])      #env.AppendUnique(LIBS = [env['silo_libs']])
628    
629    ######## VSL random numbers (optional)
630    if env['vsl_random']:
631        env.Append(CPPDEFINES = ['MKLRANDOM'])
632    
633  ######## VisIt (optional)  ######## VisIt (optional)
634    
635  visit_inc_path=''  visit_inc_path=''
# Line 537  if env['visit']: Line 641  if env['visit']:
641    
642  ######## MPI (optional)  ######## MPI (optional)
643    
644    if env['mpi']=='no':
645        env['mpi']='none'
646    
647  env['usempi'] = env['mpi']!='none'  env['usempi'] = env['mpi']!='none'
648  mpi_inc_path=''  mpi_inc_path=''
649  mpi_lib_path=''  mpi_lib_path=''
# Line 553  if env['usempi']: Line 660  if env['usempi']:
660      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:
661          env.Append(CPPDEFINES = ['MPI_INCLUDED'])          env.Append(CPPDEFINES = ['MPI_INCLUDED'])
662    
663    ######## BOOMERAMG (optional)
664    
665    if env['mpi'] == 'none': env['boomeramg'] = False
666    
667    boomeramg_inc_path=''
668    boomeramg_lib_path=''
669    if env['boomeramg']:
670        boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')
671        env.AppendUnique(CPPPATH = [boomeramg_inc_path])
672        env.AppendUnique(LIBPATH = [boomeramg_lib_path])
673        env.AppendUnique(LIBS = env['boomeramg_libs'])
674        env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)
675        env.Append(CPPDEFINES = ['BOOMERAMG'])
676    
677  ######## ParMETIS (optional)  ######## ParMETIS (optional)
678    
679  if not env['usempi']: env['parmetis'] = False  if not env['usempi']: env['parmetis'] = False
# Line 571  if env['parmetis']: Line 692  if env['parmetis']:
692    
693  try:  try:
694      import subprocess      import subprocess
695      p=subprocess.Popen(['gmsh', '-version'], stderr=subprocess.PIPE)      p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)
696      p.poll()      _,e=p.communicate()
697      env['gmsh']=True      if e.split().count("MPI"):
698            env['gmsh']='m'
699        else:
700            env['gmsh']='s'
701  except OSError:  except OSError:
702      env['gmsh']=False      env['gmsh']=False
703    
704    ######## PDFLaTeX (for documentation)
705    if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):
706        env['pdflatex']=True
707    else:
708        env['pdflatex']=False
709    
710  ######################## Summarize our environment ###########################  ######################## Summarize our environment ###########################
711    
712  # 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 745  else:
745      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
746  d_list=[]  d_list=[]
747  e_list=[]  e_list=[]
748  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','silo','visit','pyvisi':  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':
749      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
750      else: d_list.append(i)      else: d_list.append(i)
751  for i in e_list:  for i in e_list:
752      print("%16s:  YES"%i)      print("%16s:  YES"%i)
753  for i in d_list:  for i in d_list:
754      print("%16s:  DISABLED"%i)      print("%16s:  DISABLED"%i)
755  if env['gmsh']:  if env['cppunit']:
756        print("         CppUnit:  FOUND")
757    else:
758        print("         CppUnit:  NOT FOUND")
759    if env['gmsh']=='m':
760        print("            gmsh:  FOUND, MPI-ENABLED")
761    elif env['gmsh']=='s':
762      print("            gmsh:  FOUND")      print("            gmsh:  FOUND")
763  else:  else:
764      print("            gmsh:  NOT FOUND")      print("            gmsh:  NOT FOUND")
765    if env['numpy_h']:
766        print("   numpy headers:  FOUND")
767    else:
768        print("   numpy headers:  NOT FOUND")
769    print("   vsl_random:  %s"%env['vsl_random'])
770        
771  if ((fatalwarning != '') and (env['werror'])):  if ((fatalwarning != '') and (env['werror'])):
772      print("  Treating warnings as errors")      print("  Treating warnings as errors")
773  else:  else:
# Line 654  Export( Line 796  Export(
796    ]    ]
797  )  )
798    
 env.SConscript(dirs = ['tools/CppUnitTest/src'], variant_dir='$BUILD_DIR/$PLATFORM/tools/CppUnitTest', duplicate=0)  
799  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)
800  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)
801  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)
802  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)
803  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)
804    env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
805  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)
806  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)
807    env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
808    env.SConscript(dirs = ['downunder/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/downunder', duplicate=0)
809  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)  
810  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)
811  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)
812    env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
813  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)
814    
815    
816  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
817    
818  # remove obsolete file  # remove obsolete file
# Line 688  except StopIteration: Line 832  except StopIteration:
832      pass      pass
833  boosthpp.close()  boosthpp.close()
834    
835    
836  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
837  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
838  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
839  buildvars.write("cc="+env['CC']+"\n")  buildvars.write("cc="+env['CC']+"\n")
840  buildvars.write("cxx="+env['CXX']+"\n")  buildvars.write("cxx="+env['CXX']+"\n")
841  buildvars.write("python="+sys.executable+"\n")  if env['pythoncmd']=='python':
842  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")
843        buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
844    else:
845        buildvars.write("python="+env['pythoncmd']+"\n")
846        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)
847        verstring=p.stdout.readline().strip()
848        p.wait()
849        buildvars.write("python_version="+verstring+"\n")
850  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
851  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
852  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 704  buildvars.write("mpi=%s\n"%env['mpi']) Line 856  buildvars.write("mpi=%s\n"%env['mpi'])
856  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
857  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
858  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
859  buildvars.write("pyvisi=%d\n"%env['pyvisi'])  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
860  for i in 'netcdf','parmetis','papi','mkl','umfpack','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
861      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
862      if env[i]:      if env[i]:
863          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 866  buildvars.close()
866    
867  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
868    
869  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'))
870  env.Alias('target_init', [target_init])  env.Alias('target_init', [target_init])
871    # delete buildvars upon cleanup
872    env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
873    
874  # 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
875  # #include <paso/Common.h>  # #include <paso/Common.h>
# Line 728  env.Alias('install_paso', ['build_paso', Line 882  env.Alias('install_paso', ['build_paso',
882  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'])
883  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'])
884    
885    env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
886    env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
887    
888  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'])
889  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'])
890    
891  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'])
892  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'])
893    
894    env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
895    env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
896    
897  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'])
898  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'])
899    
# Line 745  build_all_list = [] Line 905  build_all_list = []
905  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
906  build_all_list += ['build_paso']  build_all_list += ['build_paso']
907  build_all_list += ['build_escript']  build_all_list += ['build_escript']
908    build_all_list += ['build_pasowrap']
909  build_all_list += ['build_dudley']  build_all_list += ['build_dudley']
910  build_all_list += ['build_finley']  build_all_list += ['build_finley']
911    build_all_list += ['build_ripley']
912  build_all_list += ['build_weipa']  build_all_list += ['build_weipa']
913  if not IS_WINDOWS: build_all_list += ['build_escriptreader']  if not IS_WINDOWS: build_all_list += ['build_escriptreader']
914  if env['usempi']:   build_all_list += ['build_pythonMPI']  if env['usempi']:   build_all_list += ['build_pythonMPI']
# Line 758  install_all_list += ['target_init'] Line 920  install_all_list += ['target_init']
920  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
921  install_all_list += ['install_paso']  install_all_list += ['install_paso']
922  install_all_list += ['install_escript']  install_all_list += ['install_escript']
923    install_all_list += ['install_pasowrap']
924  install_all_list += ['install_dudley']  install_all_list += ['install_dudley']
925  install_all_list += ['install_finley']  install_all_list += ['install_finley']
926    install_all_list += ['install_ripley']
927  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
928  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
929  install_all_list += ['install_pyvisi_py']  install_all_list += ['install_downunder_py']
930  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
931  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
932  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 774  env.Default('install_all') Line 938  env.Default('install_all')
938    
939  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
940    
941  env.Alias('build_cppunittest', ['install_cppunittest_headers', 'build_cppunittest_lib'])  if not env['cppunit']:
942  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')
943  env.Alias('run_tests', ['install_all', 'install_cppunittest_lib'])      env.Alias('run_tests', test_msg)
944  env.Alias('all_tests', ['install_all', 'install_cppunittest_lib', 'run_tests', 'py_tests'])  env.Alias('run_tests', ['install_all'])
945    env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
946  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
947  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
948    
# Line 790  env.Alias('release_prep', ['docs', 'inst Line 955  env.Alias('release_prep', ['docs', 'inst
955  if not IS_WINDOWS:  if not IS_WINDOWS:
956      try:      try:
957          utest=open('utest.sh','w')          utest=open('utest.sh','w')
958          utest.write(GroupTest.makeHeader(env['PLATFORM']))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
959          for tests in TestGroups:          for tests in TestGroups:
960              utest.write(tests.makeString())              utest.write(tests.makeString())
961          utest.close()          utest.close()
962          Execute(Chmod('utest.sh', 0755))          Execute(Chmod('utest.sh', 0o755))
963          print("Generated utest.sh.")          print("Generated utest.sh.")
964      except IOError:      except IOError:
965          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
966          Exit(1)          Exit(1)
967    
968        # delete utest.sh upon cleanup
969        env.Clean('target_init', 'utest.sh')
970    
971      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
972      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
973          print("Copying escript wrapper.")          print("Copying escript wrapper.")

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

  ViewVC Help
Powered by ViewVC 1.1.26