I am sponsoring the following fast track for myself - timeout 8/8/2008.
The binding is Minor. Most interfaces are uncommitted (exceptions
are detailed below).
-----------------------------------------------------------------------

This case proposes to integrate the GNU emacs text editor
into the SFW consolidation. GNU emacs comes from the GNU
project of the Free Software Foundation (FSF):

        http://www.gnu.org/software/emacs

Note that there are two emacs variants in wide use, GNU emacs,
and Xemacs. This case is for GNU emacs only.

The initial version to be integrated will be 22.1. This is
not the newest available version of emacs. It is however,
the last version released under the GPL version 2 license.
I anticipate that we will periodically update the version
of emacs we distribute, but any such updates must wait
until Sun works out how Solaris can use GPLv3 code.

Emacs will be delivered in four packages:

     SUNWemacs
        Core distribution, containing all files necessary to
        run emacs, but not including the actual emacs binaries.

     SUNWemacs-el
        Uncompiled LISP source files (.el), of interest to emacs
        programmers only. The compiled versions of these files
        (.elc) are included in the core SUNWemacs package.

     SUNWemacs-x
        Emacs binaries built with X11 support using the
        Athena (Xaw) toolkit. This package installs emacs
        as /usr/bin/emacs-x.

     SUNWemacs-nox
        Emacs binaries built as a pure tty based program, without
        any linkage to the system X11 libraries. This package
        installs emacs as /usr/bin/emacs-nox.

This decomposition follows the pattern set by Linux distributions
such as Ubuntu. Placing the executables in their own separate
packages serves two goals:

        1) Provide an extensible way to support different
           toolkit variants of emacs as they arise.

        2) Allow for system minimization.

Missing from the above discussion are emacs binaries built
using the GTK toolkit. GTK is the most desirable default
for Solaris, as it is the toolkit used by much of our Gnome
based desktop environment. At this time, the GTK version of
emacs 22.1 built for Solaris has problems that make it
unsuitable for delivery. However, I wish to make the eventual
delivery of it, or of other toolkit variants, part of this case.
If that should come to pass:

        - The package name will be SUNWemacs-gtk
        - The executable will be /usr/bin/emacs-gtk
        - The /usr/bin/emacs shell script will be updated
          to use it if installed, as with the other versions.

Any other toolkit variant that may appear in the future would
be handled similarly.

The /usr/bin/emacs command is a shell script, delivered by
SUNWemacs. This script execs the "best" version of emacs
installed on the system, where best is defined as:

        1) If /usr/bin/emacs-x exists, exec it.
        2) If /usr/bin/emacs-nox exists, exec it.
        3) If no emacs executables are present, issue
           an error to that effect and exit(1).

This use of a shell script for /usr/bin/emacs allows us to
seamlessly adjust to different systems having different executables
installed. It also allows us to introduce a new toolkit variant
(such as GTK), and to make that version the new default.

Although /usr/bin/emacs imposes our definition of "best", users
are able to run any version of emacs they wish, by directly using
the full name (emacs-x, emacs-nox, etc).

Files delivered:
----------------

     The files to be delivered are listed below, by package.
The details of the files found under /usr/lib and /usr/share
have been elided here, due to the number of files involved. All
such files are found under directories named 'emacs', which
establishes a filesystem namespace below which only emacs-related
files are found.

    The Sysv package file lists for these packages, containing
a complete list of all files to be delivered, are available
in the case materials. The names of these files are prefixed
with their package name (i.e. SUNWemacs.prototype_com).


     SUNWemacs:

        /usr/bin
                b2m
                ebrowse
                emacs
                emacsclient
                grep-changelog
                rcs-checkin

        /usr/gnu/bin:
                ctags
                etags

        /usr/gnu/share/man/man1:
                ctags.1
                etags.1

        /usr/lib/emacs/...              (private to emacs executables files)
        /usr/share/emacs/...            (Non-executable files used by emacs)
        /usr/share/info/...             (Documentation in GNU info format)

        /usr/share/man/man1:
                b2m.1
                ebrowse.1
                emacs-nox.1
                emacs-x.1
                emacs.1
                emacsclient.1
                grep-changelog.1
                rcs-checkin.1


     SUNWemacs-x:

        /usr/bin
                emacs-x                 (this is really isaexec)
                emacs-x-22.1            (hard link to emacs-x)

        /usr/bin/MACH32                 (MACH32 is one of: i86, sparcv7)
                emacs-x
                emacs-x-22.1            (hard link to emacs-x)

        /usr/bin/MACH64                 (MACH64 is one of: amd64, sparcv9)
                emacs-x
                emacs-x-22.1            (hard link to emacs-x)


     SUNWemacs-nox:

        /usr/bin
                emacs-nox               (this is really isaexec)
                emacs-nox-22.1          (hard link to emacs-nox)

        /usr/bin/MACH32                 (MACH32 is one of: i86, sparcv7)
                emacs-nox
                emacs-nox-22.1          (hard link to emacs-nox)

        /usr/bin/MACH64                 (MACH64 is one of: amd64, sparcv9)
                emacs-nox
                emacs-nox-22.1          (hard link to emacs-nox)


     SUNWemacs-el

        /usr/share/emacs/.../*.el.gz    (compressed LISP files)

Exported Interfaces:
--------------------

     All interfaces not explicitly listed here are Uncommitted.
This includes package names, and file paths:

     /usr/bin/emacs            Committed          Executable (script) location
     /usr/share/man/man1/emacs  Committed         Primary manpage location
     /usr/lib/emacs/...        Project Private    Private executable files


32 and 64-bit Binaries:
-----------------------
     The core of emacs is a LISP interpreter, and most of
the system is written in LISP. The implementation of this
interpreter imposes a limit on the maximum file size than
can be edited, as described here:

        http://www.emacswiki.org/cgi-bin/wiki/EmacsFileSizeLimit

In a 32-bit binary, this limit is currently 128MB, large enough
for most files, but not all (I frequently hit it when looking
at OSnet nighly build logs). The limit in a 64-bit emacs binary
is vastly larger. Hence, it is highly desirable to run the
64-bit version when possible. We will deliver both 32 and 64-bit
emacs binaries whenever possible, using isaexec in the usual way
to select the best version to execute at runtime.

This only applies to the main emacs binaries. The emacs package
delivers several auxiliary programs. I do not believe there is a
technical advantage to having 64-bit versions of these, so they
will be delivered as 32-bit only. The 64-bit emacs binaries can
interoperate with use these 32-bit programs, so there is no net
loss of functionality.


No /var/games/emacs:
--------------------
    The standard emacs package from the FSF delivers two
files into /var/games/emacs:

        /var/games/emacs/snake-scores
        /var/games/emacs/tetris-scores

To be useful, these files require the update-game-score
program (delivered with emacs as a private binary) to be
setuid. Linux distributions that package emacs usually do
not make update-game-score setuid, and do not deliver these
empty score files. We will follow their lead, and do the same.

An end user is free to make update-game-score setuid and
create the score files.


Versions Shown Are Subject To Change:
-------------------------------------
     In the list of delivered files above, many files include
the emacs version (22.1). When the version of emacs delivered
is updated, these files will go away, to be replaced by equivalent
files using the new version.

Similarly, the precise list of files delivered into

        /usr/lib/emacs
        /usr/share/emacs
        /usr/share/info

can be expected to differ between versions.


ctags/etags in /usr/gnu/bin:
----------------------------
     Emacs comes with its own version of ctags, and an
emacs-specific variant named etags. Solaris already has
a command (/usr/bin/ctags) that does the same thing as
the emacs ctags, but these are not fully compatible
programs. Hence, the emacs ctags will be delivered into
/usr/gnu/bin.

There is yet another implementation of tags functionality
called "Exuberant Ctags", that is reputed to be superior
to both the existing Solaris, and emacs versions

        http://ctags.sourceforge.net

The potential exists to replace the Solaris ctags with exuberant.
Furthermore, when exuberant is linked under the name 'etags', it
automatically implements the emacs etags functionality. This
means that exuberant might someday replace both the Solaris
and emacs tags programs.

Although the emacs etags could be integrated into /usr/bin today,
I have decided to integrate it into /usr/gnu/bin instead:

        - In parallel with ctags
        - To leave the /usr/bin/etags name available for
          Exuberant Ctags to use.


Manpages in Case Materials:
---------------------------

    The manpages for all the programs visible in /usr/bin
and /usr/gnu/bin are included in the case materials. The
GNU emacs package does not supply man pages for b2m, ebrowse,
grep-changelog, or rcs-checkin, so I have written these
from scratch.

In addition, I have provided simple manpages for the toolkit variant
names (emacs-x, emacs-nox, ...) that reference the main emacs.1
manpage.

Reply via email to