Index of /people/ttn/software/emacs-for-vms
|
Name Last modified Size Description
Parent Directory 02-Jul-2005 18:23 -
MD5SUMS 26-May-2005 09:28 1k
NEWS 26-May-2005 09:26 5k
PREP-ZIP 26-May-2005 09:33 1k
basis-2-synch-2.diff.gz 28-Mar-2005 20:48 216k
basis-3-synch-3.diff.gz 10-May-2005 17:00 213k
basis-4-synch-4.diff.gz 25-May-2005 19:02 136k
Welcome
This dir contains a work-in-progress port of GNU Emacs to VMS.
(I don't care what they call it, to me it will always be "VMS".)
It is "work-in-progress" along several axes, each of which we
move along a bit at at time (trying not to regress even though
that can be difficult to determine w/o a proper test suite):
Code Porting, Build Methodology, Installation Methodology, and
GNU CVS Repository Integration.
In the end, the goal is to drop as much of the idiosyncracies of
the current code/methodology as possible, in the process merging
all these efforts so that future development of GNU Emacs will
automatically include development of GNU Emacs for VMS (assuming
there is interest). A homecoming of sorts. When this goal is
achieved, this directory will be archived and deleted.
The zipfiles and instructions to build GNU Emacs for VMS from
them thus represent a snapshot in this n-dimensional porting
space and are only authoritative in the sense that someone took
the time to author them, and had the decency to offer the result
for distribution under the terms of the GNU GPL. Aside from the
license, nothing else is guaranteed to remain unchanged.
Having said that, the changes are ultimately constrained by the
integration requirement that all code checked into the GNU repo
must have copyright assigned to the FSF, or be very small (ten
to fifteen lines last time I checked). Please keep that in mind
if you wish to contribute a patch.
Basis
The basis for the porting work is a branch of GNU Emacs 21.2.
In the following instructions, "basis-<N>" refers to the tree
you get upon invoking the command:
cvs checkout -r ttn-vms-21-2-B<N> emacs
Note that this is a unixoid shell command. Under VMS it may be
similar (but I haven't checked). The CVSROOT env var should be
something like ":ext:anoncvs@subversions.gnu.org:/cvsroot/emacs".
Synch
The "synch tree" is what you get after applying the patch. Use
basis-<N> for synch-<N> (obvious, eh?), with command:
cd emacs
gunzip -c ../basis-<N>-synch-<N>.diff.gz | patch -p1
Bootstrapping
The bootstrap process involves two threads that initially start
separately but come together upon invocation of CONFIGURE.COM.
The first thread is creating the various DESCRIP.MMS_IN(_IN)
files from the various Makefile.in files. In a sane Emacs, load
file make-mms-derivative.el, change directory to the root of the
synch tree, and do:
M-x make-mms-derivative <RET> Makefile.in <RET>
This will "parse" (har har) Makefile.in and apply edits from
Makefile.in-2mms (DO NOT read this code before eating -- you may
lose your appetite permanently), eventually writing out the file
DESCRIP.MMS_IN in the synch tree root directory.
Likewise you will need to do:
M-x make-mms-derivative <RET> [.SRC]Makefile.in <RET>
What's that? A VMS filename? Yes, make-mms-derivative actually
can work with an already-running Emacs for VMS (if you have one
available).
*NOTE*: All of this first part (plus a kludge for a methodology
bug) is conveniently encapsulated in the PREP-ZIP Bourne
shell script available in this directory -- check it
out!
The second thread in bootstrapping is creating CONFIGURE.COM
from CONFIGURE.COM_IN using Autoconf for VMS, available at:
http://www.glug.org/people/ttn/software/autoconf-for-vms/
Make sure you use version 1.104 or later. Like the *-2mms code,
CONFIGURE.COM_IN is best kept away from children and small pets,
to be processed solely by the three commands:
$ autoconf --installvmslib
$ autoheader
$ autoconf
These must be done under VMS (note the DCL prompt), so at some
unspecified point before and/or during the bootstrapping you
will have had to transport the tree to VMS if not already.
Configuration
Once you have CONFIGURE.COM the best way to proceed (for now) is
to configure the tree in place:
$ @CONFIGURE -
--prefix=MY:[LOCAL] -
--startupdir=MY:[LOCAL.STARTUP] -
--with-tcpip=YES -
--with-x=YES
You may wish to use the same startupdir as for Autoconf for VMS.
Build
$ mmk/ignore=warning bootstrap
This builds a provisionary Emacs, uses it to byte-compile the
Lisp files, then builds the "actual" Emacs. After the *.elc
files are built, if you are feeling adventurous, you can go back
to the Configuration step and repeat the process from another
directory (but you don't have to).
Install
To install, use the command:
$ mmk/ignore=warning install
Alternatively, you can run directly from the build directory,
using PRE-INST-EMACS.COM, with something along the lines of:
$ ue = "@" + f$search ("[.VMS]PRE-INST-EMACS.COM")
Here, "ue" stands for "untrusted emacs" (since if you had
trusted it, you would have installed it directly :-).
Use
Presently, the installation methodology requires some kind of
init for each login session (can be done automatically if you
have the privs) using the GNU_STARTUP.COM installed in the
startupdir you specified during configuration. Run it like so:
$ @MY:[LOCAL.STARTUP]GNU_STARTUP emacs-21.2
This should provide you w/ the "emacs" command, which runs a
"kept editor" (the image should be interruptable via `C-z' and
resumeable w/ another "emacs" invocation).
Abuse
You can be a silent user and suffer the bugs you encounter, or
alternatively you can be a "power user" and still suffer the
bugs you encounter, or alternatively you can be a "GNU Emacs on
VMS conspirator" by noting the bugs you encounter (and/or create
;-) and letting me know about them in such a manner that I can
reproduce and fix them or at least try to fix them.
Investment
If you are a flunkie who has the ear of someone in Manglement
interested in the long-term viability of GNU Emacs for VMS,
please encourage investment in its maintenance by way of hw/sw
donation or a fixed-term maintenance/service contract. On the
other hand, if you just want to leech, that's fine, too.
If you are in Manglement but have no clue what this "Emacs"
thingy is, ask a flunkie -- it's never too late to learn!
Acknowledgements
I wish to acknowledge the help of:
- Mukesh Prasad, Richard Levitte and Roar Thronęs, for
foundational GNU Emacs porting design and work;
- the comp.os.vms denizens, for good-natured grumpiness;
- Bryan Jensen, for MACRO-32 inspiration and good PHONE convos;
- Ed Vogel of HP C Engineering, for explaining the difference
between COMMON_BLOCK and STRICT_REFDEF extern models;
- Kenichi Handa, for hints on where in the Emacs function
hierarchy to best accomodate VMS I/O quirks;
- FactSet Research Systems Inc., for initial funding;
- Richard Stallman and GNU, for FSF and Emacs and the myriad
lessons these codifications of thought embody.