From 7cb4c2815d57fa2d567d88ef615ae650c40f9e3d Mon Sep 17 00:00:00 2001
From: Fabian Pedregosa <fabian.pedregosa@inria.fr>
Date: Thu, 22 Apr 2010 12:17:56 +0000
Subject: [PATCH] Use syste-wide BLAS libraries if available.

git-svn-id: https://scikit-learn.svn.sourceforge.net/svnroot/scikit-learn/trunk@689 22fbfee3-77ab-4535-9bad-27d1bd3bc7d8
---
 scikits/learn/setup.py | 44 ++++++++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 15 deletions(-)

diff --git a/scikits/learn/setup.py b/scikits/learn/setup.py
index ad31b1f889..6742d075cc 100644
--- a/scikits/learn/setup.py
+++ b/scikits/learn/setup.py
@@ -1,9 +1,12 @@
 from os.path import join
+import warnings
 import numpy
 
 def configuration(parent_package='',top_path=None):
     from numpy.distutils.misc_util import Configuration
+    from numpy.distutils.system_info import get_info, BlasNotFoundError
     config = Configuration('learn',parent_package,top_path)
+
     config.add_subpackage('em')
     config.add_subpackage('datasets')
     config.add_subpackage('feature_selection')
@@ -18,30 +21,41 @@ def configuration(parent_package='',top_path=None):
                          depends=[join('src', 'svm.h'),
                                  join('src', 'libsvm_helper.c'),
                                   ])
+
+    ### liblinear module
+    blas_sources = [join('src', 'blas', 'daxpy.c'),
+                    join('src', 'blas', 'ddot.c'),
+                    join('src', 'blas', 'dnrm2.c'),
+                    join('src', 'blas', 'dscal.c')]
+
+    liblinear_sources = [join('src', 'linear.cpp'),
+                         join('src', 'liblinear.c'),
+                         join('src', 'tron.cpp')]
+
+    # we try to link agains system-wide blas
+    blas_info = get_info('blas_opt')
+    if not blas_info:
+        warnings.warn(BlasNotFoundError.__doc__)
+        liblinear_souces.append(blas_sources)
+
     config.add_extension('liblinear',
-                         sources=[join('src', 'linear.cpp'), 
-                                  join('src', 'liblinear.c'),
-                                  join('src', 'tron.cpp'),
-                                  join('src', 'blas', 'daxpy.c'),
-                                  join('src', 'blas', 'ddot.c'),
-                                  join('src', 'blas', 'dnrm2.c'),
-                                  join('src', 'blas', 'dscal.c'),                                  
-                                  ],
-                         include_dirs=[numpy.get_include()],
+                         sources=liblinear_sources,
+                         libraries = blas_info.pop('libraries', []),
+                         include_dirs=['src',
+                                       numpy.get_include(),
+                                       blas_info.pop('include_dirs', [])],
                          depends=[join('src', 'linear.h'),
-                                  join('src', 'liblinear_helper.c'),
                                   join('src', 'tron.h'),
                                   join('src', 'blas', 'blas.h'),
-                                  join('src', 'blas', 'blasp.h'),
-                                  ])
+                                  join('src', 'blas', 'blasp.h')],
+                         **blas_info)
+    ## end liblinear module
+
     config.add_extension('BallTree',
                          sources=[join('src', 'BallTree.cpp')],
                          include_dirs=[numpy.get_include()]
                          )
 
-
-    return config
-
     config.add_subpackage('utils')
     return config
 
-- 
GitLab