aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/suite-sparse.rb
blob: be56a5b18457b5961ab521531f7f54be64958678 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
require 'formula'

class SuiteSparse <Formula
  url 'http://www.cise.ufl.edu/research/sparse/SuiteSparse/SuiteSparse-3.6.0.tar.gz'
  homepage 'http://www.cise.ufl.edu/research/sparse/SuiteSparse/'
  md5 '8ccb9e90b478b5d55b1d9a794e8ed676'

  depends_on "metis"
  depends_on "tbb"

  def install
    # SuiteSparse doesn't like to build in parallel
    ENV.deparallelize

    # So, SuiteSparse was written by a scientific researcher.  This
    # tends to result in makefile-based build systems that are completely
    # ignorant of the existance of things such as CPPFLAGS and LDFLAGS.
    # SuiteSparse Does The Right Thing™ when homebrew is in /usr/local
    # but if it is not, we have to piggyback some stuff in on CFLAGS.
    unless HOMEBREW_PREFIX.to_s == '/usr/local'
      ENV['CFLAGS'] += " -isystem #{HOMEBREW_PREFIX}/include -L#{HOMEBREW_PREFIX}/lib"
    end

    # Some of the suite-sparse libraries use Metis
    metis = Formula.factory("metis")

    inreplace 'UFconfig/UFconfig.mk' do |s|
      # Compilers
      s.change_make_var! "CC", ENV.cc
      s.change_make_var! "CFLAGS", ENV.cflags
      s.change_make_var! "CPLUSPLUS", ENV.cxx

      # Libraries
      s.change_make_var! "BLAS", "-Wl,-framework -Wl,Accelerate"
      s.change_make_var! "LAPACK", "$(BLAS)"
      s.remove_make_var! "METIS_PATH"
      s.change_make_var! "METIS", metis.lib + 'libmetis.a'
      s.change_make_var! "SPQR_CONFIG", "-DHAVE_TBB"
      s.change_make_var! "TBB", "-ltbb"

      # Installation
      s.change_make_var! "INSTALL_LIB", lib
      s.change_make_var! "INSTALL_INCLUDE", include
    end

    # Remove a stray Lib prefix
    inreplace 'UFconfig/Makefile', %r|Lib/|, ''

    system "make library"

    lib.mkpath
    include.mkpath
    system "make install"
  end
end