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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
  | 
require 'formula'
def no_magick?
  ARGV.include? '--without-graphicsmagick'
end
def no_native?
  ARGV.include? '--without-fltk'
end
def run_tests?
  ARGV.include? '--test'
end
class Octave < Formula
  url 'ftp://ftp.gnu.org/gnu/octave/octave-3.4.0.tar.bz2'
  homepage 'http://www.gnu.org/software/octave/index.html'
  sha1 '936a8fc962abd96e7568fb5909ec2a4d7997a1a8'
  depends_on 'pkg-config' => :build
  depends_on 'gnu-sed' => :build
  depends_on 'texinfo' => :build     # OS X's makeinfo won't work for this
  depends_on 'fftw'
  # there is an incompatibility between gfortran and Apple's BLAS as of 10.6.6:
  #   http://www.macresearch.org/lapackblas-fortran-106
  # we can work around it using dotwrp
  depends_on 'dotwrp'
  # octave refuses to work with BSD readline, so it's either this or --disable-readline
  depends_on 'readline'
  # additional features
  depends_on 'suite-sparse'
  depends_on 'glpk'
  # test for presence of GraphicsMagick++ relies on pkg-config
  depends_on 'graphicsmagick' unless no_magick?
  depends_on 'hdf5'
  depends_on 'pcre'
  depends_on 'fltk' unless no_native?
  depends_on 'qhull'
  depends_on 'qrupdate'
  # required for plotting if we don't have native graphics
  depends_on 'gnuplot' if no_native?
  def options
    [
      ['--without-graphicsmagick', 'Compile without GraphicsMagick'],
      ['--without-fltk', 'Compile without fltk (disables native graphics)'],
      ['--test', 'Run tests before installing'],
    ]
  end
  def install
    ENV.fortran
    unless no_magick? or quiet_system "#{HOMEBREW_PREFIX}/bin/pkg-config", "--exists", "GraphicsMagick++"
      onoe <<-EOS.undent
        GraphicsMagick was installed without its C++ libraries. Please reinstall
        GraphicsMagick with the option "--with-magick-plus-plus"; otherwise, install
        Octave with option "--without-graphicsmagick".
      EOS
      exit 1
    end
    fltk = Formula.factory('fltk')
    unless no_native? or fltk.installed_prefix.to_s !~ /1.1.10$/
      onoe <<-EOS.undent
        fltk 1.1.10 is too old to be used with Octave. Please reinstall ftlk with
        the option "--HEAD"; otherwise, install Octave with option "--without-fltk".
      EOS
      exit 1
    end
    # yes, compiling octave takes a long time, but using -O2 gives negligible savings
    # build time with -O2: user 58m5.295s   sys 7m29.064s
    # build time with -O3: user 58m58.054s  sys 7m52.221s
    ENV.m64 if Hardware.is_64_bit?
    ENV.append_to_cflags "-D_REENTRANT"
    ENV.x11
    # as per the caveats in the gfortran formula:
    ENV["FC"] = ENV["F77"] = "#{HOMEBREW_PREFIX}/bin/gfortran"
    ENV["FFLAGS"] = ENV["FCFLAGS"] = ENV["CFLAGS"]
    # almost everything is autodetected, but dotwrp must be linked before Accelerate
    system "./configure", "--disable-dependency-tracking",
                          "--prefix=#{prefix}",
                          "--with-blas=-ldotwrp -framework Accelerate"
    system "make all"
    system "make check" if run_tests?
    system "make install"
    prefix.install "test/fntests.log" if run_tests?
  end
  def caveats
    brew_caveats = <<-EOS.undent
      To install, you will need custom installs of fltk and graphicsmagick:
          brew install --HEAD fltk
          brew install graphicsmagick --with-magick-plus-plus
      To omit these features, see "brew options octave"
    EOS
    native_caveats = <<-EOS.undent
      Octave 3.4.0 supports "native" plotting using OpenGL and FLTK. You can activate
      it for all future figures using the Octave command
          graphics_toolkit ("fltk")
      or for a specific figure handle h using
          graphics_toolkit (h, "fltk")
      Otherwise, gnuplot is still used by default, if available.
    EOS
    gnuplot_caveats = <<-EOS.undent
      When plotting with gnuplot, you should set "GNUTERM=x11" before running octave;
      if you are using Aquaterm, use "GNUTERM=aqua".
    EOS
    s = gnuplot_caveats
    s = native_caveats + s unless no_native?
    s = brew_caveats + s
  end
end
  |