Mercurial > hg > xemacs-beta
diff man/beta.texi @ 2537:b7b90f750a78
[xemacs-hg @ 2005-01-31 20:08:32 by ben]
Documentation updates
GETTING.GNU.SOFTWARE, Makefile.in.in: Delete GETTING.GNU.SOFTWARE from SOURCES.
PROBLEMS: Delete reference to check_cygwin_setup.sh.
Delete stuff that is irrelevant, mislocated or woefully out-of-date.
GNU, SERVICE: Delete.
* ORDERS, ORDERS.EUROPE, ORDERS.JAPAN: Delete.
* CHARSETS, CODINGS: Delete.
* DEBUG, LPF, MORE.STUFF, MOTIVATION: Delete.
aliases.ksh: Delete. (moved to xemacs-builds/steve)
* README.HYPERBOLE, README.OO-BROWSER: Delete.
* chr.png, chrm.png: Move to photos/.
check_cygwin_setup.sh: Delete.
* gnu.xpm, gnu.xbm, sink.xbm: Delete.
* ms-kermit, ms-kermit-7bit: Delete.
TERMS: Delete.
* DISTRIB, FTP, MACHINES, MAILINGLISTS, PACKAGES:
Delete and move to FAQ.
BETA: Delete and move to man/beta.texi.
README: Update.
help.el: Removed.
xemacs/help.texi: Delete references to DISTRIB. Point to FAQ.
xemacs/new.texi: Update sample code for version checking.
xemacs/xemacs.texi: Delete references to DISTRIB. Point directly to web site.
Update stuff referring to GNU Emacs. Delete references to Win-Emacs.
Makefile: Add beta.texi and built files.
xemacs-faq.texi: Major overhaul of section 1. Add mailing list info, update
downloading info, add info on CVS, etc.
xemacs.mak: Also copy BUGS, README, COPYING and Installation.
author | ben |
---|---|
date | Mon, 31 Jan 2005 20:08:52 +0000 |
parents | |
children | a9527fcdf77f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/beta.texi Mon Jan 31 20:08:52 2005 +0000 @@ -0,0 +1,946 @@ +\input texinfo @c -*-texinfo-*- + +@c %**start of header +@setfilename ../info/beta.info +@settitle Info on beta versions of XEmacs +@direntry +* Beta: (beta). Info on beta versions of XEmacs. +@end direntry +@c footnotestyle separate +@c paragraphindent 2 +@c %**end of header + +@ifinfo +This file describes info relevant to beta versions of XEmacs. + +Copyright @copyright{} 2005 Ben Wing. + +This file is part of XEmacs. + +XEmacs 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 2, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. +@end ifinfo + +@c Combine indices. +@syncodeindex fn cp +@syncodeindex vr cp +@syncodeindex ky cp +@syncodeindex pg cp +@syncodeindex tp cp + +@setchapternewpage odd +@finalout + +@titlepage +@title Info on beta versions of XEmacs + +@author XEmacs Development Team +@page +@vskip 0pt plus 1fill + +@noindent +Copyright @copyright{} 2005 Ben Wing. @* + +This file is part of XEmacs. + +XEmacs 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 2, or (at your option) any +later version. + +XEmacs 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 XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. +@end titlepage +@page + +@ifinfo +@node Top, Introduction, (dir), (dir) +This Info file describes info relevant to beta versions of XEmacs. +@menu +* Introduction:: +* Compiling Beta XEmacs:: +* Packages:: +* Improving XEmacs:: + +@detailmenu + --- The Detailed Node Listing --- + +Introduction + +* Mailing Lists:: +* Beta Release Schedule:: +* Reporting Problems:: +* Getting the Source:: + +Mailing Lists + +* XEmacs Beta Mailing List:: +* XEmacs Patches Mailing List:: +* XEmacs Design Mailing List:: +* List Administrivia:: +* Managing your subscription via the Web:: +* Subscribing by e-mail:: +* Unsubscribing by e-mail:: + +Compiling Beta XEmacs + +* Building an XEmacs from patches:: +* Building XEmacs from a full distribution:: + +Packages + +* Binary package installation:: +* Manual procedures for package management:: +* Building XEmacs and XEmacs packages from scratch:: + +Improving XEmacs + +* Creating patches for submission:: +* Large contributions:: + +Creating patches for submission + +* Patch discussion etiquette:: + +Large contributions + +* Updates to existing packages:: +* New packages:: +* Syncing with GNU Emacs:: + +@end detailmenu +@end menu + +@end ifinfo + +@node Introduction, Compiling Beta XEmacs, Top, Top +@chapter Introduction + +You are running a potentially unstable version of XEmacs. Please do +not report problems with Beta XEmacs to comp.emacs.xemacs. Report +them to @uref{mailto:xemacs-beta@@xemacs.org}, preferably with +@kbd{M-x report-xemacs-bug RET}. + +@menu +* Mailing Lists:: +* Beta Release Schedule:: +* Reporting Problems:: +* Getting the Source:: +@end menu + +@node Mailing Lists, Beta Release Schedule, Introduction, Introduction +@section Mailing Lists + +@menu +* XEmacs Beta Mailing List:: +* XEmacs Patches Mailing List:: +* XEmacs Design Mailing List:: +* List Administrivia:: +* Managing your subscription via the Web:: +* Subscribing by e-mail:: +* Unsubscribing by e-mail:: +@end menu + +@node XEmacs Beta Mailing List, XEmacs Patches Mailing List, Mailing Lists, Mailing Lists +@subsection XEmacs Beta Mailing List + +If you are not subscribed to the XEmacs beta list you should be. +Currently all discussion of development issues, including bug reports +and coding discussion, takes place on the XEmacs Beta mailing list. +Only patches and administrative actions regarding patches are sent +elsewhere (to the XEmacs Patches list). + +@node XEmacs Patches Mailing List, XEmacs Design Mailing List, XEmacs Beta Mailing List, Mailing Lists +@subsection XEmacs Patches Mailing List + +XEmacs Patches records proposed changes to XEmacs, and their +disposition. It is open subscription, and all patches that are +seriously proposed for inclusion in XEmacs should be posted here. You +can follow progress of your patch by subscribing to the mailing list +or in the archives. + +Besides patches, only actions by members of the XEmacs Review Board +should be posted to this list. All discussion should be redirected to +XEmacs Beta or XEmacs Design. + +@node XEmacs Design Mailing List, List Administrivia, XEmacs Patches Mailing List, Mailing Lists +@subsection XEmacs Design Mailing List + +XEmacs Design is for design discussions such as adding major features +or whole modules, or reimplementation of existing functions, to XEmacs. + +@node List Administrivia, Managing your subscription via the Web, XEmacs Design Mailing List, Mailing Lists +@subsection List Administrivia + +In the descriptions below, the word LIST (all uppercase) is a +variable. Substitute "beta", "design", or "patches" as appropriate +(to get "xemacs-beta" as the mailbox for the XEmacs Beta mailing list, +or @uref{http://www.xemacs.org/Lists/#xemacs-beta} for its URL). + +The XEmacs mailing lists are managed by the Mailman mailing list package, +and the usual Mailman commands work. Do not send mailing list requests to +the main address (@uref{mailto:xemacs-LIST@@xemacs.org}), always send them +to @uref{mailto:xemacs-LIST-request@@xemacs.org}. If you have problems with +the list itself, they should be brought to the attention of the XEmacs +Mailing List manager @uref{mailto:list-manager@@xemacs.org} (the same +mailbox, "list-manager", for all lists). All public mailing lists have +searchable archives. The URL is + + @uref{http://list-archive.xemacs.org/xemacs-LIST} + +Note that the xemacs-LIST-admin address is used internally by the +Mailman software; it is NOT a synonym for xemacs-LIST-request. + +@node Managing your subscription via the Web, Subscribing by e-mail, List Administrivia, Mailing Lists +@subsection Managing your subscription via the Web + +Subscription, unsubscription, and options (such as digests and +temporarily suspending delivery) can be accomplished via the web +interface at @uref{http://www.xemacs.org/Lists/#xemacs-LIST}. + +@node Subscribing by e-mail, Unsubscribing by e-mail, Managing your subscription via the Web, Mailing Lists +@subsection Subscribing by e-mail + +Send an email message to @uref{mailto:xemacs-LIST-request@@xemacs.org} with +@samp{subscribe} (without the quotes) as the BODY of the message. + +@node Unsubscribing by e-mail, , Subscribing by e-mail, Mailing Lists +@subsection Unsubscribing by e-mail + +Send an email message to @uref{mailto:xemacs-LIST-request@@xemacs.org} with +@samp{unsubscribe} (without the quotes) as the BODY of the message. + +@node Beta Release Schedule, Reporting Problems, Mailing Lists, Introduction +@section Beta Release Schedule + +We would like to achieve a weekly or fortnightly release cycle (you +know the Open Source model: release early, release often), and in a +perfect world that would indeed be the case. There are at least three +things that often get in the way of that goal: 1) The Release Manager +has a life outside of XEmacs (hard to believe, I know, but true), +2) we like to make releases that will build (at least on the Release +Manager's box), and 3) Murphy likes to throw a spanner in the works +right when you least expect it (Murphy's Law: Whatever can go wrong, +will go wrong). + +If you'd like to keep right up to date and ride the bleeding edge, use +CVS (see @uref{http://www.xemacs.org/Develop/cvsaccess.html}). If you +can't use CVS for some reason and must use FTP, please let us know. +it will make it more likely that we release betas more often. + + +@node Reporting Problems, Getting the Source, Beta Release Schedule, Introduction +@section Reporting Problems + +The best way to get problems fixed in XEmacs is to submit good problem +reports, @kbd{M-x report-xemacs-bug RET} will help you do this (assuming +you have a usable XEmacs). Since this is beta software, problems are +certain to exist. Please read through all of part II of the XEmacs +FAQ for an overview of problem reporting. Other items which are most +important are: + +@enumerate +@item +Do not submit C stack backtraces without line numbers. Since it +is possible to compile optimized with debug information with GCC +it is never a good idea to compile XEmacs without the -g flag. +XEmacs runs on a variety of platforms, and often it is not +possible to recreate problems which afflict a specific platform. +The line numbers in the C stack backtrace help isolate where the +problem is actually occurring. + +@item +Attempt to recreate the problem starting with an invocation of +XEmacs with @code{xemacs -no-autoloads}. Quite often, problems are +due to package interdependencies, and the like. An actual bug +in XEmacs should be reproducible in a default configuration +without loading any special packages (or the one or two specific +packages that cause the bug to appear). If you have trouble +getting anything to work at all with the above invocation, use +@code{xemacs -vanilla} instead. If you need to load your user init +file or the site file to get the problem to occur, then it has +something to do with them, and you should try to isolate the +issue in those files. + +@item +A picture can be worth a thousand words. When reporting an +unusual display, it is generally best to capture the problem in a +screen dump and include that with the problem report. The easiest +way to get a screen dump is to use the xv program and its grab +function. Save the image as a GIF to keep bandwidth requirements +down without loss of information. MIME is the preferred method +for making the image attachments. +@end enumerate + +@node Getting the Source, , Reporting Problems, Introduction +@section Getting the Source + +In addition to the normal tar distribution, XEmacs source is now +available via CVS. Please see + + @uref{http://www.xemacs.org/Develop/cvsaccess.html} + +@node Compiling Beta XEmacs, Packages, Introduction, Top +@chapter Compiling Beta XEmacs + +@menu +* Building an XEmacs from patches:: +* Building XEmacs from a full distribution:: +@end menu + +@node Building an XEmacs from patches, Building XEmacs from a full distribution, Compiling Beta XEmacs, Compiling Beta XEmacs +@section Building an XEmacs from patches + +All beta releases of XEmacs are included with patches from the previous +version in an attempt to keep bandwidth requirements down. Patches +should be applied with the GNU patch program in something like the +following. Let's say you're upgrading XEmacs 21.5-beta9 to XEmacs +21.5-beta10 and you have a full unmodified XEmacs 21.5-beta9 source +tree to work with. Change to the top level directory and issue the +shell command: + +@example +$ gunzip -c /tmp/xemacs-21.5.9-21.5.10.patch.gz | patch -p1 +@end example + +After patching, check to see that no patches were missed by doing + +@example +$ find . -name \*.rej -print +@end example + +Any rejections should be treated as serious problems to be resolved +before building XEmacs. + +After seeing that there were no rejections, issue the commands + +@example +$ ./config.status --recheck +$ make beta > ./beta.err 2>&1 +$ make check > ./xemacs-make-check.err 2>&1 +@end example + +Redirect the output from make to those files because you'll use them +later when you send off a build report with @kbd{M-x build-report RET} + +@node Building XEmacs from a full distribution, , Building an XEmacs from patches, Compiling Beta XEmacs +@section Building XEmacs from a full distribution + +@enumerate +@item +Locate a convenient place where you have at least 100MB of free space +and issue the command + +@example +$ gunzip -c /tmp/xemacs-21.5.10.tar.gz | tar xvf - +@end example + +(or simply @code{tar zxvf /tmp/xemacs-21.5.10.tar.gz} if you use GNU tar). + +@item +cd to the top level directory and issue an appropriate configure +command. + +@item +Run @code{configure}. If you are new, just consider running it with no +options, to see if you can get a succesful build. When you are more +experienced, you should put various flags in. Here is what we suggest: + +@enumerate +@item +It's a good idea to use + +@example +--extra-verbose +--debug +--memory-usage-stats +--error-checking=all +@end example + +These turn on extra debugging info and checks. The last one in particular +will add a great deal of extra error-checking -- which will slow your XEmacs +down somewhat but is likely to catch bugs much sooner and make your bug +reports much more useful. + +@item +You should also strongly consider + +@example +--with-mule +--use-pkcc +--pdump +--with-clash-detection +--with-wmcommand +--with-xfs +@end example + +These turn on optional features, which can always use testing. + +@item +If you have gcc, consider using + +@example +--compiler=gcc +--xemacs-compiler=g++ +@end example + +This will compile XEmacs using g++, which will turn on a lot of additional +error-checking. + +@item +If your packages are not installed under /usr/local, you should add a +line like + +@example +--package-path=~/.xemacs::/xemacs/site-packages:/xemacs/xemacs-packages:/xemacs/mule-packages +@end example + +@item +If you want to build multiple configurations from the same source +tree, make separate build directories for each configuration, run +@code{configure} from the top level of these (currently empty) +directories and use an option like + +@example +--srcdir=/xemacs/source-tree +@end example + +(or wherever your source tree is). This will magically create symlinks and +populate your build directory. + +@item +Use --site-prefixes (or --site-includes and --site-libraries) if you have +some packages that XEmacs can compile with that are located in an unusual +place. For example: + +@example +--site-prefixes=/usr/local/pgsql:/usr/local/BerkeleyDB.4.1 +@end example + +@item +Depending on your build environment, consuder setting or not setting +options for menubars, scrollbars, window systems, native sound, etc. If +you're not sure, leave them out and let configure do the auto-detection. +(If you get bugs compiling GTK, use @code{--with-gtk=no --with-gnome=no}.) + +Part of the configure output is a summary that looks something +like the following. (this summary is also available as the file +'Installation' in the top directory of your build tree, and via +the command @kbd{M-x describe-installation RET}). + +@example +uname -a: Linux eicq 2.4.20 #1 Wed Dec 18 02:14:29 EST 2002 i586 unknown + +./configure '--extra-verbose' '--site-prefixes=/usr/local/pgsql:/usr/local/BerkeleyDB.4.1' '--dynamic=yes' '--with-gtk=no' '--with-gnome=no' '--with-toolbars' '--with-wmcommand' '--with-athena=next' '--with-menubars=lucid' '--with-scrollbars=athena' '--with-dialogs=athena' '--with-widgets=athena' '--with-gif' '--with-sound=native,noesd' '--with-site-lisp=no' '--with-site-modules' '--pdump' '--with-mule' '--with-xfs' '--debug' '--error-checking=all' '--memory-usage-stats' '--use-kkcc' '--with-clash-detection' + + +XEmacs 21.5-b10 "burdock" (+CVS-20030131) configured for `i586-pc-linux'. + + +Compilation / Installation: + Source code location: /usr/local/src/xemacs + Installation prefix: /usr/local + Additional prefixes: /usr/local/pgsql /usr/local/BerkeleyDB.4.1 + Operating system description file: `s/linux.h' + Machine description file: `m/intel386.h' + Compiler: gcc -Wall -Wno-switch -Winline -Wmissing-prototypes -Wsign-compare -Wundef -Wstrict-prototypes -Wshadow -Wmissing-declarations -O1 -ggdb3 -Wall -Wchar-subscripts -Wunused -Wundef -Wshadow -Wsign-compare -Wmissing-declarations -march=k6 + Relocating allocator for buffers: no + GNU version of malloc: yes + - Using Doug Lea's new malloc from the GNU C Library. + +Window System: + Compiling in support for the X window system: + - X Windows headers location: /usr/X11/include + - X Windows libraries location: /usr/X11/lib + - Handling WM_COMMAND properly. + Compiling in support for the Athena widget set: + - Athena headers location: X11/neXtaw + - Athena library to link: neXtaw + Using Lucid menubars. + Using Athena scrollbars. + Using Athena dialog boxes. + Using Athena native widgets. + +TTY: + Compiling in support for ncurses. + Compiling in support for GPM (General Purpose Mouse). + +Images: + Compiling in support for GIF images (builtin). + Compiling in support for XPM images. + Compiling in support for PNG images. + Compiling in support for JPEG images. + Compiling in support for TIFF images. + Compiling in support for X-Face message headers. + +Sound: + Compiling in support for sound (native). + +Databases: + Compiling in support for Berkeley database. + Compiling in support for PostgreSQL. + - Using PostgreSQL header file: libpq-fe.h + - Using PostgreSQL V7 bindings. + +Internationalization: + Compiling in support for Mule (multi-lingual Emacs). + Compiling in support for XIM (X11R5+ I18N input method). + - Using raw Xlib to provide XIM support. + - Using XFontSet to provide bilingual menubar. + +Mail: + Compiling in support for "dot-locking" mail spool file locking method. + +Other Features: + Inhibiting IPv6 canonicalization at startup. + Compiling in support for dynamic shared object modules. + Using the new GC algorithms. + Using the new portable dumper. + Compiling in support for extra debugging code. + WARNING: WARNING: Compiling in support for runtime error checking. + WARNING: XEmacs will run noticeably more slowly as a result. + WARNING: Error checking is on by default for XEmacs beta releases. + WARNING: +@end example +@end enumerate + + +@item +Then... + +@example +$ make > ./beta.err 2>&1 +$ make check > ./xemacs-make-check.err 2>&1 +@end example + +...and you should have a working XEmacs. + +@item +After you have verified that you have a functional editor, fire up +your favorite mail program and send a build report to +@uref{mailto:xemacs-buildreports@@xemacs.org}. + +Preferably this is best done from XEmacs, following these simple steps: + +@enumerate +@kbd{M-x customize-group RET build-report RET} +@kbd{M-x build-report RET} +@end enumerate + +See also +@uref{http://www.xemacs.org/Releases/Public-21.2/tester.html#reporting} + +If you create the report manually by other means, here is what the +build report should include: + +@enumerate +@item +Your hardware configuration (OS version, etc.) + +@item +Version numbers of software in use (X11 version, system library +versions if appropriate, graphics library versions if appropriate). +If you're on a system like Linux, include all the version numbers +you can because chances are it makes a difference. + +@item +The options given to configure + +@item +The configuration report illustrated above + +For convenience all of the above items are placed in a file called +`Installation' in the top level build directory. They are also +available by performing @kbd{M-x describe-installation} inside XEmacs. + +@item +Any other unusual items you feel should be brought to the attention +of the developers. +@end enumerate +@end enumerate + +@node Packages, Improving XEmacs, Compiling Beta XEmacs, Top +@chapter Packages + +[Note: these instructions have been partly updated, but not carefully +reviewed in some time. Caveat tester.] + +Starting with XEmacs 21.1, much of the functionality of XEmacs has +been unbundled into "the packages." For more information about the +package system, see the Info nodes on Packages (in the XEmacs User +Manual) and on Packaging (in the Lisp Reference). + +When bootstrapping XEmacs, you may need to manually install some +packages (at least xemacs-base and efs). These packages are available +by FTP at @uref{ftp://ftp.xemacs.org/pub/xemacs/packages/}. + +@menu +* Binary package installation:: +* Manual procedures for package management:: +* Building XEmacs and XEmacs packages from scratch:: +@end menu + +@node Binary package installation, Manual procedures for package management, Packages, Packages +@section Binary package installation + +Prerequisite: XEmacs 21.0-b1. + +Binary packages are complete entities that can be untarred at the top +level of an XEmacs package hierarchy and work at runtime. To install files +in this directory, run the command @kbd{M-x package-admin-add-binary-package} +and fill in appropriate values to the prompts. + +@node Manual procedures for package management, Building XEmacs and XEmacs packages from scratch, Binary package installation, Packages +@section Manual procedures for package management + +Prerequisite: XEmacs 21.0 + +When adding and deleting files from a lisp directory the +auto-autoloads.el (global symbols) and custom-load.el (Customization +groups) must be kept in synch. Assuming one is manipulating a +directory called `lisp-utils', the command to rebuild the +auto-autoloads.el file is: + +@example +xemacs -vanilla -batch \ + -eval \("setq autoload-package-name \"lisp-utils\""\) \ + -f batch-update-directory lisp-utils +@end example + +The command to rebuild the custom-load.el file is: + +@example +xemacs -vanilla -batch -f Custom-make-dependencies lisp-utils +@end example + +To byte-compile both of these files the command is: + +@example +xemacs -vanilla -batch -f batch-byte-compile \ + lisp-utils/auto-autoloads.el lisp-utils/custom-load.el +@end example + +Of course, being a beta tester, you'd be aware that it is much easier +to manage your XEmacs packages with PUI. + +@node Building XEmacs and XEmacs packages from scratch, , Manual procedures for package management, Packages +@section Building XEmacs and XEmacs packages from scratch + +To build everything completely from scratch isn't hard, just time +consuming. + +@subheading Step 1 - grab the sources (core and packages) + +@example +$ cvs -d :pserver:cvs@@cvs.xemacs.org:/pack/xemacscvs login + [password: "cvs" (sans quotes)] + +$ cvs -d :pserver:cvs@@cvs.xemacs.org:/pack/xemacscvs co -d xemacs-21.5 xemacs + +$ cvs -d :pserver:cvs@@cvs.xemacs.org:/pack/xemacscvs co packages +@end example + +@subheading Step 2 - build XEmacs + +@example +$ cd xemacs-21.5 +$ ./configure [options...] +$ make > ./beta.err 2>&1 +$ make check > ./xemacs-make-check.err 2>&1 +@end example + +And optionally: + +@example +$ make install > ./xemacs-make-install.err 2>&1 +@end example + +@subheading Step 3 - build and install the packages + +@example +$ cd packages +$ cp Local.rules.template Local.rules +@end example + +Then edit Local.rules to suit your needs/environment +(@pxref{Local.rules file,,, xemacs, XEmacs User's Manual}) for details +about this file. + +And then: + +@example +$ make install +@end example + +@node Improving XEmacs, , Packages, Top +@chapter Improving XEmacs + +@menu +* Creating patches for submission:: +* Large contributions:: +@end menu + +@node Creating patches for submission, Large contributions, Improving XEmacs, Improving XEmacs +@section Creating patches for submission + +All patches to XEmacs that are seriously proposed for inclusion (eg, +bug fixes) should be mailed to @uref{mailto:xemacs-patches@@xemacs.org}. Each +patch will be reviewed by the patches review board, and will be +acknowledged and added to the distribution, or rejected with an +explanation. Progress of the patch is tracked on the XEmacs Patches +mailing list, which is open subscription. (If a patch is simply +intended to facilitate discussion, "I mean something that works like +this but this is really rough", a Cc to XEmacs Patches is optional, +but doesn't hurt.) + +Patches to XEmacs Lisp packages should be sent to the maintainer of +the package. If the maintainer is listed as `XEmacs Development Team' +patches should be sent to @uref{mailto:xemacs-patches@@xemacs.org}. + +Emailed patches should preferably be sent in MIME format and quoted +printable encoding (if necessary). + +The simplest way to create well-formed patches is to use CVS and +Didier Verna's Patcher library (available as patcher.el in the +xemacs-devel package). Patcher is new and requires some setup, but +most of the core developers are now using it for their own patches. +Patcher also can be configured to create patches for several projects, +and recognize the project from the directory it is invoked in. This +makes it a useful general tool (as long as XEmacs-style patches are +accepted at your other projects, which is likely since they conform to +the GNU standards). + +When making patches by hand, please use the `-u' option, or if your +diff doesn't support it, `-c'. Using ordinary (context-free) diffs +are notoriously prone to error, since line numbers tend to change when +others make changes to the same source file. + +An example of the `diff' usage: + +@example +$ diff -u OLDFILE NEWFILE +@end example + +-or- + +@example +$ diff -c OLDFILE NEWFILE +@end example + +Also, it is helpful if you create the patch in the top level of the +XEmacs source directory: + +@example +$ cp -p lwlib/xlwmenu.c lwlib/xlwmenu.c.orig + hack, hack, hack.... +$ diff -u lwlib/xlwmenu.c.orig lwlib/xlwmenu.c +@end example + +Also note that if you cut & paste from an xterm to an XEmacs mail +buffer you will probably lose due to tab expansion. The best thing to +do is to use an XEmacs shell buffer to run the diff commands, or ... +@kbd{M-x cd} to the appropriate directory, and issue the command +@kbd{C-u M-!} from within XEmacs. + +Patches should be as single-minded as possible. Mammoth patches can +be very difficult to place into the right slot. They are much easier +to deal with when broken down into functional or conceptual chunks. +The patches submitted by Kyle Jones and Hrvoje Niksic are stellar +examples of how to "Do The Right Thing". + +Each patch should be accompanied by an update to the appropriate +ChangeLog file. Guidelines for writing ChangeLog entries is governed +by the GNU coding standards. Please see +@uref{http://www.gnu.org/prep/standards_toc.html} [Change Logs section] +for details. + +Do not submit context diffs (either -c or -u) of ChangeLogs. Because +of the "stack" nature of ChangeLogs (new entries are always pushed on +the top), context diffs will fail to apply more often than they +succeed. Simply cutting and pasting the entry from an Emacs buffer to +the mail buffer (beware of tab expansion!) is probably easiest. The +Patcher library also will set up your ChangeLogs for you, and copy +them to the mail. Context-less unified diffs (-U 0) are also +acceptable. + +@menu +* Patch discussion etiquette:: +@end menu + +@node Patch discussion etiquette, , Creating patches for submission, Creating patches for submission +@subsection Patch discussion etiquette + +If you intend a patch for _application_ to the sources as is, _always_ +post it to xemacs-patches, even if there are minor points you would +like to have discussed by others. Not doing so will resulting in +patches getting "lost". If you expect that the patch will not be +acceptable, but are using it to stimulate discussion, then don't post +to xemacs-patches. Intermediate cases are up to your judgment; +unless you're sure you'll follow up with a "real" patch, better to err +on the side of posting to xemacs-patches. + +Discussion of the _content_ of the patch (ie responses to reviewer +comments beyond "that's right, ok, I'll do it your way") should _always_ +be posted to xemacs-beta or to xemacs-design. If you're not sure +which is more appropriate, send it to xemacs-beta. That is the most +widely read channel. + +If discussion results in a bright idea and you come up with a new +patch, normally you should post it to both mailing lists. The people +discussing on XEmacs Beta will want to know the outcome of the thread, +and you need to submit to XEmacs Patches as the "list of record." + +If the old patch has been applied to CVS, then just submit the new one +as usual. If it has not been applied, then it is best to submit a new +patch against CVS. If possible do this as a reply to the original +patch post, or something following it in the thread. (The point is to +get the original patch post's Message-ID in your References header.) +In this case, also use the keyword SUPERSEDES in the Subject header to +indicate that the old patch is no longer valid, and that this one +replaces it. + +These rules will result in a fair number of cross posts, but we don't +yet have a better way to handle that. + +Note: Developers should never post to xemacs-patches unless there is a +patch in the post. We plan to enforce this with an automatic filter. + +The exceptions are administrative. If you have commit authorization, +then post a short COMMIT notice to xemacs-patches when you commit to +CVS. Members of the Review Board will also post short notices of +administrative action (APPROVE, VETO, QUERY, etc) to xemacs-patches. + +@node Large contributions, , Creating patches for submission, Improving XEmacs +@section Large contributions + +Perhaps you have a whole new mode, or a major synchronization with +upstream for a neglected package, or a synchronization with GNU Emacs +you would like to contribute. We welcome such contributions, but they +are likely to be relatively controversial, generate more comments and +requests for revision, and take longer to integrate. Please be +patient with the process. + +@menu +* Updates to existing packages:: +* New packages:: +* Syncing with GNU Emacs:: +@end menu + +@node Updates to existing packages, New packages, Large contributions, Large contributions +@subsection Updates to existing packages + +If a package has gotten a bit out of date, or even started to bitrot, +we welcome patches to synchronize it with upstream/GNU Emacs versions. +Most packages end up varying somewhat from their GNU origins. See +"Syncing with GNU Emacs" for hints. Note that if you do a reasonably +large amount of syncing with GNU Emacs, you should log this in the +file itself as well as in the ChangeLog. + +If the package is important to you, please consider becoming the +maintainer. (See "New packages", below.) + +@node New packages, Syncing with GNU Emacs, Updates to existing packages, Large contributions +@subsection New packages + +If you have a new mode or other large addition that does not require +changes to the core, please consider submitting it as a package, and +becoming the maintainer. You get direct commit privileges to the +repository for your package, "approval" privileges for your own +patches as well as third party patches to your package, and some +degree of veto power over patches you don't like. In return, you are +expected to maintain friendly liaison with the upstream developer (if +you aren't the upstream developer), keep watch on the XEmacs Patches +list for relevant patches, and be available by email to other +developers for discussion of changes that impact your package. It's +also a pretty standard route to the "core" development group, where we +have plenty of extra work waiting for volunteers. + +You don't have to become the maintainer, but it virtually ensures +rapid acceptance of the package. + +For help in creating new packages, see the (rather sparse) discussions +in the XEmacs User's Guide and the Lisp Reference Manual. The XEmacs +Package Release Engineer (Ville Skyttä @uref{mailto:scop@@xemacs.org} +is currently serving with Norbert Koch @uref{mailto:viteno@@xemacs.org} +assisting; Steve Youngs @uref{mailto:youngs@@xemacs.org} and Stephen +Turnbull @uref{mailto:stephen@@xemacs.org} also can help) are the most +likely sources of advice. + +@node Syncing with GNU Emacs, , New packages, Large contributions +@subsection Syncing with GNU Emacs + +Syncing with GNU Emacs is an important activity. Although each +version has its advantages and areas of concentration, it is very +desirable that common functionality share specifications and APIs. +When porting GNU code to XEmacs, the following points should be given +special attention: + +@itemize @bullet +@item +Recent GNU Emacsen cannot be built without Mule, but XEmacs can. +Make sure your changes do not assume the presence of Mule. + +@item +GNU Emacs nomenclature often differs from that of XEmacs. +Sometimes syncing the names is desirable, other times not. + +@item +GNU Emacs functionality often differs from that of XEmacs. +Syncing functionality is often controversial. +@end itemize + +It is important that you let other developers know that +synchronization has taken place, to what degree, and when. For this +purpose, we use comments of the form + +@example +/* Synched up with: FSF 21.3 by Stephen Turnbull */ +@end example + +in the source file itself, as the last element of the prefatory +material (copyright notice and commentary). Obviously the comment +marker needs to be changed to leading semicolons for Lisp, but +otherwise the format is the same. + +Of course you should note syncing as the purpose in the ChangeLog, +too. But entries get buried deep in the ChangeLog file, and may even +get moved to a separate ChangeLog.OLD file for rarely synched files. + +Rather than dates we use the version of GNU Emacs to sync to. If the +synchronization is partial, add a new comment describing what has +actually been synched, leaving the description of the last full sync +in place. At each full sync, remove all previous synchronization +comments. + +This applies to Lisp that we have broken out into packages, but +remains in the GNU Emacs core, as well to core Lisp in XEmacs. + +@c Print the tables of contents +@contents +@c That's all + +@node Index, , Defining Variables, Top +@unnumbered Index + +@printindex cp + +@bye