/lossless

Primary LanguageCWebOtherNOASSERTION

Note that is project is very much a work in progress in its early
stages. Although the intent is to make something which can be
approached by anyone, it isn't. It does work, however, for what it
is and so if doing nothing more than

        make test

doesn't eventually say

        All tests successful.

hopefully in a reassuring green colour then that's a major bug which
I would very much like to know about. Please see the file BUGS for
more information about known bugs and how to report any more that
you find.

On the other hand if you're prepared to roll your sleeves up you
can see the file HACKING for a brief overview of the lossless source
files and the run-time.

The rest of this file is written as though it's a normal README
written for a project which works and is complete.

Building Lossless is on the insides a two stage process: the first
stage, which can be bypassed, processes the CWEB sources (*.w) to
produce the printer (*.tex) and C (*.c & *.h) sources. The second
stage compiles the C sources to an executable, or the printer sources
to a readable document.

The Makefile has been carefully crafted to work with BSD and GNU
make but this is probably an impossible pipe dream in the long term.
Apart from the author's OpenBSD, Lossless has so far been known in
the past to build on Debian (et al) and FreeBSD.

TeX/CWEB:

        The first build stage requires CWEB by Donald Knuth et al.
        This is distributed as part of the astronomically huge TeX
        Live system from https://tug.org/texlive/ which is available
        in most unix systems (OpenBSD calls its "texlive_texmf-minimal";
        Debian and derivatives use "texlive-extra-utils"; to find
        the package yours provides it in look for one which contains
        the file "cwebmac.tex").

        The whole of TeX Live isn't necessary (TeX isn't needed to
        run Lossless at all, only for the printable literature); instead
        the original (tiny) CWEB can be downloaded from DEK's
        website. It has no dependencies other than a C compiler[*].
        Get it from https://www-cs-faculty.stanford.edu/~knuth/cweb.html

        Alternatively, even that isn't necessary --- the intermediate
        sources have been prepared in a downloadable archive available
        from http://zeus.jtan.com/~chohag/lossless/.

Quirks:

        The REPL has been removed from this development version and
        so there is no `all' or `lossless' make target. The main
        way to hack on lossless is through writing test cases and/or
        hacking on evaluate.la/barbaroi.ll --- see HACKING.

To build on OpenBSD:

        $ make test

Useful targets:

        $ make # or make all      Everything

        $ make clean all          Everything from scratch

        $ make lossless           Lossless executable

        $ make liblossless.so     As a linkable object

        $ make ffi.perl           Perl wrapper

        $ make test               Run losslees through a comprehensive test suite

The available documentation can be read from within the development
directory by updating MANPATH:

        Note that there have been significant changes since this
        documentation was first written which invalidates most of
        it. The point was to define the documentations *structure*
        though, and so it stays as-is for now. It's not like it's
        going to pollute anyone's manpage namespace.

        $ MANPATH=:$PWD/man
        $ make man/mandoc.db      Rebuild the manual pages' index

        nb. makewhatis includes backup files (*~) in its index.

[*] It's amazing to think that 40 year old code hasn't picked up
    any crutches to keep it going and that it still builds as-is
    on the systems today but that's what you come to expect with
    Donald Knuth.