[Scipy-svn] r3975 - in branches/build_with_scons/scipy: . linalg

scipy-svn at scipy.org scipy-svn at scipy.org
Wed Mar 5 02:28:22 EST 2008


Author: cdavid
Date: 2008-03-05 01:28:08 -0600 (Wed, 05 Mar 2008)
New Revision: 3975

Added:
   branches/build_with_scons/scipy/linalg/SConstruct
   branches/build_with_scons/scipy/linalg/scons_support.py
   branches/build_with_scons/scipy/linalg/setupscons.py
Modified:
   branches/build_with_scons/scipy/setupscons.py
Log:
linalg now builds with numscons.

Added: branches/build_with_scons/scipy/linalg/SConstruct
===================================================================
--- branches/build_with_scons/scipy/linalg/SConstruct	2008-03-05 07:00:10 UTC (rev 3974)
+++ branches/build_with_scons/scipy/linalg/SConstruct	2008-03-05 07:28:08 UTC (rev 3975)
@@ -0,0 +1,148 @@
+# Last Change: Wed Mar 05 03:00 PM 2008 J
+# vim:syntax=python
+
+import os
+from os.path import join as pjoin, splitext
+
+from numpy.distutils.misc_util import get_numpy_include_dirs
+from numscons import get_python_inc#, get_pythonlib_dir
+from numscons import GetNumpyEnvironment
+from numscons import CheckCBLAS, CheckF77BLAS, CheckF77LAPACK,\
+                                  CheckCLAPACK, IsVeclib, IsAccelerate, \
+                                  IsATLAS, GetATLASVersion, CheckF77Clib
+from numscons import write_info
+
+from scons_support import do_generate_interface, do_generate_fake_interface, \
+                          generate_interface_emitter
+
+#from scons_support import CheckBrokenMathlib, define_no_smp, \
+#    generate_config_header, generate_config_header_emitter
+
+env = GetNumpyEnvironment(ARGUMENTS)
+env.Append(CPPPATH = [get_python_inc(), get_numpy_include_dirs()])
+#if os.name == 'nt':
+#    # NT needs the pythonlib to run any code importing Python.h, including
+#    # simple code using only typedef and so on, so we need it for configuration
+#    # checks
+#    env.AppendUnique(LIBPATH = [get_pythonlib_dir()])
+
+#=======================
+# Starting Configuration
+#=======================
+config = env.NumpyConfigure(custom_tests = {'CheckCBLAS' : CheckCBLAS,
+                                            'CheckBLAS' : CheckF77BLAS,
+                                            'CheckCLAPACK' : CheckCLAPACK,
+                                            'CheckLAPACK' : CheckF77LAPACK,
+                                            'CheckF77Clib' : CheckF77Clib})
+
+#--------------
+# Checking Blas
+#--------------
+if not config.CheckF77Clib():
+    raise RuntimeError("Could not check F/C runtime library for %s/%s, " \
+                       "contact the maintainer" % (env['CC'], env['F77']))
+
+st = config.CheckBLAS(check_version = 1)
+if not st:
+    raise RuntimeError("no blas found, necessary for linalg module")
+if IsATLAS(env, 'blas'):
+    version = GetATLASVersion(env)
+    env.Append(CPPDEFINES = [('ATLAS_INFO', '"\\"%s"\\"' % version)])
+else:
+    env.Append(CPPDEFINES = [('NO_ATLAS_INFO', 1)])
+
+st = config.CheckLAPACK()
+if not st:
+    raise RuntimeError("no lapack found, necessary for linalg module")
+
+if config.CheckCBLAS():
+    has_cblas = 1
+else:
+    has_cblas = 0
+
+if config.CheckCLAPACK():
+    has_clapack = 1
+else:
+    has_clapack = 0
+
+config.Finish()
+write_info(env)
+
+#==========
+#  Build
+#==========
+
+# XXX: handle cblas wrapper for complex (check in numpy.scons or here ?)
+env.AppendUnique(CPPPATH = env['F2PYINCLUDEDIR'])
+env.AppendUnique(F2PYOPTIONS = '--quiet')
+
+env['BUILDERS']['haha'] = Builder(action = do_generate_interface,
+                                  emitter = generate_interface_emitter)
+
+env['BUILDERS']['hihi'] = Builder(action = do_generate_fake_interface,
+                                  emitter = generate_interface_emitter)
+
+#------------
+#   fblas
+#------------
+env.haha('fblas', 'generic_fblas.pyf')
+source = ['fblas.pyf']
+if IsVeclib(env, 'blas') or IsAccelerate(env, 'blas'):
+    source.append(pjoin('src', 'fblaswrap_veclib_c.c'))
+else:
+    source.append(pjoin('src', 'fblaswrap.f'))
+env.NumpyPythonExtension('fblas', source)
+
+#------------
+#   cblas
+#------------
+if has_cblas:
+    env.haha('cblas', 'generic_cblas.pyf')
+else:
+    env.hihi('cblas', 'generic_cblas.pyf')
+env.NumpyPythonExtension('cblas', source = 'cblas.pyf')
+
+#------------
+#   flapack
+#------------
+yop = env.haha('flapack', 'generic_flapack.pyf')
+# XXX: automatically scan dependency on flapack_user_routines.pyf ?
+env.Depends(yop, pjoin(env['build_dir'], 'flapack_user_routines.pyf'))
+env.NumpyPythonExtension('flapack', source = ['flapack.pyf'])
+
+#------------
+#   clapack
+#------------
+if has_clapack:
+    env.haha('clapack', 'generic_clapack.pyf')
+else:
+    env.hihi('clapack', 'generic_clapack.pyf')
+env.NumpyPythonExtension('clapack', source = 'clapack.pyf')
+
+#----------------
+#   _flinalg
+#----------------
+_flinalg_fsrc = ['det.f', 'lu.f']
+_flinalg_src = env.F2py(
+    pjoin(env['build_dir'], 'src', '_flinalgmodule.c'), 
+    source = [pjoin(env['build_dir'], 'src', i) for i in _flinalg_fsrc])
+
+env.NumpyPythonExtension(
+    '_flinalg', source = _flinalg_src + [pjoin('src', i) for i in _flinalg_fsrc])
+
+#----------------
+# calc_lwork:
+#----------------
+calc_src = env.F2py(pjoin(env['build_dir'], 'src', 'calc_lworkmodule.c'), 
+                    source = pjoin(env['build_dir'], 'src', 'calc_lwork.f'))
+env.NumpyPythonExtension('calc_lwork', 
+                         source = calc_src + [pjoin('src', 'calc_lwork.f')],
+                         LINKFLAGSEND = env['F77_LDFLAGS'])
+
+#--------------
+# Atlas version
+#--------------
+atlas_env = env.Copy()
+if not IsATLAS(env, 'blas'):
+    atlas_env.AppendUnique(CPPDEFINES = "NO_ATLAS_INFO")
+atlas_env.NumpyPythonExtension('atlas_version', 'atlas_version.c')

Added: branches/build_with_scons/scipy/linalg/scons_support.py
===================================================================
--- branches/build_with_scons/scipy/linalg/scons_support.py	2008-03-05 07:00:10 UTC (rev 3974)
+++ branches/build_with_scons/scipy/linalg/scons_support.py	2008-03-05 07:28:08 UTC (rev 3975)
@@ -0,0 +1,43 @@
+from os.path import join as pjoin, splitext, basename as pbasename
+
+from interface_gen import generate_interface
+
+def do_generate_interface(target, source, env):
+    """Generate a .pyf file from another pyf file (!)."""
+    # XXX: do this correctly
+    target_name = str(target[0])
+    source_name = str(source[0])
+
+    # XXX handle skip names
+    name = splitext(pbasename(target_name))[0]
+    generate_interface(name, source_name, target_name)
+    return 0
+
+def generate_interface_emitter(target, source, env):
+    source = [pjoin(env['build_dir'], str(i)) for i in source]
+    target = [pjoin(env['build_dir'], str(i)) for i in target]
+    base = str(target[0])
+    return (['%s.pyf' % base], source)
+
+def do_generate_fake_interface(target, source, env):
+    """Generate a (fake) .pyf file from another pyf file (!)."""
+    # XXX: do this correctly
+    target_name = str(target[0])
+    source_name = str(source[0])
+
+    # XXX handle skip names
+    name = splitext(pbasename(target_name))[0]
+    generate_interface(name, source_name, target_name)
+        
+    f = open(target_name, 'w')
+    f.write('python module '+name+'\n')
+    f.write('usercode void empty_module(void) {}\n')
+    f.write('interface\n')
+    f.write('subroutine empty_module()\n')
+    f.write('intent(c) empty_module\n')
+    f.write('end subroutine empty_module\n')
+    f.write('end interface\nend python module'+name+'\n')
+    f.close()
+
+    return 0
+

Copied: branches/build_with_scons/scipy/linalg/setupscons.py (from rev 3969, branches/build_with_scons/scipy/linalg/setup.py)
===================================================================
--- branches/build_with_scons/scipy/linalg/setup.py	2008-03-05 02:13:58 UTC (rev 3969)
+++ branches/build_with_scons/scipy/linalg/setupscons.py	2008-03-05 07:28:08 UTC (rev 3975)
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+
+def configuration(parent_package='',top_path=None):
+    from numpy.distutils.misc_util import Configuration
+
+    config = Configuration('linalg',parent_package,top_path)
+
+    config.add_sconscript('SConstruct')
+    config.add_data_dir('tests')
+
+    return config
+
+if __name__ == '__main__':
+    from numpy.distutils.core import setup
+    from linalg_version import linalg_version
+
+    setup(version=linalg_version,
+          **configuration(top_path='').todict())

Modified: branches/build_with_scons/scipy/setupscons.py
===================================================================
--- branches/build_with_scons/scipy/setupscons.py	2008-03-05 07:00:10 UTC (rev 3974)
+++ branches/build_with_scons/scipy/setupscons.py	2008-03-05 07:28:08 UTC (rev 3975)
@@ -8,7 +8,7 @@
     config.add_subpackage('interpolate')
     config.add_subpackage('io')
     config.add_subpackage('lib')
-    #config.add_subpackage('linalg')
+    config.add_subpackage('linalg')
     #config.add_subpackage('linsolve')
     #config.add_subpackage('maxentropy')
     #config.add_subpackage('misc')




More information about the Scipy-svn mailing list