nixpkgs/pkgs/development/interpreters/octave/default.nix
Alastair Pharo 250ddfe1a2 octave: add runtime texinfo dependency
makeinfo (provided by the texinfo package) is used by the "help"
command in Octave to display info about functions, etc.  By default,
Octave looks for "makeinfo" in the PATH, rather than specifying the
location of the executable.  This results in Nix not being aware that
makeinfo is required at runtime (so unless you happen have makeinfo
available from your path, "help" won't work).

This patch fixes that by setting the path to makeinfo in Octave,
thereby creating a runtime dependency on texinfo.
2017-04-09 16:42:56 +10:00

90 lines
3.2 KiB
Nix

{ stdenv, fetchurl, gfortran, readline, ncurses, perl, flex, texinfo, qhull
, libsndfile, portaudio, libX11, graphicsmagick, pcre, pkgconfig, mesa, fltk
, fftw, fftwSinglePrec, zlib, curl, qrupdate, openblas, arpack, libwebp
, qt ? null, qscintilla ? null, ghostscript ? null, llvm ? null, hdf5 ? null,glpk ? null
, suitesparse ? null, gnuplot ? null, jdk ? null, python ? null, overridePlatforms ? null
}:
let
suitesparseOrig = suitesparse;
qrupdateOrig = qrupdate;
in
# integer width is determined by openblas, so all dependencies must be built
# with exactly the same openblas
let
suitesparse =
if suitesparseOrig != null then suitesparseOrig.override { inherit openblas; } else null;
qrupdate = if qrupdateOrig != null then qrupdateOrig.override { inherit openblas; } else null;
in
stdenv.mkDerivation rec {
version = "4.2.1";
name = "octave-${version}";
src = fetchurl {
url = "mirror://gnu/octave/${name}.tar.gz";
sha256 = "0frk0nk3aaic8hj3g45h11rnz3arp7pjsq0frbx50sspk1iqzhl0";
};
buildInputs = [ gfortran readline ncurses perl flex texinfo qhull
graphicsmagick pcre pkgconfig fltk zlib curl openblas libsndfile fftw
fftwSinglePrec portaudio qrupdate arpack libwebp ]
++ (stdenv.lib.optional (qt != null) qt)
++ (stdenv.lib.optional (qscintilla != null) qscintilla)
++ (stdenv.lib.optional (ghostscript != null) ghostscript)
++ (stdenv.lib.optional (llvm != null) llvm)
++ (stdenv.lib.optional (hdf5 != null) hdf5)
++ (stdenv.lib.optional (glpk != null) glpk)
++ (stdenv.lib.optional (suitesparse != null) suitesparse)
++ (stdenv.lib.optional (jdk != null) jdk)
++ (stdenv.lib.optional (gnuplot != null) gnuplot)
++ (stdenv.lib.optional (python != null) python)
++ (stdenv.lib.optionals (!stdenv.isDarwin) [ mesa libX11 ])
;
# makeinfo is required by Octave at runtime to display help
prePatch = ''
substituteInPlace libinterp/corefcn/help.cc \
--replace 'Vmakeinfo_program = "makeinfo"' \
'Vmakeinfo_program = "${texinfo}/bin/makeinfo"'
''
# REMOVE ON VERSION BUMP
# Needed for Octave-4.2.1 on darwin. See https://savannah.gnu.org/bugs/?50234
+ stdenv.lib.optionalString stdenv.isDarwin ''
sed 's/inline file_stat::~file_stat () { }/file_stat::~file_stat () { }/' -i ./liboctave/system/file-stat.cc
'';
doCheck = !stdenv.isDarwin;
enableParallelBuilding = true;
configureFlags =
[ "--enable-readline"
"--enable-dl"
"--with-blas=openblas"
"--with-lapack=openblas"
]
++ stdenv.lib.optional openblas.blas64 "--enable-64"
++ stdenv.lib.optionals stdenv.isDarwin ["--with-x=no"]
;
# Keep a copy of the octave tests detailed results in the output
# derivation, because someone may care
postInstall = ''
cp test/fntests.log $out/share/octave/${name}-fntests.log || true
'';
passthru = {
inherit version;
sitePath = "share/octave/${version}/site";
};
meta = {
homepage = http://octave.org/;
license = stdenv.lib.licenses.gpl3Plus;
maintainers = with stdenv.lib.maintainers; [viric raskin];
platforms = if overridePlatforms == null then
(with stdenv.lib.platforms; linux ++ darwin)
else overridePlatforms;
};
}