#### E.1.3 External Packages

The following external packages are required:

BLAS

  Basic Linear Algebra Subroutine library. Accelerated BLAS libraries such as OpenBLAS (https://www.openblas.net/) or ATLAS (http://math-atlas.sourceforge.net) are recommended for best performance. The reference implementation (http://www.netlib.org/blas) is slow, unmaintained, and suffers from certain bugs in corner case inputs.

LAPACK

  Linear Algebra Package (http://www.netlib.org/lapack).

PCRE

  The Perl Compatible Regular Expression library (https://www.pcre.org).

The following external package is optional but strongly recommended:

GNU Readline

  Command-line editing library (https://www.gnu.org/s/readline).

If you wish to build Octave without GNU readline installed, you must use the `--disable-readline` option when running the configure script.

The following external software packages are optional but recommended:

ARPACK

  Library for the solution of large-scale eigenvalue problems (https://forge.scilab.org/index.php/p/arpack-ng). ARPACK is required to provide the functions `eigs` and `svds`.

cURL

  Library for transferring data with URL syntax (https://curl.haxx.se). cURL is required to provide the `urlread` and `urlwrite` functions and the `ftp` class.

FFTW3

  Library for computing discrete Fourier transforms (http://www.fftw.org). FFTW3 is used to provide better performance for functions that compute discrete Fourier transforms (`fft`, `ifft`, `fft2`, etc.)

FLTK

  Portable GUI toolkit (http://www.fltk.org). FLTK is currently used to provide windows for Octave’s OpenGL-based graphics functions.

fontconfig

  Library for configuring and customizing font access (https://www.freedesktop.org/wiki/Software/fontconfig). Fontconfig is used to manage fonts for Octave’s OpenGL-based graphics functions.

FreeType

  Portable font engine (https://www.freetype.org). FreeType is used to perform font rendering for Octave’s OpenGL-based graphics functions.

GLPK

  GNU Linear Programming Kit (https://www.gnu.org/software/glpk). GPLK is required for the function `glpk`.

gl2ps

  OpenGL to PostScript printing library (https://www.geuz.org/gl2ps/). gl2ps is required for printing when using OpenGL-based graphics toolkits (currently either FLTK or Qt).

gnuplot

  Interactive graphics program (http://www.gnuplot.info). gnuplot is currently the default graphics renderer for Octave.

GraphicsMagick++

  Image processing library (http://www.graphicsmagick.org). GraphicsMagick++ is used to provide the `imread` and `imwrite` functions.

HDF5

  Library for manipulating portable data files (https://www.hdfgroup.org/HDF5). HDF5 is required for Octave’s `load` and `save` commands to read and write HDF data files.

Java Development Kit

  Java programming language compiler and libraries. The OpenJDK free software implementation is recommended (http://openjdk.java.net/), although other JDK implementations may work. Java is required to be able to call Java functions from within Octave.

LLVM

  Compiler framework, (https://www.llvm.org). LLVM is required for Octave’s experimental just-in-time (JIT) compilation for speeding up the interpreter.

OpenGL

  API for portable 2-D and 3-D graphics (https://www.opengl.org). An OpenGL implementation is required to provide Octave’s OpenGL-based graphics functions. Octave’s OpenGL-based graphics functions usually outperform the gnuplot-based graphics functions because plot data can be rendered directly instead of sending data and commands to gnuplot for interpretation and rendering.

PortAudio

  PortAudio (http://www.portaudio.com/) provides a very simple API for recording and/or playing sound using a simple callback function or a blocking read/write interface. It is required for the audio processing functions `audioplayer`, `audiorecorder`, and `audiodevinfo`.

Qhull

  Computational geometry library (http://www.qhull.org). Qhull is required to provide the functions `convhull`, `convhulln`, `delaunay`, `delaunayn`, `voronoi`, and `voronoin`.

QRUPDATE

  QR factorization updating library (https://sourceforge.net/projects/qrupdate). QRUPDATE is used to provide improved performance for the functions `qrdelete`, `qrinsert`, `qrshift`, and `qrupdate`.

QScintilla

  Source code highlighter and manipulator; a Qt port of Scintilla (http://www.riverbankcomputing.co.uk/software/qscintilla). QScintilla is used for syntax highlighting and code completion in the GUI.

Qt

  GUI and utility libraries (https://www.qt.io). Qt is required for building the GUI. It is a large framework, but the only components required are the GUI, core, and network modules.

SuiteSparse

  Sparse matrix factorization library (http://faculty.cse.tamu.edu/davis/suitesparse.html). SuiteSparse is required to provide sparse matrix factorizations and solution of linear equations for sparse systems.

SUNDIALS

  The SUite of Nonlinear and DIfferential/ALgebraic Equation Solvers (https://computation.llnl.gov/projects/sundials) is required for the Ordinary Differential Equations (ODE) solvers `ode15i` and `ode15s`.

zlib

  Data compression library (https://zlib.net). The zlib library is required for Octave’s `load` and `save` commands to handle compressed data, including MATLAB v5 MAT files.