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).''
General information about building the Octave source for different operating systems.
 
:*''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 ==
 
# 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 ==
 
Most of the dependencies given in this section can be very conveniently installed on many [[Octave for GNU/Linux|GNU/Linux]] systems.
 
{{Note|For a quick way to install the required dependencies, see:
* [[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.
 
=== Build tools ===
 
{| class="wikitable"
|-
! Dependency
! Description
! License / Copyright
|-style="background:lightgreen"
| [https://www.gnu.org/software/autoconf Autoconf]
| Software configuration
| GNU GPL v3.0
|-style="background:lightgreen"
| [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
| GNU GPL v3.0
|-style="background:lightgreen"
| [https://www.gnu.org/software/make GNU Make]
| Makefile processor
| GNU GPL v3.0
|-style="background:lightgreen"
| [https://www.gnu.org/software/libtool Libtool]
| Dependency of automake
| Free Software Foundation
|-style="background:lightgreen"
| Unix utilities: gawk, gperf, less, ncurses
| Miscellaneous tasks
| GNU GPL v3.0
|-
| [https://www.gnu.org/software/bison Bison]
| Parser generator
| GNU GPL v3.0
|-
| [https://www.gnu.org/software/flex Flex]
| Lexical analyzer
| The Flex project
|}
 
=== Documentation tools ===
 
{| class="wikitable"
|-
! Dependency
! Description
! License / Copyright
|-
| [http://www.ghostgum.com.au/software/epstool.htm 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
|-
| [https://www.freetype.org FTGL]
| Portable font engine to perform font rendering for Octave’s OpenGL-based graphics functions.
| GNU GPL v2.0
|-
| [http://geuz.org/gl2ps GL2PS]
| GL2PS is a C library providing high quality vector output for any OpenGL application.
| GNU LGPL v2.0
|-
| [https://www.nongnu.org/texi2html Texi2HTML]
| Perl script which converts Texinfo source files to HTML output.
| GNU GPL v3.0
|-
| [https://www.gnu.org/software/texinfo Texinfo]
| Documentation system that uses a single source to produce both on-line information and printed output.
| GNU GPL v3.0
|-
| [https://www.tug.org/texlive/ 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 ===
 
{| class="wikitable"
|-
! Dependency
! Description
! License / Copyright
|-style="background:lightgreen"
| [https://www.netlib.org/blas BLAS]
| Basic Linear Algebra Subroutine library
| Free - proper attribution request
|-style="background:lightgreen"
| [https://netlib.org/lapack LAPACK]
| Linear Algebra Package
| Free - proper attribution request
|-style="background:lightgreen"
| [https://www.pcre.org PCRE]
| Perl Compatible Regular Expression library
| Free
|-style="background:lightgreen"
| [https://www.gnu.org/software/readline GNU Readline]
| Command-line editing library
| GNU GPL v3.0
|-
| [https://github.com/opencollab/arpack-ng ARPACK-NG]
| Solution of large-scale eigenvalue problems
| BSD like - various authors
|-
| [https://curl.haxx.se cURL]
| Library for transferring data with URL syntax
| Free Software -- main author
|-
| [http://www.fftw.org FFTW3]
| Library for computing discrete Fourier transforms
| MIT -- GNU GPL v2.0
|-
| [https://www.fltk.org FLTK]
| Portable GUI toolkit
| GNU GPL v2.0 with static linking exception
|-
| [https://www.freedesktop.org/wiki/Software/fontconfig fontconfig]
| Library for configuring and customizing font access
| Provided "as is" -- various authors
|-
| [https://www.freetype.org FreeType]
| Portable font engine
| 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]
| GNU Linear Programming Kit
| GNU GPL v3.0
|-
| [http://www.gnuplot.info gnuplot]
| Interactive graphics program
| Provided "as is" -- various authors
|-
| Magick++, e.g. [http://www.graphicsmagick.org GraphicsMagick++]
| Image processing library
| various -- integrates many third-party libs
|-
| [https://www.hdfgroup.org/solutions/hdf5 HDF5]
| Library for manipulating portable data files
| 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]
| API for portable 2D and 3D graphics
| Free specs -- license is driver dependent
|-
| [http://www.portaudio.com/ PortAudio]
| Audio I/O library
| Free software -- specific
|-
| [http://www.qhull.org Qhull]
| Computational geometry library
| Free software -- specific
|-
| [http://sourceforge.net/projects/qrupdate QRUPDATE]
| QR factorization updating library
| 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]
| Sparse matrix factorization library
| 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]
| Data compression library
| Provided "as is" -- various authors
|}
 
== Tweaks ==
 
=== 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]]
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: