/[escript]/branches/4.0fordebian/SConstruct
ViewVC logotype

Diff of /branches/4.0fordebian/SConstruct

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

revision 3271 by caltinay, Thu Oct 14 02:16:00 2010 UTC revision 3896 by caltinay, Fri May 11 01:31:29 2012 UTC
# 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)
56  vars.AddVariables(  vars.AddVariables(
57    PathVariable('options_file', 'Path to options file', options_file, PathVariable.PathIsFile),    PathVariable('options_file', 'Path to options file', options_file, PathVariable.PathIsFile),
58    PathVariable('prefix', 'Installation prefix', Dir('#.').abspath, PathVariable.PathIsDirCreate),    PathVariable('prefix', 'Installation prefix', Dir('#.').abspath, PathVariable.PathIsDirCreate),
59      PathVariable('build_dir', 'Top-level build directory', Dir('#/build').abspath, PathVariable.PathIsDirCreate),
60    BoolVariable('verbose', 'Output full compile/link lines', False),    BoolVariable('verbose', 'Output full compile/link lines', False),
61  # Compiler/Linker options  # Compiler/Linker options
62    ('cc', 'Path to C compiler', 'default'),    ('cc', 'Path to C compiler', 'default'),
# Line 71  vars.AddVariables( Line 74  vars.AddVariables(
74    ('omp_ldflags', 'OpenMP linker flags', 'default'),    ('omp_ldflags', 'OpenMP linker flags', 'default'),
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']),    ('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 92  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 111  vars.AddVariables(
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('pyvisi', 'Enable pyvisi (deprecated, requires VTK module)', False),
114      BoolVariable('vsl_random', 'Use VSL from intel for random data', False),
115  # Advanced settings  # Advanced settings
116    #dudley_assemble_flags = -funroll-loops      to actually do something    #dudley_assemble_flags = -funroll-loops      to actually do something
117    ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),    ('dudley_assemble_flags', 'compiler flags for some dudley optimisations', ''),
# Line 114  vars.AddVariables( Line 124  vars.AddVariables(
124    EnumVariable('forcecollres', 'For testing use only - set the default value for force resolving collective ops', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),    EnumVariable('forcecollres', 'For testing use only - set the default value for force resolving collective ops', 'leave_alone', allowed_values=('leave_alone', 'on', 'off')),
125    # finer control over library building, intel aggressive global optimisation    # finer control over library building, intel aggressive global optimisation
126    # works with dynamic libraries on windows.    # works with dynamic libraries on windows.
127    ('share_esysutils', 'Build a dynamic esysUtils library', False),    ('build_shared', 'Build dynamic libraries only', False),
   ('share_paso', 'Build a dynamic paso library', False),  
128    ('sys_libs', 'Extra libraries to link with', []),    ('sys_libs', 'Extra libraries to link with', []),
129    ('escript_opts_version', 'Version of options file (do not specify on command line)'),    ('escript_opts_version', 'Version of options file (do not specify on command line)'),
130      ('SVN_VERSION', 'Do not use from options file', -2),
131      ('pythoncmd', 'which python to compile with','python'),
132      ('usepython3', 'Is this a python3 build? (experimental)', False),
133      ('pythonlibname', 'Name of the python library to link. (This is found automatically for python2.X.)', ''),
134  )  )
135    
136  ##################### Create environment and help text #######################  ##################### Create environment and help text #######################
# Line 125  vars.AddVariables( Line 138  vars.AddVariables(
138  # Intel's compiler uses regular expressions improperly and emits a warning  # Intel's compiler uses regular expressions improperly and emits a warning
139  # about failing to find the compilers. This warning can be safely ignored.  # about failing to find the compilers. This warning can be safely ignored.
140    
141  env = Environment(tools = ['default'], options = vars)  # PATH is needed so the compiler, linker and tools are found if they are not
142    # in default locations.
143    env = Environment(tools = ['default'], options = vars,
144                      ENV = {'PATH': os.environ['PATH']})
145  if env['tools_names'] != 'default':  if env['tools_names'] != 'default':
146      env = Environment(tools = ['default'] + env['tools_names'], options = vars)      env = Environment(tools = ['default'] + env['tools_names'], options = vars,
147                          ENV = {'PATH' : os.environ['PATH']})
148    
149  if options_file:  if options_file:
150      opts_valid=False      opts_valid=False
# Line 153  if len(vars.UnknownVariables())>0: Line 170  if len(vars.UnknownVariables())>0:
170    
171  #################### Make sure install directories exist #####################  #################### Make sure install directories exist #####################
172    
173    env['BUILD_DIR']=env['build_dir']
174  prefix=Dir(env['prefix']).abspath  prefix=Dir(env['prefix']).abspath
175  env['incinstall'] = os.path.join(prefix, 'include')  env['incinstall'] = os.path.join(prefix, 'include')
176  env['bininstall'] = os.path.join(prefix, 'bin')  env['bininstall'] = os.path.join(prefix, 'bin')
# Line 196  if cc_name == 'icc': Line 214  if cc_name == 'icc':
214      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"
215      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
216      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp -openmp_report0"
217      omp_ldflags = "-openmp -openmp_report0 -lguide -lpthread"      omp_ldflags = "-openmp -openmp_report0 -lpthread"
218      fatalwarning = "-Werror"      fatalwarning = "-Werror"
219  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
220      # GNU C on any system      # GNU C on any system
# Line 231  if env['cc_extra']  != '': env.Append(CF Line 249  if env['cc_extra']  != '': env.Append(CF
249  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])  if env['cxx_extra'] != '': env.Append(CXXFLAGS = env['cxx_extra'])
250  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])  if env['ld_extra']  != '': env.Append(LINKFLAGS = env['ld_extra'])
251    
252    if env['usepython3']:
253        env.Append(CPPDEFINES=['ESPYTHON3'])
254    
255  # set up the autolazy values  # set up the autolazy values
256  if env['forcelazy'] == 'on':  if env['forcelazy'] == 'on':
257      env.Append(CPPDEFINES=['FAUTOLAZYON'])      env.Append(CPPDEFINES=['FAUTOLAZYON'])
# Line 271  env.Append(CCFLAGS = env['cc_flags']) Line 292  env.Append(CCFLAGS = env['cc_flags'])
292  # add system libraries  # add system libraries
293  env.AppendUnique(LIBS = env['sys_libs'])  env.AppendUnique(LIBS = env['sys_libs'])
294    
295  # Get the global Subversion revision number for the getVersion() method  
296  try:  global_revision=ARGUMENTS.get('SVN_VERSION', None)
297    if global_revision:
298        global_revision = re.sub(':.*', '', global_revision)
299        global_revision = re.sub('[^0-9]', '', global_revision)
300        if global_revision == '': global_revision='-2'
301    else:
302      # Get the global Subversion revision number for the getVersion() method
303      try:
304      global_revision = os.popen('svnversion -n .').read()      global_revision = os.popen('svnversion -n .').read()
305      global_revision = re.sub(':.*', '', global_revision)      global_revision = re.sub(':.*', '', global_revision)
306      global_revision = re.sub('[^0-9]', '', global_revision)      global_revision = re.sub('[^0-9]', '', global_revision)
307      if global_revision == '': global_revision='-2'      if global_revision == '': global_revision='-2'
308  except:    except:
309      global_revision = '-1'      global_revision = '-1'
310  env['svn_revision']=global_revision  env['svn_revision']=global_revision
311  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])  env.Append(CPPDEFINES=['SVN_VERSION='+global_revision])
312    
313  if IS_WINDOWS:  if IS_WINDOWS:
314      if not env['share_esysutils']:      if not env['build_shared']:
315          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])          env.Append(CPPDEFINES = ['ESYSUTILS_STATIC_LIB'])
     if not env['share_paso']:  
316          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])          env.Append(CPPDEFINES = ['PASO_STATIC_LIB'])
317    
318  ###################### Copy required environment vars ########################  ###################### Copy required environment vars ########################
# Line 297  if IS_WINDOWS: Line 324  if IS_WINDOWS:
324  else:  else:
325      LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'      LD_LIBRARY_PATH_KEY='LD_LIBRARY_PATH'
326    
327  # the following env variables are exported for the unit tests, PATH is needed  # the following env variables are exported for the unit tests
 # so the compiler/linker is found if they are not in default locations.  
328    
329  for key in 'OMP_NUM_THREADS', 'ESCRIPT_NUM_PROCS', 'ESCRIPT_NUM_NODES':  for key in 'OMP_NUM_THREADS', 'ESCRIPT_NUM_PROCS', 'ESCRIPT_NUM_NODES':
330      try:      try:
# Line 307  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N Line 333  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N
333          env['ENV'][key] = 1          env['ENV'][key] = 1
334    
335  env_export=env['env_export']  env_export=env['env_export']
336  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'])
337    
338  for key in set(env_export):  for key in set(env_export):
339      try:      try:
# Line 334  except KeyError: Line 360  except KeyError:
360    
361  ######################## Add some custom builders ############################  ######################## Add some custom builders ############################
362    
363  py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)  if env['pythoncmd']=='python':
364        py_builder = Builder(action = build_py, suffix = '.pyc', src_suffix = '.py', single_source=True)
365    else:
366        py_builder = Builder(action = env['pythoncmd']+" scripts/py_comp.py $SOURCE $TARGET", suffix = '.pyc', src_suffix = '.py', single_source=True)
367  env.Append(BUILDERS = {'PyCompile' : py_builder});  env.Append(BUILDERS = {'PyCompile' : py_builder});
368    
369  runUnitTest_builder = Builder(action = runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)  runUnitTest_builder = Builder(action = runUnitTest, suffix = '.passed', src_suffix=env['PROGSUFFIX'], single_source=True)
# Line 373  if conf.CheckFunc('gethostname'): Line 402  if conf.CheckFunc('gethostname'):
402    
403  ######## Python headers & library (required)  ######## Python headers & library (required)
404    
405  python_inc_path=sysconfig.get_python_inc()  # Use the python scons is running
406  if IS_WINDOWS:  if env['pythoncmd']=='python':
407      python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')      python_inc_path=sysconfig.get_python_inc()
408  else:      if IS_WINDOWS:
409      python_lib_path=sysconfig.get_config_var('LIBDIR')          python_lib_path=os.path.join(sysconfig.get_config_var('prefix'), 'libs')
410  #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux      elif env['PLATFORM']=='darwin':
411  if IS_WINDOWS:          python_lib_path=sysconfig.get_config_var('LIBPL')
412      python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]      else:
413            python_lib_path=sysconfig.get_config_var('LIBDIR')
414    
415        #python_libs=[sysconfig.get_config_var('LDLIBRARY')] # only on linux
416        if IS_WINDOWS:
417            python_libs=['python%s%s'%(sys.version_info[0], sys.version_info[1])]
418        else:
419            python_libs=['python'+sysconfig.get_python_version()]
420    
421    #if we want to use a python other than the one scons is running
422  else:  else:
423      python_libs=['python'+sysconfig.get_python_version()]      initstring='from __future__ import print_function;from distutils import sysconfig;'
424        if env['pythonlibname']!='':
425            python_libs=env['pythonlibname']
426        else:   # work it out by calling python    
427            if IS_WINDOWS:
428                cmd='print("python%s%s"%(sys.version_info[0], sys.version_info[1]))'
429            else:
430                cmd='print("python"+sysconfig.get_python_version())'
431            p=Popen([env['pythoncmd'], '-c', initstring+cmd], stdout=PIPE)
432            python_libs=p.stdout.readline()
433            if env['usepython3']:       # This is to convert unicode str into py2 string
434                python_libs=python_libs.encode() # If scons runs on py3 then this must be rethought
435            p.wait()
436            python_libs=python_libs.strip()
437    
438      
439        # Now we know whether we are using python3 or not
440        p=Popen([env['pythoncmd'], '-c',  initstring+'print(sysconfig.get_python_inc())'], stdout=PIPE)
441        python_inc_path=p.stdout.readline()
442        if env['usepython3']:
443             python_inc_path=python_inc_path.encode()
444        p.wait()  
445        python_inc_path=python_inc_path.strip()
446        if IS_WINDOWS:
447            cmd="os.path.join(sysconfig.get_config_var('prefix'), 'libs')"
448        elif env['PLATFORM']=='darwin':
449            cmd="sysconfig.get_config_var(\"LIBPL\")"
450        else:
451            cmd="sysconfig.get_config_var(\"LIBDIR\")"
452    
453        p=Popen([env['pythoncmd'], '-c', initstring+'print('+cmd+')'], stdout=PIPE)
454        python_lib_path=p.stdout.readline()
455        if env['usepython3']:
456            python_lib_path=python_lib_path.decode()
457        p.wait()
458        python_lib_path=python_lib_path.strip()
459    
460  if sysheaderopt == '':  if sysheaderopt == '':
461      conf.env.AppendUnique(CPPPATH = [python_inc_path])      conf.env.AppendUnique(CPPPATH = [python_inc_path])
# Line 401  if not conf.CheckFunc('Py_Exit'): Line 474  if not conf.CheckFunc('Py_Exit'):
474      print("Cannot find python library method Py_Main (tried %s in directory %s)" % (python_libs, python_lib_path))      print("Cannot find python library method Py_Main (tried %s in directory %s)" % (python_libs, python_lib_path))
475      Exit(1)      Exit(1)
476    
477    ## reuse conf to check for numpy header (optional)
478    if env['usepython3']:
479        # FIXME: This is until we can work out how to make the checks in python 3
480        conf.env['numpy_h']=False
481    else:
482        if conf.CheckCXXHeader(['Python.h','numpy/ndarrayobject.h']):
483            conf.env.Append(CPPDEFINES = ['HAVE_NUMPY_H'])
484            conf.env['numpy_h']=True
485        else:
486            conf.env['numpy_h']=False
487    
488  # Commit changes to environment  # Commit changes to environment
489  env = conf.Finish()  env = conf.Finish()
490    
# Line 423  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 507  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
507    
508  ######## numpy (required)  ######## numpy (required)
509    
510    if env['pythoncmd']=='python':
511        try:
512          from numpy import identity
513        except ImportError:
514          print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
515          Exit(1)
516    else:
517        p=subprocess.call([env['pythoncmd'],'-c','import numpy'])
518        if p!=0:
519          print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
520          Exit(1)
521    
522    ######## CppUnit (required for tests)
523    
524  try:  try:
525      from numpy import identity      cppunit_inc_path,cppunit_lib_path=findLibWithHeader(env, env['cppunit_libs'], 'cppunit/TestFixture.h', env['cppunit_prefix'], lang='c++')
526  except ImportError:      env.AppendUnique(CPPPATH = [cppunit_inc_path])
527      print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)      env.AppendUnique(LIBPATH = [cppunit_lib_path])
528      Exit(1)      env.PrependENVPath(LD_LIBRARY_PATH_KEY, cppunit_lib_path)
529        env['cppunit']=True
530    except:
531        env['cppunit']=False
532    
533  ######## VTK (optional)  ######## VTK (optional)
534    
# Line 519  if env['silo']: Line 620  if env['silo']:
620      # weipa library and tools.      # weipa library and tools.
621      #env.AppendUnique(LIBS = [env['silo_libs']])      #env.AppendUnique(LIBS = [env['silo_libs']])
622    
623    ######## VSL random numbers (optional)
624    if env['vsl_random']:
625        env.Append(CPPDEFINES = ['MKLRANDOM'])
626    
627  ######## VisIt (optional)  ######## VisIt (optional)
628    
629  visit_inc_path=''  visit_inc_path=''
# Line 530  if env['visit']: Line 635  if env['visit']:
635    
636  ######## MPI (optional)  ######## MPI (optional)
637    
638    if env['mpi']=='no':
639        env['mpi']='none'
640    
641  env['usempi'] = env['mpi']!='none'  env['usempi'] = env['mpi']!='none'
642  mpi_inc_path=''  mpi_inc_path=''
643  mpi_lib_path=''  mpi_lib_path=''
# Line 546  if env['usempi']: Line 654  if env['usempi']:
654      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:      if env['netcdf'] and env['mpi'] in ['MPT','OPENMPI']:
655          env.Append(CPPDEFINES = ['MPI_INCLUDED'])          env.Append(CPPDEFINES = ['MPI_INCLUDED'])
656    
657    ######## BOOMERAMG (optional)
658    
659    if env['mpi'] == 'none': env['boomeramg'] = False
660    
661    boomeramg_inc_path=''
662    boomeramg_lib_path=''
663    if env['boomeramg']:
664        boomeramg_inc_path,boomeramg_lib_path=findLibWithHeader(env, env['boomeramg_libs'], 'HYPRE.h', env['boomeramg_prefix'], lang='c')
665        env.AppendUnique(CPPPATH = [boomeramg_inc_path])
666        env.AppendUnique(LIBPATH = [boomeramg_lib_path])
667        env.AppendUnique(LIBS = env['boomeramg_libs'])
668        env.PrependENVPath(LD_LIBRARY_PATH_KEY, boomeramg_lib_path)
669        env.Append(CPPDEFINES = ['BOOMERAMG'])
670    
671  ######## ParMETIS (optional)  ######## ParMETIS (optional)
672    
673  if not env['usempi']: env['parmetis'] = False  if not env['usempi']: env['parmetis'] = False
# Line 560  if env['parmetis']: Line 682  if env['parmetis']:
682      env.PrependENVPath(LD_LIBRARY_PATH_KEY, parmetis_lib_path)      env.PrependENVPath(LD_LIBRARY_PATH_KEY, parmetis_lib_path)
683      env.Append(CPPDEFINES = ['USE_PARMETIS'])      env.Append(CPPDEFINES = ['USE_PARMETIS'])
684    
685    ######## gmsh (optional, for tests)
686    
687    try:
688        import subprocess
689        p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)
690        _,e=p.communicate()
691        if e.split().count("MPI"):
692            env['gmsh']='m'
693        else:
694            env['gmsh']='s'
695    except OSError:
696        env['gmsh']=False
697    
698    ######## PDFLaTeX (for documentation)
699    if 'PDF' in dir(env) and '.tex' in env.PDF.builder.src_suffixes(env):
700        env['pdflatex']=True
701    else:
702        env['pdflatex']=False
703    
704  ######################## Summarize our environment ###########################  ######################## Summarize our environment ###########################
705    
706  # keep some of our install paths first in the list for the unit tests  # keep some of our install paths first in the list for the unit tests
# Line 598  else: Line 739  else:
739      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
740  d_list=[]  d_list=[]
741  e_list=[]  e_list=[]
742  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','silo','visit','pyvisi':  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':
743      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
744      else: d_list.append(i)      else: d_list.append(i)
745  for i in e_list:  for i in e_list:
746      print("%16s:  YES"%i)      print("%16s:  YES"%i)
747  for i in d_list:  for i in d_list:
748      print("%16s:  DISABLED"%i)      print("%16s:  DISABLED"%i)
749    if env['cppunit']:
750        print("         CppUnit:  FOUND")
751    else:
752        print("         CppUnit:  NOT FOUND")
753    if env['gmsh']=='m':
754        print("            gmsh:  FOUND, MPI-ENABLED")
755    elif env['gmsh']=='s':
756        print("            gmsh:  FOUND")
757    else:
758        print("            gmsh:  NOT FOUND")
759    if env['numpy_h']:
760        print("   numpy headers:  FOUND")
761    else:
762        print("   numpy headers:  NOT FOUND")
763    print("   vsl_random:  %s"%env['vsl_random'])
764        
765  if ((fatalwarning != '') and (env['werror'])):  if ((fatalwarning != '') and (env['werror'])):
766      print("  Treating warnings as errors")      print("  Treating warnings as errors")
767  else:  else:
# Line 633  Export( Line 790  Export(
790    ]    ]
791  )  )
792    
793  env.SConscript(dirs = ['tools/CppUnitTest/src'], variant_dir='build/$PLATFORM/tools/CppUnitTest', duplicate=0)  env.SConscript(dirs = ['tools/escriptconvert'], variant_dir='$BUILD_DIR/$PLATFORM/tools/escriptconvert', duplicate=0)
794  env.SConscript(dirs = ['tools/escriptconvert'], variant_dir='build/$PLATFORM/tools/escriptconvert', duplicate=0)  env.SConscript(dirs = ['paso/src'], variant_dir='$BUILD_DIR/$PLATFORM/paso', duplicate=0)
795  env.SConscript(dirs = ['paso/src'], variant_dir='build/$PLATFORM/paso', duplicate=0)  env.SConscript(dirs = ['weipa/src'], variant_dir='$BUILD_DIR/$PLATFORM/weipa', duplicate=0)
796  env.SConscript(dirs = ['weipa/src'], variant_dir='build/$PLATFORM/weipa', duplicate=0)  env.SConscript(dirs = ['escript/src'], variant_dir='$BUILD_DIR/$PLATFORM/escript', duplicate=0)
797  env.SConscript(dirs = ['escript/src'], variant_dir='build/$PLATFORM/escript', duplicate=0)  env.SConscript(dirs = ['esysUtils/src'], variant_dir='$BUILD_DIR/$PLATFORM/esysUtils', duplicate=0)
798  env.SConscript(dirs = ['esysUtils/src'], variant_dir='build/$PLATFORM/esysUtils', duplicate=0)  env.SConscript(dirs = ['pasowrap/src'], variant_dir='$BUILD_DIR/$PLATFORM/pasowrap', duplicate=0)
799  env.SConscript(dirs = ['dudley/src'], variant_dir='build/$PLATFORM/dudley', duplicate=0)  env.SConscript(dirs = ['dudley/src'], variant_dir='$BUILD_DIR/$PLATFORM/dudley', duplicate=0)
800  env.SConscript(dirs = ['finley/src'], variant_dir='build/$PLATFORM/finley', duplicate=0)  env.SConscript(dirs = ['finley/src'], variant_dir='$BUILD_DIR/$PLATFORM/finley', duplicate=0)
801  env.SConscript(dirs = ['modellib/py_src'], variant_dir='build/$PLATFORM/modellib', duplicate=0)  env.SConscript(dirs = ['ripley/src'], variant_dir='$BUILD_DIR/$PLATFORM/ripley', duplicate=0)
802  env.SConscript(dirs = ['doc'], variant_dir='build/$PLATFORM/doc', duplicate=0)  env.SConscript(dirs = ['modellib/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/modellib', duplicate=0)
803  env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='build/$PLATFORM/pyvisi', duplicate=0)  env.SConscript(dirs = ['doc'], variant_dir='$BUILD_DIR/$PLATFORM/doc', duplicate=0)
804  env.SConscript(dirs = ['pycad/py_src'], variant_dir='build/$PLATFORM/pycad', duplicate=0)  env.SConscript(dirs = ['pyvisi/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pyvisi', duplicate=0)
805  env.SConscript(dirs = ['pythonMPI/src'], variant_dir='build/$PLATFORM/pythonMPI', duplicate=0)  env.SConscript(dirs = ['pycad/py_src'], variant_dir='$BUILD_DIR/$PLATFORM/pycad', duplicate=0)
806  env.SConscript(dirs = ['paso/profiling'], variant_dir='build/$PLATFORM/paso/profiling', duplicate=0)  env.SConscript(dirs = ['pythonMPI/src'], variant_dir='$BUILD_DIR/$PLATFORM/pythonMPI', duplicate=0)
807    env.SConscript(dirs = ['paso/profiling'], variant_dir='$BUILD_DIR/$PLATFORM/paso/profiling', duplicate=0)
808    
809    
810  ######################## Populate the buildvars file #########################  ######################## Populate the buildvars file #########################
811    
# Line 667  except StopIteration: Line 826  except StopIteration:
826      pass      pass
827  boosthpp.close()  boosthpp.close()
828    
829    
830  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')  buildvars=open(os.path.join(env['libinstall'], 'buildvars'), 'w')
831  buildvars.write("svn_revision="+str(global_revision)+"\n")  buildvars.write("svn_revision="+str(global_revision)+"\n")
832  buildvars.write("prefix="+prefix+"\n")  buildvars.write("prefix="+prefix+"\n")
833  buildvars.write("cc="+env['CC']+"\n")  buildvars.write("cc="+env['CC']+"\n")
834  buildvars.write("cxx="+env['CXX']+"\n")  buildvars.write("cxx="+env['CXX']+"\n")
835  buildvars.write("python="+sys.executable+"\n")  if env['pythoncmd']=='python':
836  buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")      buildvars.write("python="+sys.executable+"\n")
837        buildvars.write("python_version="+str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])+"\n")
838    else:
839        buildvars.write("python="+env['pythoncmd']+"\n")
840        p=Popen([env['pythoncmd'], '-c', 'from __future__ import print_function;import sys;print(str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]))'], stdout=PIPE)
841        verstring=p.stdout.readline().strip()
842        p.wait()
843        buildvars.write("python_version="+verstring+"\n")
844  buildvars.write("boost_inc_path="+boost_inc_path+"\n")  buildvars.write("boost_inc_path="+boost_inc_path+"\n")
845  buildvars.write("boost_lib_path="+boost_lib_path+"\n")  buildvars.write("boost_lib_path="+boost_lib_path+"\n")
846  buildvars.write("boost_version="+boostversion+"\n")  buildvars.write("boost_version="+boostversion+"\n")
# Line 684  buildvars.write("mpi_inc_path=%s\n"%mpi_ Line 851  buildvars.write("mpi_inc_path=%s\n"%mpi_
851  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)  buildvars.write("mpi_lib_path=%s\n"%mpi_lib_path)
852  buildvars.write("lapack=%s\n"%env['lapack'])  buildvars.write("lapack=%s\n"%env['lapack'])
853  buildvars.write("pyvisi=%d\n"%env['pyvisi'])  buildvars.write("pyvisi=%d\n"%env['pyvisi'])
854  for i in 'netcdf','parmetis','papi','mkl','umfpack','silo','visit':  buildvars.write("vsl_random=%d\n"%int(env['vsl_random']))
855    for i in 'netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit':
856      buildvars.write("%s=%d\n"%(i, int(env[i])))      buildvars.write("%s=%d\n"%(i, int(env[i])))
857      if env[i]:      if env[i]:
858          buildvars.write("%s_inc_path=%s\n"%(i, eval(i+'_inc_path')))          buildvars.write("%s_inc_path=%s\n"%(i, eval(i+'_inc_path')))
# Line 693  buildvars.close() Line 861  buildvars.close()
861    
862  ################### Targets to build and install libraries ###################  ################### Targets to build and install libraries ###################
863    
864  target_init = env.Command(env['pyinstall']+'/__init__.py', None, Touch('$TARGET'))  target_init = env.Command(os.path.join(env['pyinstall'],'__init__.py'), None, Touch('$TARGET'))
865  env.Alias('target_init', [target_init])  env.Alias('target_init', [target_init])
866    # delete buildvars upon cleanup
867    env.Clean('target_init', os.path.join(env['libinstall'], 'buildvars'))
868    
869  # The headers have to be installed prior to build in order to satisfy  # The headers have to be installed prior to build in order to satisfy
870  # #include <paso/Common.h>  # #include <paso/Common.h>
# Line 707  env.Alias('install_paso', ['build_paso', Line 877  env.Alias('install_paso', ['build_paso',
877  env.Alias('build_escript', ['install_escript_headers', 'build_escript_lib', 'build_escriptcpp_lib'])  env.Alias('build_escript', ['install_escript_headers', 'build_escript_lib', 'build_escriptcpp_lib'])
878  env.Alias('install_escript', ['build_escript', 'install_escript_lib', 'install_escriptcpp_lib', 'install_escript_py'])  env.Alias('install_escript', ['build_escript', 'install_escript_lib', 'install_escriptcpp_lib', 'install_escript_py'])
879    
880    env.Alias('build_pasowrap', ['install_pasowrap_headers', 'build_pasowrap_lib', 'build_pasowrapcpp_lib'])
881    env.Alias('install_pasowrap', ['build_pasowrap', 'install_pasowrap_lib', 'install_pasowrapcpp_lib', 'install_pasowrap_py'])
882    
883  env.Alias('build_dudley', ['install_dudley_headers', 'build_dudley_lib', 'build_dudleycpp_lib'])  env.Alias('build_dudley', ['install_dudley_headers', 'build_dudley_lib', 'build_dudleycpp_lib'])
884  env.Alias('install_dudley', ['build_dudley', 'install_dudley_lib', 'install_dudleycpp_lib', 'install_dudley_py'])  env.Alias('install_dudley', ['build_dudley', 'install_dudley_lib', 'install_dudleycpp_lib', 'install_dudley_py'])
885    
886  env.Alias('build_finley', ['install_finley_headers', 'build_finley_lib', 'build_finleycpp_lib'])  env.Alias('build_finley', ['install_finley_headers', 'build_finley_lib', 'build_finleycpp_lib'])
887  env.Alias('install_finley', ['build_finley', 'install_finley_lib', 'install_finleycpp_lib', 'install_finley_py'])  env.Alias('install_finley', ['build_finley', 'install_finley_lib', 'install_finleycpp_lib', 'install_finley_py'])
888    
889    env.Alias('build_ripley', ['install_ripley_headers', 'build_ripley_lib', 'build_ripleycpp_lib'])
890    env.Alias('install_ripley', ['build_ripley', 'install_ripley_lib', 'install_ripleycpp_lib', 'install_ripley_py'])
891    
892  env.Alias('build_weipa', ['install_weipa_headers', 'build_weipa_lib', 'build_weipacpp_lib'])  env.Alias('build_weipa', ['install_weipa_headers', 'build_weipa_lib', 'build_weipacpp_lib'])
893  env.Alias('install_weipa', ['build_weipa', 'install_weipa_lib', 'install_weipacpp_lib', 'install_weipa_py'])  env.Alias('install_weipa', ['build_weipa', 'install_weipa_lib', 'install_weipacpp_lib', 'install_weipa_py'])
894    
# Line 724  build_all_list = [] Line 900  build_all_list = []
900  build_all_list += ['build_esysUtils']  build_all_list += ['build_esysUtils']
901  build_all_list += ['build_paso']  build_all_list += ['build_paso']
902  build_all_list += ['build_escript']  build_all_list += ['build_escript']
903    build_all_list += ['build_pasowrap']
904  build_all_list += ['build_dudley']  build_all_list += ['build_dudley']
905  build_all_list += ['build_finley']  build_all_list += ['build_finley']
906    build_all_list += ['build_ripley']
907  build_all_list += ['build_weipa']  build_all_list += ['build_weipa']
908  if not IS_WINDOWS: build_all_list += ['build_escriptreader']  if not IS_WINDOWS: build_all_list += ['build_escriptreader']
909  if env['usempi']:   build_all_list += ['build_pythonMPI']  if env['usempi']:   build_all_list += ['build_pythonMPI']
# Line 737  install_all_list += ['target_init'] Line 915  install_all_list += ['target_init']
915  install_all_list += ['install_esysUtils']  install_all_list += ['install_esysUtils']
916  install_all_list += ['install_paso']  install_all_list += ['install_paso']
917  install_all_list += ['install_escript']  install_all_list += ['install_escript']
918    install_all_list += ['install_pasowrap']
919  install_all_list += ['install_dudley']  install_all_list += ['install_dudley']
920  install_all_list += ['install_finley']  install_all_list += ['install_finley']
921    install_all_list += ['install_ripley']
922  install_all_list += ['install_weipa']  install_all_list += ['install_weipa']
923  if not IS_WINDOWS: install_all_list += ['install_escriptreader']  if not IS_WINDOWS: install_all_list += ['install_escriptreader']
924  install_all_list += ['install_pyvisi_py']  #install_all_list += ['install_pyvisi_py']
925  install_all_list += ['install_modellib_py']  install_all_list += ['install_modellib_py']
926  install_all_list += ['install_pycad_py']  install_all_list += ['install_pycad_py']
927  if env['usempi']:   install_all_list += ['install_pythonMPI']  if env['usempi']:   install_all_list += ['install_pythonMPI']
# Line 753  env.Default('install_all') Line 933  env.Default('install_all')
933    
934  ################## Targets to build and run the test suite ###################  ################## Targets to build and run the test suite ###################
935    
936  env.Alias('build_cppunittest', ['install_cppunittest_headers', 'build_cppunittest_lib'])  test_msg = env.Command('.dummy.', None, '@echo "Cannot run C/C++ unit tests, CppUnit not found!";exit 1')
937  env.Alias('install_cppunittest', ['build_cppunittest', 'install_cppunittest_lib'])  if not env['cppunit']:
938  env.Alias('run_tests', ['install_all', 'install_cppunittest_lib'])      env.Alias('run_tests', test_msg)
939  env.Alias('all_tests', ['install_all', 'install_cppunittest_lib', 'run_tests', 'py_tests'])  env.Alias('run_tests', ['install_all'])
940    env.Alias('all_tests', ['install_all', 'run_tests', 'py_tests'])
941  env.Alias('build_full',['install_all','build_tests','build_py_tests'])  env.Alias('build_full',['install_all','build_tests','build_py_tests'])
942  env.Alias('build_PasoTests','build/$PLATFORM/paso/profiling/PasoTests')  env.Alias('build_PasoTests','$BUILD_DIR/$PLATFORM/paso/profiling/PasoTests')
943    
944  ##################### Targets to build the documentation #####################  ##################### Targets to build the documentation #####################
945    
946  env.Alias('api_epydoc','install_all')  env.Alias('api_epydoc','install_all')
947  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'guide_pdf', 'guide_html','install_pdf', 'cookbook_pdf'])  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'user_pdf', 'install_pdf', 'cookbook_pdf'])
948  env.Alias('release_prep', ['docs', 'install_all'])  env.Alias('release_prep', ['docs', 'install_all'])
949    
950  if not IS_WINDOWS:  if not IS_WINDOWS:
951      try:      try:
952          utest=open('utest.sh','w')          utest=open('utest.sh','w')
953          utest.write(GroupTest.makeHeader(env['PLATFORM']))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))
954          for tests in TestGroups:          for tests in TestGroups:
955              utest.write(tests.makeString())              utest.write(tests.makeString())
956          utest.close()          utest.close()
957          Execute(Chmod('utest.sh', 0755))          Execute(Chmod('utest.sh', 0o755))
958          print("Generated utest.sh.")          print("Generated utest.sh.")
959      except IOError:      except IOError:
960          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
961          Exit(1)          Exit(1)
962    
963        # delete utest.sh upon cleanup
964        env.Clean('target_init', 'utest.sh')
965    
966      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
967      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):
968          print("Copying escript wrapper.")          print("Copying escript wrapper.")
969          Execute(Copy(os.path.join(env['bininstall'],'escript'), 'bin/run-escript'))          Execute(Copy(os.path.join(env['bininstall'],'run-escript'), 'bin/run-escript'))
970    

Legend:
Removed from v.3271  
changed lines
  Added in v.3896

  ViewVC Help
Powered by ViewVC 1.1.26