changeset 24162:312c00dd723a

use markdown for README and etc/HACKING files * README.md: Rename from README. * etc/HACKING.md: Rename from etc/HACKING. * Makefile.am (README): New dummy rule. (EXTRA_DIST): Update list. * configure.ac: Delete "foreign" from list of automake options. * bootstrap.conf: Check for README.md, not README.
author John W. Eaton <jwe@octave.org>
date Fri, 20 Oct 2017 12:11:58 -0400
parents 48cf0f4cc7c8
children 7ff6daa6b558
files Makefile.am README README.md bootstrap.conf configure.ac etc/HACKING etc/HACKING.md
diffstat 7 files changed, 481 insertions(+), 480 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.am	Sat Oct 21 14:35:58 2017 -0700
+++ b/Makefile.am	Fri Oct 20 12:11:58 2017 -0400
@@ -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	Sat Oct 21 14:35:58 2017 -0700
+++ /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	Fri Oct 20 12:11:58 2017 -0400
@@ -0,0 +1,85 @@
+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
--- a/bootstrap.conf	Sat Oct 21 14:35:58 2017 -0700
+++ b/bootstrap.conf	Fri Oct 20 12:11:58 2017 -0400
@@ -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	Sat Oct 21 14:35:58 2017 -0700
+++ b/configure.ac	Fri Oct 20 12:11:58 2017 -0400
@@ -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/etc/HACKING	Sat Oct 21 14:35:58 2017 -0700
+++ /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	Fri Oct 20 12:11:58 2017 -0400
@@ -0,0 +1,386 @@
+-*- 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
+
+
+################################################################################
+
+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/>.