Editing Building

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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 '''building GNU Octave''' from source (on Unix-like systems).''
: '' This article provides general information about building GNU Octave from source.''
 
:*''If you just want to '''install GNU Octave''', see [[:Category:Installation]].''
:*''For '''MS Windows''', read [[Building on Microsoft Windows]] and [[Windows Installer]].''
:*''For '''macOS''', read [[Octave for macOS]].''


== 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 ...
::(A) ... from the development repository (requires also [https://www.mercurial-scm.org/ Mercurial])
#* ... 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>
::(B) ... from a release
::* ... 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, see the [[#Install Octave in home directory|Tweaks section]] for details. For more information about configuration options, type <code>./../configure --help</code>.</ref>
  ./../configure --prefix=$HOME/my_octave && \ <ref><code>--prefix</code> determines the installation location.</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.


{{Note|For a quick way to install the required dependencies, see:
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.
* [[Octave for Debian systems#The right way|Debian / Ubuntu]]
* [[Octave for Arch Linux|Arch Linux]]
* [[Octave for Red Hat Linux systems|Fedora / RedHat / CentOS]]}}


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.geuz.org/gl2ps/ GL2PS]
| OpenGL to PostScript printing library
| GNU GPL v2.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
|-
|-
| Magick++, e.g. [http://www.graphicsmagick.org GraphicsMagick++]
| [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
|-
| 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]
| [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.portaudio.com/ PortAudio]
| Audio I/O library
| Free software -- specific
|-
|-
| [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
|-
| [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]
| [http://faculty.cse.tamu.edu/davis/suitesparse.html SuiteSparse]
| Sparse matrix factorization library
| Sparse matrix factorization library
| Main author
| Main author
|-
| [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]
| [https://zlib.net zlib]
Line 231: Line 196:
== Tweaks ==
== Tweaks ==


=== Install Octave in home directory ===
Installing in your home directory is a method to install GNU Octave next to your repository installation at the same time. This works with every Linux distribution and is especially for old Ubuntu LTS versions very useful!


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.
One advantage is that you do not clutter your system by running ''sudo make install''.
Another advantage is that you can keep your Octave installation that is provided by your distribution.


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}}:
=== Create a smart .bashrc entry ===


  echo "alias myoctave='$HOME/my_octave/bin/octave'" >> ~/.bashrc
  echo "alias octave38='~/.octave38/bin/octave'" >> ~/.bashrc
. ~/.bashrc # this will update your bashrc without doing logout and login!


Then update your {{Path|.bashrc}} without doing logout and login:
If you simply enter ''octave'', you'll start your repository installation provided by your distribution. But when you enter ''octave38'', you'll start your new snappy octave version installed to your home directory.


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.
=== 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.


=== Uninstall ===
=== Uninstall ===
Line 251: Line 250:


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}}.
=== Large array support ===
: ''Main article: [[Enable large arrays: Build octave such that it can use arrays larger than 2Gb.]]''


== See also ==
== See also ==
Line 260: Line 255:
* [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
* [[MXE]] -- a more customized Octave build including many self-compiled tools.


== Footnotes ==
== Footnotes ==
Please note that all contributions to Octave may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Octave:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)

Templates used on this page: