/[escript]/trunk/SConstruct
ViewVC logotype

Diff of /trunk/SConstruct

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

revision 3851 by jfenwick, Wed Feb 29 05:23:30 2012 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 110  vars.AddVariables( Line 110  vars.AddVariables(
110    BoolVariable('visit', 'Enable the VisIt simulation interface', False),    BoolVariable('visit', 'Enable the VisIt simulation interface', False),
111    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),    ('visit_prefix', 'Prefix/Paths to VisIt installation', default_prefix),
112    ('visit_libs', 'VisIt libraries to link with', ['simV2']),    ('visit_libs', 'VisIt libraries to link with', ['simV2']),
   BoolVariable('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', False),  
113    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),    BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
114  # Advanced settings  # Advanced settings
115    #dudley_assemble_flags = -funroll-loops      to actually do something    #dudley_assemble_flags = -funroll-loops      to actually do something
# Line 129  vars.AddVariables( Line 128  vars.AddVariables(
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),    ('SVN_VERSION', 'Do not use from options file', -2),
130    ('pythoncmd', 'which python to compile with','python'),    ('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 247  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 358  except KeyError: Line 364  except KeyError:
364  if env['pythoncmd']=='python':  if env['pythoncmd']=='python':
365      py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)      py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
366  else:  else:
367      py_builder = Builder(action = "scripts/testcomp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)      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 397  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  else:          python_lib_path=sysconfig.get_config_var('LIBPL')
417      python_libs=['python'+sysconfig.get_python_version()]      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  #if we want to use a python other than the one scons is running
427  if env['pythoncmd']!='python':  else:
428     py3scons=False   # Is scons running on python3?      initstring='from __future__ import print_function;from distutils import sysconfig;'
429     initstring='from __future__ import print_function;from distutils import sysconfig;'      if env['pythonlibname']!='':
430     if IS_WINDOWS:          python_libs=env['pythonlibname']
431        cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'      else:   # work it out by calling python    
432     else:          if IS_WINDOWS:
433        cmd='print("python"+sysconfig.get_python_version())'              cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
434     p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)          else:
435     python_libs=p.stdout.readline()              cmd='print("python"+sysconfig.get_python_version())'
436     if type(python_libs)!=str():          p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
437        py3scons=True          python_libs=p.stdout.readline()
438        python_libs=python_libs.encode()          if env['usepython3']:       # This is to convert unicode str into py2 string
439     p.wait()              python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
440     python_libs=python_libs.strip()          p.wait()
441     # Now we know whether we are using python3 or not          python_libs=python_libs.strip()
442     p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)  
443     python_inc_path=p.stdout.readline()    
444     if py3scons:      # 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()           python_inc_path=python_inc_path.encode()
449     p.wait()        p.wait()  
450     python_inc_path=python_inc_path.strip()      python_inc_path=python_inc_path.strip()
451     if IS_WINDOWS:      if IS_WINDOWS:
452          cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"          cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
453     elif env['PLATFORM']=='darwin':      elif env['PLATFORM']=='darwin':
454          cmd="sysconfig.get_config_var(\"LIBPL\")"          cmd="sysconfig.get_config_var(\"LIBPL\")"
455     else:      else:
456          cmd="sysconfig.get_config_var(\"LIBDIR\")"          cmd="sysconfig.get_config_var(\"LIBDIR\")"
457    
458     p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)      p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
459     python_lib_path=p.stdout.readline()      python_lib_path=p.stdout.readline()
460     if py3scons:      if env['usepython3']:
461        python_lib_path=python_lib_path.decode()          python_lib_path=python_lib_path.decode()
462     p.wait()      p.wait()
463     python_lib_path=python_lib_path.strip()      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 == '':
# Line 466  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)  ## reuse conf to check for numpy header (optional)
494  if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):  if env['usepython3']:
495      conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])      # FIXME: This is until we can work out how to make the checks in python 3
     conf.env['numpy_h']=True  
 else:  
496      conf.env['numpy_h']=False      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()
# Line 518  try: Line 546  try:
546  except:  except:
547      env['cppunit']=False      env['cppunit']=False
548    
 ######## VTK (optional)  
   
 if env['pyvisi']:  
     try:  
         import vtk  
         env['pyvisi'] = True  
     except ImportError:  
         print("Cannot import vtk, disabling pyvisi.")  
         env['pyvisi'] = False  
   
549  ######## netCDF (optional)  ######## netCDF (optional)
550    
551  netcdf_inc_path=''  netcdf_inc_path=''
# Line 787  env.SConscript(dirs = ['pasowrap/src'], Line 805  env.SConscript(dirs = ['pasowrap/src'],
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)  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 813  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")
# Line 823  if env['pythoncmd']=='python': Line 843  if env['pythoncmd']=='python':
843      buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")      buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
844  else:  else:
845      buildvars.write("python="+env['pythoncmd']+"\n")      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)      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()      verstring=p.stdout.readline().strip()
848      p.wait()      p.wait()
849      buildvars.write("python version="+verstring+"\n")      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 836  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'])
 buildvars.write("pyvisi=%d\n"%env['pyvisi'])  
859  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
860  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','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])))
# Line 866  env.Alias('install_escript', ['build_esc Line 885  env.Alias('install_escript', ['build_esc
885  env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])  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'])  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    
# Line 908  install_all_list += ['install_finley'] Line 926  install_all_list += ['install_finley']
926  install_all_list += ['install_ripley']  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 920  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    
 test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')  
941  if not env['cppunit']:  if not env['cppunit']:
942        test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
943      env.Alias('run_tests', test_msg)      env.Alias('run_tests', test_msg)
944  env.Alias('run_tests', ['install_all'])  env.Alias('run_tests', ['install_all'])
945  env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])  env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])

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

  ViewVC Help
Powered by ViewVC 1.1.26