homebrew-core/Formula/octave.rb
Jack Nagel 53473b6bf5 Clean up MacOS version method usage
The MacOS.version? family of methods (other than "leopard?") are poorly
defined and lead to confusing code. Replace them in formulae with more
explicit comparisons.

"MacOS.version" is a special version object that can be compared to
numerics, symbols, and strings using the standard Ruby comparison
methods.

The old methods were moved to compat when the version comparison code
was merged, and they must remain there "forever", but they should not be
used in new code.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
2012-09-10 16:16:54 -05:00

107 lines
3.7 KiB
Ruby

require 'formula'
# Leading underscore because this method is defined differently
# in compat, and anything that loads this file would end up with
# this definition instead!
def _snow_leopard_64?
# 64 bit builds on 10.6 require some special handling.
MacOS.version == :snow_leopard and MacOS.prefer_64_bit?
end
class Octave < Formula
homepage 'http://www.gnu.org/software/octave/index.html'
url 'http://ftpmirror.gnu.org/octave/octave-3.6.2.tar.bz2'
mirror 'http://ftp.gnu.org/gnu/octave/octave-3.6.2.tar.bz2'
sha1 '145fef0122268086727a60e1c33e29d56fd546d7'
option 'without-graphicsmagick', 'Compile without GraphicsMagick'
option 'without-fltk', 'Compile without fltk (disables native graphics)'
option 'test', 'Run tests before installing'
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 :x11
depends_on 'fftw'
# When building 64-bit binaries on Snow Leopard, there are naming issues with
# the dot product functions in the BLAS library provided by Apple's
# Accelerate framework. See the following thread for the gory details:
#
# http://www.macresearch.org/lapackblas-fortran-106
#
# We can work around the issues using dotwrp.
depends_on 'dotwrp' if _snow_leopard_64?
# octave refuses to work with BSD readline, so it's either this or --disable-readline
depends_on 'readline'
depends_on 'curl' if MacOS.version == :leopard # Leopard's libcurl is too old
# additional features
depends_on 'suite-sparse'
depends_on 'glpk'
depends_on 'graphicsmagick' => :recommended unless build.include? 'without-graphicsmagick'
depends_on 'hdf5'
depends_on 'pcre'
depends_on 'qhull'
depends_on 'qrupdate'
if build.include? 'without-fltk'
# required for plotting if we don't have native graphics
depends_on 'gnuplot'
else
depends_on 'fltk'
end
def install
ENV.fortran
# 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 MacOS.prefer_64_bit?
ENV.append_to_cflags "-D_REENTRANT"
args = [
"--disable-dependency-tracking",
"--prefix=#{prefix}",
# Cant use `-framework Accelerate` because `mkoctfile`, the tool used to
# compile extension packages, can't parse `-framework` flags.
"--with-blas=#{'-ldotwrp ' if _snow_leopard_64?}-Wl,-framework -Wl,Accelerate",
# SuiteSparse-4.x.x fix, see http://savannah.gnu.org/bugs/?37031
"--with-umfpack=-lumfpack -lsuitesparseconfig",
]
args << "--without-framework-carbon" if MacOS.version >= :lion
# avoid spurious 'invalid assignment to cs-list' erorrs on 32 bit installs:
args << 'CXXFLAGS=-O0' unless MacOS.prefer_64_bit?
system "./configure", *args
system "make all"
system "make check 2>&1 | tee make-check.log" if build.include? 'test'
system "make install"
prefix.install ["test/fntests.log", "make-check.log"] if build.include? 'test'
end
def caveats
native_caveats = <<-EOS.undent
Octave 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 build.include? 'without-fltk'
end
end