Editing Building
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
:''This article provides general information about | : '' This article provides general information about building GNU Octave from source.'' | ||
== General steps == | == General steps == | ||
Line 9: | Line 5: | ||
# Install all [[#Dependencies|build dependencies]] (see below). | # Install all [[#Dependencies|build dependencies]] (see below). | ||
# Getting the Octave sources ... | # Getting the Octave sources ... | ||
#* ... from the development repository | |||
<div style="margin-left:5em;"> | <div style="margin-left:5em;"> | ||
hg clone https://www.octave.org/hg/octave && \ | hg clone https://www.octave.org/hg/octave && \ | ||
Line 15: | Line 11: | ||
./bootstrap | ./bootstrap | ||
</div> | </div> | ||
:: | ::* ... from a release | ||
<div style="margin-left:5em;"> | <div style="margin-left:5em;"> | ||
wget https://ftpmirror.gnu.org/octave/octave-{{Release}}.tar.gz && \ | wget https://ftpmirror.gnu.org/octave/octave-{{Release}}.tar.gz && \ | ||
Line 25: | Line 21: | ||
mkdir .build && \ | mkdir .build && \ | ||
cd .build && \ | cd .build && \ | ||
./../configure --prefix=$HOME/my_octave && \ <ref><code>--prefix</code> determines the installation location | ./../configure --prefix=$HOME/my_octave && \ <ref><code>--prefix</code> determines the installation location. See [[#Install Octave in home directory|Tweaks section]] for details.</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 -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 check && \ | ||
Line 33: | Line 29: | ||
== Dependencies == | == Dependencies == | ||
Most of the dependencies given in this section can be very conveniently installed on many [[Octave for GNU/Linux|GNU/Linux]] systems. | Most of the dependencies given in this section can be very conveniently installed on many [[Octave for GNU/Linux|GNU/Linux]] systems. Please read the respective wiki page for your distribution on the [[Octave for GNU/Linux]] page. | ||
On [[Octave for Microsoft Windows|MS Windows]] and [[Octave for macOS|macOS]] systems the generic Octave build process described on this page needs some more effort to fulfill the described build dependencies. Please read [[Octave for Microsoft Windows]] and [[Octave for macOS]] for information how to build Octave for the respective systems. | |||
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. | 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. | ||
Line 163: | Line 156: | ||
| Portable font engine | | Portable font engine | ||
| compatible with GNU GPL v3.0 | | compatible with GNU GPL v3.0 | ||
|- | |- | ||
| [https://www.gnu.org/software/glpk GLPK] | | [https://www.gnu.org/software/glpk GLPK] | ||
Line 176: | Line 165: | ||
| Provided "as is" -- various authors | | Provided "as is" -- various authors | ||
|- | |- | ||
| | | [http://www.graphicsmagick.org GraphicsMagick++] | ||
| Image processing library | | Image processing library | ||
| various -- integrates many third-party libs | | various -- integrates many third-party libs | ||
Line 183: | Line 172: | ||
| Library for manipulating portable data files | | Library for manipulating portable data files | ||
| BSD - like | | BSD - like | ||
|- | |- | ||
| [https://www.opengl.org OpenGL] | | [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 | ||
|- | |- | ||
| [http://www.qhull.org Qhull] | | [http://www.qhull.org Qhull] | ||
Line 203: | Line 184: | ||
| QR factorization updating library | | QR factorization updating library | ||
| GNU GPL v3.0 | | GNU GPL v3.0 | ||
|- | |- | ||
| [http://faculty.cse.tamu.edu/davis/suitesparse.html SuiteSparse] | | [http://faculty.cse.tamu.edu/davis/suitesparse.html SuiteSparse] | ||
| Sparse matrix factorization library | | Sparse matrix factorization library | ||
| Main author | | Main author | ||
|- | |- | ||
| [https://zlib.net zlib] | | [https://zlib.net zlib] | ||
Line 252: | Line 217: | ||
In any case, don't forget to remove any created ''alias'' entries in {{Path|~/.bashrc}}. | In any case, don't forget to remove any created ''alias'' entries in {{Path|~/.bashrc}}. | ||
: '' | === Managing your own program hierarchy (optional) === | ||
If you intend to compile for yourself a lot of utilities, you may use a specific "usr" hierachy into your own dir (Linux from scratch way). Go back to step 2, and configure octave as: | |||
./configure --prefix=${HOME}/usr | |||
The other steps (make; make install) do not change. In order to use your own hierachy, you should set a few environment variables in your .profile: | |||
# set LD_LIBRARY_PATH if not set | |||
(echo $LD_LIBRARY_PATH | grep -q lib) || export LD_LIBRARY_PATH="/usr/local/lib:$HOME/usr/lib:$HOME/usr/local/lib" | |||
# set PATH so it includes user's private bin if it exists | |||
if [ -d "$HOME/bin" ] ; then | |||
(echo $PATH | grep -q $HOME/usr/bin) || export PATH="$HOME/bin:$HOME/usr/bin:$HOME/usr/local/bin:$PATH" | |||
fi | |||
# set MANPATH so it includes user's private bin if it exists | |||
if [ -d "$HOME/usr/share/man" ] ; then | |||
(echo $MANPATH | grep -q $HOME/usr/share/man) || export MANPATH="$HOME/usr/local/share/man:$HOME/usr/share/man:`manpath -q`" | |||
fi | |||
if [ -d "$HOME/usr/share/info" ]; then | |||
export INFOPATH="$INFOPATH:$HOME/usr/share/info" | |||
fi | |||
if [ -d "$HOME/usr/lib/python" ]; then | |||
(echo $PYTHONPATH | grep -q $HOME/usr/lib/python) || export PYTHONPATH="$HOME/usr/local/lib/python:$HOME/usr/lib/python" | |||
fi | |||
if [ -d "$HOME/usr/lib/pkgconfig" ]; then | |||
(echo $PKG_CONFIG_PATH | grep -q $HOME/usr/lib/pkgconfig) || export PKG_CONFIG_PATH="$HOME/usr/lib/pkgconfig" | |||
fi | |||
This way, most ordinary commands like "man octave", "info octave", or launching octave itself, will first explore your own hierachy. | |||
== See also == | == See also == | ||
Line 260: | Line 257: | ||
* [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://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 | * https://octave.org/doc/interpreter/Installation.html | ||
== Footnotes == | == Footnotes == |