summary refs log tree commit diff
path: root/pkgs/development/interpreters/octave/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/interpreters/octave/default.nix')
-rw-r--r--pkgs/development/interpreters/octave/default.nix159
1 files changed, 122 insertions, 37 deletions
diff --git a/pkgs/development/interpreters/octave/default.nix b/pkgs/development/interpreters/octave/default.nix
index f0f80f75854..4a63d186201 100644
--- a/pkgs/development/interpreters/octave/default.nix
+++ b/pkgs/development/interpreters/octave/default.nix
@@ -1,8 +1,56 @@
-{ stdenv, fetchurl, gfortran, readline, ncurses, perl, flex, texinfo, qhull
-, libsndfile, portaudio, libX11, graphicsmagick, pcre, pkgconfig, libGL, libGLU, fltk
-, fftw, fftwSinglePrec, zlib, curl, qrupdate, openblas, arpack, libwebp, gl2ps
-, qt ? null, qscintilla ? null, ghostscript ? null, llvm ? null, hdf5 ? null,glpk ? null
-, suitesparse ? null, gnuplot ? null, jdk ? null, python ? null, overridePlatforms ? null
+{ stdenv
+, fetchurl
+, gfortran
+, ncurses
+, perl
+, flex
+, texinfo
+, qhull
+, libsndfile
+, portaudio
+, libX11
+, graphicsmagick
+, pcre
+, pkgconfig
+, libGL
+, libGLU
+, fltk
+# Both are needed for discrete Fourier transform
+, fftw
+, fftwSinglePrec
+, zlib
+, curl
+, qrupdate
+, openblas
+, arpack
+, libwebp
+, gl2ps
+, ghostscript ? null
+, hdf5 ? null
+, glpk ? null
+, suitesparse ? null
+, gnuplot ? null
+# - Include support for GNU readline:
+, enableReadline ? true
+, readline ? null
+# - Build Java interface:
+, enableJava ? true
+, jdk ? null
+, python ? null
+, overridePlatforms ? null
+, sundials_2 ? null
+# - Build Octave Qt GUI:
+, enableQt ? false
+, qtbase ? null
+, qtsvg ? null
+, qtscript ? null
+, qscintilla ? null
+, qttools ? null
+# - JIT compiler for loops:
+, enableJIT ? false
+, llvm ? null
+, libiconv
+, darwin
 }:
 
 let
@@ -20,33 +68,66 @@ in
 stdenv.mkDerivation rec {
   version = "5.2.0";
   pname = "octave";
+
   src = fetchurl {
     url = "mirror://gnu/octave/${pname}-${version}.tar.gz";
     sha256 = "1qcmcpsq1lfka19fxzvxjwjhg113c39a9a0x8plkhvwdqyrn5sig";
   };
 
-  buildInputs = [ gfortran readline ncurses perl flex texinfo qhull
-    graphicsmagick pcre pkgconfig fltk zlib curl openblas libsndfile fftw
-    fftwSinglePrec portaudio qrupdate arpack libwebp gl2ps ]
-    ++ (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) [ libGL libGLU 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"'
-  '';
+  buildInputs = [
+    readline
+    ncurses
+    perl
+    flex
+    qhull
+    graphicsmagick
+    pcre
+    fltk
+    zlib
+    curl
+    openblas
+    libsndfile
+    fftw
+    fftwSinglePrec
+    portaudio
+    qrupdate
+    arpack
+    libwebp
+    gl2ps
+  ]
+  ++ (stdenv.lib.optionals enableQt [
+    qtbase
+    qtsvg
+    qscintilla
+  ])
+  ++ (stdenv.lib.optional (ghostscript != null) ghostscript)
+  ++ (stdenv.lib.optional (hdf5 != null) hdf5)
+  ++ (stdenv.lib.optional (glpk != null) glpk)
+  ++ (stdenv.lib.optional (suitesparse != null) suitesparse)
+  ++ (stdenv.lib.optional (enableJava) jdk)
+  ++ (stdenv.lib.optional (sundials_2 != null) sundials_2)
+  ++ (stdenv.lib.optional (gnuplot != null) gnuplot)
+  ++ (stdenv.lib.optional (python != null) python)
+  ++ (stdenv.lib.optionals (!stdenv.isDarwin) [ libGL libGLU libX11 ])
+  ++ (stdenv.lib.optionals (stdenv.isDarwin) [ libiconv
+                                               darwin.apple_sdk.frameworks.Accelerate
+                                               darwin.apple_sdk.frameworks.Cocoa ])
+  ;
+  nativeBuildInputs = [
+    pkgconfig
+    gfortran
+    # Listed here as well because it's outputs are split
+    fftw
+    fftwSinglePrec
+    texinfo
+  ]
+  ++ (stdenv.lib.optional (sundials_2 != null) sundials_2)
+  ++ (stdenv.lib.optional enableJIT llvm)
+  ++ (stdenv.lib.optionals enableQt [
+    qtscript
+    qttools
+  ])
+  ;
 
   doCheck = !stdenv.isDarwin;
 
@@ -55,15 +136,17 @@ stdenv.mkDerivation rec {
   # See https://savannah.gnu.org/bugs/?50339
   F77_INTEGER_8_FLAG = if openblas.blas64 then "-fdefault-integer-8" else "";
 
-  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"]
-    ;
+  configureFlags = [
+    "--with-blas=openblas"
+    "--with-lapack=openblas"
+  ]
+    ++ (if stdenv.isDarwin then [ "--enable-link-all-dependencies" ] else [ ])
+    ++ stdenv.lib.optionals enableReadline [ "--enable-readline" ]
+    ++ stdenv.lib.optionals openblas.blas64 [ "--enable-64" ]
+    ++ stdenv.lib.optionals stdenv.isDarwin [ "--with-x=no" ]
+    ++ stdenv.lib.optionals enableQt [ "--with-qt=5" ]
+    ++ stdenv.lib.optionals enableJIT [ "--enable-jit" ]
+  ;
 
   # Keep a copy of the octave tests detailed results in the output
   # derivation, because someone may care
@@ -81,8 +164,10 @@ stdenv.mkDerivation rec {
     license = stdenv.lib.licenses.gpl3Plus;
     maintainers = with stdenv.lib.maintainers; [raskin];
     description = "Scientific Pragramming Language";
+    # https://savannah.gnu.org/bugs/?func=detailitem&item_id=56425 is the best attempt to fix JIT
+    broken = enableJIT;
     platforms = if overridePlatforms == null then
-      (with stdenv.lib.platforms; linux ++ darwin)
+      (with stdenv.lib; platforms.linux ++ platforms.darwin)
     else overridePlatforms;
   };
 }