/[escript]/branches/diaplayground/SConstruct
ViewVC logotype

Diff of /branches/diaplayground/SConstruct

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

revision 3961 by jfenwick, Tue Sep 11 07:21:41 2012 UTC revision 4244 by jfenwick, Mon Feb 25 05:37:50 2013 UTC
# Line 1  Line 1 
1  ########################################################  ##############################################################################
2  #  #
3  # Copyright (c) 2003-2012 by University of Queensland  # Copyright (c) 2003-2013 by University of Queensland
4  # Earth Systems Science Computational Center (ESSCC)  # http://www.uq.edu.au
 # http://www.uq.edu.au/esscc  
5  #  #
6  # Primary Business: Queensland, Australia  # Primary Business: Queensland, Australia
7  # Licensed under the Open Software License version 3.0  # Licensed under the Open Software License version 3.0
8  # http://www.opensource.org/licenses/osl-3.0.php  # http://www.opensource.org/licenses/osl-3.0.php
9  #  #
10  ########################################################  # Development until 2012 by Earth Systems Science Computational Center (ESSCC)
11    # Development since 2012 by School of Earth Sciences
12    #
13    ##############################################################################
14    
15  EnsureSConsVersion(0,98,1)  EnsureSConsVersion(0,98,1)
16  EnsurePythonVersion(2,5)  EnsurePythonVersion(2,5)
# Line 16  EnsurePythonVersion(2,5) Line 18  EnsurePythonVersion(2,5)
18  import sys, os, platform, re  import sys, os, platform, re
19  from distutils import sysconfig  from distutils import sysconfig
20  from site_init import *  from site_init import *
 import subprocess  
21  from subprocess import PIPE, Popen  from subprocess import PIPE, Popen
22    
23  # 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
# Line 144  vars.AddVariables( Line 145  vars.AddVariables(
145  # in default locations.  # in default locations.
146  env = Environment(tools = ['default'], options = vars,  env = Environment(tools = ['default'], options = vars,
147                    ENV = {'PATH': os.environ['PATH']})                    ENV = {'PATH': os.environ['PATH']})
148                      
149    
150    #set the vars for clang
151    def mkclang(env):
152      env['CC']='clang'
153      env['CXX']='clang++'
154                      
155                      
156  if env['tools_names'] != 'default':  if env['tools_names'] != 'default':
157        zz=env['tools_names']
158        if 'clang' in zz:
159            zz.remove('clang')
160            zz.insert(0, mkclang)
161      env = Environment(tools = ['default'] + env['tools_names'], options = vars,      env = Environment(tools = ['default'] + env['tools_names'], options = vars,
162                        ENV = {'PATH' : os.environ['PATH']})                        ENV = {'PATH' : os.environ['PATH']})
163    
# Line 172  if len(vars.UnknownVariables())>0: Line 185  if len(vars.UnknownVariables())>0:
185    
186  #################### Make sure install directories exist #####################  #################### Make sure install directories exist #####################
187    
188  env['BUILD_DIR']=env['build_dir']  env['BUILD_DIR']=Dir(env['build_dir']).abspath
189  prefix=Dir(env['prefix']).abspath  prefix=Dir(env['prefix']).abspath
190  env['incinstall'] = os.path.join(prefix, 'include')  env['incinstall'] = os.path.join(prefix, 'include')
191  env['bininstall'] = os.path.join(prefix, 'bin')  env['bininstall'] = os.path.join(prefix, 'bin')
# Line 212  cc_name=os.path.basename(env['CC']) Line 225  cc_name=os.path.basename(env['CC'])
225    
226  if cc_name == 'icc':  if cc_name == 'icc':
227      # Intel compiler      # Intel compiler
228      cc_flags    = "-std=c99 -fPIC -wd161 -w1 -vec-report0 -DBLOCKTIMER -DCORE_ID1"      # #1875: offsetof applied to non-POD types is nonstandard (in boost)
229      cc_optim    = "-O3 -ftz -IPF_ftlacc- -IPF_fma -fno-alias -ip"      cc_flags    = "-std=c99 -fPIC -w2 -wd1875 -Wno-unknown-pragmas -DBLOCKTIMER -DCORE_ID1"
230        cc_optim    = "-O3 -ftz -fno-alias -ipo -xHost"
231      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug    = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
232      omp_flags   = "-openmp -openmp_report0"      omp_flags   = "-openmp"
233      omp_ldflags = "-openmp -openmp_report0 -lpthread"      omp_ldflags = "-openmp -openmp_report=1"
234      fatalwarning = "-Werror"      fatalwarning = "-Werror"
235  elif cc_name[:3] == 'gcc':  elif cc_name[:3] == 'gcc':
236      # GNU C on any system      # GNU C on any system
237      cc_flags     = "-pedantic -Wall -fPIC -ffast-math -Wno-unknown-pragmas -DBLOCKTIMER  -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing -finline-functions"      # note that -ffast-math is not used because it breaks isnan(),
238        # see mantis #691
239        cc_flags     = "-pedantic -Wall -fPIC -Wno-unknown-pragmas -DBLOCKTIMER  -Wno-sign-compare -Wno-system-headers -Wno-long-long -Wno-strict-aliasing -finline-functions"
240      cc_optim     = "-O3"      cc_optim     = "-O3"
241      cc_debug     = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"      cc_debug     = "-g -O0 -DDOASSERT -DDOPROF -DBOUNDS_CHECK"
242      omp_flags    = "-fopenmp"      omp_flags    = "-fopenmp"
# Line 337  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N Line 353  for key in 'OMP_NUM_THREADS', 'ESCRIPT_N
353          env['ENV'][key] = 1          env['ENV'][key] = 1
354    
355  env_export=env['env_export']  env_export=env['env_export']
356  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','TMPDIR','TEMP','TMP'])  env_export.extend(['ESCRIPT_NUM_THREADS','ESCRIPT_HOSTFILE','DISPLAY','XAUTHORITY','PATH','HOME','KMP_MONITOR_STACKSIZE','TMPDIR','TEMP','TMP'])
357    
358  for key in set(env_export):  for key in set(env_export):
359      try:      try:
# Line 526  env.PrependENVPath(LD_LIBRARY_PATH_KEY, Line 542  env.PrependENVPath(LD_LIBRARY_PATH_KEY,
542    
543  ######## numpy (required)  ######## numpy (required)
544    
545  if env['pythoncmd']=='python':  if not detectModule(env, 'numpy'):
546      try:      print("Cannot import numpy. If it is installed try setting your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)
547        from numpy import identity      Exit(1)
     except ImportError:  
       print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
       Exit(1)  
 else:  
     p=subprocess.call([env['pythoncmd'],'-c','import numpy'])  
     if p!=0:  
       print("Cannot import numpy, you need to set your PYTHONPATH and probably %s"%LD_LIBRARY_PATH_KEY)  
       Exit(1)  
548    
549  ######## CppUnit (required for tests)  ######## CppUnit (required for tests)
550    
# Line 549  try: Line 557  try:
557  except:  except:
558      env['cppunit']=False      env['cppunit']=False
559    
560    ######## sympy (optional)
561    
562    if detectModule(env, 'sympy'):
563        env['sympy'] = True
564    else:
565        print("Cannot import sympy. Symbolic toolbox and nonlinear PDEs will not be available.")
566        env['sympy'] = False
567    
568    ######## pyproj (optional)
569    
570    if detectModule(env, 'pyproj'):
571        env['pyproj'] = True
572    else:
573        print("Cannot import pyproj. Inversions may not work.")
574        env['pyproj'] = False
575    
576  ######## netCDF (optional)  ######## netCDF (optional)
577    
578  netcdf_inc_path=''  netcdf_inc_path=''
# Line 694  if env['parmetis']: Line 718  if env['parmetis']:
718  ######## gmsh (optional, for tests)  ######## gmsh (optional, for tests)
719    
720  try:  try:
721      import subprocess      p=Popen(['gmsh', '-info'], stderr=PIPE)
     p=subprocess.Popen(['gmsh', '-info'], stderr=subprocess.PIPE)  
722      _,e=p.communicate()      _,e=p.communicate()
723      if e.split().count("MPI"):      if e.split().count("MPI"):
724          env['gmsh']='m'          env['gmsh']='m'
# Line 748  else: Line 771  else:
771      print("          LAPACK:  DISABLED")      print("          LAPACK:  DISABLED")
772  d_list=[]  d_list=[]
773  e_list=[]  e_list=[]
774  for i in 'debug','openmp','netcdf','parmetis','papi','mkl','umfpack','boomeramg','silo','visit','vsl_random':  for i in 'debug','openmp','boomeramg','mkl','netcdf','papi','parmetis','pyproj','silo','sympy','umfpack','visit','vsl_random':
775      if env[i]: e_list.append(i)      if env[i]: e_list.append(i)
776      else: d_list.append(i)      else: d_list.append(i)
777  for i in e_list:  for i in e_list:
# Line 951  env.Alias('build_PasoTests','$BUILD_DIR/ Line 974  env.Alias('build_PasoTests','$BUILD_DIR/
974    
975  ##################### Targets to build the documentation #####################  ##################### Targets to build the documentation #####################
976    
977  env.Alias('api_epydoc','install_all')  env.Alias('pdfdocs',['user_pdf', 'install_pdf', 'cookbook_pdf', 'inversion_pdf'])
978  env.Alias('docs', ['examples_tarfile', 'examples_zipfile', 'api_epydoc', 'api_doxygen', 'user_pdf', 'install_pdf', 'cookbook_pdf'])  env.Alias('basedocs', ['pdfdocs','examples_tarfile', 'examples_zipfile', 'api_doxygen'])
979    env.Alias('docs', ['basedocs', 'sphinxdoc'])
980  env.Alias('release_prep', ['docs', 'install_all'])  env.Alias('release_prep', ['docs', 'install_all'])
981    env.Alias('release_prep_old', ['basedocs', 'api_epydoc', 'install_all'])
982    
983    
984    # The test scripts are always generated, this target allows us to
985    # generate the testscripts without doing a full build
986    env.Alias('testscripts',[])
987    
988  if not IS_WINDOWS:  if not IS_WINDOWS:
989      try:      try:
990          utest=open('utest.sh','w')          utest=open('utest.sh','w')
991          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix))          utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix, False))
992          for tests in TestGroups:          for tests in TestGroups:
993              utest.write(tests.makeString())              utest.write(tests.makeString())
994          utest.close()          utest.close()
995          Execute(Chmod('utest.sh', 0o755))          Execute(Chmod('utest.sh', 0o755))
996          print("Generated utest.sh.")          print("Generated utest.sh.")
997            # This version contains only python tests - I want this to be usable
998            # From a binary only install if you have the test files
999            utest=open('itest.sh','w')
1000            utest.write(GroupTest.makeHeader(env['PLATFORM'], prefix, True))
1001            for tests in TestGroups:
1002              if tests.exec_cmd=='$PYTHONRUNNER ':
1003                utest.write(tests.makeString())
1004            utest.close()
1005            Execute(Chmod('itest.sh', 0o755))
1006            print("Generated itest.sh.")        
1007      except IOError:      except IOError:
1008          print("Error attempting to write unittests file.")          print("Error attempting to write unittests file.")
1009          Exit(1)          Exit(1)
1010    
1011      # delete utest.sh upon cleanup      # delete utest.sh upon cleanup
1012      env.Clean('target_init', 'utest.sh')      env.Clean('target_init', 'utest.sh')
1013        env.Clean('target_init', 'itest.sh')
1014    
1015      # Make sure that the escript wrapper is in place      # Make sure that the escript wrapper is in place
1016      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):      if not os.path.isfile(os.path.join(env['bininstall'], 'run-escript')):

Legend:
Removed from v.3961  
changed lines
  Added in v.4244

  ViewVC Help
Powered by ViewVC 1.1.26