Building: Difference between revisions

From Octave
Jump to navigation Jump to search
(Merged with "Building for Linux systems‎")
 
(41 intermediate revisions by 6 users not shown)
Line 1: Line 1:
General information about building the Octave source for different operating systems.
:''This article provides general information about '''building GNU Octave''' from source (on Unix-like systems).''


* Linux
:*''If you just want to '''install GNU Octave''', see [[:Category:Installation]].''
** [[Octave for Arch Linux|Arch Linux]]
:*''For '''MS Windows''', read [[Building on Microsoft Windows]] and [[Windows Installer]].''
** [[Octave for Debian systems|Debian (and Debian-based)]]  
:*''For '''macOS''', read [[Octave for macOS]].''
** [[Octave for RedHat Systems|RedHat (and RedHat-based)]]
** [[Octave for Slackware|Slackware]]
* [[Building for Macintosh platform|macOS]]
* [[Octave_for_Microsoft_Windows|Windows]]
** [[Building on Cygwin platform]]
** [[MXE]] cross compiler


We try to keep build instructions up to date in the source tree. Please clone using [[Mercurial]] or download it to see the README.
== General steps ==


There are also instructions in the [http://www.gnu.org/software/octave/doc/interpreter/Installation.html manual].
# Install all [[#Dependencies|build dependencies]] (see below).
# Getting the Octave sources ...
::(A) ... from the development repository (requires also [https://www.mercurial-scm.org/ Mercurial])
<div style="margin-left:5em;">
hg clone https://www.octave.org/hg/octave && \
cd octave                                  && \
./bootstrap
</div>
::(B) ... from a release
<div style="margin-left:5em;">
wget https://ftpmirror.gnu.org/octave/octave-{{Release}}.tar.gz && \
tar -xzf octave-{{Release}}.tar.gz                              && \
cd octave-{{Release}}
</div>
: 3. Configure, build, check, and install Octave
<div style="margin-left:3em;">
mkdir .build                            && \
cd    .build                            && \
./../configure --prefix=$HOME/my_octave && \ <ref><code>--prefix</code> determines the installation location, see the [[#Install Octave in home directory|Tweaks section]] for details. For more information about configuration options, type <code>./../configure --help</code>.</ref>
make -j2                                && \ <ref>Depending on your system and processor count, use a larger number of parallel jobs, e.g. <code>-j8</code>.</ref>
make check                              && \
make install
</div>


==Dependencies==
== Dependencies ==


{| class"wikitable"
Most of the dependencies given in this section can be very conveniently installed on many [[Octave for GNU/Linux|GNU/Linux]] systems.
|-
 
| Critical
{{Note|For a quick way to install the required dependencies, see:
| width="50pt" style="background:red" | &nbsp;
* [[Octave for Debian systems#The right way|Debian / Ubuntu]]
|-
* [[Octave for Arch Linux|Arch Linux]]
| Recommended
* [[Octave for Red Hat Linux systems|Fedora / RedHat / CentOS]]}}
| style="background:yellow" | &nbsp;
 
|-
Dependencies marked with <span style="background:lightgreen">green background</span> are '''required''' for building Octave.  All other tools and libraries are recommended/optional, but very useful features (like the GUI, plotting, etc.) are likely to be disabled.
| Not critical
 
| style="background:green" | &nbsp;
=== Build tools ===
|}


{| class="wikitable"
{| class="wikitable"
|-
|-
! Task
! Dependency
! Dependency
! Description
! Description
! License / Copyright
! License / Copyright
! Version
|-style="background:lightgreen"
! Level
| [https://www.gnu.org/software/autoconf Autoconf]
! Recent CVE ?
| Software configuration
|-
| GNU GPL v3.0
| rowspan="8"| Build tools
|-style="background:lightgreen"
| [http://gcc.gnu.org C++, C, and Fortran compilers]
| [https://www.gnu.org/software/automake Automake]
| Makefile generator
| GNU GPL v3.0
|-style="background:lightgreen"
| [https://gcc.gnu.org C++, C, and Fortran compilers]
| Compiling the source code
| Compiling the source code
| GNU GPL v3.0
| GNU GPL v3.0
|
|-style="background:lightgreen"
| style="background:red" | &nbsp;
| [https://www.gnu.org/software/make GNU Make]
| none
|-
| [http://www.gnu.org/software/make GNU Make]
| Makefile processor
| Makefile processor
| GNU GPL v3.0
| GNU GPL v3.0
|
|-style="background:lightgreen"
| style="background:red" | &nbsp;
| [https://www.gnu.org/software/libtool Libtool]
| none
| Dependency of automake
|-
| Free Software Foundation
|-style="background:lightgreen"
| Unix utilities: gawk, gperf, less, ncurses
| Unix utilities: gawk, gperf, less, ncurses
| Miscellaneous tasks
| Miscellaneous tasks
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.gnu.org/software/bison Bison]
| [https://www.gnu.org/software/bison Bison]
| Parser generator
| Parser generator
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:green" | &nbsp;
| none
|-
|-
| [http://www.gnu.org/software/flex Flex]
| [https://www.gnu.org/software/flex Flex]
| Lexical analyzer
| Lexical analyzer
| The Flex project
| The Flex project
|
|}
| style="background:green" | &nbsp;
 
| none
=== Documentation tools ===
 
{| class="wikitable"
|-
|-
| [http://www.gnu.org/software/autoconf Autoconf]
! Dependency
| Software configuration
! Description
| GNU GPL v3.0
! License / Copyright
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.gnu.org/software/automake Automake]
| [http://www.ghostgum.com.au/software/epstool.htm epstool]
| Makefile generator
| GNU GPL v3.0
|
| style="background:red" | &nbsp;
| none
|-
| [http://www.gnu.org/software/libtool Libtool]
| Dependency of automake
| Free Software Foundation
|
| style="background:red" | &nbsp;
| none
|-
| rowspan="9"| Documentation tools
| [http://pages.cs.wisc.edu/~ghost/gsview/epstool.htm epstool]
| Epstool is a utility to create or extract preview images in EPS files, fix bounding boxes and convert to bitmaps.
| Epstool is a utility to create or extract preview images in EPS files, fix bounding boxes and convert to bitmaps.
| GNU GPL v2.0
| GNU GPL v2.0
|
| style="background:green" | &nbsp;
| none
|-
|-
| [http://sourceforge.net/projects/ftgl/ FTGL]
| [https://www.freetype.org FTGL]
| FTGL is a free cross-platform Open Source C++ library that uses Freetype2 to simplify rendering fonts in OpenGL applications.
| Portable font engine to perform font rendering for Octave’s OpenGL-based graphics functions.
| Provided "as is" -- various authors
| GNU GPL v2.0
|
| style="background:green" | &nbsp;
| none
|-
|-
| [http://geuz.org/gl2ps/ GL2PS]
| [http://geuz.org/gl2ps GL2PS]
| GL2PS is a C library providing high quality vector output for any OpenGL application.
| GL2PS is a C library providing high quality vector output for any OpenGL application.
| GNU LGPL v2.0
| GNU LGPL v2.0
|
| style="background:green" | &nbsp;
| none
|-
|-
| [http://www.pstoedit.net/ pstoedit]
| [https://www.nongnu.org/texi2html Texi2HTML]
| Translates PostScript and PDF graphics into other vector formats.
| GNU GPL v2.0
|
| style="background:green" | &nbsp;
| none
|-
| [http://www.nongnu.org/texi2html/ Texi2HTML]
| Perl script which converts Texinfo source files to HTML output.
| Perl script which converts Texinfo source files to HTML output.
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:green" | &nbsp;
| none
|-
|-
| [https://www.gnu.org/software/texinfo/ Texinfo]
| [https://www.gnu.org/software/texinfo Texinfo]
| Documentation system that uses a single source to produce both on-line information and printed output.
| Documentation system that uses a single source to produce both on-line information and printed output.
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:yellow" | &nbsp;
| none
|-
| TeX Live generic
| Mixed bag of generic macro packages and fonts.
| Freely redistributable as defined by the Free Software Foundation
|
| style="background:green" | &nbsp;
| none
|-
|-
| [https://www.tug.org/texlive/ TeX Live]
| [https://www.tug.org/texlive/ TeX Live]
| Compiler for TeX doumentation.
| TeX document production system including all the major TeX-related programs, macro packages, and fonts that are free software.
| Freely redistributable as defined by the Free Software Foundation
| Freely redistributable as defined by the Free Software Foundation
|
|}
| style="background:green" | &nbsp;
 
| none
=== External tools and libraries ===
 
{| class="wikitable"
|-
|-
| [http://www.ctan.org/pkg/transfig transfig]
! Dependency
| Tans­lates fig­ures gen­er­ated by xfig to a large va­ri­ety of for­mats.
! Description
| BSD Style Li­cense
! License / Copyright
|
|-style="background:lightgreen"
| style="background:green" | &nbsp;
| [https://www.netlib.org/blas BLAS]
| none
|-
| rowspan="19"| External tools
| [http://www.netlib.org/blas BLAS]
| Basic Linear Algebra Subroutine library
| Basic Linear Algebra Subroutine library
| Free - proper attribution request
| Free - proper attribution request
|
|-style="background:lightgreen"
| style="background:red" | &nbsp;
| [https://netlib.org/lapack LAPACK]
| none
|-
| [http://www.netlib.org/lapack LAPACK]
| Linear Algebra Package
| Linear Algebra Package
| Free - proper attribution request
| Free - proper attribution request
|
|-style="background:lightgreen"
| style="background:red" | &nbsp;
| [https://www.pcre.org PCRE]
| none
|-
| [http://www.pcre.org PCRE]
| Perl Compatible Regular Expression library
| Perl Compatible Regular Expression library
| Free
| Free
|
|-style="background:lightgreen"
| style="background:red" | &nbsp;
| [https://www.gnu.org/software/readline GNU Readline]
| none
|-
| [http://www.gnu.org/s/readline GNU Readline]
| Command-line editing library
| Command-line editing library
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:yellow" | &nbsp;
| none
|-
|-
| [http://forge.scilab.org/index.php/p/arpack-ng ARPACK]
| [https://github.com/opencollab/arpack-ng ARPACK-NG]
| Solution of large-scale eigenvalue problems
| Solution of large-scale eigenvalue problems
| BSD like - various authors
| BSD like - various authors
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://curl.haxx.se cURL]
| [https://curl.haxx.se cURL]
| Library for transferring data with URL syntax
| Library for transferring data with URL syntax
| Free Software -- main author
| Free Software -- main author
| > 7.32.00
| style="background:red" | &nbsp;
| [http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4545 CVE-2013-4545]
|-
|-
| [http://www.fftw.org FFTW3]
| [http://www.fftw.org FFTW3]
| Library for computing discrete Fourier transforms
| Library for computing discrete Fourier transforms
| MIT -- GNU GPL v2.0
| MIT -- GNU GPL v2.0
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.fltk.org FLTK]
| [https://www.fltk.org FLTK]
| Portable GUI toolkit
| Portable GUI toolkit
| GNU GPL v2.0 with static linking exception
| GNU GPL v2.0 with static linking exception
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.freedesktop.org/wiki/Software/fontconfig fontconfig]
| [https://www.freedesktop.org/wiki/Software/fontconfig fontconfig]
| Library for configuring and customizing font access
| Library for configuring and customizing font access
| Provided "as is" -- various authors
| Provided "as is" -- various authors
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.freetype.org FreeType]
| [https://www.freetype.org FreeType]
| Portable font engine
| Portable font engine
| compatible with GNU GPL v3.0
| compatible with GNU GPL v3.0
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.gnu.org/software/glpk GLPK]
| [https://www.geuz.org/gl2ps/ GL2PS]
| OpenGL to PostScript printing library
| GNU GPL v2.0
|-
| [https://www.gnu.org/software/glpk GLPK]
| GNU Linear Programming Kit
| GNU Linear Programming Kit
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:yellow" | &nbsp;
| none
|-
|-
| [http://www.gnuplot.info gnuplot]
| [http://www.gnuplot.info gnuplot]
| Interactive graphics program
| Interactive graphics program
| Provided "as is" -- various authors
| Provided "as is" -- various authors
|
| style="background:red" | &nbsp;
| none
|-
|-
| [http://www.graphicsmagick.org GraphicsMagick++]
| Magick++, e.g. [http://www.graphicsmagick.org GraphicsMagick++]
| Image processing library
| Image processing library
| various -- integrates many third-party libs
| various -- integrates many third-party libs
| > 1.3.18
| style="background:yellow" | &nbsp;
| [http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4589 CVE-2013-4589]
|-
|-
| [http://www.hdfgroup.org/HDF5 HDF5]
| [https://www.hdfgroup.org/solutions/hdf5 HDF5]
| Library for manipulating portable data files
| Library for manipulating portable data files
| BSD - like
| BSD - like
|
| style="background:yellow" | &nbsp;
| none
|-
|-
| [http://www.opengl.org OpenGL]
| JDK, e.g. [https://www.hdfgroup.org/solutions/hdf5 OpenJDK]
| Java programming language compiler and libraries
| GNU GPL v2.0
|-
| [https://www.opengl.org OpenGL]
| API for portable 2D and 3D graphics
| API for portable 2D and 3D graphics
| Free specs -- license is driver dependent
| Free specs -- license is driver dependent
|
|-
| style="background:red" | &nbsp;
| [http://www.portaudio.com/ PortAudio]
| none
| Audio I/O library
| Free software -- specific
|-
|-
| [http://www.qhull.org Qhull]
| [http://www.qhull.org Qhull]
| Computational geometry library
| Computational geometry library
| Free software -- specific
| Free software -- specific
|
| style="background:yellow" | &nbsp;
| none
|-
|-
| [http://sourceforge.net/projects/qrupdate QRUPDATE]
| [http://sourceforge.net/projects/qrupdate QRUPDATE]
| QR factorization updating library
| QR factorization updating library
| GNU GPL v3.0
| GNU GPL v3.0
|
| style="background:yellow" | &nbsp;
| none
|-
|-
| [http://www.cise.ufl.edu/research/sparse/SuiteSparse SuiteSparse]
| [https://riverbankcomputing.com/software/qscintilla QScintilla]
| Source code highlighter and manipulator; a Qt port of Scintilla
| GNU GPL v3.0
|-
| [https://www.qt.io/ Qt]
| Widget toolkit for creating graphical user interfaces
| GNU LGPL v3.0
|-
| [https://rapidjson.org/ RapidJSON]
| A fast JSON parser/generator for C++ with both SAX/DOM style API
| MIT license
|-
| [http://faculty.cse.tamu.edu/davis/suitesparse.html SuiteSparse]
| Sparse matrix factorization library
| Sparse matrix factorization library
| Main author
| Main author
|
| style="background:yellow" | &nbsp;
| none
|-
|-
| [http://zlib.net zlib]
| [https://computing.llnl.gov/projects/sundials/ida SUNDIALS IDA]
| SUite of Nonlinear and DIfferential/ALgebraic equation Solvers - Initial value problems for Differential-Algebraic equation (DAE) systems
| BSD 3-Clause
|-
| [https://zlib.net zlib]
| Data compression library
| Data compression library
| Provided "as is" -- various authors
| Provided "as is" -- various authors
|
| style="background:yellow" | &nbsp;
| none
|}
|}


==Security concerns==
== Tweaks ==
* CVE-2013-4545 (cURL): not sensitive if not compiled against OpenSSH. Solved by version 7.34.00. Upgrade dependencies if required.
 
* CVE-2013-4589 (graphicsmagick): the actual version (1.3.18, released March 9th, 2013), is affected. Awaiting a new release.
=== Install Octave in home directory ===
 
To install multiple versions of GNU Octave on one system, it is recommended to use the <code>--prefix</code> option of the <code>configure</code> script.  With this option one can determine a custom installation directory, preferably within your user's home directory, to avoid elevated installation privileges.  One does not "clutter" the system by running <code>sudo make install</code> and the custom build Octave can coexist with, for example, your Linux distribution installation of Octave.
 
In order to start the custom build of Octave almost as convenient as the Linux distribution installation of Octave, one can create an alias within {{Path|.bashrc}}:
 
echo "alias myoctave='$HOME/my_octave/bin/octave'" >> ~/.bashrc
 
Then update your {{Path|.bashrc}} without doing logout and login:
 
  source $HOME/.bashrc
 
If you simply enter <code>octave</code>, you'll start your Linux distribution installation of Octave. But when you enter <code>myoctave</code>, you'll start your custom build of Octave inside your home directory.
 
=== Uninstall ===
 
# If you still have the {{Path|.build}} folder, just run <code>make uninstall</code> from it.
# Just delete the install folder, e.g. <code>rm -rf $HOME/my_octave</code>.
 
In any case, don't forget to remove any created ''alias'' entries in {{Path|~/.bashrc}}.
 
=== Large array support ===
 
: ''Main article: [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.]]''
 
== See also ==
 
* [https://hg.savannah.gnu.org/hgweb/octave/file/tip/README <code>README</code>] and [https://hg.savannah.gnu.org/hgweb/octave/file/tip/etc/HACKING.md <code>/etc/HACKING.md</code>] in the development repository.  
* https://octave.org/doc/interpreter/Installation.html
* [[MXE]] -- a more customized Octave build including many self-compiled tools.
 
== Footnotes ==
 
<references/>
 
[[Category:Building]]
[[Category:Building]]

Latest revision as of 01:01, 16 March 2022

This article provides general information about building GNU Octave from source (on Unix-like systems).

General steps[edit]

  1. Install all build dependencies (see below).
  2. Getting the Octave sources ...
(A) ... from the development repository (requires also Mercurial)
hg clone https://www.octave.org/hg/octave && \
cd octave                                  && \
./bootstrap
(B) ... from a release
wget https://ftpmirror.gnu.org/octave/octave-9.2.0.tar.gz && \
tar -xzf octave-9.2.0.tar.gz                               && \
cd octave-9.2.0
3. Configure, build, check, and install Octave
mkdir .build                            && \
cd    .build                            && \
./../configure --prefix=$HOME/my_octave && \ [1]
make -j2                                && \ [2]
make check                              && \
make install

Dependencies[edit]

Most of the dependencies given in this section can be very conveniently installed on many GNU/Linux systems.

Info icon.svg
For a quick way to install the required dependencies, see:

Dependencies marked with green background are required for building Octave. All other tools and libraries are recommended/optional, but very useful features (like the GUI, plotting, etc.) are likely to be disabled.

Build tools[edit]

Dependency Description License / Copyright
Autoconf Software configuration GNU GPL v3.0
Automake Makefile generator GNU GPL v3.0
C++, C, and Fortran compilers Compiling the source code GNU GPL v3.0
GNU Make Makefile processor GNU GPL v3.0
Libtool Dependency of automake Free Software Foundation
Unix utilities: gawk, gperf, less, ncurses Miscellaneous tasks GNU GPL v3.0
Bison Parser generator GNU GPL v3.0
Flex Lexical analyzer The Flex project

Documentation tools[edit]

Dependency Description License / Copyright
epstool Epstool is a utility to create or extract preview images in EPS files, fix bounding boxes and convert to bitmaps. GNU GPL v2.0
FTGL Portable font engine to perform font rendering for Octave’s OpenGL-based graphics functions. GNU GPL v2.0
GL2PS GL2PS is a C library providing high quality vector output for any OpenGL application. GNU LGPL v2.0
Texi2HTML Perl script which converts Texinfo source files to HTML output. GNU GPL v3.0
Texinfo Documentation system that uses a single source to produce both on-line information and printed output. GNU GPL v3.0
TeX Live TeX document production system including all the major TeX-related programs, macro packages, and fonts that are free software. Freely redistributable as defined by the Free Software Foundation

External tools and libraries[edit]

Dependency Description License / Copyright
BLAS Basic Linear Algebra Subroutine library Free - proper attribution request
LAPACK Linear Algebra Package Free - proper attribution request
PCRE Perl Compatible Regular Expression library Free
GNU Readline Command-line editing library GNU GPL v3.0
ARPACK-NG Solution of large-scale eigenvalue problems BSD like - various authors
cURL Library for transferring data with URL syntax Free Software -- main author
FFTW3 Library for computing discrete Fourier transforms MIT -- GNU GPL v2.0
FLTK Portable GUI toolkit GNU GPL v2.0 with static linking exception
fontconfig Library for configuring and customizing font access Provided "as is" -- various authors
FreeType Portable font engine compatible with GNU GPL v3.0
GL2PS OpenGL to PostScript printing library GNU GPL v2.0
GLPK GNU Linear Programming Kit GNU GPL v3.0
gnuplot Interactive graphics program Provided "as is" -- various authors
Magick++, e.g. GraphicsMagick++ Image processing library various -- integrates many third-party libs
HDF5 Library for manipulating portable data files BSD - like
JDK, e.g. OpenJDK Java programming language compiler and libraries GNU GPL v2.0
OpenGL API for portable 2D and 3D graphics Free specs -- license is driver dependent
PortAudio Audio I/O library Free software -- specific
Qhull Computational geometry library Free software -- specific
QRUPDATE QR factorization updating library GNU GPL v3.0
QScintilla Source code highlighter and manipulator; a Qt port of Scintilla GNU GPL v3.0
Qt Widget toolkit for creating graphical user interfaces GNU LGPL v3.0
RapidJSON A fast JSON parser/generator for C++ with both SAX/DOM style API MIT license
SuiteSparse Sparse matrix factorization library Main author
SUNDIALS IDA SUite of Nonlinear and DIfferential/ALgebraic equation Solvers - Initial value problems for Differential-Algebraic equation (DAE) systems BSD 3-Clause
zlib Data compression library Provided "as is" -- various authors

Tweaks[edit]

Install Octave in home directory[edit]

To install multiple versions of GNU Octave on one system, it is recommended to use the --prefix option of the configure script. With this option one can determine a custom installation directory, preferably within your user's home directory, to avoid elevated installation privileges. One does not "clutter" the system by running sudo make install and the custom build Octave can coexist with, for example, your Linux distribution installation of Octave.

In order to start the custom build of Octave almost as convenient as the Linux distribution installation of Octave, one can create an alias within .bashrc:

echo "alias myoctave='$HOME/my_octave/bin/octave'" >> ~/.bashrc

Then update your .bashrc without doing logout and login:

source $HOME/.bashrc

If you simply enter octave, you'll start your Linux distribution installation of Octave. But when you enter myoctave, you'll start your custom build of Octave inside your home directory.

Uninstall[edit]

  1. If you still have the .build folder, just run make uninstall from it.
  2. Just delete the install folder, e.g. rm -rf $HOME/my_octave.

In any case, don't forget to remove any created alias entries in ~/.bashrc.

Large array support[edit]

Main article: Enable large arrays: Build octave such that it can use arrays larger than 2Gb.

See also[edit]

Footnotes[edit]

  1. --prefix determines the installation location, see the Tweaks section for details. For more information about configuration options, type ./../configure --help.
  2. Depending on your system and processor count, use a larger number of parallel jobs, e.g. -j8.