blas-lapack.ss
#| blas-lapack.ss: Library locations for BLAS/LAPACK.
Copyright (C) 2007 Will M. Farr <farr@mit.edu>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|# 

(module blas-lapack mzscheme
  (require (lib "foreign.ss")
           (lib "list.ss" "srfi" "1"))
  
  (provide *blas* *lapack*
           _cblas-order _cblas-transpose)
  
  (define accelerate-path
    "/System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current")
  
  (define vecLib-path
    "/System/Library/Frameworks/vecLib.framework/Versions/Current")
  
  (define default-path "")
  
  (define (string-empty? s)
    (= (string-length s) 0))
  
  (define base-path
    (ormap (lambda (path) (and (directory-exists? path) path))
           (list accelerate-path vecLib-path default-path)))
  
  (define (build-path* . paths-or-empty)
    (apply build-path (filter (lambda (p-or-e) (not (string-empty? p-or-e))) paths-or-empty)))
  
  (define *blas* (ffi-lib (build-path* base-path "libBLAS")))
  (define *lapack* (ffi-lib (build-path* base-path "libLAPACK")))
  
  (define _cblas-order (_enum '(row-major = 101 col-major = 102)))
  (define _cblas-transpose (_enum '(no-trans = 111 trans = 112 conj-trans = 113 atlas-conj = 114))))