[Numpy-svn] r4490 - in branches/numpy.scons: . numpy/distutils/scons numpy/distutils/scons/checkers numpy/scons_fake/checkers

numpy-svn@scip... numpy-svn@scip...
Thu Nov 22 06:34:06 CST 2007


Author: cdavid
Date: 2007-11-22 06:33:55 -0600 (Thu, 22 Nov 2007)
New Revision: 4490

Modified:
   branches/numpy.scons/numpy/distutils/scons/__init__.py
   branches/numpy.scons/numpy/distutils/scons/checkers/custom_checkers.py
   branches/numpy.scons/numpy/distutils/scons/checkers/perflib.py
   branches/numpy.scons/numpy/scons_fake/checkers/SConstruct
   branches/numpy.scons/test.sh
Log:
More work on perflib version checkers: implement version getters for atlas/mkl

Modified: branches/numpy.scons/numpy/distutils/scons/__init__.py
===================================================================
--- branches/numpy.scons/numpy/distutils/scons/__init__.py	2007-11-22 08:34:00 UTC (rev 4489)
+++ branches/numpy.scons/numpy/distutils/scons/__init__.py	2007-11-22 12:33:55 UTC (rev 4490)
@@ -6,6 +6,7 @@
 
 from checkers import CheckCBLAS, CheckCLAPACK, CheckF77BLAS, CheckF77LAPACK, \
                      IsMKL, IsATLAS, IsVeclib, IsAccelerate, IsSunperf
+from checkers.perflib import GetATLASVersion, GetMKLVersion
 
 from fortran_scons import CheckF77Verbose, CheckF77Clib, CheckF77Mangling
 

Modified: branches/numpy.scons/numpy/distutils/scons/checkers/custom_checkers.py
===================================================================
--- branches/numpy.scons/numpy/distutils/scons/checkers/custom_checkers.py	2007-11-22 08:34:00 UTC (rev 4489)
+++ branches/numpy.scons/numpy/distutils/scons/checkers/custom_checkers.py	2007-11-22 12:33:55 UTC (rev 4490)
@@ -1,5 +1,5 @@
 #! /usr/bin/env python
-# Last Change: Thu Nov 22 04:00 PM 2007 J
+# Last Change: Thu Nov 22 05:00 PM 2007 J
 
 # Module for custom, common checkers for numpy (and scipy)
 import sys
@@ -22,13 +22,13 @@
 # exception for LAPACK). So shall we make the difference between BLAS, CBLAS,
 # LAPACK and CLAPACK ? How to test for fortran ?
 
-def CheckCBLAS(context, autoadd = 1):
+def CheckCBLAS(context, autoadd = 1, check_version = 0):
     """This checker tries to find optimized library for cblas."""
     libname = 'cblas'
     env = context.env
 
     def check(func, name, suplibs):
-        st, res = func(context, autoadd)
+        st, res = func(context, autoadd, check_version)
         if st:
             for lib in suplibs:
                 res.cfgopts['libs'].insert(0, lib)
@@ -77,7 +77,7 @@
     add_info(env, libname, None)
     return 0
 
-def CheckF77BLAS(context, autoadd = 1):
+def CheckF77BLAS(context, autoadd = 1, check_version = 0):
     """This checker tries to find optimized library for blas (fortran F77)."""
     libname = 'blas'
     env = context.env
@@ -92,7 +92,7 @@
     test_src = c_sgemm2 % {'func' : func_name}
 
     def check(func, name, suplibs):
-        st, res = func(context, autoadd)
+        st, res = func(context, autoadd, check_version)
         if st:
             for lib in suplibs:
                 res.cfgopts['libs'].insert(0, lib)
@@ -143,7 +143,7 @@
     add_info(env, libname, None)
     return 0
 
-def CheckF77LAPACK(context, autoadd = 1):
+def CheckF77LAPACK(context, autoadd = 1, check_version = 0):
     """This checker tries to find optimized library for F77 lapack.
 
     This test is pretty strong: it first detects an optimized library, and then
@@ -167,7 +167,7 @@
     def check(func, name, suplibs):
         # func is the perflib checker, name the printed name for the check, and
         # suplibs a list of libraries to link in addition.
-        st, res = func(context, autoadd)
+        st, res = func(context, autoadd, check_version)
         if st:
             for lib in suplibs:
                 res.cfgopts['libs'].insert(0, lib)
@@ -226,7 +226,7 @@
     add_info(env, libname, None)
     return 0
 
-def CheckCLAPACK(context, autoadd = 1):
+def CheckCLAPACK(context, autoadd = 1, check_version = 0):
     """This checker tries to find optimized library for lapack.
 
     This test is pretty strong: it first detects an optimized library, and then

Modified: branches/numpy.scons/numpy/distutils/scons/checkers/perflib.py
===================================================================
--- branches/numpy.scons/numpy/distutils/scons/checkers/perflib.py	2007-11-22 08:34:00 UTC (rev 4489)
+++ branches/numpy.scons/numpy/distutils/scons/checkers/perflib.py	2007-11-22 12:33:55 UTC (rev 4490)
@@ -93,6 +93,24 @@
     def get_func(self):
         return self.func
 
+class GetVersionFactory:
+    def __init__(self, name):
+        """Name should be one key of _CONFIG."""
+        try:
+            _CONFIG[name]
+        except KeyError, e:
+            raise RuntimeError("name %s is unknown")
+
+        def f(env, libname):
+            if env['NUMPY_PKG_CONFIG'][libname] is None:
+                return 'No version info'
+            else:
+                return env['NUMPY_PKG_CONFIG'][libname].version
+        self.func = f
+
+    def get_func(self):
+        return self.func
+
 #------------------------
 # Generic functionalities
 #------------------------
@@ -166,7 +184,7 @@
     # Check version if requested
     if check_version:
         if version_checker:
-            vst, v = version_checker(env, opts)
+            vst, v = version_checker(context, opts)
             if vst:
                 version = v
             else:
@@ -182,7 +200,8 @@
 #--------------
 # MKL checker
 #--------------
-def _mkl_version_checker(env, opts):
+def _mkl_version_checker(context, opts):
+    env = context.env
     version_code = r"""
 #include <stdio.h>
 #include <mkl.h>
@@ -207,8 +226,10 @@
     finally:
         restore(env, saved)
 
-    if vst and re.search(r'Full version: (\d+[.]\d+[.]\d+)', out):
-        version = m.group(1)
+    if vst:
+        m = re.search(r'Full version: (\d+[.]\d+[.]\d+)', out)
+        if m:
+            version = m.group(1)
     else:
         version = ''
 
@@ -221,11 +242,13 @@
                   cfg.funcs, check_version, _mkl_version_checker, autoadd)
 
 IsMKL = IsFactory('MKL').get_func()
+GetMKLVersion = GetVersionFactory('MKL').get_func()
 
 #---------------
 # ATLAS Checker
 #---------------
-def _atlas_version_checker(env, opts):
+def _atlas_version_checker(context, opts):
+    env = context.env
     version_code = """
 void ATL_buildinfo(void);
 int main(void) {
@@ -259,6 +282,7 @@
                   cfg.funcs, check_version, _atlas_version_checker, autoadd)
 
 IsATLAS = IsFactory('ATLAS').get_func()
+GetATLASVersion = GetVersionFactory('ATLAS').get_func()
 
 #------------------------------
 # Mac OS X Frameworks checkers

Modified: branches/numpy.scons/numpy/scons_fake/checkers/SConstruct
===================================================================
--- branches/numpy.scons/numpy/scons_fake/checkers/SConstruct	2007-11-22 08:34:00 UTC (rev 4489)
+++ branches/numpy.scons/numpy/scons_fake/checkers/SConstruct	2007-11-22 12:33:55 UTC (rev 4490)
@@ -1,7 +1,8 @@
 # vim:syntax=python
 from numpy.distutils.scons import GetNumpyEnvironment
 from numpy.distutils.scons.checkers.perflib import \
-        CheckATLAS, CheckAccelerate, CheckMKL, CheckSunperf
+        CheckATLAS, CheckAccelerate, CheckMKL, CheckSunperf,\
+        IsMKL, IsATLAS, IsAccelerate, GetATLASVersion
 from numpy.distutils.scons.checkers.custom_checkers import CheckCBLAS, \
         CheckCLAPACK, CheckF77BLAS, CheckF77LAPACK
 from numpy.distutils.scons import CheckF77Mangling
@@ -38,6 +39,11 @@
     st = config.CheckCLAPACK(autoadd = 0)
     st = config.CheckF77Mangling()
 
+    print "Is blas MKL ? %s" % IsMKL(env, 'blas')
+    print "Is cblas MKL ? %s" % IsMKL(env, 'cblas')
+    print "Is blas ATLAS ? %s" % IsATLAS(env, 'blas')
+    print "Is cblas ATLAS ? %s" % IsATLAS(env, 'cblas')
+
     if env.has_key('LIBS'):
         print "LIBS of env is %s" % env.Dump('LIBS')
     else:

Modified: branches/numpy.scons/test.sh
===================================================================
--- branches/numpy.scons/test.sh	2007-11-22 08:34:00 UTC (rev 4489)
+++ branches/numpy.scons/test.sh	2007-11-22 12:33:55 UTC (rev 4490)
@@ -4,15 +4,15 @@
 # MKL=None python setupscons.py scons --jobs=4 install --prefix=$PREFIX/tmp
 # (cd $PREFIX/tmp && PYTHONPATH=$PREFIX/tmp/lib/python2.5/site-packages python -c "import numpy; print numpy; numpy.test(level = 9999); numpy.show_config()")
 
+PREFIX=$PWD
+rm -rf $PREFIX/build
+rm -rf $PREFIX/tmp
+ATLAS=None python setupscons.py scons --jobs=4 install --prefix=$PREFIX/tmp
+(cd $PREFIX/tmp && PYTHONPATH=$PREFIX/tmp/lib/python2.5/site-packages python -c "import numpy; print numpy; numpy.test(level = 9999); numpy.show_config()")
+
 # PREFIX=$PWD
-# rm -rf $PREFIX/build
-# rm -rf $PREFIX/tmp
-# python setupscons.py scons --jobs=4 install --prefix=$PREFIX/tmp
-# (cd $PREFIX/tmp && PYTHONPATH=$PREFIX/tmp/lib/python2.5/site-packages python -c "import numpy; print numpy; numpy.test(level = 9999); numpy.show_config()")
-
-PREFIX=$PWD
-#rm -rf $PREFIX/build
-#rm -rf $PREFIX/tmp
-MKL=None python setupscons.py scons --jobs=4 --silent=2 install --prefix=$PREFIX/tmp
-(cd $PREFIX/tmp/lib/python2.5/site-packages/numpy/distutils/scons/tests/f2pyext/ && \
- PYTHONPATH=$PREFIX/tmp/lib/python2.5/site-packages python setup.py scons)
+# #rm -rf $PREFIX/build
+# #rm -rf $PREFIX/tmp
+# MKL=None python setupscons.py scons --jobs=4 --silent=2 install --prefix=$PREFIX/tmp
+# (cd $PREFIX/tmp/lib/python2.5/site-packages/numpy/distutils/scons/tests/f2pyext/ && \
+#  PYTHONPATH=$PREFIX/tmp/lib/python2.5/site-packages python setup.py scons)



More information about the Numpy-svn mailing list