changeset 24167:7a048619fda9

maint: merge away accidentally created head
author Torsten <mttl@mailbox.org>
date Sun, 22 Oct 2017 20:41:40 +0200
parents 37190507b5d7 (current diff) ef59a196c155 (diff)
children ab6a631abe52
files README etc/HACKING
diffstat 11 files changed, 515 insertions(+), 511 deletions(-) [+]
line wrap: on
line diff
--- 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)
 
--- 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
-<http://www.gnu.org/licenses/>.
-
-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
--- /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
+<https://www.gnu.org/licenses/>.
+
+Availability
+------------
+
+The latest released version of Octave is always available from
+<https://ftp.gnu.org/gnu/octave/> and many mirror sites around the
+world.  You may also find links to binary distributions at
+<https://www.octave.org/download.html>.  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
+<https://www.octave.org>, or ask for help via email
+<help@octave.org>.
--- 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
--- 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
--- 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
 #---------------------------------------------------------------------------
--- 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 <http://www.gnu.org/software/autoconf/>
-  - Automake <http://www.gnu.org/software/automake/>
-  - Bison <http://www.gnu.org/software/bison/>
-  - Flex <http://www.gnu.org/software/flex/>
-  - Gnulib <http://www.gnu.org/software/gnulib/>
-  - GNU Make <http://www.gnu.org/software/make/>
-  - gperf <http://www.gnu.org/software/gperf/>
-  - Gzip <http://www.gnu.org/software/gzip/>
-  - Libtool <http://www.gnu.org/software/libtool/>
-  - Mercurial <http://mercurial.selenic.com/>
-  - Perl <http://www.cpan.org/>
-  - Rsync <http://samba.anu.edu.au/rsync/>
-  - Tar <http://www.gnu.org/software/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
-<http://www.gnu.org/licenses/>.
-
-
-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 <http://www.gnu.org/licenses/>.
--- /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:
+
+  <https://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 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
+<https://wiki.octave.org/Contribution_guidelines>.
+
+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
+<https://www.gnu.org/licenses/>.
+
+
+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 <https://www.gnu.org/licenses/>.
--- 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.
 
--- 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 */)
 {
--- 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 <a href="http://www.gnu.org/licenses/">GNU
-General Public License</a> 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.
-*/