/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

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

revision 3349 by caltinay, Mon Nov 15 05:09:56 2010 UTC revision 3942 by jfenwick, Fri Jul 27 01:04:48 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 312  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N Line 334  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N
334          env['ENV'][key] = 1          env['ENV'][key] = 1
335    
336  env_export=env['env_export']  env_export=env['env_export']
337  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME'])  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','TMPDIR','TEMP','TMP'])
338    
339  for key in set(env_export):  for key in set(env_export):
340      try:      try:
# 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  else:  #Directory
410      python_lib_path=sysconfig.get_config_var('LIBDIR')  # Use the python scons is running
411  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux  if env['pythoncmd']=='python':
412  if IS_WINDOWS:      python_inc_path=sysconfig.get_python_inc()
413      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]      if IS_WINDOWS:
414            python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
415        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 406  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 428  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 524  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 535  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 551  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 565  if env['parmetis']: Line 688  if env['parmetis']:
688      env.PrependENVPath(LD_LIBRARY_PATH_KEY, parmetis_lib_path)      env.PrependENVPath(LD_LIBRARY_PATH_KEY, parmetis_lib_path)
689      env.Append(CPPDEFINES = ['USE_PARMETIS'])      env.Append(CPPDEFINES = ['USE_PARMETIS'])
690    
691    ######## gmsh (optional, for tests)
692    
693    try:
694        import subprocess
695        p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)
696        _,e=p.communicate()
697        if e.split().count("MPI"):
698            env['gmsh']='m'
699        else:
700            env['gmsh']='s'
701    except OSError:
702        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 603  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['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")
763    else:
764        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 638  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 = ['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)
809  env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', 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 = ['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)
813    
814    
815  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
816    
817  # remove obsolete file  # remove obsolete file
# Line 672  except StopIteration: Line 831  except StopIteration:
831      pass      pass
832  boosthpp.close()  boosthpp.close()
833    
834    
835  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
836  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
837  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
838  buildvars.write("cc="+env['CC']+"\n")  buildvars.write("cc="+env['CC']+"\n")
839  buildvars.write("cxx="+env['CXX']+"\n")  buildvars.write("cxx="+env['CXX']+"\n")
840  buildvars.write("python="+sys.executable+"\n")  if env['pythoncmd']=='python':
841  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")
842        buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
843    else:
844        buildvars.write("python="+env['pythoncmd']+"\n")
845        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)
846        verstring=p.stdout.readline().strip()
847        p.wait()
848        buildvars.write("python_version="+verstring+"\n")
849  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
850  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
851  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 688  buildvars.write("mpi=%s\n"%env['mpi']) Line 855  buildvars.write("mpi=%s\n"%env['mpi'])
855  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
856  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
857  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
858  buildvars.write("pyvisi=%d\n"%env['pyvisi'])  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
859  for i in 'netcdf','parmetis','papi','mkl','umfpack','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
860      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
861      if env[i]:      if env[i]:
862          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 698  buildvars.close() Line 865  buildvars.close()
865    
866  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
867    
868  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'))
869  env.Alias('target_init', [target_init])  env.Alias('target_init', [target_init])
870    # delete buildvars upon cleanup
871    env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
872    
873  # 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
874  # #include <paso/Common.h>  # #include <paso/Common.h>
# Line 712  env.Alias('install_paso', ['build_paso', Line 881  env.Alias('install_paso', ['build_paso',
881  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'])
882  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'])
883    
884    env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
885    env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
886    
887  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'])
888  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'])
889    
890  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'])
891  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'])
892    
893    env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
894    env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
895    
896  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'])
897  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'])
898    
# Line 729  build_all_list = [] Line 904  build_all_list = []
904  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
905  build_all_list += ['build_paso']  build_all_list += ['build_paso']
906  build_all_list += ['build_escript']  build_all_list += ['build_escript']
907    build_all_list += ['build_pasowrap']
908  build_all_list += ['build_dudley']  build_all_list += ['build_dudley']
909  build_all_list += ['build_finley']  build_all_list += ['build_finley']
910    build_all_list += ['build_ripley']
911  build_all_list += ['build_weipa']  build_all_list += ['build_weipa']
912  if not IS_WINDOWS: build_all_list += ['build_escriptreader']  if not IS_WINDOWS: build_all_list += ['build_escriptreader']
913  if env['usempi']:   build_all_list += ['build_pythonMPI']  if env['usempi']:   build_all_list += ['build_pythonMPI']
# Line 742  install_all_list += ['target_init'] Line 919  install_all_list += ['target_init']
919  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
920  install_all_list += ['install_paso']  install_all_list += ['install_paso']
921  install_all_list += ['install_escript']  install_all_list += ['install_escript']
922    install_all_list += ['install_pasowrap']
923  install_all_list += ['install_dudley']  install_all_list += ['install_dudley']
924  install_all_list += ['install_finley']  install_all_list += ['install_finley']
925    install_all_list += ['install_ripley']
926  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
927  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
 install_all_list += ['install_pyvisi_py']  
928  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
929  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
930  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 758  env.Default('install_all') Line 936  env.Default('install_all')
936    
937  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
938    
939  env.Alias('build_cppunittest', ['install_cppunittest_headers', 'build_cppunittest_lib'])  if not env['cppunit']:
940  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')
941  env.Alias('run_tests', ['install_all', 'install_cppunittest_lib'])      env.Alias('run_tests', test_msg)
942  env.Alias('all_tests', ['install_all', 'install_cppunittest_lib', 'run_tests', 'py_tests'])  env.Alias('run_tests', ['install_all'])
943    env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
944  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
945  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
946    
# Line 774  env.Alias('release_prep', ['docs', 'inst Line 953  env.Alias('release_prep', ['docs', 'inst
953  if not IS_WINDOWS:  if not IS_WINDOWS:
954      try:      try:
955          utest=open('utest.sh','w')          utest=open('utest.sh','w')
956          utest.write(GroupTest.makeHeader(env['BUILD_DIR'], env['PLATFORM']))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
957          for tests in TestGroups:          for tests in TestGroups:
958              utest.write(tests.makeString())              utest.write(tests.makeString())
959          utest.close()          utest.close()
960          Execute(Chmod('utest.sh', 0755))          Execute(Chmod('utest.sh', 0o755))
961          print("Generated utest.sh.")          print("Generated utest.sh.")
962      except IOError:      except IOError:
963          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
964          Exit(1)          Exit(1)
965    
966        # delete utest.sh upon cleanup
967        env.Clean('target_init', 'utest.sh')
968    
969      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
970      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
971          print("Copying escript wrapper.")          print("Copying escript wrapper.")

Legend:
Removed from v.3349  
changed lines
  Added in v.3942

  ViewVC Help
Powered by ViewVC 1.1.26