# HG changeset patch # User Torsten # Date 1508697700 -7200 # Node ID 7a048619fda9ee04d48d0dcfa448b9a5192ba742 # Parent 37190507b5d7dfcfe546bbdcab75689cd242eaa5# Parent ef59a196c1557a48cd4cfcbbe8d4903119d86453 maint: merge away accidentally created head diff -r 37190507b5d7 -r 7a048619fda9 Makefile.am --- a/Makefile.am Sun Oct 22 20:32:22 2017 +0200 +++ b/Makefile.am Sun Oct 22 20:41:40 2017 +0200 @@ -120,7 +120,7 @@ COPYING \ INSTALL \ NEWS \ - README \ + README.md \ run-octave.in \ $(BUILT_DISTFILES) @@ -343,6 +343,13 @@ $(AM_V_at)rm -f bits/stl_algo.h .PHONY: nonexistent-file +## We have README.md, not README. This dummy rule prevents automake +## from complaining that we are not following the GNU coding standards. +## We don't generate README from README.md since it is probably more +## confusing to have both than to just have README.md. + +README: README.md + .gdbinit: etc/gdbinit @$(gdbinit_install_rule) diff -r 37190507b5d7 -r 7a048619fda9 README --- a/README Sun Oct 22 20:32:22 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -GNU Octave -- a high-level language for numerical computations. - -Copyright (C) 1996-2017 John W. Eaton - -Overview --------- - -GNU Octave is a high-level language, primarily intended for numerical -computations. It provides a convenient command line interface for -solving linear and nonlinear problems numerically. - -GNU Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3 of the License, or -(at your option) any later version. - -GNU Octave is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, see -. - -Availability ------------- - -The latest released version of Octave is always available via -anonymous ftp from ftp.gnu.org and its many mirror sites around the -world. You may also find links to binary distributions at -http://www.octave.org/download.html. The current development sources -may be found on Savannah (http://savannah.gnu.org/projects/octave) -under the Source Code tab. - -Installation ------------- - -Octave requires approximately 1.4 GB of disk storage to unpack and -compile from source (significantly less, 400 MB, if you don't compile -with debugging symbols). Once installed, Octave requires -approximately 350 MB of disk space (again, considerably less, 70 MB, -if you don't build shared libraries or the binaries and libraries do -not include debugging symbols). - -To compile Octave, you will need a recent version of GNU Make. You -will also need a recent version of g++ or another ANSI C++ compiler. -You will also need a Fortran 77 compiler or f2c. If you use f2c, you -will need a script like fort77 that works like a normal Fortran -compiler by combining f2c with your C compiler in a single script. - -YOU MUST HAVE GNU MAKE TO COMPILE OCTAVE. Octave's Makefiles use -features of GNU Make that are not present in other versions of make. -GNU Make is very portable and easy to install. - -See the notes in the files INSTALL.OCTAVE and the system-specific README -files in the etc directory of the Octave source distribution for more -specific installation instructions. - -Bugs and Patches ----------------- - -The file BUGS explains the recommended procedure for reporting bugs -or contributing patches. - -Documentation -------------- - -Octave's manual has been revised for version 3.4, but it is lagging a -bit behind the development of the software. In particular, there is -currently no complete documentation of the C++ class libraries. If -you notice omissions or inconsistencies, please report them on the -bug tracker at http://bugs.octave.org. Specific suggestions for ways -to improve Octave and its documentation are always welcome. Reports -with patches are even more welcome. - -Additional Information ----------------------- - -Up to date information about Octave is available on the WWW at the -URL http://www.octave.org, including archives of the help, bug, and -maintainers mailing lists. - - -Last updated: Fri, 10 Jun 2011 14:02:32 EDT diff -r 37190507b5d7 -r 7a048619fda9 README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Sun Oct 22 20:41:40 2017 +0200 @@ -0,0 +1,98 @@ +GNU Octave -- a high-level language for numerical computations {#mainpage} +============================================================== + +Copyright (C) 1996-2017 John W. Eaton + +Overview +-------- + +GNU Octave is a high-level interpreted language, primarily intended +for numerical computations. It provides capabilities for the +numerical solution of linear and nonlinear problems, and for +performing other numerical experiments. It also provides extensive +graphics capabilities for data visualization and manipulation. GNU +Octave is normally used through its interactive interface (CLI and +GUI), but it can also be used to write non-interactive programs. +The GNU Octave language is quite similar to Matlab so that most +programs are easily portable. + +GNU Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +GNU Octave is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +. + +Availability +------------ + +The latest released version of Octave is always available from + and many mirror sites around the +world. You may also find links to binary distributions at +. The current development +sources may be found under the Source Code tab on +[Savannah](https://savannah.gnu.org/projects/octave/). + +Installation +------------ + +Octave requires approximately 1.4 GB of disk storage to unpack and +compile from source (significantly less, 400 MB, if you don't compile +with debugging symbols). Once installed, Octave requires +approximately 350 MB of disk space (again, considerably less, 70 MB, +if you don't build shared libraries or the binaries and libraries do +not include debugging symbols). + +To compile Octave, you will need a recent version of: + +- [GNU Make](https://www.gnu.org/software/make/) +- [GNU G++](https://gcc.gnu.org/) or another C++11 compiler +- [GNU Fortran](https://gcc.gnu.org/fortran/), another Fortran 77 + compiler, or [f2c](http://www.netlib.org/f2c/) + +Octave's Makefiles use features of GNU Make that are not present in +other versions of make. If you use `f2c`, you will need a script +like `fort77` that works like a normal Fortran compiler by combining +`f2c` with your C compiler in a single script. + +See the notes in the files `INSTALL.OCTAVE` and the system-specific +`README` files in the `etc` directory of the Octave source +distribution for more detailed installation instructions. + +Bugs and Patches +---------------- + +The file `BUGS` explains the recommended procedure for reporting bugs +on the [bug tracker](http://bugs.octave.org) or contributing patches. + +Documentation +------------- + +* [Octave's manual](https://www.octave.org/doc/interpreter/) is a + comprehensive user guide covering introductive and more advanced + topics. +* [Octave's wiki](https://wiki.octave.org) is a user community page, + covering various topics and answering + [FAQ](https://wiki.octave.org/FAQ). +* [Octave's Doxygen](https://www.octave.org/doxygen/) documentation + explains the C++ class libraries. + +Partially, the up-to-dateness of the documentation is lagging a bit +behind the development of the software. If you notice omissions or +inconsistencies, please report them at our bug tracker. Specific +suggestions for ways to improve Octave and its documentation are +always welcome. Reports with patches are even more welcome. + +Additional Information +---------------------- + +Up to date information about Octave is available on the WWW at +, or ask for help via email +. diff -r 37190507b5d7 -r 7a048619fda9 bootstrap.conf --- a/bootstrap.conf Sun Oct 22 20:32:22 2017 +0200 +++ b/bootstrap.conf Sun Oct 22 20:41:40 2017 +0200 @@ -150,7 +150,7 @@ git 1.5.5 tar - " -checkout_only_file=etc/HACKING +checkout_only_file=etc/HACKING.md gnulib_tool_option_extras="--libtool" gnulib_name="libgnu" source_base="libgnu" @@ -174,7 +174,7 @@ ## with building the rest of Octave, and INSTALL, which is linked from ## gnulib/doc/INSTALL by the bootstrap script. - for f in NEWS README COPYING CITATION; do + for f in NEWS README.md COPYING CITATION; do if ! test -f $f; then echo "required file $f is missing" 2>&1 exit 1 diff -r 37190507b5d7 -r 7a048619fda9 configure.ac --- a/configure.ac Sun Oct 22 20:32:22 2017 +0200 +++ b/configure.ac Sun Oct 22 20:41:40 2017 +0200 @@ -65,7 +65,7 @@ AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([1.14 foreign -Wno-portability -Wno-override tar-ustar subdir-objects dist-lzip dist-xz]) +AM_INIT_AUTOMAKE([1.14 -Wno-portability -Wno-override tar-ustar subdir-objects dist-lzip dist-xz]) ## Add the option to enable silent rules and make silent rules the ## default behavior. Available since Automake 1.11 and included by diff -r 37190507b5d7 -r 7a048619fda9 doc/doxyhtml/Doxyfile.in --- a/doc/doxyhtml/Doxyfile.in Sun Oct 22 20:32:22 2017 +0200 +++ b/doc/doxyhtml/Doxyfile.in Sun Oct 22 20:41:40 2017 +0200 @@ -374,7 +374,9 @@ # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = @abs_top_srcdir@/src/ \ +INPUT = @abs_top_srcdir@/README.md \ + @abs_top_srcdir@/etc/HACKING.md \ + @abs_top_srcdir@/src/ \ @abs_top_srcdir@/liboctave/ \ @abs_top_srcdir@/libinterp \ @abs_top_srcdir@/libgui @@ -486,6 +488,34 @@ HTML_TIMESTAMP = YES +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- diff -r 37190507b5d7 -r 7a048619fda9 etc/HACKING --- a/etc/HACKING Sun Oct 22 20:32:22 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,392 +0,0 @@ --*- outline -*- - -This file attempts to describe the rules to use when hacking Octave. -DO NOT put this file into the distribution. - -* Working from the repository - -These notes are intended to help people working on sources cloned from -the savannah source code repository. -These requirements do not apply when building from a distribution tarball. - -* Quick start - - 1. Install all the required dependencies. Precisely how to do that - depends on what type of system you are using. There are more - details below. - - 2. Clone the Octave sources: - - hg clone http://www.octave.org/hg/octave - - 3. Change to the top-level directory of the Octave source tree and run - the bootstrap script: - - cd octave - ./bootstrap - - 4. Create a build directory, cd to it, then run configure and make: - - mkdir .build - cd .build - ../configure - make - -** Requirements - -We've opted to keep only the highest-level sources in the repository. -This eases our maintenance burden, (fewer merges, etc.), but imposes -more requirements on anyone wishing to build from the just-cloned -sources. For example, you have to use the latest stable versions of -the maintainer tools we depend upon, including: - - - Autoconf - - Automake - - Bison - - Flex - - Gnulib - - GNU Make - - gperf - - Gzip - - Libtool - - Mercurial - - Perl - - Rsync - - Tar - -In addition to these maintainer tools, Octave makes use of many external -libraries and packages. See the file doc/interpreter/install.txi for the -complete list of required and optional dependencies. - -Only building the initial full source tree will be a bit painful. -Later, after synchronizing from the repository, a plain `make' should -be sufficient. - -** First clone - -If you are reading these notes, you may have already managed to clone -this package from the repository. For the record, you will find all the -relevant information on downloading sources at: - - http://www.octave.org/download.html - -After cloning Octave, you will need to run the bootstrap script: - - $ ./bootstrap - -This script will examine the source tree and generate some Makefile -fragments, then run autotools scripts to generate Makefile.in files from -Makefile.am files and create the configure script. The bootstrap script -comes from gnulib, but is kept in the Octave source archive. It should -be updated from the gnulib sources as necessary. - -If you have a copy of gnulib in some directory apart from the Octave -source tree, then pass the name of the directory containing gnulib-tool -to the bootstrap script using the option: - - --gnulib-srcdir=DIRNAME - -If you have downloaded gnulib directly, DIRNAME will be the directory where -gnulib was unpacked. If you have installed gnulib using a package -manager, DIRNAME is likely to be /usr/bin or /usr/local/bin(where the -gnulib-tool script resides). - -By using an external gnulib directory, you can share a single gnulib source -tree among several projects. Since 2011, the gnulib sources are a Mercurial -subrepository, so they will be automatically updated to the -corresponding Mercurial revision if you update the working directory to -a past revision not too far in the past. - -Additional options besides --gnulib-srcdir can be passed to bootstrap and -they will be forwarded without modification to the gnulib bootstrap script. - -Once the bootstrap script completes successfully, you may configure and -build Octave. We recommend that you build Octave in a separate -directory tree from the sources. For example, if you have just finished -running the bootstrap script in the top-level source directory, run the -following commands to create a build tree, configure, and build Octave: - - $ mkdir .build - $ cd .build - $ ../configure - $ make - $ make check - -At this point, there should be no difference between your working tree -and the currently visited hg revision: - - $ hg diff - -should output no difference. - -** Coding style - -The most important advice is to follow any conventions you detect in the -file being edited. In addition, Octave maintainers have written a lot -on the subject. See http://wiki.octave.org/Contribution_guidelines - -* Bugs and patches - -See the file BUGS in this directory for more guidance on reporting bugs -and preparing patches. - -* Code layout - -An overview of the directory layout of Octave's source files: - - build-aux -- scripts which support the build process - - - doc -- Texinfo documentation for Octave - - - etc -- miscellaneous files, such as this HACKING howto - - - examples -- some example files (mkoctfile and mex samples, old class - programming interface) - - - gnulib -- gnulib subrepo. This is a clone of the gnulib source - tree maintained by the Octave project. The default - branch is identical to the upstream gnulib sources. - There is also an "octave-stable" branch that may - contain changes as needed for the "stable" branch in - the Octave archive. We usually don't want to update - gnulib sources when going from one stable point - release to the next, but we occasionally need to - include small updates. - - - libgnu -- gnulib sources that we use. The files here are - copied here from the gnulib directory by the - bootstrap script. - - - liboctave -- C++ interfaces to the numerical libraries, Fortran - numerical libraries, various OS facilities, and utility - functions - - array the base Array, NDArray, Matrix, and Sparse classes - - external various numerical libraries (mostly Fortran) - - amos bessel functions - - blas-xtra wrappers for blas functions used in Octave - - daspk large scale differential algebraic equation solver - - dasrt differential algebraic equation solver with root finding - - dassl differential-algebraic system solver - - fftpack subroutines for fast fourier transforms - - lapack-xtra wrappers for lapack functions used in Octave - - odepack ordinary differential equation solver - - ordered-qz code for ordering eigenvalues for QZ factorization - - quadpack subroutines for numerical integration - - ranlib random number generators - - slatec-err slatec error handling library - - slatec-fn various special function subroutines - - numeric C++ numerical algorithms and interfaces to the Fortran - algorithms - - operators code for operators that act on base classes (such as Array) - - system OS-related functions - - util utility and miscellaneous functions - - wrappers C++ wrappers for gnulib functions written in C - - libinterp -- the interpreter itself plus lots of infrastructure - around it. Octave's extensive octave_value class - hierarchy for polymorphically handling all Octave - types is defined here. The built-in functions are - also defined here. - - octave-value the octave_value class hierarchy. These are the - container classes that hold various Octave data - types like struct numerical arrays, structure - arrays, and cell arrays. - - parse-tree Classes that define the parse tree for the - interpreter - - corefcn statically linked DEFUN functions (callable from - the scripting langauge) as well as internal C++ - functions used by the interpreter. - - dldfcn dynamically linked DEFUN functions (callable - from the scripting language). If you see "help - foo" telling you that foo is defined in foo.oct, - then foo.cc will be found here and contain the - source code. - - operators definitions and template instantiations for - operators for all possible Octave type - combinations - - template-inst some C++ template instantiations - - - libgui -- the graphical user interface of GNU Octave - - graphics Qt graphics toolkit (OpenGL plotting) - - kb-layouts various files need by the qterminal widget that has - been derived from Konsole - - languages translation files and list of translators - - qterminal Qt terminal widget - - src source files for the GUI - - icons icon files that will be compiled into the - executable via a resource file - - m-editor source files for the m-file editor - - qtinfo source files for the Qt texinfo browser - - - m4 -- m4 scripts used by configure during the build process - - - scripts -- functions written in the Octave language - - @ftp ftp object class - - +containers container classes (Map) - - audio play and record sound files (system dependent) - - deprecated older deprecated functions - - elfun elementary mathematical functions - - general utility functions - - geometry geometry algorithms - - gui User-Interface (UI) functions - - help help subsystem functions - - image image processing - - io input/output functions - - java java/Octave interface - - linear-algebra linear algebra - - miscellaneous stuff that doesn't fit anywhere else - - ode Ordinary Differential Equations - - optimization zero finders and minimizers - - path functions for path manipulation - - pkg the package manager - - plot plotting functions - - polynomial polynomial manipulation - - prefs user-defined preferences - - profiler code profiler for performance - - set set manipulation - - signal signal processing - - sparse sparse matrix support - - specfun special mathematical functions - - special-matrix functions for generating special types of matrices - - startup initialization functions - - statistics statistical functions, distributions, and tests - - strings character string manipulation - - testfun unit testing - - time time and date functions - - - src -- code for the actual executables that are created. This - includes octave, octave-cli, octave-gui, as well as - mkoctfile. - - - test -- tests for the interpreter - - *.tst fixed tests for the interpreter - - fntests.m script to run function tests embedded in C++ and - .m files - ----- -John W. Eaton -jwe@octave.org - -Last updated: Thu, 26 Jan 2017 08:29:19 EST - - -################################################################################ - -Copyright (C) 2009-2017 John W. Eaton - -This file is part of Octave. - -Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3 of the License, or -(at your option) any later version. - -Octave is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, see -. - - -This file was adapted for Octave from the HACKING file that is part of -GNU Bison, which contained the following Copyright notice: - - Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009 - Free Software Foundation, Inc. - - This file is part of GNU Bison. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . diff -r 37190507b5d7 -r 7a048619fda9 etc/HACKING.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/HACKING.md Sun Oct 22 20:41:40 2017 +0200 @@ -0,0 +1,344 @@ +Hacking Octave +============== + +This file attempts to describe the rules to use when hacking the +Octave sources cloned from the Savannah source code +[repository](https://hg.savannah.gnu.org/hgweb/octave/). +**DO NOT** put this file into the distribution. These requirements +do not apply when building from a distribution tarball. + +Quick start +----------- + +1. Install all the required dependencies. Precisely how to do that + depends on what type of system you are using. There are more + details below. + +2. Clone the Octave sources: + + hg clone https://www.octave.org/hg/octave + +3. Change to the top-level directory of the Octave source tree and + run the `bootstrap` script: + + cd octave + ./bootstrap + +4. Create a build directory, `cd` to it, then run `configure` and + `make`, or `make -jX` (to run `X` simultaneous jobs): + + mkdir .build + cd .build + ../configure + make -j2 + +Requirements +------------ + +We've opted to keep only the highest-level sources in the repository. +This eases our maintenance burden, (fewer merges, etc.), but imposes +more requirements on anyone wishing to build from the just-cloned +sources. For example, you have to use the latest stable versions of +the maintainer tools we depend upon. These include: + +- [Autoconf](https://www.gnu.org/software/autoconf/) +- [Automake](https://www.gnu.org/software/automake/) +- [Bison](https://www.gnu.org/software/bison/) +- [Flex](https://www.gnu.org/software/flex/) +- [Gnulib](https://www.gnu.org/software/gnulib/) +- [GNU Make](https://www.gnu.org/software/make/) +- [gperf](https://www.gnu.org/software/gperf/) +- [Gzip](https://www.gnu.org/software/gzip/) +- [Libtool](https://www.gnu.org/software/libtool/) +- [Mercurial](https://www.mercurial-scm.org/) +- [Perl](https://www.cpan.org/) +- [Rsync](https://samba.anu.edu.au/rsync/) +- [Tar](https://www.gnu.org/software/tar/) + +In addition to these maintainer tools, Octave makes use of many +external libraries and packages. See `doc/interpreter/install.txi` +for the complete list of required and optional dependencies. + +Only building the initial full source tree will be a bit painful. +Later, after synchronizing from the repository, a plain `make` should +be sufficient. + +First clone +----------- + +If you are reading these notes, you may have already managed to clone +this package from the repository. For the record, you will find all +the relevant information on downloading sources at: + + + +After cloning Octave, you will need to run the `bootstrap` script: + + ./bootstrap + +This script will examine the source tree and generate some `Makefile` +fragments, then run autotools scripts to generate `Makefile.in` files +from `Makefile.am` files and create the `configure` script. The +`bootstrap` script comes from gnulib, but is kept in the Octave +source archive. It should be updated from the gnulib sources as +necessary. + +If you have a copy of gnulib in some directory apart from the Octave +source tree, then pass the name of the directory containing +`gnulib-tool` to the `bootstrap` script using the option: + + --gnulib-srcdir=DIRNAME + +If you have downloaded gnulib directly, `DIRNAME` will be the +directory where gnulib was unpacked. If you have installed gnulib +using a package manager, `DIRNAME` is likely to be `/usr/bin` or +`/usr/local/bin` (where the gnulib-tool script resides). + +By using an external gnulib directory, you can share a single gnulib +source tree among several projects. Since 2011, the gnulib sources +are a Mercurial subrepository of the Octave repository, so they will +be automatically updated to the corresponding Mercurial revision if +you update the working directory to a past revision not too far in +the past. + +Additional options besides `--gnulib-srcdir` can be passed to +`bootstrap` and they will be forwarded without modification to the +gnulib `bootstrap` script. + +Once the `bootstrap` script completes successfully, you may configure +and build Octave. We recommend that you build Octave in a separate +directory tree from the sources. For example, if you have just +finished running the `bootstrap` script in the top-level source +directory, run the following commands to create a build tree, +configure, and build Octave: + + mkdir .build + cd .build + ../configure + make -j2 + make check + +The `-j2` after the first `make` call means, that two jobs run +simultaneously. This number may be increased depending on your +system. At this point, there should be no difference between your +working tree and the currently visited hg revision: + + hg diff + +should output no difference. + +Coding style +------------ + +The most important advice is to follow any conventions you detect +in the file being edited. In addition, Octave maintainers have +written a lot on the subject. See +. + +Bugs and patches +---------------- + +See the file BUGS in this directory for more guidance on reporting bugs +and preparing patches. + +Source code directory layout +---------------------------- + +An overview of the directory layout of Octave's source files: + +- `build-aux` + scripts which support the build process. + +- `doc` + Texinfo and Doxygen documentation for Octave. + +- `etc` + miscellaneous files, such as this `HACKING` howto. + +- `examples` + some example files (`mkoctfile` and mex samples, old class + programming interface). + +- `gnulib` + gnulib subrepo. This is a clone of the gnulib source tree + maintained by the Octave project. The default branch is + identical to the upstream gnulib sources. There is also an + `octave-stable` branch that may contain changes as needed for + the `stable` branch in the Octave archive. We usually don't + want to update gnulib sources when going from one stable point + release to the next, but we occasionally need to include small + updates. + +- `libgnu` + gnulib sources that we use. The files here are copied here from + the gnulib directory by the `bootstrap` script. + +- `liboctave` + C++ interfaces to the numerical libraries, Fortran numerical + libraries, various OS facilities, and utility functions. + - `array` + the base `Array`, `NDArray`, `Matrix`, and `Sparse` classes. + - `external` + various numerical libraries (mostly Fortran). + - `amos` bessel functions + - `blas-xtra` wrappers for blas functions used in Octave + - `daspk` large scale differential algebraic equation solver + - `dasrt` differential algebraic equation solver with root finding + - `dassl` differential-algebraic system solver + - `fftpack` subroutines for fast fourier transforms + - `lapack-xtra` wrappers for lapack functions used in Octave + - `odepack` ordinary differential equation solver + - `ordered-qz` code for ordering eigenvalues for QZ factorization + - `quadpack` subroutines for numerical integration + - `ranlib` random number generators + - `slatec-err` slatec error handling library + - `slatec-fn` various special function subroutines + - `numeric` + C++ numerical algorithms and interfaces to the Fortran + algorithms. + - `operators` + code for operators that act on base classes (such as `Array`). + - `system` + OS-related functions. + - `util` + utility and miscellaneous functions. + - `wrappers` + C++ wrappers for gnulib functions written in C. + +- `libinterp` + the interpreter itself plus lots of infrastructure around it. + Octave's extensive `octave_value` class hierarchy for + polymorphically handling all Octave types is defined here. + The built-in functions are also defined here. + - `octave-value` + the `octave_value` class hierarchy. These are the container + classes that hold various Octave data types like struct + numerical arrays, structure arrays, and cell arrays. + - `parse-tree` + Classes that define the parse tree for the interpreter. + - `corefcn` + statically linked `DEFUN` functions (callable from the + scripting langauge) as well as internal C++ functions used by + the interpreter. + - `dldfcn` + dynamically linked `DEFUN` functions (callable from the + scripting language). If you see `help foo` telling you that + `foo` is defined in `foo.oct`, then `foo.cc` will be found + here and contain the source code. + - `operators` + definitions and template instantiations for operators for all + possible Octave type combinations. + - `template-inst` + some C++ template instantiations. + + +- `libgui` + the graphical user interface of GNU Octave. + - `graphics` + Qt graphics toolkit (OpenGL plotting). + - `kb-layouts` + various files need by the qterminal widget that has been + derived from Konsole. + - `languages` + translation files and list of translators. + - `qterminal` + Qt terminal widget. + - `src` + source files for the GUI + - `icons` + icon files that will be compiled into the executable via a + resource file. + - `m-editor` + source files for the m-file editor. + - `qtinfo` + source files for the Qt texinfo browser. + +- `m4` m4 scripts used by configure during the build process. + +- `scripts` functions written in the Octave language. + - `@ftp` ftp object class + - `+containers` container classes (Map) + - `audio` play and record sound files (system dependent) + - `deprecated` older deprecated functions + - `elfun` elementary mathematical functions + - `general` utility functions + - `geometry` geometry algorithms + - `gui` User-Interface (UI) functions + - `help` help subsystem functions + - `image` image processing + - `io` input/output functions + - `java` java/Octave interface + - `linear-algebra` linear algebra + - `miscellaneous` stuff that doesn't fit anywhere else + - `ode` Ordinary Differential Equations + - `optimization` zero finders and minimizers + - `path` functions for path manipulation + - `pkg` the package manager + - `plot` plotting functions + - `polynomial` polynomial manipulation + - `prefs` user-defined preferences + - `profiler` code profiler for performance + - `set` set manipulation + - `signal` signal processing + - `sparse` sparse matrix support + - `specfun` special mathematical functions + - `special-matrix` functions for generating special types of matrices + - `startup` initialization functions + - `statistics` statistical functions, distributions, and tests + - `strings` character string manipulation + - `testfun` unit testing + - `time` time and date functions + +- `src` + code for the actual executables that are created. This includes + `octave`, `octave-cli`, `octave-gui`, as well as `mkoctfile`. + +- `test` + tests for the interpreter. + - `*.tst` + fixed tests for the interpreter. + - `fntests.m` + script to run function tests embedded in C++ and .m files. + + +################################################################################ + +Copyright (C) 2009-2017 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +Octave is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +. + + +This file was adapted for Octave from the HACKING file that is part of +GNU Bison, which contained the following Copyright notice: + + Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. + + This file is part of GNU Bison. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . diff -r 37190507b5d7 -r 7a048619fda9 libgui/src/m-editor/file-editor-tab.cc --- a/libgui/src/m-editor/file-editor-tab.cc Sun Oct 22 20:32:22 2017 +0200 +++ b/libgui/src/m-editor/file-editor-tab.cc Sun Oct 22 20:41:40 2017 +0200 @@ -20,7 +20,7 @@ */ -//! @file A single GUI file tab. +//! @file file-editor-tab.cc A single GUI file tab. //! //! This interfaces QsciScintilla with the rest of Octave. diff -r 37190507b5d7 -r 7a048619fda9 libinterp/octave-value/ov-null-mat.cc --- a/libinterp/octave-value/ov-null-mat.cc Sun Oct 22 20:32:22 2017 +0200 +++ b/libinterp/octave-value/ov-null-mat.cc Sun Oct 22 20:41:40 2017 +0200 @@ -99,18 +99,38 @@ Return true if @var{x} is a special null matrix, string, or single quoted string. -Indexed assignment with such a value on the right-hand side should delete -array elements. This function should be used when overloading indexed -assignment for user-defined classes instead of @code{isempty}, to -distinguish the cases: +Indexed assignment with such a null value on the right-hand side should delete +array elements. This function is used in place of @code{isempty} when +overloading the indexed assignment method (@code{subsasgn}) for user-defined +classes. @code{isnull} is used to distinguish between these two cases: + +@code{@var{A}(@var{I}) = []} + +and + +@code{@var{X} = []; @var{A}(@var{I}) = @var{X}} + +In the first assignment, the right-hand side is @code{[]} which is a special +null value. As long as the index @var{I} is not empty, this code should +delete elements from @var{A} rather than perform assignment. -@table @asis -@item @code{A(I) = []} -This should delete elements if @code{I} is nonempty. +In the second assignment, the right-hand side is empty (because @var{X} is +@code{[]}), but it is @strong{not} null. This code should assign the empty +value to elements in @var{A}. + +An example from Octave's built-in char class demonstrates the interpreter +behavior when @code{isnull} is used correctly. -@item @code{X = []; A(I) = X} -This should give an error if @code{I} is nonempty. -@end table +@example +@group +str = "Hello World"; +nm = "Wally"; +str(7:end) = nm # indexed assignment + @result{} str = Hello Wally +str(7:end) = "" # indexed deletion + @result{} str = Hello +@end group +@end example @seealso{isempty, isindex} @end deftypefn */) { diff -r 37190507b5d7 -r 7a048619fda9 src/main.in.cc --- a/src/main.in.cc Sun Oct 22 20:32:22 2017 +0200 +++ b/src/main.in.cc Sun Oct 22 20:41:40 2017 +0200 @@ -417,21 +417,3 @@ return retval; } - -/*! -@mainpage Source code documentation for GNU Octave - -GNU Octave is a high-level language, primarily intended for numerical -computations. It provides a convenient interactive command line -interface for solving linear and nonlinear problems numerically, and -for performing other numerical experiments. It may also be used as a -batch-oriented language for data processing. - -GNU Octave is free software. You may redistribute it and/or modify it -under the terms of the GNU -General Public License as published by the Free Software Foundation. - -This is the developer documentation for Octave's own source code. It is -intended to help for hacking Octave. It may also be useful for -understanding the Octave API when writing your own .oct files. -*/