All you need to know when hacking (modifying) GNU clisp or when building
it off the git repository.


Requirements
============

You will need reasonably recent versions of the build tools:

  * A C compiler; for the 'debug_gcsafety' build also a C++ compiler.
    Such as GNU GCC.
    + Homepage:
      http://gcc.gnu.org/

  * GNU automake
    + Homepage:
      http://www.gnu.org/software/automake/

  * GNU autoconf
    + Homepage:
      http://www.gnu.org/software/autoconf/

  * GNU m4
    + Homepage:
      http://www.gnu.org/software/m4/

  * Either an internet connection or a recent copy of GNU gnulib.
    + Homepage:
      http://www.gnu.org/software/gnulib/

  * GNU tar (for creating distributable tarballs)
    + Homepage:
      http://www.gnu.org/software/tar/

  * GNU Wget
    + Homepage:
      https://www.gnu.org/software/wget/

And, of course, the packages listed in the DEPENDENCIES file.


Building off the git repository
===============================

Checkout for users of GNU clisp
-------------------------------

If you don't intend to contribute to GNU clisp, only to grab the source and
build it, start with
  $ git clone https://gitlab.com/gnu-clisp/clisp.git

Checkout for contributors of GNU clisp
--------------------------------------

If you intend to contribute to GNU clisp, you need to (once)
  1. create a user account on gitlab.com,
  2. upload an SSH key of yours (see <https://gitlab.com/help/ssh/README>).

Then start with
  $ git clone git@gitlab.com:gnu-clisp/clisp.git

I also recommend
  $ git config user.name ...
  $ git config user.email ...
(see <https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup>)
and, since we don't want merge commits on the 'master' branch:
  $ git config pull.rebase true

For rebasing the ChangeLog file automatically, I invite you to install
git-merge-changelog
<http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob;f=lib/git-merge-changelog.c>
and configure it by adding lines such as these to clisp/.git/config:
[merge "merge-changelog"]
        name = GNU-style ChangeLog merge driver
        driver = /home/me/bin/git-merge-changelog %O %A %B

After the checkout
------------------

The repository contains a pre-built 'configure' script, therefore
you can proceed with the usual "./configure" immediately.


Submitting patches
==================

Patches should be submitted at https://sourceforge.net/p/clisp/patches/ .

To produce a sequence of patch files, you can use a shell command like
  $ git format-patch -3

For the style of a ChangeLog entry, see the "Change Logs" section of
the GNU coding standards:

  http://www.gnu.org/prep/standards/html_node/Change-Logs.html

Acceptable use of LLM generated code
------------------------------------

General-purpose LLMs as well as LLMs specialized for software programming
can produce ready-to-use and, in many cases, actually working code.

We need to avoid two problems with that:

  * Copyright and license issue: An LLM may regurgitate a piece of copyrighted
    code without the copyright header, thus violating the code's license.
    (Most code licenses require that the copyright header remains intact when
    the code is copied or becomes the basis of derivative works.)

  * Maintainability issues: Such generated code has initially not been
    reviewed by a human programmer. It is often greater in size than what a
    careful programmer would write. Sometimes it also lacks comments.
    People who use "vibe coding" often also observe that the code is of
    lower quality.
    Where software in general can be qualified as for long-term use vs.
    short-term use, vibe coding tends to be more suitable for short-term used
    software.

To this end:

  1) Code included in this package that comes from a single LLM prompt
     must be limited in size: it must be at most 5 lines long.

  2) As a submitter, you assert that you have reviewed such code that you
     submit.

Rule 1 guarantees that the LLM generated code size is smaller than the
"legally significant for copyright purposes" threshold, see
https://www.gnu.org/prep/maintain/html_node/Legally-Significant.html

Rule 2 encourages you to not submit unreviewed garbage.
