/[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 3967 by jfenwick, Mon Sep 17 04:02:58 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      BoolVariable('BADPYTHONMACROS','Extra \#include to get around a python bug.', True),
136  )  )
137    
138  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 140  vars.AddVariables( Line 144  vars.AddVariables(
144  # in default locations.  # in default locations.
145  env = Environment(tools = ['default'], options = vars,  env = Environment(tools = ['default'], options = vars,
146                    ENV = {'PATH': os.environ['PATH']})                    ENV = {'PATH': os.environ['PATH']})
147                      
148    
149    #set the vars for clang
150    def mkclang(env):
151      env['CC']='clang'
152      env['CXX']='clang++'
153                      
154                      
155  if env['tools_names'] != 'default':  if env['tools_names'] != 'default':
156        zz=env['tools_names']
157        if 'clang' in zz:
158            zz.remove('clang')
159            zz.insert(0, mkclang)
160      env = Environment(tools = ['default'] + env['tools_names'], options = vars,      env = Environment(tools = ['default'] + env['tools_names'], options = vars,
161                        ENV = {'PATH' : os.environ['PATH']})                        ENV = {'PATH' : os.environ['PATH']})
162    
# Line 247  if env['cc_extra']  != '': env.Append(CF Line 263  if env['cc_extra']  != '': env.Append(CF
263  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
264  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
265    
266    if env['BADPYTHONMACROS']: env.Append(CXXFLAGS = ' -DBADPYTHONMACROS')
267    
268    if env['usepython3']:
269        env.Append(CPPDEFINES=['ESPYTHON3'])
270    
271  # set up the autolazy values  # set up the autolazy values
272  if env['forcelazy'] == 'on':  if env['forcelazy'] == 'on':
273      env.Append(CPPDEFINES=['FAUTOLAZYON'])      env.Append(CPPDEFINES=['FAUTOLAZYON'])
# Line 358  except KeyError: Line 379  except KeyError:
379  if env['pythoncmd']=='python':  if env['pythoncmd']=='python':
380      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)
381  else:  else:
382      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)
383  env.Append(BUILDERS = {'PyCompile' : py_builder});  env.Append(BUILDERS = {'PyCompile' : py_builder});
384    
385  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 418  if conf.CheckFunc('gethostname'):
418    
419  ######## Python headers & library (required)  ######## Python headers & library (required)
420    
421  python_inc_path=sysconfig.get_python_inc()  #First we check to see if the config file has specified
422  if IS_WINDOWS:  ##Where to find the filae. Ideally, this should be automatic
423      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
424  elif env['PLATFORM']=='darwin':  #Directory
425      python_lib_path=sysconfig.get_config_var('LIBPL')  # Use the python scons is running
426  else:  if env['pythoncmd']=='python':
427      python_lib_path=sysconfig.get_config_var('LIBDIR')      python_inc_path=sysconfig.get_python_inc()
428  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux      if IS_WINDOWS:
429  if IS_WINDOWS:          python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
430      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]      elif env['PLATFORM']=='darwin':
431  else:          python_lib_path=sysconfig.get_config_var('LIBPL')
432      python_libs=['python'+sysconfig.get_python_version()]      else:
433            python_lib_path=sysconfig.get_config_var('LIBDIR')
434    
435        #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
436        if IS_WINDOWS:
437            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
438        else:
439            python_libs=['python'+sysconfig.get_python_version()]
440    
441  #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
442  if env['pythoncmd']!='python':  else:
443     py3scons=False   # Is scons running on python3?      initstring='from __future__ import print_function;from distutils import sysconfig;'
444     initstring='from __future__ import print_function;from distutils import sysconfig;'      if env['pythonlibname']!='':
445     if IS_WINDOWS:          python_libs=env['pythonlibname']
446        cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'      else:   # work it out by calling python    
447     else:          if IS_WINDOWS:
448        cmd='print("python"+sysconfig.get_python_version())'              cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
449     p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)          else:
450     python_libs=p.stdout.readline()              cmd='print("python"+sysconfig.get_python_version())'
451     if type(python_libs)!=str():          p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
452        py3scons=True          python_libs=p.stdout.readline()
453        python_libs=python_libs.encode()          if env['usepython3']:       # This is to convert unicode str into py2 string
454     p.wait()              python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
455     python_libs=python_libs.strip()          p.wait()
456     # Now we know whether we are using python3 or not          python_libs=python_libs.strip()
457     p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)  
458     python_inc_path=p.stdout.readline()    
459     if py3scons:      # Now we know whether we are using python3 or not
460        p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
461        python_inc_path=p.stdout.readline()
462        if env['usepython3']:
463           python_inc_path=python_inc_path.encode()           python_inc_path=python_inc_path.encode()
464     p.wait()        p.wait()  
465     python_inc_path=python_inc_path.strip()      python_inc_path=python_inc_path.strip()
466     if IS_WINDOWS:      if IS_WINDOWS:
467          cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"          cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
468     elif env['PLATFORM']=='darwin':      elif env['PLATFORM']=='darwin':
469          cmd="sysconfig.get_config_var(\"LIBPL\")"          cmd="sysconfig.get_config_var(\"LIBPL\")"
470     else:      else:
471          cmd="sysconfig.get_config_var(\"LIBDIR\")"          cmd="sysconfig.get_config_var(\"LIBDIR\")"
472    
473     p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)      p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
474     python_lib_path=p.stdout.readline()      python_lib_path=p.stdout.readline()
475     if py3scons:      if env['usepython3']:
476        python_lib_path=python_lib_path.decode()          python_lib_path=python_lib_path.decode()
477     p.wait()      p.wait()
478     python_lib_path=python_lib_path.strip()      python_lib_path=python_lib_path.strip()
479    
480    #Check for an override from the config file.
481    #Ideally, this should be automatic
482    #But we need to deal with the case where python is not in its INSTALL
483    #Directory
484    if env['pythonlibpath']!='':
485        python_lib_path=env['pythonlibpath']
486    
487    if env['pythonincpath']!='':
488        python_inc_path=env['pythonincpath']
489    
490    
491  if sysheaderopt == '':  if sysheaderopt == '':
# Line 466  if not conf.CheckFunc('Py_Exit'): Line 505  if not conf.CheckFunc('Py_Exit'):
505      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))
506      Exit(1)      Exit(1)
507    
508  # reuse conf to check for numpy header (optional)  ## reuse conf to check for numpy header (optional)
509  if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):  if env['usepython3']:
510      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:  
511      conf.env['numpy_h']=False      conf.env['numpy_h']=False
512    else:
513        if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
514            conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
515            conf.env['numpy_h']=True
516        else:
517            conf.env['numpy_h']=False
518    
519  # Commit changes to environment  # Commit changes to environment
520  env = conf.Finish()  env = conf.Finish()
# Line 518  try: Line 561  try:
561  except:  except:
562      env['cppunit']=False      env['cppunit']=False
563    
 ######## VTK (optional)  
   
 if env['pyvisi']:  
     try:  
         import vtk  
         env['pyvisi'] = True  
     except ImportError:  
         print("Cannot import vtk, disabling pyvisi.")  
         env['pyvisi'] = False  
   
564  ######## netCDF (optional)  ######## netCDF (optional)
565    
566  netcdf_inc_path=''  netcdf_inc_path=''
# Line 787  env.SConscript(dirs = ['pasowrap/src'], Line 820  env.SConscript(dirs = ['pasowrap/src'],
820  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)
821  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)
822  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)
823    env.SConscript(dirs = ['downunder/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/downunder', duplicate=0)
824  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)  
825  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)
826  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)
827    env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
828  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)
829    
830    
831  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
832    
833  # remove obsolete file  # remove obsolete file
# Line 813  except StopIteration: Line 847  except StopIteration:
847      pass      pass
848  boosthpp.close()  boosthpp.close()
849    
850    
851  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
852  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
853  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
# Line 823  if env['pythoncmd']=='python': Line 858  if env['pythoncmd']=='python':
858      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")
859  else:  else:
860      buildvars.write("python="+env['pythoncmd']+"\n")      buildvars.write("python="+env['pythoncmd']+"\n")
861      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)
862      verstring=p.stdout.readline().strip()      verstring=p.stdout.readline().strip()
863      p.wait()      p.wait()
864      buildvars.write("python version="+verstring+"\n")      buildvars.write("python_version="+verstring+"\n")
865  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
866  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
867  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 836  buildvars.write("mpi=%s\n"%env['mpi']) Line 871  buildvars.write("mpi=%s\n"%env['mpi'])
871  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)  buildvars.write("mpi_inc_path=%s\n"%mpi_inc_path)
872  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
873  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
 buildvars.write("pyvisi=%d\n"%env['pyvisi'])  
874  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
875  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':  for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
876      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 900  env.Alias('install_escript', ['build_esc
900  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'])
901  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'])
902    
   
903  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'])
904  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'])
905    
# Line 908  install_all_list += ['install_finley'] Line 941  install_all_list += ['install_finley']
941  install_all_list += ['install_ripley']  install_all_list += ['install_ripley']
942  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
943  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
944  #install_all_list += ['install_pyvisi_py']  install_all_list += ['install_downunder_py']
945  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
946  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
947  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 920  env.Default('install_all') Line 953  env.Default('install_all')
953    
954  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
955    
 test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')  
956  if not env['cppunit']:  if not env['cppunit']:
957        test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
958      env.Alias('run_tests', test_msg)      env.Alias('run_tests', test_msg)
959  env.Alias('run_tests', ['install_all'])  env.Alias('run_tests', ['install_all'])
960  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.3967

  ViewVC Help
Powered by ViewVC 1.1.26