1 \input texinfo @c -*-texinfo-*-
2 @c $Id: xemacs-devguide.texi,v 1.7 2009-02-24 09:59:13 stephent Exp $
4 @c (shell-command "texi2html -number -monolithic xemacs-devguide.texi" nil)
7 @setfilename ../../info/xemacs-devguide.info
8 @settitle xemacs-devguide
11 @c Developer's Guide variables.
12 @set DEVGUIDE @cite{XEmacs Developer's Guide}
14 @set UPDATED 2015-12-03
15 @set UPDATE-MONTH December, 2015
18 @set XEMACSORG XEmacs.ORG
19 @set PROJECT XEmacs Project
20 @set HOMEPAGE @uref{http://www.xemacs.org/,XEmacs Project Website}
21 @set BOARD XEmacs Review Board
22 @set C-E-X the @i{comp.emacs.xemacs} Usenet newsgroup
23 @set ANNOUNCE-LIST the @email{xemacs-announce@@xemacs.org,XEmacs Announcements} mailing list
24 @set BETA-LIST the @email{xemacs-beta@@xemacs.org,XEmacs Beta} mailing list
25 @c xemacs-design is currently not operative; substitute xemacs-beta
26 @set DESIGN-LIST the @email{xemacs-design@@xemacs.org,XEmacs Design} mailing list
27 @set REVIEW-LIST the @email{xemacs-review@@xemacs.org,XEmacs Review} mailing list
28 @set PATCHES-LIST the @email{xemacs-patches@@xemacs.org,XEmacs Patches} mailing list
29 @set BUILDREPORTS-LIST the @email{xemacs-buildreports@@xemacs.org,XEmacs Build Reports} mailing list
32 This is Edition @value{EDITION} of the @value{DEVGUIDE},
33 last updated @value{UPDATED}.
35 Copyright @copyright{} 2000, 2001, 2002, 2003, 2004 Bill Wohler
37 Copyright @copyright{} 2005, 2007 Free Software Foundation
40 The @value{DEVGUIDE} is free documentation; you can
41 redistribute it and/or modify it under the terms of the GNU General
42 Public License as published by the Free Software Foundation; either
43 version 2, or (at your option) any later version.
45 The @value{DEVGUIDE} is distributed in the hope that it
46 will be useful, but WITHOUT ANY WARRANTY; without even the implied
47 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
48 the GNU General Public License for more details.
50 The GNU GENERAL PUBLIC LICENSE appears as an appendix to this
51 document. You may also request a copy by writing to the Free
52 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
57 @setchapternewpage odd
59 @dircategory XEmacs Editor
61 * XEmacs Developer's Guide: (xemacs-devguide). DRAFT.
65 @title The XEmacs Developer's Guide
66 @subtitle Edition @value{EDITION}
67 @subtitle @value{UPDATE-MONTH}
68 @author Stephen J. Turnbull
71 @vskip 0pt plus 1filll
78 @node Top, Acknowledgments, (dir), (dir)
79 @top The XEmacs Developers Guide
85 @strong{This document is under development.} The current version
86 contains a lot of text drawn from the @emph{MH-E Developers Guide} which
87 is inapplicable to the @value{PROJECT}. Those parts which have been
88 adjusted to reflect @value{PROJECT} practice are based on the opinions
89 of the author(s) as to best practice and desirable policy, and
90 @strong{are not yet approved as official policy}.
100 * XEmacs Resources on the Internet::
102 * Nodes borrowed from other projects not adapted to XEmacs::
106 --- The Detailed Node Listing ---
108 People and the Project
112 * XEmacs Package Maintainer::
121 * Committer Welcome Message::
123 XEmacs Package Maintainer
125 * The Package Maintainer Role::
126 * Advice to Package Maintainers::
130 * Appointing New Reviewers::
131 * Welcoming New Reviewers::
133 The Life Cycle of a Patch
135 * About Copyright Assignment::
136 * Scratching That Itch::
138 * Write Low-Profile Code::
139 * Test Your Changes::
140 * Add a ChangeLog Entry::
144 * Committing the Patch::
145 * Dispute Resolution::
147 Add a ChangeLog Entry
154 * Optional Alternate Procedure for Reviewers::
158 * Commit-and-Review::
162 * Proposed Alternative Procedure::
164 XEmacs Resources on the Internet
167 * Mercurial Repository::
168 * comp.emacs.xemacs::
175 Nodes borrowed from other projects, not adapted to XEmacs
184 * Free Software Directories::
196 * Release Prerequisites::
199 * Updating Version Number::
200 * Updating ChangeLogs::
202 * Creating Tarballs::
203 * Creating @value{XEMACSORG} Releases::
204 * Updating the Tracker::
205 * Announce the Release::
206 * Updating the Emacs Repository::
207 * Updating the Debian Package::
208 * Updating the XEmacs Package::
209 * Updating the Online Documentation::
210 * Updating the Free Software Directories::
211 * After the Release::
216 @node Acknowledgments, Introduction, Top, Top
217 @chapter Acknowledgments
219 Special thanks go to Bill Wohler, whose @emph{MH-E Developers Guide}
220 formed the framework for this document, and contributed a lot of text as
221 well, for permission to redistribute the derived work under the GNU
222 General Public License.
224 The best practices exemplified by Martin Buchholz and Vin Shelton are
225 the primary reference for the section on release engineering of the core
230 @node Introduction, Philosophy, Acknowledgments, Top
231 @chapter Introduction
234 @cindex @value{XEMACSORG}
236 So, you want to be an XEmacs developer! You've already taken the
237 essential step by showing enough interest to read this document. This
238 document describes other steps you may wish to take to participate more
239 effectively. First, it describes the philosophy of the development team.
240 A section for each resource in the @value{PROJECT} that
241 developers may want to use or need to change follows.
243 In other words, this is the single sheet of music that all the XEmacs
244 developers are playing.
246 Note that it is about project organization and administration, not about
247 the code base. For coding standards and techniques, XEmacs has a
248 separate manual, @ref{Top, The XEmacs Internals Manual, , internals}.
250 @cindex mailing lists, xemacs-design
251 @cindex xemacs-design
253 And remember, this is your document. If you think something is bogus,
254 start a movement on @value{BETA-LIST}. One of the tenets of the
255 philosophy is rough consensus. If you can get a rough consensus to agree
256 with your point of view, then the document shall be changed accordingly.
260 @strong{This document is under development.} The current version
261 contains a lot of text drawn from the @emph{MH-E Developers Guide} which
262 is inapplicable to the @value{PROJECT}. Those parts which have been
263 adjusted to reflect @value{PROJECT} practice are based on the opinions
264 of Stephen Turnbull as to best practice and desirable policy, and
265 @strong{are not yet approved as official policy}.
267 Feel free to submit patches to @value{PATCHES-LIST}. Please try to
268 review and edit a whole node at a time. They're short; it's not that
275 @node Philosophy, The Work Roles, Introduction, Top
280 @strong{This node has a fair amount of content almost
281 unchanged from the @emph{MH-E Developers Guide}, and is not fully
282 representative of the @value{PROJECT}. However, everything here has
283 been espoused by XEmacs developers at one time or another.}
285 This chapter discusses the philosophy and principles of the XEmacs
286 project. The first section covers our coding philosophy, while the
287 second section summarizes the principles of the team that have evolved
292 The core philosophies of the XEmacs project regarding the code are as
297 Keep the C code fast.
300 Refrain from adding lots of code to the C codebase that would be better
304 XEmacs is a cross-platform application. Features should work on all
308 XEmacs should be easy to use out-of-the-box for new users.
312 We should get as much mileage out of @code{customize} as we can to
313 reduce the amount of code that users have to write.
315 XEmacs at any time has a @emph{stable} branch and uses the @emph{trunk}
316 for development. We do not freeze the trunk, except for the short
317 period of time needed to create a consistent release branch. The
318 release branch in principle should only be changed for bug fixes. (In
319 the past this principle has been honored as much in the breach as in the
320 observance; nevertheless, it's a good starting point.)
322 A change in the major version number indicates a pervasive change
323 affecting all users. For example, the introduction of Mule in version
324 20, the extensive use of the package system in 21, and Unicode support
325 is planned for 22. A change in the minor version number reflects addition of
326 features, and accompanies an initial public release. A change in the
327 patchlevel reflects bugfix releases of the stable branch, while on the
328 trunk patchlevels are fairly arbitrary, reflecting regular beta
331 The stable branch has a single gatekeeper, the listed maintainer.
332 Changes are made only by the maintainer, or at his convenience with
333 explicit authorization. Any XEmacs reviewer may make or authorize
334 changes to the trunk. Having commit privileges does @emph{not}
335 authorize changes; commit privileges are for the convenience of the
336 project and of regular contributors, but do not imply a direct say in
337 decisions. Conversely, we are always looking for new reviewers; the
338 review board is self-maintaining, but not closed.
340 Individual packages, like the stable branch, may have a listed
341 maintainer. In those cases, the listed maintainer is the gatekeeper.
342 Please ask before committing to a package with a listed maintainer.
343 Many, but not all, will be happy to let you do so.
345 @heading Guiding Principles
347 The guiding principles of the XEmacs developers are:
351 We all are scratching an itch on this project. We respect each others'
352 goals, which are quite varied.
355 Using vulgar language towards our users and/or developers is
359 The team makes decisions by consensus through articulated arguments.
360 If one wants to express an opinion, they do it by presenting evidence
361 to support their claim in a respectful way, and not by insulting
362 others' points of view. Where consensus seems hard to achieve, what we
363 try first may be decided by a vote in the Review Board.
366 We are all committed to a high-quality product. We have no artificial
367 deadlines, so if it takes an extra iteration or two to find the
368 optimal solution to a problem, then we do it.
371 We believe in collective ownership. We keep our egos in check and say
372 "Thank you" to a colleague when he rewrites our code. He'll thank you
376 Finally, we're here to have fun.
379 @heading Coding Conventions
381 Coding conventions are described in detail elsewhere.
382 @c #### Make this xref more precise.
383 @xref{Top, Internals Manual, , internals}.
385 @c #### Move these somewhere more appropriate
386 Here are a few additional references that you might want to check out.
388 @cindex Coding Conventions
389 @cindex Emacs Lisp Coding Conventions
390 @cindex Library Headers
391 @cindex Conventions, verification
392 @cindex Verification, conventions
393 @findex @code{lm-verify}
394 @findex @code{checkdoc}
395 @cindex @file{lisp-mnt}
397 The (GNU) Emacs Lisp Manual
399 @ref{Tips, Tips and Conventions, , elisp}.
402 @uref{http://www.sunsite.ualberta.ca/Documentation/Gnu/emacs-lisp-ref-21-2.7/html_node/elisp_708.html,
403 Tips and Conventions}.
406 @strong{Please ensure that the copyright notice of every file accurately
407 reflects your contribution, whether you have assigned your copyright to
408 the FSF or not. This will aid future project admins greatly if there
409 ever is a merger of XEmacs with Emacs.} ``Accurately reflects'' means
410 that if you have not assigned your contribution, @emph{your name} should
411 appear in a copyright notice, along with an accurate list of the years
412 in which your contributions were made. If you have assigned your
413 contribution, you should list the FSF (or other assignee) as copyright
414 holder, and make sure that the list of years is appropriately updated.
415 In both cases, an accurate ChangeLog detailing your changes (file and
416 function) should accompany the patch.
418 You @strong{must} reference the GPL correctly in every file you change.
419 That is the law, in the U.S. and in all countries we know about. (If a
420 file is not under the GPL, please report it as a possible bug. Some
421 files are not, but it's worth checking. If you wish to contribute a
422 whole, new file under a non-GPL but GPL-compatible license, that is also
423 possible. What you may not do is remove or alter others' copyright
424 attributions, or any license notice that is present.)
426 Manuals must also follow these rules, except that for historical reasons
427 they have various different licenses. @emph{Be careful}: it is
428 typically @strong{not} permissible to mix excerpts from different
429 documents with each other, or with XEmacs code, unless they have
430 @emph{identical} licenses. In particular, the XEmacs Texinfo manuals
431 (the @emph{XEmacs User's Guide}, the @emph{XEmacs Lisp Reference}, and
432 the @emph{XEmacs Internals Manual}) have a unique license which is not
433 the GPL or the GFDL, and is incompatible with both.
435 All code and data files must be licensed under the GPL (or a compatible
436 license) so that they can be added to XEmacs, and others may modify them.
438 Documentation files must be licensed under an approved free license or
439 an OSI-approved open source license. Where possible, GPL-compatible
440 licenses are preferred. If at all possible, avoid the GNU Free
441 Documentation License, because it is @emph{incompatible with the GPL},
442 implying that text cannot be copied freely between docstrings and the
443 Texinfo manual, except by the copyright holder.
445 The @uref{http://www.gnu.org/prep/standards.html, GNU
446 Coding Conventions} is required reading. Note that XEmacs has its own
447 slightly different, version. @xref{Top, Coding Standards, ,standards}.
449 Before checking in files, load @file{lisp-mnt} into Emacs, and run
450 @code{lm-verify} within the lisp file you are editing to ensure that
451 all of the fields described in
453 @ref{Library Headers, , , elisp},
456 @uref{http://www.sunsite.ualberta.ca/Documentation/Gnu/emacs-lisp-ref-21-2.7/html_node/elisp_713.html,
459 are present. The @code{checkdoc} function should be run before check-ins
460 as well. All errors must be fixed.
462 You should also @emph{read the comments} in the @file{lisp-mnt} library
465 Any steps needed to build or disseminate releases should be found in
466 Makefiles (or in this document). In other words, there is to be no magic
467 stored only in someone's head.
470 @node The Work Roles, The Work Flow, Philosophy, Top
471 @chapter The Work Roles
473 On the one hand, ``open source'' means that you are free to take the
474 existing program, make it into whatever you want, and nobody will stop
475 you. On the other hand, ``open source'' means that you are free to
476 share the program with anybody you like, and even people you don't like!
477 People being what they are, the detailed goals differ from one to
478 another, and they end up in conflicts between one person's goals and
481 Allowing people to fill roles that suit them, and creating a work flow
482 that lets them share the products of their work without getting in each
483 others' way, are the foundations of the project.
485 @heading People and the Project
491 A @dfn{developer} or @dfn{contributor} is anyone who wants to
492 participate in improving XEmacs. Presumably you do, because you're
493 reading this @emph{Guide}. Well then---presto-chango! you're an
496 That doesn't mean that some developers don't have more privileges than
497 others, that all contributions are accepted, or that some contributions
498 aren't bigger than others. What it means is that the @value{PROJECT} is
499 intended to facilitate individual contributions and cooperation among
500 contributors. It means that in the @value{PROJECT} we don't make a
501 sharp distinction between ``users'' and ``developers.'' Some important
502 contributors never submit code to the project; they simply
503 participate in the newsgroups and mailing lists, giving advice based on
504 their experience to other users.
506 Here are some of the better defined roles. Most are defined by
507 reference to @value{PROJECT} resources.
512 You. Me. Generally, anybody who wants to help improve XEmacs.
513 @xref{The Work Flow}.
516 You. Me. Generally, anybody whose needs are being served by XEmacs.
517 Specifically, someone who can tell us how to do it better. Often,
518 someone who advises other users on mailing lists or Usenet.
519 @xref{XEmacs Resources on the Internet}.
522 A user currently not active as a code contributor, but willing to
523 reinstall XEmacs or its packages regularly, and report any problems.
524 Should participate in @value{BETA-LIST}. @xref{xemacs-beta}.
527 A developer with write access to the XEmacs repositories, which may be
528 restricted to specified modules. @xref{Committer}. Should participate
529 in @value{BETA-LIST} @ref{xemacs-beta}, and @value{PATCHES-LIST}
530 @ref{xemacs-patches}.
532 @item Package maintainer
533 A committer with responsibility for integrating a separately maintained
534 component, containing a set of optional libraries, with XEmacs. The component
535 often constitutes a well-defined application, such as an MUA.
536 @xref{XEmacs Package Maintainer}.
539 A developer who may authorize developers, including himself, to write to
540 the XEmacs repositories. @xref{XEmacs Reviewer}. Should participate
541 in @value{BETA-LIST} @ref{xemacs-beta}, @value{PATCHES-LIST}
542 @ref{xemacs-patches}, and @value{REVIEW-LIST}
545 @item XEmacs Review Board
546 The reviewers as a group, responsible for delegating access to
547 @value{PROJECT} resources to developers. A self-selecting cabal. The
548 current members are noted on the
549 @uref{http://www.xemacs.org/Develop/jobs.html,@emph{Jobs List}}.
552 @item Chairman of the Board
555 @itemx Benevolent Dictator for Life
556 Call it what you like, we don't have one any more, by deliberate choice.
558 @item Meta-maintainer
560 The reviewer responsible for trying to keep track of what isn't getting
561 done, and finding someone to do it. The latter title allows him to tell
562 his mother how important he is. More seriously, the meta-maintainer
563 often functions as a spokesman for the Board or the project as a whole.
564 Should be highly visible on @value{C-E-X} @ref{comp.emacs.xemacs} and
565 @value{BETA-LIST} @ref{xemacs-beta}.
567 @item Release engineer
568 @itemx Stable release engineer
569 @itemx Package release engineer
570 Responsible for the quality control and adminstrative details of
571 distributing some coherent package of functionality. The @dfn{stable
572 release engineer} manages the core distribution, including the build
573 infrastructure, the Lisp and display engine, and the functions typical
574 of a programmer's editor. The @dfn{package
575 release engineer} manages the various unbundled applications, the
576 build infrastructure, and the network-based download and install
577 functionality for them. Must participate in @value{PATCHES-LIST}
578 @ref{xemacs-patches}.
579 @c #### Write nodes for these posts!
583 @itemx Repository Manager
584 Administrators of the various Internet-based services important to
585 XEmacs users and developers.
586 @c #### Write nodes for these posts!
589 The @emph{Jobs List} describes a number of other idiosyncratic positions
590 and tasks in the @value{PROJECT}. It also lists the current members of
591 the @value{BOARD}. @xref{Jobs List}. The most recent version can be
592 found @uref{http://www.xemacs.org/Develop/jobs.html,on the website}.
598 * XEmacs Package Maintainer::
607 @node Beta Tester, Committer, The Work Roles, The Work Roles
612 @cindex xemacs-beta mailing list
613 @cindex mailing list, xemacs-beta
614 @cindex xemacs-buildreports mailing list
615 @cindex mailing list, xemacs-buildreports
616 @cindex xemacs-design mailing list
617 @cindex mailing list, xemacs-design
618 @findex report-xemacs-bug
621 An extremely important role is that of @dfn{beta tester}. Since the
622 XEmacs repositories are open for anonymous read access, beta testers
623 do not get special access to unpublished code. Rather, beta testers
624 @c #### need @xrefs for bug and build reports
625 contribute by submitting bug reports on problems, and build reports to
626 give the community information about the variety of platforms and
627 features XEmacs is being configured for. Bug reports are submitted to
628 @value{BETA-LIST}, preferably via @kbd{M-x report-xemacs-bug RET}.
629 @value{BETA-LIST} is also the channel to lobby for their favorite new
631 Build reports are submitted to @value{BUILDREPORTS-LIST}
632 via the @kbd{M-x build-report RET} utility.
634 However, for those who do wish to make contributions to the collection
635 of bytes that we call ``XEmacs'', there are a number of formal roles,
636 with powers and privileges that make it easier to make them.
640 @node Committer, XEmacs Package Maintainer, Beta Tester, The Work Roles
645 @c MH-E says that committers may be _assigned_ bugs
647 A @dfn{committer} is one who is authorized to check in approved changes
648 into the source repository, including changes to private branches they may
649 maintain. Note that, in contrast to the use of this term on many
650 projects, being a committer is simply an administrative convenience;
651 committers must wait for approval to check in changes.
652 Developers who do not have repository write access contribute by
653 submitting patches to @value{PATCHES-LIST}.
655 Commit access is generally given to those who have submitted several
656 good patches, to ``well-known'' developers on request, and to XEmacs
661 * Committer Welcome Message::
666 @node Commit Access, Committer Welcome Message, Committer, Committer
667 @subsection Commit Access
669 @cindex commit access
670 @cindex bitbucket.org committer accounts
672 There are a few minor prerequisites to get out of the way. The first is
673 to get an account on @i{bitbucket.org} so that you can access the
674 Mercurial repositories for XEmacs core code and packages.
676 @uref{http://www.xemacs.org/Lists/#xemacs-beta, subscribe to
677 the XEmacs Beta mailing list}.
679 @cindex XEmacs User's Guide
680 @cindex manuals, XEmacs
681 @cindex XEmacs Lisp Reference
682 @cindex manuals, XEmacs Lisp
684 @c #### fix these urefs!!
685 Developers should be familiar with the
686 @uref{http://www.xemacs.org/Documentation/21.5/html/,XEmacs Lisp Manual}
688 @xref{Top, XEmacs Lisp Reference, , lispref}.
691 @uref{http://www.xemacs.org/Documentation/21.5/html/,XEmacs Manual}.
693 @xref{Top, XEmacs User's Guide, , xemacs}.
696 @cindex xemacs-design mailing list
697 @cindex mailing lists, xemacs-design
699 @cindex bitbucket.org
701 If you think that you may contribute enough to want write access to the source
702 repositories, request access from the @email{mike@@xemacs.org,Mercurial
703 Administrator} and get an account on @i{bitbucket.org}.
704 Generally speaking, if you have contributed to the
705 @value{PROJECT} mailing lists and @i{comp.emacs.xemacs} newsgroup over
706 the years, you will be given write privileges within a few days. If you
707 are new, you may need to find a sponsor on the @value{BOARD} to vouch
710 @cindex pictures of developers
711 @cindex developers, pictures
712 @cindex information about developers
713 @cindex developers, information about
715 On a less serious note, the @code{about-xemacs} command gives
716 information, including photos, about developers past and present.
717 Submit a patch to @file{lisp/about.el} and an image that represents you
718 (as both a monochrome PNG and a color PNG) to @value{PATCHES-LIST}.
722 @node Committer Welcome Message, , Commit Access, Committer
723 @subsection Committer Welcome Message
724 @c #### The information in this message should be parsed out into Work Flow.
726 @cindex committers, welcoming
727 @cindex welcoming committers
729 Here's a typical welcome message for a new package maintainer. The
730 changes appropriate to a generic committer should be pretty obvious.
733 To: "Newbert Committer, redtape Package Maintainer" <newbie@@xemacs.org>
734 CC: XEmacs Review Board <xemacs-review@@xemacs.org>,
735 newbert.committer@@xemacs.org, newb.committer@@xemacs.org,
736 newbie@@general-conglobulation.com
737 Subject: Welcome to The XEmacs Development Team.
741 On behalf of the XEmacs Review Board, I'd like to welcome you to the
742 team as our new redtape maintainer. We really appreciate the time and
743 effort you put into redtape and we'd like to thank you very much for
744 taking on this important role.
746 The first thing that you should notice is that you have received 4
747 copies of this message. One to your existing email address, and one
748 each to your 3 new xemacs.org addresses. You can use the xemacs.org
749 addresses for any XEmacs related purpose. Please note that this is
750 neither a requirement or a restriction. Some of our developers rarely
751 use their xemacs.org email address, while others use theirs for most
754 At this point, Newbie, I'd suggest that you subscribe to a couple of
755 our mailing lists, if you haven't already done so.
757 xemacs-beta (for all kinds of code discussion)
758 xemacs-patches (this is where all patches are sent)
760 You can subscribe to these (and the other XEmacs mailing lists) at
761 <http://www.xemacs.org/Lists/>. Or via email, to:
763 xemacs-beta-request@@xemacs.org
764 xemacs-patches-request@@xemacs.org
766 With "subscribe" (sans quotes) in the body of the emails.
768 It also may be worth your while to monitor comp.emacs.xemacs if you
771 Here are a few guidelines that should make things run fairly smoothly
772 for all those involved. See the section ``XEmacs Package Maintainer''
773 in the XEmacs Developer Guide for additional information and tips.
778 For a quick start to building packages, see INSTALL under the packages/
779 dir where you set up a local source tree.
784 All changes must be documented by a patch sent to the xemacs-patches
785 mailing list. The patch must be accompanied by a ChangeLog. The
786 appropriate format is that generated by 'M-x add-change-log-entry'.
787 This convenient function also automatically determines file and
788 function containing the change, finds the appropriate ChangeLog
789 file, and formats the entry for you in the standard style.
791 Patches must be context diffs, preferably in diff -u format.
792 ChangeLogs should be in plain text or diff -U 0 format. Documentation
793 is being prepared and will be available under
794 <http://www.xemacs.org/Develop/>.
796 One advantage of having all changes documented on xemacs-patches is
797 that of the "many eyes" principle. Everyone on the XEmacs Review Board
798 actively monitors the xemacs-patches mailing list and will generally
799 look over any patch that falls into their area of expertise. We've
800 caught many, otherwise overlooked, bugs simply because there has been
801 another set of eyes look at a patch.
803 As the maintainer of redtape, Newbie, any patches that you submit for
804 redtape are automatically pre-approved. And you are the final
805 authority on any patches submitted against the redtape package, which also
806 includes patches from the XEmacs core developers.
808 Basically what I'm saying, Newbie, is that it is your code and you
809 shouldn't need our permission to make changes to it. It's up to us to
810 look at your patches and yell if we think there is something wrong.
811 Be aware though, that the XEmacs Packages Release Manager is the final
812 authority on packaging infrastructure. And it is XEmacs policy to
813 respect the wishes of the upstream maintainer, whether that is you or
816 As the XEmacs Packages Release Manager, I'd like to add a couple of
819 1) The packages repository is a "stable" branch, please
820 do all that you can to keep it that way.
822 2) In the Makefile you'll see "VERSION=" and
823 "AUTHOR_VERSION=", please don't ever alter the former. We
824 do that as part of the package release process.
826 3) When you update redtape on Bitbucket it'd be great if you could
827 either drop me a quick email or post to xemacs-beta saying
828 that redtape is ready for release.
830 Here's a brief rundown of how a package gets released:
831 -----------------------------------------------------
834 - hg diff > cool-new-patch.diff
835 - submit to xemacs-patches
836 - unless there are objections, or if it's "obviously correct",
837 commit and push to Bitbucket
841 - build new version of redtape
842 - upload to the "Pre-Release" directory of ftp.xemacs.org
843 - announce release on xemacs-beta
844 - time passes (no complaints about buggy redtape package)
845 - move redtape package to the main packages directory on FTP site
846 - announce release on xemacs-announce (which goes to
847 xemacs-beta and comp.emacs.xemacs)
849 I think that fairly well covers most things, the only other thing I'd
850 like to mention is: Have fun! And don't restrict your involvement to
851 just redtape, if you notice anything else that could do with some help,
854 Once again, Newbie, thank you for taking on this very important role
855 for us. And welcome to the Team!
858 XEmacs Package Release Manager.
864 @node XEmacs Package Maintainer, XEmacs Reviewer, Committer, The Work Roles
865 @section XEmacs Package Maintainer
867 @cindex XEmacs package maintainer
868 @cindex maintainer, XEmacs package
869 @cindex upstream maintainer
870 @cindex maintainer, upstream
872 A special kind of committer is the @dfn{XEmacs package maintainer}.
873 Much Emacs functionality comes in the form of add-on Lisp libraries.
874 Starting with XEmacs 20.4, most applications were unbundled from XEmacs,
875 and are now separately maintained, with their own release cycles, and
876 often separate development organizations. An @dfn{XEmacs package
877 maintainer} is responsible for maintenance of the infrastructure
878 required to seamlessly integrate one or more libraries into XEmacs and
879 provide for convenient distribution and administration of the package by
882 An XEmacs package maintainer approves patches for the package he
883 maintains, just as reviewers do for the rest of the code base.
884 @xref{XEmacs Reviewer}. Only in rare cases (such as bugs causing data
885 loss or affecting security or stability of XEmacs) should reviewers,
886 other than the XEmacs Package Release Engineer, approve patches to
887 packages which have a designated maintainer. Instead, they should
888 @samp{RECOMMEND} patches that they like. @xref{Patch Review}.
890 In other words, each unbundled package, in principle, has a separate
891 development organization. It may be hosted by the @value{PROJECT}, or
892 it may have its own resources. A package's XEmacs maintainer may be an
893 XEmacs developer, the upstream maintainer of the Lisp libraries, or a
894 liaison drawn from either project. Once the appointment is approved by
895 the upstream maintainer and the XEmacs Review Board, the XEmacs package
896 maintainer is given commit access restricted to the package's
897 repository, which is a subdirectory of the XEmacs packages repository.
899 XEmacs package maintainers are @emph{not} responsible for the
900 administrative aspects of releasing an XEmacs package of their
901 application; this work is done by the XEmacs Package Release Engineer.
902 Of course the package maintainer does have control over the decision to
906 * The Package Maintainer Role::
907 * Getting Started as a Package Maintainer::
908 * Updating and Merging with Mercurial::
909 * Committing and Pushing a Package Change::
910 * Updating a Package to a New Upstream Version::
911 * Advice to Package Maintainers::
916 @node The Package Maintainer Role, Getting Started as a Package Maintainer, , XEmacs Package Maintainer
917 @subsection The Package Maintainer Role
919 The @dfn{package maintainer} is basically a liaison between two
920 communities: the XEmacs developers, and the users of the package, who
921 will typically not be Lisp programmers, and perhaps not programmers at
922 all. Because the package maintainer represents the interest of a
923 community which often is not otherwise active in XEmacs development, he
924 is the ultimate authority on what goes into the package. Probably he
925 will extremely rarely wish to oppose changes made by members of the
926 Review Board (who have the authority to review and approve changes to
927 any part of XEmacs). However, he should feel free to make any changes
928 he thinks useful for his package; he does not need to ask anyone's
929 permission, and may approve or veto submissions by other users, and
930 incorporate them in the package as he sees fit.
932 The responsibility accepted is simply to pay attention to the package.
933 The package maintainer should stay on top of progress in the upstream
934 versions of the libraries in the package, and should subscribe to the
935 XEmacs Beta and XEmacs Patches mailing lists to watch for bug reports
936 and patches relevant to it.
938 We also hope and expect that the package maintainer will take part in
939 updating and improving the package, but we don't expect him to be a
940 coding wizard. It's possible to be a package maintainer even with
941 very little knowledge of the code. One can always ask for advice on
942 XEmacs Beta, or directly of experts on whatever the problem area is.
943 The roles of the package maintainer and of the core team are
944 complementary: the package maintainer stays in contact with his
945 community and finds out what the needs are; the core team provides
946 advice, information about how XEmacs works, and often patches and
951 @node Getting Started as a Package Maintainer, Updating and Merging with Mercurial, The Package Maintainer Role, XEmacs Package Maintainer
952 @subsection Getting Started as a Package Maintainer
954 @cindex bitbucket.org
955 @cindex Mercurial recipes
957 The first step is to clone the package from the source repository.
959 The XEmacs packages are organized using Mercurial subrepositories (aka
960 subrepos). This means that each package lives in its own Mercurial
961 repo, plus there's one more repo at the top level. Although it's
962 possible to clone a single package repo, it's better to clone the
963 entire tree, so that you get the build infrastructure that the top
964 level provides. The simplest way to do this is as follows:
967 hg clone https://bitbucket.org/xemacs/xemacs-packages mypackages
970 This will take a while, and about 210MB of space. It's possible to do
971 without most of the packages (for example, most modes can delete all of
972 the mule-packages subtree), but the Lisp programming language makes it
973 very easy to call functions in one package from another, and
974 interdependencies are frequent.
976 The next step is to configure any packages that you want to change so
977 that they can be pushed back to Bitbucket. Two approaches have been
978 shown to work: ssh, and https with your Bitbucket login.
980 For ssh, you will need to register an ssh public key at Bitbucket. On
981 many systems you can generate a key pair using the @command{ssh-keygen}
982 command. You will also need to change the @code{default} line in the
983 @file{.hg/hgrc} for each package to
986 default=ssh://hg@@bitbucket.org/xemacs/@var{package_name}
989 For https, change the @code{default} line in the
990 @file{.hg/hgrc} for each package to
993 default=https://@var{login}@@bitbucket.org/xemacs/@var{package_name}
997 where @var{login} is your Bitbucket login name.
999 The package developer is welcome to change anything in the repo for
1001 package. However, there are a couple of administrative
1002 files that are conceptually the "property" of the package system. These
1003 are @file{package-info.in} and the @file{Makefile}. There is almost
1004 surely no need to change either at this time, except to change the
1005 @samp{MAINTAINER} variable in the @file{Makefile} to contain the
1006 maintainer's name and email address. The package maintainer should
1007 never change the @samp{VERSION} variable; that is automatically
1008 maintained by the package release engineer (currently Norbert Koch) who
1009 does the releases of new versions of packages. You should keep the
1010 @samp{AUTHOR_VERSION} variable in sync with upstream, if that makes
1011 sense. It may be possible and convenient to have @code{AUTHOR_VERSION
1012 == VERSION}; ask the package release engineer about it if that seems
1018 cd mypackages/xemacs-packages/@var{package_name}
1020 # change MAINTAINER to your name and address
1021 # make a patch with hg diff > my.patch and send it to XEmacs Patches
1022 hg commit -m "Update MAINTAINER name and address." Makefile
1026 which is a good test that everything is working. You can find out
1027 more about Mercurial and the XEmacs repository at
1028 @url{http://www.xemacs.org/Develop/hgaccess.html}. Additional
1029 documentation on Mercurial Subrepositories is at
1030 @url{http://mercurial.selenic.com/wiki/Subrepository}.
1032 Many maintainers who have a separate repository for the upstream project
1033 do not send patches, but simply announce a synch to upstream. However,
1034 at least at first it is advisable to send patches, so that other
1035 developers can give you advice.
1037 The next step is to copy the @file{packages/Local.rules.template} file
1038 to @file{packages/Local.rules}, and edit it to fit your environment.
1039 The main things are to make sure that the @samp{XEMACS} variable points
1040 to the appropriate XEmacs binary, and that the @samp{STAGING} directory
1041 is set to something useful. Now you can build a test package by simply
1042 typing @kbd{make bindist}.
1044 When you push a change to the master packages repository, you should
1045 notify the package release engineer,
1046 currently @email{viteno@@xemacs.org,Norbert Koch}, about your
1047 intentions. Norbert is pretty aggressive about making new packages and
1048 putting them up for download. If you don't want that after a given
1049 change, you should tell him so. (This advice may or may not apply to
1050 the next release engineer.)
1052 For internal communication purposes, we make aliases for the maintainer
1053 and the package @samp{@@xemacs.org}. The package maintainer addresses are
1056 @var{firstname.lastname}@@xemacs.org
1059 You can use these publically as you see fit, or not. The package
1063 @var{package}-bugs@@xemacs.org
1064 @var{package}-discuss@@xemacs.org
1065 @var{package}-patches@@xemacs.org
1066 @var{package}-maintainer@@xemacs.org
1069 The last alias is set to the maintainer address. The @samp{bugs-} and
1070 @samp{discuss-} aliases are redirected to XEmacs Beta, and the
1071 @samp{patches-} address to the XEmacs Patch forum. You can ask that
1072 these be changed at any time, for example if you prefer to get mail
1073 about the XEmacs package in upstream project channels rather than XEmacs
1076 @node Updating and Merging with Mercurial, Committing and Pushing a Package Change, Getting Started as a Package Maintainer, XEmacs Package Maintainer
1077 @subsection Updating and Merging with Mercurial
1079 @cindex Mercurial recipes
1081 Although the package maintainer is normally the only person to update
1082 a package, it's possible that the repo on Bitbucket will contain
1083 changes that aren't in your local repo. If this happens, you will
1084 need to merge in those changes before pushing your changes.
1086 As a general recommendation, you should commit your local changes
1087 before pulling from the parent repository. Having your changes
1088 committed means they will not be lost in case something goes awry
1089 during the merge process.
1091 If you need to run @samp{hg merge}, you should do an @samp{hg commit}
1092 after you have finished merging the changes. This will make it easier
1093 to distinguish additional work from changes that resulted from the
1096 Assuming you have the entire package tree, the most reliable way to get an
1097 update is to do @samp{hg pull -u} in the top-level repository. The
1099 a separate @samp{hg update}) is necessary to pull the subrepo updates from
1100 the parent repository.
1102 If a merge is needed in your package subrepo, Mercurial will indicate it
1103 when processing your subrepo
1104 with the string @samp{+1 heads}. You can then use
1105 the normal @samp{hg merge} and @samp{hg commit} commands within the subrepo.
1108 @node Committing and Pushing a Package Change, Updating a Package to a New Upstream Version, Updating and Merging with Mercurial, XEmacs Package Maintainer
1109 @subsection Committing and Pushing a Package Change
1111 @cindex Mercurial recipes
1113 Normally you will just push changes from your package (sub)repo, not
1114 the top-level packages repo. You can use @samp{hg stat} to check for
1115 uncommitted changes. After your final commit, you can use
1116 @samp{hg outgoing} to list the changeset(s) that you will be pushing.
1118 If your push fails with an error message about creating multiple
1119 heads, that usually means that changes have been made in the parent
1120 repo since the last time you pulled from it. It's usually best to
1121 pull down those changes and (re)run @samp{hg merge}. Retest as needed,
1122 review your changes, commit, and try again to push.
1125 @node Updating a Package to a New Upstream Version, Advice to Package Maintainers, Committing and Pushing a Package Change, XEmacs Package Maintainer
1126 @subsection Updating a Package to a New Upstream Version
1128 @cindex Mercurial recipes
1130 If the XEmacs package sources are exactly the same as the upstream
1131 sources, updating to a new upstream version is easy: just copy in the
1132 new sources and update @samp{AUTHOR_VERSION} in the @file{Makefile}.
1133 Build, test, commit, and push.
1135 Often, though, the XEmacs package has diverged from upstream. In this
1136 situation, the package maintainer can keep a pristine copy of the
1137 most recent upstream version (i.e., the version that the XEmacs
1138 package is based on). Updating to a new upstream version then
1139 involves the following steps:
1143 Diff the new upstream version against the previous upstream version to
1144 generate a patch file.
1147 If necessary, massage the patch file to reflect the XEmacs file
1148 layout, or to remove diffs for files that are not in the XEmacs
1152 Make sure that your repository has the latest changesets from
1156 Apply the patch and resolve any conflicts by hand.
1159 Manually register any new files with Mercurial (@samp{hg add}) and remove
1160 any files that have been deleted (@samp{hg rm --after}).
1163 Build your package (and optionally build the entire package tree).
1164 Test as seems appropriate.
1167 When you are ready (e.g., after testing), commit and push the new
1168 version as described in the previous section.
1172 After pushing, monitor @uref{http://www.contactor.se/~matsl/smoketest/,
1173 the package smoketest} in case your changes break the build of other
1176 @heading ChangeLog files
1178 Many upstream packages provide their own @file{ChangeLog} files. You
1179 may wish to rename those to @file{ChangeLog.upstream} (or some
1180 variation), so that they are separate from the XEmacs @file{ChangeLog}
1181 files. You can refer to the upstream @file{ChangeLog} file in the
1182 @file{ChangeLog} entry that you create when updating to a new upstream
1183 release. For example:
1186 YYYY-MM-DD J. Random Hacker <jrh@@xemacs.org>
1188 * Sync with foobar 2.7.
1189 Please see the ChangeLog.upstream files for details.
1193 @node Advice to Package Maintainers, , Updating a Package to a New Upstream Version, XEmacs Package Maintainer
1194 @subsection Advice to Package Maintainers
1196 This section contains some as yet unorganized advice to package
1197 maintainers, especially those who are coming from a community which uses
1198 XEmacs but normally develops in a language other than Lisp.
1199 @emph{I.e.}, the maintainer of an editor mode.
1201 @heading Setting Up to Build Your Package
1203 Building a package almost always requires the presence of the
1204 @emph{source code} for other packages. Almost all packages depend on
1205 the @file{xemacs-base} package, for example. Therefore the recommended
1206 procedure is to check out the whole package tree, configure
1207 @file{Local.rules}, and do a full build with @kbd{make} from the top.
1208 (After that you should keep the tree up-to-date,
1209 @xref{Updating and Merging with Mercurial}, and
1210 occasionally do a @kbd{make} to keep things in order.) Having
1211 done this once, you can thereafter normally simply do @kbd{make} and
1212 @kbd{make bindist} in your package's top directory.
1214 We know this is annoying, but disk space is cheap, and the requirement
1215 for a full build is a one-time thing. After that, you can just do @kbd{make
1216 bindist} in your package's directory. Suggestions for improvement of the
1217 process @emph{are} welcome, but they must account for the need to
1218 provide macro definitions and autoloads.
1220 @heading Cloning from your local copy
1222 The clone command in @ref{Getting Started as a Package Maintainer}
1223 produces a packages tree that can be
1224 built, but because of the way the subrepositories are laid out, you
1225 cannot clone it further. If you wish to create further clones, you
1226 should create one more directory layer, e.g.,
1231 hg clone https://bitbucket.org/xemacs/xemacs-packages
1234 and then run the following script. In the example above, you would
1235 run it from the @file{mypackages/xemacs-packages} directory.
1239 top=$(basename $(pwd))
1240 for d in mule-packages xemacs-packages; do
1242 [ -d $f ] && ln -s $top/$f ..
1246 mv ../hm--html-menus ../hm-html-menus
1250 @heading Lisp macros and autoloads
1252 Lisp provides @dfn{macros}, which involve @dfn{expansion}, which means
1253 evaluating a Lisp expression which constructs a new Lisp expression.
1254 When a macro is invoked by the interpreter, the second expression is
1255 then @dfn{applied} to the actual arguments to give the actual result.
1257 This separation of expansion from application means that expansion can
1258 take place without knowing the actual arguments. The most important
1259 example is at compile time. As a design principle, @emph{compiled code
1260 cannot expand macros} (because it's unnecessary and inefficient), so you
1261 must have all definitions of macros used available at compile time. The
1262 somewhat similar @dfn{defsubst} is like C @samp{inline}; it's advice to
1263 the compiler, but the function can be called in the usual way. So
1264 although it's not strictly necessary, it's desirable for efficiency that
1265 defsubst definitions be available to the compiler.
1267 Since Lisp is very dynamic, it's possible to for code to call functions
1268 that haven't been defined yet, as long as the call isn't evaluated until
1269 after the function definition is loaded. The @dfn{autoload} facility
1270 allows definitions to be loaded the first time they are used.
1272 @heading Application to the XEmacs package infrastructure
1274 When a package is built, of course its Lisp libraries are compiled. To
1275 ensure that necessary definitions are available, the libraries of the
1276 packages named in the @samp{REQUIRES} Make variable are required, and
1277 the autoload definitions are loaded from generated libraries called
1278 @file{auto-autoloads} in each package.
1280 So you should at least do @kbd{make autoloads} from the top of the
1281 package tree. (It should be possible to do a more minimal set of
1282 auto-autoloads, just the ones that your package and packages it depends
1283 on use, but there's no automatic way to compute that set.)
1285 Since the compile process involves expanding macros, which is executing
1286 package code, it will speed up the build process for your package to do
1287 a full "make" from the top. The speedup may or may not be measurable,
1288 since make itself and simply starting XEmacs to do the compilation are
1289 pretty time-consuming.
1291 @heading Maintaining Package Metadata
1293 If you change the packages that your package depends on, or if you
1294 change the libraries that your package provides, you will need to edit
1295 one or more files to reflect those changes.
1297 To update the packages that your package depends on, edit the
1298 @samp{REQUIRES} list in the package's
1301 To update the list of libraries that your package provides, edit the
1302 @samp{provides} clause in the package's @file{package-info.in}.
1304 @heading For the future
1306 Some attempts have been made to track the dependencies on macros and
1307 autoloads, but the problem turns out to be fairly hard because it's
1308 possible to dynamically compute the names of functions to call, and
1309 things like that. Thus a program to analyze dependencies must
1310 actually understand Lisp semantics. We've found it most reliable to
1311 just build the packages, and set up dependencies when errors
1314 @heading XEmacs-Specific Changes
1316 You can make XEmacs-specific changes easier to find by tagging them
1323 Of course, the more variances there are between the upstream code and
1324 the XEmacs package, the harder it will be to update to new upstream
1325 versions. So the general recommendation is to work with the upstream
1326 developers to get any such changes incorporated into the upstream code
1329 @heading Changes to Other Packages or Top-Level
1331 Sometimes your changes may require changes to code that you don't own.
1332 For example, API changes in a new release of your package may break
1333 other packages. Also, the top-level repo has some package-specific
1334 data, like whether the sources are in the package's top-level
1335 directory or in a @file{lisp} subdirectory@footnote{See
1336 @samp{package-directory-map} in @file{package-compile.el}.}.
1337 So it's possible you will need
1338 to make changes in the top-level repo as well.
1340 If you need to make changes in code that you don't own, send mail to
1341 XEmacs Beta to ask for assistance. Describe the changes that you want
1342 to make (and why) and ask for instructions on how to proceed.
1345 @heading Getting Help with Your Package
1347 If you want advice on the code itself, just post it to XEmacs Patches,
1348 which is basically designed to put new code that is believed to be ready
1349 to be committed in front of the reviewers. Since you're the maintainer,
1350 you should mention explicitly that you want review. Otherwise people
1351 will assume you know what you're doing, even though you know you
1354 If you're more interested in whether it's a good idea or people will use
1355 it, then post to XEmacs Beta, where a lot more people will see it.
1356 Alternatively you may want to post to package-specific channels, either
1357 an upstream project or the channels devoted to the language it
1358 manipulates. To the extent that fixes have been submitted by the
1359 community, this fits into the latter case, and you only need to consult
1360 XEmacs channels if they don't work as expected.
1362 Finally, if it's a little of both, you can cross-post. This is useful
1363 in cases where you know you want to commit this patch but you want
1364 advice on what needs to be done next.
1366 @heading Learning About Emacs Lisp
1368 In this case posting to XEmacs Beta and/or comp.emacs.xemacs is best,
1369 because there are many competent Lisp hackers who are not core
1370 developers. In many cases, for example, font lock and indentation, this
1371 is probably not so much "learning Lisp" as "learning how Emacsen do font
1372 lock and indentation". Still, these are skills that are quite common
1373 outside of the core developer group.
1375 Many of the editor features are (unfortunately) relatively
1376 fork-specific. Emacs and XEmacs do them somewhat differently,
1377 especially font-lock. Nevertheless, you may also get some help on
1378 channels like comp.emacs and gnu.emacs.help. (Not
1379 @samp{emacs-devel@@gnu.org}, please; XEmacs-specific stuff is off-topic
1380 there, and even individual gurus won't be able to help much, since
1381 XEmacs code has diverged substantially.
1383 For Emacs Lisp itself, there's some tutorial material in
1384 @ref{Top,the XEmacs Lisp Reference manual, , lispref}, and GNU
1385 distributes an Emacs Lisp tutorial. However, the GNU tutorial is really
1386 more of a generic Lisp tutorial, with a few examples drawn from the
1387 Emacs domain. The Lisp Reference is pretty well organized; if you have
1388 trouble finding references to what you need to do, or don't understand
1389 what it says, feel free to report it as a bug. It's not always possible
1390 to improve it, but it's always worth trying!
1394 @node XEmacs Reviewer, Meta-Maintainer, XEmacs Package Maintainer, The Work Roles
1395 @section XEmacs Reviewer
1398 @cindex XEmacs Review Board
1401 @cindex xemacs-patches mailing list
1402 @cindex mailing list, xemacs-patches
1403 @cindex xemacs-review mailing list
1404 @cindex mailing list, xemacs-review
1405 @cindex maintainer, nonexistence of authoritative
1406 @cindex nonexistence of authoritative maintainer
1408 A @dfn{reviewer} is a developer who may approve or veto patches proposed
1409 for application to the XEmacs core code. They are expected to subscribe to
1410 @value{PATCHES-LIST}, the channel for submission of patches to the
1411 XEmacs code base and documentation sources. The collection of reviewers
1412 constitutes the @dfn{XEmacs Review Board}, which is responsible for
1413 arbitrating conflicts among reviewers, for relations to other projects,
1414 for changes to the development
1415 process described in this @emph{Guide}, and for giving access to
1416 @value{PROJECT} resources to developers, including selecting new
1418 @c #### @xref{XEmacs Review Board}.
1419 Unlike many projects, the
1420 @value{PROJECT} does not have a single authoritative @dfn{maintainer}.
1421 Policy discussions are conducted on the @value{REVIEW-LIST}. Only
1422 reviewers are subscribed, but any developer may post.
1424 Reviewers are recruited (or are volunteers) from the ranks of the
1425 committers. The primary qualification for reviewer is a track record of
1426 submitting code and other contributions, constructive criticism of
1427 others' patches, and general discussion on the xemacs-patches,
1428 xemacs-beta, and xemacs-design mailing lists. In other words, if you
1429 act like a reviewer, you're likely to be asked to be one.
1432 * Appointing New Reviewers::
1433 * Welcoming New Reviewers::
1438 @node Appointing New Reviewers, Welcoming New Reviewers, XEmacs Reviewer, XEmacs Reviewer
1439 @subsection Appointing New Reviewers
1441 @c #### This node needs improvement!!
1443 @cindex @value{BOARD}
1444 @cindex appointing reviewers
1445 @cindex reviewers, appointing
1447 The @value{BOARD} is a self-maintaining cabal. New reviewers are
1448 appointed when the Board feels having a person as a colleague would
1449 improve the project.
1453 @node Welcoming New Reviewers, , Appointing New Reviewers, XEmacs Reviewer
1454 @subsection Welcoming New Reviewers
1456 @cindex reviewers, welcoming
1457 @cindex welcoming reviewers
1459 @c #### The information in this message should be parsed out into Work Flow.
1460 When a new reviewer is appointed, a representative of the @value{BOARD}
1461 (typically the meta-maintainer or the mentor of the new reviewer) sends
1462 a welcome message to the new reviewer. Here's a sample.
1465 To: Newbert Reviewer <newbie@@xemacs.org>
1466 CC: XEmacs Review Board <xemacs-review@@xemacs.org>
1467 Subject: Welcome to the Review Board
1471 Welcome to the XEmacs Review Board.
1473 Your main responsibility as a reviewer is to subscribe to the
1474 xemacs-patches mailing list, and review patches you feel you have
1475 expertise on. This would include the Snufflopagus OS support and the
1476 Round-the-World-Tour package, of course. Any additional reviewing you
1477 can do would be very welcome. If you need to take time off, you can do
1478 so freely. If it is going to be a substantial block of time, it would
1479 be helpful if you would advise the review board so that other reviewers
1480 can pick up on patches to areas that you would normally review.
1482 Our formal Reviewer's Guide, part of the the Developer's Guide, is still
1483 in draft form. However, the following guidelines should be pretty close
1484 to current best practice.
1486 Any reviewer may approve and commit patches to the development
1487 "branch" (actually, the Mercurial branch @file{xemacs}).
1488 This includes one's own patches.
1489 If you are submitting a patch that you expect to be controversial or
1490 that you expect other reviewers to take a strong interest in
1491 discussing, you should simply submit it, and note in the abstract that
1492 you intend to commit within a certain time frame. Eg, other reviewers
1493 will often give you this courtesy with respect to patches to
1494 Snufflopagus-related code. However, most reviewer patches will be
1495 committed at the time of submission.
1497 If you are approving a submission by a developer with commit
1498 privileges, who actually commits the patch is decided by mutual
1499 convenience of the submitter and the reviewer. Otherwise the reviewer
1500 must commit the patch.
1502 Approvals and commits are indicated by replying to the patch post,
1503 placing the module (21.5 for the trunk) and the action keywords in all
1504 caps (eg "APPROVE COMMIT 21.5") in the first line of the body, and some
1505 clear abbreviation in the Subject header. (The repetition is for the
1506 convenience of a patchbot we're planning to install.) The action
1507 keywords should start in column 1 and be the only text in the first
1510 If you believe a given patch should not be applied in anything like
1511 the submitted form, you should veto it. As with approves and commits,
1512 you send a reply to the patch to xemacs-patches, with the action
1513 keyword VETO. In the reply you must explain carefully why the patch
1514 is being vetoed. A veto is a very strong expression of disapproval,
1515 and can only be overridden by approvals from at least 3 other
1518 Alternatively, you may delay application of a patch pending discussion
1519 or revision. The keyword QUERY seems to be the consensus for
1520 discussion. Some reviewers will use QUERY when asking for a specific
1521 revision, other will use REVISE for that case. You should send reply
1522 to _both_ xemacs-patches (for the benefit of patch-tracking) and to
1523 xemacs-beta, where discussion will occur. Please attempt to direct
1524 followups (eg, using Reply-To) to xemacs-beta. (We are planning a
1525 'bot to handle this but it has not yet been implemented.)
1527 You may decide to submit an alternative patch. If the original patch
1528 should therefore not be applied, use the keyword SUPERSEDES. If at
1529 all possible, make explicit reference to the original patch via a
1530 message-id or an URL to the xemacs-patches archive.
1532 Patches for the stable (21.4) and gamma (currently no release is in
1533 process) branches must be approved by the maintainers (Vin for 21.4)
1534 before being committed. It is common practice when submitting or
1535 approving a patch for 21.5 to add the keyword RECOMMEND 21.4 to indicate
1536 the patch should also be applied to the stable branch. If the patch
1537 doesn't apply, you or the original submitter will be asked to work up a
1540 In general, patches for Lisp packages may be recommended by any
1541 reviewer, but the current XEmacs Package Release Engineer prefers to do
1542 most commits himself. Also, many Lisp packages have external
1543 maintainers, in which case the external maintainer will be responsible
1544 for committing. (IIRC you are the external maintainer for
1545 Round-the-World-Tour.)
1547 Patches for Web site content may be approved and committed by any
1548 reviewer, but the webmaster, currently Adrian Aichner is most active.
1549 However, he encourages the rest of us to participate. Note that Adrian
1550 has created a validation target in the Web site make file; be sure to
1551 use it, and any other validation or link-setting tools you have that are
1552 available. Adrian coordinates changes to the website infrastructure.
1554 The Review Board is also the policy-making body for XEmacs. Discussion
1555 of policy and personnel matters takes place on the XEmacs Review mailing
1556 list, xemacs-review@@xemacs.org. This list is closed subscription; you
1557 have already been subscribed. This list is archived at
1558 http://list-archive.xemacs.org/xemacs-review/. The archives are
1559 password-protected. The user is "ObRefFoo", the password is "Fooboref."
1560 Discussion of code and architecture on xemacs-review is strictly
1561 forbidden. Such discussion should be moved to xemacs-beta or
1562 xemacs-design as soon as you notice it. As a consequence, xemacs-review
1563 is a fairly low-traffic list. Policy issues come up on an ad-hoc basis.
1565 On policy matters we generally have operated on the basis of
1566 consensus. We don't currently have a conflict resolution mechanism,
1567 but there seems to be a growing amount of support for the Apache
1568 model, see http://dev.apache.org/guidelines/. Participation in policy
1569 discussions is up to the individual reviewer. Some people do as a
1570 matter of habit, some don't, and some pick their issues.
1572 Feel free to recruit new developers or package maintainers. In
1573 principle authorization to commit is granted by the review board, but in
1574 practice we have had no dissents. So in most cases, where the new
1575 developer has been an active participant on one or more of the
1576 development lists, or has specific expertise of value to XEmacs, you
1577 would simply recommend the new developer on xemacs-review. In the
1578 usual case of no opposition ("lazy consensus"), the next step is to
1579 get an account on Bitbucket, and ask one of the Mercurial
1580 administrators (currently Mike Sperber and Stephen Turnbull) to grant
1581 access to the new recruit.
1583 Your aliases at xemacs.org have already been set up for some time.
1584 For your information, they are
1586 newbert.reviewer@@xemacs.org newbie@@general-conglobulation.com
1587 newbie@@xemacs.org newbert.reviewer@@xemacs.org
1588 newb.reviewer@@xemacs.org newbert.reviewer@@xemacs.org
1590 These are basically for your convenience; you can post from those
1591 addresses or whatever is convenient for you. In general we try to use
1592 our @@xemacs.org addresses for "official" announcements that go to
1593 xemacs-announce. Otherwise, it's a matter of personal taste.
1595 At present you are not pre-authorized to make announcements. If you
1596 need to make recurring announcements via xemacs-announce, contact the
1597 mailing list administrator at xemacs-mailmaint@@xemacs.org.
1599 You already have commit privileges in the XEmacs repository at
1600 bitbucket.org. If you have any trouble due to extensions of your
1601 permissions, let one of the Mercurial Administrators (Mike Sperber or
1602 Stephen Turnbull) know. The directions at
1604 http://www.xemacs.org/Develop/hgaccess.html
1606 seem to be pretty clear.
1608 XEmacs uses facilities at Tux.org (mailing lists, FTP archive, and web
1609 site), in addition to the source code management provided by
1610 Bitbucket. There is also a web site mirror at SourceForge, but this
1611 is rarely of interest to anyone except the webmaster. If you need
1612 access to Tux.org, let me know. The administrators are
1613 very helpful within the constraints of their security policies, and if
1614 there is a reasonable need, they generally respond by providing
1617 If you have any questions, feel free to ask any of the reviewers
1618 directly (see http://www.xemacs.org/Develop/jobs.html) or post to
1619 xemacs-review, as seems appropriate.
1621 Stephen Turnbull <stephen@@xemacs.org>
1622 XEmacs Project Meta-Maintainer
1627 @node Meta-Maintainer, Release Engineer, XEmacs Reviewer, The Work Roles
1628 @section Meta-Maintainer
1630 @cindex meta-maintainer
1632 The @dfn{meta-maintainer} is a reviewer who
1633 is responsible for general administration, including recruiting
1634 personnel to handle various chores required to keep the project running
1635 smoothly and handling correspondence for the XEmacs Review Board. The
1636 meta-maintainer generally also fills the role of ``Mr. XEmacs,'' the
1637 public representative of the project. For this reason the
1638 meta-maintainer should be an individual who has earned the respect and
1639 some power in the community, but the role does not provide any
1640 exceptional power itself.
1644 @node Release Engineer, Jobs List, Meta-Maintainer, The Work Roles
1645 @section Release Engineer
1647 @cindex release engineer
1648 @cindex release manager
1650 A @dfn{release engineer} (also called @dfn{release manager}) is
1651 responsible for the administrative aspects of releasing a distribution,
1652 including such things as ensuring that generated files are committed to
1653 the repository, tagging the version in the repository,
1654 updating release documentation, creating and uploading
1655 tarballs, and making announcements. Release engineers are @emph{ex
1656 oficio} members of the XEmacs Review Board. That is, if you are willing
1657 to accept the responsibility of release engineering, and the Board is
1658 willing to accept you, you will be appointed as Reviewer if you aren't
1661 @c #### MAKE A SEPARATE NODE CORRESPONDING TO jobs.html, AND FIGURE OUT
1662 @c HOW TO AUTOMAGICALLY UPDATE AND PUBLISH IT AS jobs.html.
1663 There are currently three XEmacs release engineers: Vin Shelton, for the
1664 stable XEmacs 21.4 branch; Norbert Koch, for the XEmacs package
1665 distribution, and Stephen Turnbull, for the development 21.5 branch
1666 (the Mercurial @file{xemacs} branch).
1670 @node Jobs List, , Release Engineer, The Work Roles
1673 There are a number of auxiliary roles requiring special access to
1674 @value{PROJECT} resources, such as postmaster and webmaster. However,
1675 these roles do not differ substantially from similar roles in other
1676 projects or organizations, or explicitly control the daily workflow of
1677 the @value{PROJECT}, so definition will be postponed to the sections
1678 describing the roles in detail. Many of these roles are listed in the
1679 @uref{http://www.xemacs.org/Develop/jobs.html,Jobs List}.
1683 @node The Work Flow, XEmacs Resources on the Internet, The Work Roles, Top
1684 @chapter The Work Flow
1686 This section is a description of current best practices, rather than an
1687 attempt to define a standard.
1689 @cindex patch life cycle
1690 @cindex life cycle, patch
1693 @heading The Life Cycle of a Patch
1696 @item Get the sources.
1697 @value{PROJECT} tarballs are always distributed as source (except in
1698 the case of the Windows installer), but version control simplifies management of
1699 your improvements. (Third-party vendors such as *nix distributions and
1700 Cygwin may distribute binary packages, but XEmacs no longer does.)
1702 @item Write low-profile code.
1703 Don't distract your users or colleagues from their work. Just make it
1706 @item Test your changes.
1707 It's not done until you've proved it works the way you said it would.
1708 As much as possible, tests should be automated, using @file{test-harness.el}.
1710 @item Add a ChangeLog entry.
1711 Tell us what you did.
1713 @item Create the patch.
1714 Dot the i's, cross the t's. Make sure that it's easy to add to the code
1715 base. The best way is by using @code{hg diff} against the tip of
1716 the branch or trunk you intend to have the patch applied to. The
1717 exception is ChangeLog patches, which may be generated using @code{hg
1718 diff -U 0 ChangeLog}, or submitted as plain text.
1720 @item Submit the patch.
1721 Compose the message, especially the Subject: header, so it's easy to
1722 find, easy to identify, easy to review, and easy to apply.
1724 @item Review the patch.
1725 The primary function of the @value{BOARD} is to help you improve your
1726 contributions. We aim for coherence and power in the interfaces, and
1727 maintainability in the implementation.
1729 @item Assign copyright.
1730 If you like you may assign your coppyright, typically to the FSF; but
1731 this is not required.
1733 @item Commit the patch.
1734 Who commits, how to commit, and when to commit are determined by
1735 negotiation between the developer of the patch and the approving
1738 @item Dispute Resolution
1739 Any three developers will give you four ``best ways'' to do it. Now you
1744 * About Copyright Assignment::
1745 * Scratching That Itch::
1747 * Write Low-Profile Code::
1748 * Test Your Changes::
1749 * Add a ChangeLog Entry::
1750 * Create the Patch::
1751 * Submit the Patch::
1753 * Committing the Patch::
1754 * Dispute Resolution::
1759 @node About Copyright Assignment, Scratching That Itch, The Work Flow, The Work Flow
1760 @section About Copyright Assignment
1762 @cindex assignment of copyright
1763 @cindex copyright, assignment of
1765 Although XEmacs is a derivative of GNU Emacs, XEmacs is not a GNU
1766 project, nor does it require a copyright assignment to the FSF or anyone
1767 else. However, according to the FSF's legal advice, the best way to
1768 protect your investment in free software is to assign your copyright to
1769 the FSF (or other free software trust), which is required by its
1770 covenants of incorporation to actively defend free software it holds.
1771 You may also wish to respect the wishes of Richard Stallman, the first
1772 author and current maintainer of Emacs.
1773 Finally, you may wish to support the FSF's advocacy of free software by
1774 assigning your copyright to the FSF. At the present time, the
1775 @value{PROJECT} neither advocates nor discourages this action; it's up
1778 Also, be aware that in January 2005
1779 Richard Stallman explicitly denied that such assignments would
1780 facilitate adoption of XEmacs code by GNU Emacs; if you want your code
1781 to be used in GNU Emacs, you will have to resubmit it directly to the
1782 GNU Emacs project. (The assignment is acceptable for use in Emacs, but
1783 Emacs developers are not allowed to port others' code from XEmacs to GNU
1784 Emacs, even if it's assigned; the original developer must participate in
1787 Get more information about procedures from the
1788 @email{emacs-devel@@gnu.org,GNU Emacs developers' mailing list} or from
1789 @email{rms@@gnu.org,Richard Stallman}. You may also wish to review
1790 @uref{http://www.gnu.org/prep/maintain.html,Information For Maintainers
1791 of GNU Software}, although it is not directly related to @value{PROJECT}
1796 @node Scratching That Itch, Get the Sources, About Copyright Assignment, The Work Flow
1797 @section Scratching That Itch
1799 @c #### needs revision
1801 As always in free software, a patch starts life when some developer
1802 somewhere gets an itch. It might be an irritating bug, or someone's
1803 report of a bug that bites them; a new feature, whether one's own
1804 brilliant inspiration, a user request, or simply the mindless
1805 determination to keep up with the other One True Editor.
1809 @node Get the Sources, Write Low-Profile Code, Scratching That Itch, The Work Flow
1810 @section Get the Sources
1812 Maybe the developer has never worked on XEmacs before. In that case,
1813 he'll need to check out the source tree from the Mercurial
1814 repository (@pxref{Mercurial Repository}). True, he may already have the
1815 whole package because he built from source after downloading a tarball.
1816 However, tarballs often lag current development by many months, and
1817 there's nothing that turns a maintainer off like a patch that doesn't
1818 apply because it was generated against an old version. Furthermore, the
1819 developer needs to keep track of the original file in order to generate
1820 a correct patch, which can be quite difficult if you go through several
1821 iterations working on a complex issue.
1825 @node Write Low-Profile Code, Test Your Changes, Get the Sources, The Work Flow
1826 @section Write Low-Profile Code
1829 As for the best leaders, the people do not notice their existence.
1830 ... When the best leader's work is done, the people say, ``We did it
1834 Software engineering is like leadership: true excellence means things
1835 ``just work,'' and nobody notices that you've intervened. Of course,
1836 nobody's perfect, and how you choose which imperfections you will and
1837 won't admit defines your style. However, we can derive some ideas about
1838 what kinds of submissions are more likely to be generally approved.
1840 With respect to software @emph{users}, we have the @strong{principle of
1841 least astonishment}. Users will have a more pleasant experience and
1842 work more efficiently if similar gestures in similar contexts produce
1843 analogous results. This applies to APIs, as well; if
1844 @code{forward-char} takes an optional signed integer argument and there
1845 is no @code{backward-char}, other developers will likely be rather
1846 annoyed if you define separate @code{forward-word} and
1847 @code{backward-word} functions, each taking a required non-negative
1850 Of course interface design is a matter of judgment, but in cooperating
1851 with other developers there's a more technical standard that should also
1852 be applied: @strong{minimize your patches}. This principle extends to
1853 the degree of violating coding standards in situations like the
1857 @{ /* new compound statement to enclose new_local_variable */
1858 int new_local_variable = initializer ();
1859 @{ /* @strong{don't} reindent this brace */
1860 /* or the following 25 lines, omitted here */
1861 new_local_variable = iterator (new_local_variable);
1862 /* or the following 10 lines, also omitted */
1863 @} /* nor the closing brace */
1867 This makes it easier to identify what has been changed, and equally
1868 important, what has not, when reading the patch. It also makes it more
1869 likely that two semantically independent patches will not interfere with
1870 each other. For similar reasons, @strong{follow the established coding
1871 standards} and resist the temptation to ``beautify'' code that is not
1872 directly relevant to your changes.
1874 If you follow these practices habitually, your patches will be more
1875 rapidly accepted with fewer requests for revision, and you will have
1876 more credibility when you do need to make an exception to the rule.
1880 @node Test Your Changes, Add a ChangeLog Entry, Write Low-Profile Code, The Work Flow
1881 @section Test Your Changes
1883 XEmacs provides a suite of regression tests which you can run with
1884 @code{make check}. Run them often, and definitely before you check in.
1885 Fixing one bug is hardly progress if it introduces another. Whenever
1886 you fix a bug, try to add a test for it to the test suite so it will be
1887 detected if it reappears, or if you fix fails on another platform.
1889 Whenever you add a feature, add new tests to validate its functionality.
1891 Some packages provide their own tests, which you should run before
1892 submitting changes to those packages.
1896 @node Add a ChangeLog Entry, Create the Patch, Test Your Changes, The Work Flow
1897 @section Add a ChangeLog Entry
1899 @strong{Needs review!!}
1901 Add a log entry to @file{ChangeLog} file in the ancestor directory
1902 closest to each changed file.
1909 @node ChangeLogs, Log Messages, Add a ChangeLog Entry, Add a ChangeLog Entry
1910 @subsection ChangeLogs
1912 @strong{This section is pretty close to correct for XEmacs. Needs review.}
1916 Each module should have its own @file{ChangeLog}. Change logs are cool
1917 because they summarize all the changes in one place, and provide
1918 visibility to the changes to those who do not have access to the source
1921 Here is an example @file{ChangeLog} entry:
1924 2001-02-18 Bill Wohler <wohler@@newt.com>
1926 * Release mh-e-doc-1.3 for Emacs 21.1.
1928 * doc/mh-e.texi (Viewing): Added mh-header-display index entry.
1929 (Organizing,Customizing Reading): Added mh-kill-folder index entry.
1931 * doc/fixhtml (dohtml): Now part of main program now that program
1932 only fixes HTML files. Added -w and strict usage.
1933 (usage,dodvi,doinfo): Deleted.
1934 (fix_ref_links): Fixed a few uninitialized variables. Found a
1935 couple of variables and commands that weren't indexed.
1937 * doc/Makefile (EMACS): Point to $(TOP)/../remote/emacs.
1938 (XEmacs-DOCS): Added all relevant files.
1939 (ONLINE_DIR): Contains target directory for online files.
1940 (TEXI2HTMLFLAGS, MAKEINFOFLAGS): Added.
1941 (dist): Tags will have doc in them, so don't need to add. Release
1942 will now have all relevant files, rather than just mh-e.texi.
1943 (install-emacs): First ask user if he has updated and incorporated
1944 target emacs directory.
1945 (install-online): Implemented.
1946 (%.info,%.html,%.dvi,%.ps): Added.
1948 *doc/mh-e.texi (Viewing, Showing): Use new keymaps (closes
1952 The first bullet shows the text that should be used when releasing a
1955 As usual, the string in parenthesis indicates the documentation
1956 section, Makefile variable or target, or program function or variable.
1957 If you do not use the Emacs @file{ChangeLog} commands such as @kbd{C-x
1958 4 a} (@code{add-change-log-entry-other-window}) which inserts this
1959 text for you (even from a diff!), please do follow its conventions.
1961 Note that the date, the full name, and the email address are separated
1962 by pairs of ASCII spaces, the date is in YYYY-MM-DD format, and the
1963 email address enclosed in angle brackets. The leading space in the log
1964 entries is encoded as an ASCII TAB, not as 8 spaces. These formatting
1965 rules are mandatory, because ChangeLog modes depend on these heuristics.
1967 Multiple targets with the same text may appear in the same entry.
1970 @c #### @cindex SourceForge
1971 @cindex XEmacs tracker
1973 If your patch is related to a reported issue, please note the issue in
1974 the ChangeLog. For consistency, phrase the issue number as follows
1975 (@pxref{Updating NEWS}). For the XEmacs tracker, use
1981 You may also be aware of third party reports, such as in the SourceForge
1982 or Debian trackers. In those cases include the name of the project
1983 maintaining the tracker, and maybe an URL:
1986 (closes SourceForge #621632).
1987 (closes Debian #234234).
1990 The XEmacs manual has full documentation on the @file{ChangeLog}
1993 When you check in the change log, you do not need to supply any log
1996 @node Log Messages, , ChangeLogs, Add a ChangeLog Entry
1997 @subsection Log Messages
1999 @strong{This section, written by Bill Wohler for MH-E and lightly edited
2000 to substitute ``XEmacs'' for ``MH-E'', is pretty close to correct for
2001 XEmacs, at least in the case of implicit self-approval. Needs review.}
2003 @cindex log messages
2006 Log messages for Mercurial checkins
2007 should be taken from @file{ChangeLog}. Given the
2008 @file{ChangeLog} in the previous section, here is what the log for
2009 @file{fixhtml} might look like:
2012 (dohtml): Now part of main program now that program
2013 only fixes HTML files. Added -w and strict usage.
2014 (usage,dodvi,doinfo): Deleted.
2015 (fix_ref_links): Fixed a few uninitialized variables. Found a
2016 couple of variables and commands that weren't indexed.
2019 Note that the @code{*} and the filename have been removed, but this is
2020 not mandatory. However, if the same log message is used for multiple
2021 files, then the associated @code{*} and filenames will need to be
2022 present to separate the messages.
2024 It is not necessary to add release information since that
2025 information will be encoded in the tags.
2027 At worst, setting the log information will be a cut and paste
2028 operation. At best, it will be a keystroke or two. Currently cut and
2029 paste is required because the XEmacs version of VC does not support
2032 I specify the following for @code{log-edit-hook} to make life easier:
2035 (defun my-log-edit-hook ()
2036 "This assumes that you have already written a ChangeLog entry."
2037 (setq paragraph-start (concat paragraph-start "\\|(.*):"))
2038 (fill-region (point-min) (point-max)))
2041 Log messages for files named @file{ChangeLog} may be empty.
2045 @node Create the Patch, Submit the Patch, Add a ChangeLog Entry, The Work Flow
2046 @section Create the Patch
2048 @cindex Mercurial recipes
2050 (The following lines describe the current patch creation standard for
2051 developers without commit access, committers, and reviewers alike. An
2052 optional alternative procedure for @emph{reviewers only} was
2053 adopted in first quarter 2005.)
2055 Patches should be created using a standard diff(1) such as provided by
2056 GNU diffutils, or implemented by Mercurial. A patch should be a
2057 @dfn{changeset}, that is, it should collect all of the related changes
2058 required to implement the improvement in a single file or message. The
2059 patch must be a context diff to avoid spurious commits. The @samp{diff
2060 -urN} format produced by GNU diff is strongly
2061 preferred (except for @file{ChangeLog}; see below). @strong{N.B.} If
2062 you use older diffs, please check for the
2063 presence of full relative paths in three places: the @samp{Index},
2064 @samp{---}, and @samp{+++} lines. If the latter do not have the
2065 appropriate relative paths, patch(1) will invariably @emph{fail} to find
2066 the target file, and the application will fail.
2068 Any @file{ChangeLog} diffs must be removed from the main diff. Because
2069 @file{ChangeLog} is changed in the same place (the beginning) with
2070 @emph{every} patch, context conflicts are extremely likely. On the
2071 contrary, since @file{ChangeLog} entries are essentially independent of
2072 each other, a @emph{contextless} @samp{diff -U 0} format patch at line
2073 0, or plain text that can be easily cut and pasted, is the preferred
2074 format for the @file{ChangeLog} diff. These should be prepended to the
2078 @node Submit the Patch, Patch Review, Create the Patch, The Work Flow
2079 @section Submit the Patch
2081 @cindex patch submission
2082 @cindex submission, patch
2084 (The following lines describe the current patch submission procedure for
2085 developers without commit access, committers, and reviewers alike. An
2086 optional alternative procedure for @emph{reviewers only} was
2087 adopted in first quarter 2005.)
2089 Send the patch by email to @value{PATCHES-LIST}. The subject line
2090 should indicate the branch or package in square brackets at the
2091 beginning of the field. Some developers like to include the keyword
2092 @samp{PATCH}; it is optional. After the square brackets, some mnemonic
2093 reference to the nature of the patch should be given. This might
2094 include the file that is patched or the bug issue being addressed:
2097 Subject: [21.5] src/regex.c: synch to recent GNU Emacs
2099 Subject: [PATCH web] Announce the release of XEmacs 21.4.6
2101 Subject: [21.4 21.5] Fix mail truncation bug
2104 The first line of the message may contain special keywords. The only
2105 ones normally used by non-reviewers are @samp{SUPERSEDES} and the module
2106 names. The keyword @samp{SUPERSEDES} @strong{must be used} if the patch
2107 is intended to be applied @emph{instead} of another addressing the same
2108 issue. In this case the message @strong{should} be constructed as a
2109 reply to the patch it supersedes (or to some followup to that patch).
2110 That is, the message header should contain a properly constructed
2111 @samp{References} header or an @samp{In-Reply-To} header or both.
2112 Optionally, if it is difficult to do this for some reason, an URL
2113 pointing to the thread in @value{PATCHES-LIST}'s archives, or (less
2114 desirable) the superseded patch's message ID, @strong{must} be included
2115 in the message body.
2117 It is best practice to include the module name(s) if any keywords are
2118 used. The module name(s) @strong{must} be present in the case of an
2119 original patch that applied to more than one module. For example, it is
2120 fairly likely that if the patch for mail truncation was generated
2121 against 21.4 it will fail to apply to 21.5. In that case, a new patch
2122 should be generated and the header and top of body of the submission
2123 message should resemble the following example:
2126 From: Newbert Developer <newbie@@users.sourceforge.net>
2127 To: xemacs-patches@@xemacs.org
2128 Subject: [S21.5] Fix mail truncation bug
2129 References: <disappointed.21.5.maintainer@@xemacs.org>
2130 <original.patch.submission@@users.sourceforge.net>
2134 Not needed for 21.4.
2135 This patch adapts the fix from
2136 <original.patch.submission@@users.sourceforge.net> to 21.5.
2143 * Optional Alternate Procedure for Reviewers::
2148 @node Optional Alternate Procedure for Reviewers, , Submit the Patch, Submit the Patch
2149 @subsection Optional Alternate Procedure for Reviewers
2151 Patches that are self-approved by a reviewer, and are either expected to
2152 be non-controversial or are part of a project that has the general
2153 approval of the @value{BOARD}, may optionally omit the email submission.
2154 Instead, the responsible reviewer simply commits the patch, and the
2156 commit-trigger will automatically generate and post the patch to
2157 @value{PATCHES-LIST}. This may be referred to as @dfn{implicit
2160 @strong{The commit-trigger has
2161 not yet been implemented at the time of writing. For this reason
2162 implicit self-approvals should still be avoided. (2007-05-13)}
2166 @node Patch Review, Committing the Patch, Submit the Patch, The Work Flow
2167 @section Patch Review
2169 @cindex patch approval
2170 @cindex approval, patch
2172 (The following lines describe the current patch submission procedure for
2173 developers without commit access and committers. Reviewers may
2174 optionally use ``commit-and-review,'' described later. Another optional
2175 alternative procedure for @emph{reviewers only} was adopted
2176 in first quarter 2005. Called ``implicit self-approval,'' it was
2177 described in the previous section.)
2179 After the patch has been distributed via @value{PATCHES-LIST} reviewers
2180 and other developers should review and test the patch. Discussion
2181 should continue on the same list. When a reviewer is satisfied that he
2182 understands the patch, he should post a @dfn{reviewer action}, which is
2183 a reply to the thread stating his formal decision. The currently
2184 defined reviewer actions are
2188 The patch is accepted, and will be committed by arrangement between the
2189 approving reviewer and the submitting developer.
2192 The patch should be accepted, but it needs to be applied to code the
2193 reviewer doesn't have authority over (either a stable branch or a
2194 package with a designated maintainer).
2197 The reviewer likes the idea of the patch, but is delaying application
2198 subject to clear-cut revisions, or perhaps mere clarification of the
2199 intent or mechanism of the patch.
2202 The reviewer is demanding certain revisions, or the patch will be
2203 vetoed. May be obsolete; current practice strongly favors use of
2204 @strong{QUERY} both for required revisions and for further discussion,
2205 and there seems to be little need to distinguish these cases.
2208 The reviewer thinks the patch is ill-conceived, and requires redesign
2209 before it will be acceptable.
2212 There has been controversy on the @value{BOARD} about the
2213 meaning of a veto. Some reviewers interpret it as unalterable
2214 opposition that can only be settled with sabers or pistols, while others
2215 see it as a moratorium that might be, or might not be, permanent.
2217 In cases of the first three actions, the future path of the patch is
2218 clear. In the case of a @samp{VETO}, the veto may be overridden by
2219 three votes for @samp{APPROVE} among the reviewers. (It's not clear
2220 to me whether an override requires a majority, including at least three
2221 approvals, or a supermajority of two more approvals than vetos.)
2226 * Commit-and-Review::
2229 @node Commit-and-Review, , Patch Review, Patch Review
2230 @subsection Commit-and-Review
2232 A reviewer may self-approve his own submission. In this case, the
2233 reviewer may use @dfn{commit-and-review}, that is, submit, approve, and
2234 announce the commit in a single post to @value{PATCHES-LIST}.
2236 In cases of implicit self-approval or commit-and-review, other reviewers
2237 are expected to review in a timely fashion, and in the case of a
2238 @samp{QUERY} or @samp{VETO} post their action within a week. In the
2239 case of a @samp{VETO}, the patch must be reverted immediately, pending
2240 an override or withdrawal of the veto.
2244 @node Committing the Patch, Dispute Resolution, Patch Review, The Work Flow
2245 @section Committing the Patch
2247 @cindex patch, committing a
2248 @cindex committing a patch
2250 Once the patch has been approved, it should be pushed to the source
2252 as possible. The committer should also send a commit message using the
2253 keyword @samp{COMMIT} as a reply to the approval message.
2256 * Proposed Alternative Procedure::
2261 @node Proposed Alternative Procedure, , Committing the Patch, Committing the Patch
2262 @subsection Proposed Alternative Procedure
2264 In the case of implicit self-approval, the changeset log message should
2265 describe the rationale for the patch, and list the affected modules and
2266 subdirectories in the tree. This should be enough to point reviewers to
2267 the relevant ChangeLog diffs, which will automatically be included.
2268 There will be no manual posts at all to @emph{xemacs-patches}, so there
2269 is no way to supply a message ID reference; that requirement is nullified.
2271 @strong{This procedure is not yet in effect, and the commit-trigger has
2272 not yet been implemented at the time of writing. (2009-02-24)}
2276 @node Dispute Resolution, , Committing the Patch, The Work Flow
2277 @section Dispute Resolution
2279 @cindex contesting vetos
2280 @cindex vetos, contesting
2281 @cindex protesting check-ins
2282 @cindex check-ins, protesting
2283 @cindex dispute resolution
2285 @strong{This is a first hack draft by @samp{stephen}. I have no idea
2286 whether it represents my own ``true'' opinion, let alone anyone else's.}
2288 There seems to be general agreement that @value{PROJECT} resources
2289 should be used to serve ``the users' needs'' first, before being used
2290 for developers' play---but there is disagreement over who those users
2291 are, and what their needs might be.
2293 There is general agreement that one of the advantages to working on
2294 XEmacs is the overall coherence of most of its architecture, and the
2295 dedication of the team to refactoring broken designs. However, the
2296 developers with fewer resources to devote feel overwhelmed by the ``code
2297 churn'' generated by the most prolific developers, and protest that
2298 memorizing global renamings and the like are rather frivolous ways to
2299 spend reviewer resources.
2301 These conflicts typically manifest as a dispute over some reviewer's use
2302 of a veto. Therefore I propose the following guidelines for use of
2306 @item Only patches can be reviewed.
2308 And therefore, only patches can be vetoed. People can propose, purely
2309 for discussion, whatever they like. Such proposals @strong{may not} be
2310 vetoed. If somebody wants to submit a patch that's clearly against the
2311 sense of some member of the board, let them. It will be vetoed. If
2312 they resubmit a real revision, the reviewers must be allowed to consider
2315 Note how this deals with the ``use the ISO standard @samp{size_t} type
2316 for positive variables'' kind of issue. There's essentially only one
2317 way to write that patch. If it is vetoed and an attempt to override
2318 fails, the policy of the @value{BOARD} is clear. The patch should not
2319 be resubmitted until there's good reason to suppose the average stance
2320 of the board has shifted considerably.
2322 @item Reviewer decisions apply to the whole patch.
2324 Including vetos. This makes megapatches risky, obviously. It's up
2325 to the contributor to separate the parts; if something unacceptable is
2326 submitted as part of the megapatch, the reviewer should not be
2327 pressured to accept the whole, nor to do the surgery himself. If the
2328 megapatch is that important to the project, the board should be willing
2329 to override the veto. If the contributor can't get that support, he
2330 must split out the acceptable parts.
2332 @item Reasonable time constraints for reviewers.
2334 Except for global substitutions, megapatches are normally the result of
2335 weeks, even months, of secret work; reviewers should be allowed
2336 proportionate amounts of time to review them. If the work is done
2337 serially via commit-and-review, or on a branch, or (with approval of the
2338 Board) in @samp{#ifdef}s, then the reviewers get just as much time as
2339 the originator does, and they have no excuse for being ``surprised'' by
2340 the megamerge at the end.
2342 Note that the point of a branch here is @emph{not} incremental merging,
2343 it is to make progress on the megapatch public. So this costs only the
2344 trivial effort of committing your workspace to the branch every week or
2345 two. (Of course the big merge at the end will still be a lot of work,
2346 but that would be true if all the work was done in a local workspace and
2347 never committed to a branch.)
2349 @item Each resubmission of a patch restarts the clock.
2351 Reviewers need not work faster just because somebody has resubmitted the
2352 patch three times. If you submit a large patch with 52 major bugs, you
2353 had better be prepared to wait a year as it gets vetoed once a week,
2356 @item The submitter must revert an immediate commit if vetoed.
2358 If you take advantage of implicit self-approval, you have no arguments
2359 because you've short-circuited the review process. Had the patch gone
2360 through the full process, it never would have been applied---you're way
2361 ahead of the game as it is. Revert the patch.
2363 If the veto is abusive, the abusive reviewer should be disciplined---but
2364 showing that will take discussion, and that must happen after reversion.
2366 @item A veto after commit of a fully reviewed patch must be supported.
2368 If a patch goes through the full submit---review---approve---commit
2369 cycle, it may still be vetoed. However, in this case the burden of
2370 proof should be on the vetoer. The committer @emph{may} refuse to
2371 revert, and in that case, the vetoer needs two concurring vetos. This
2372 constitutes a blocking coalition of three---the patch must be reverted
2373 immediately, even if it seems likely that a vote of the board would back
2374 the commit. The patch can be reapplied after the vote.
2376 Some patches, ie, not submitted by reviewers, need the full
2377 submit---review---approve---commit process in any case. So if reviewers
2378 want some assurance that their patch won't be reverted after commit,
2379 they can take advantage of full review process (which still allows
2382 (It's arguable that ``full review process'' should mean approval by a
2383 reviewer other than the submitter.)
2388 @node XEmacs Resources on the Internet, Copying, The Work Flow, Top
2389 @chapter XEmacs Resources on the Internet
2391 @strong{Write this node!} Get mailing list and newsgroup information
2392 from the @uref{http://www.xemacs.org/Lists/, mailing list page},
2393 available as the module @emph{xemacsweb}.
2395 There should also be a node for the Emacs Wiki.
2397 @cindex XEmacs Resources on the Internet
2401 * Mercurial Repository::
2402 * comp.emacs.xemacs::
2413 @node Project Website, Mercurial Repository, XEmacs Resources on the Internet, XEmacs Resources on the Internet
2414 @section Project Website
2416 @strong{Needs review. Adrian?}
2418 @cindex Project Website
2419 @cindex @value{XEMACSORG}, XEmacs Web space
2421 The @uref{http://www.xemacs.org/, XEmacs home page} contains a brief
2422 overview of the XEmacs project. This Web space also includes other
2423 internal documents, such as this one.
2425 @c #### this probably belongs elsewhere? this subtree is more user-oriented.
2426 To install your updates into the XEmacs Web space at @value{XEMACSORG},
2427 simply check out the @file{xemacsweb} module, make
2428 your changes, and check it in. The commit script takes care of
2429 generating the HTML and pushing the changes to the web servers' document
2433 @node Mercurial Repository, comp.emacs.xemacs, Project Website, XEmacs Resources on the Internet
2434 @section Mercurial Repository
2436 @cindex Mercurial Repository
2438 @c #### update the specific links for convenience!!
2439 The Mercurial Repository contains several branches of the trunk
2440 (currently version 21.5). You can view the repository with an ordinary
2441 browser on the HTTP URL.
2444 @item https://bitbucket.org/xemacs/xemacs-beta
2445 The branch from which beta releases are made. Direct commits are not
2446 allowed. Only the gatekeepers (pulling approved patches from the
2447 @file{xemacs} branch) and the Beta Release Manager may commit
2448 to this branch. The @file{xemacs-beta} branch is expected to always be
2449 in a buildable state. It should lag the @file{xemacs} branch by less
2450 than a week, unless a patch is found to break the build.
2452 @item https://bitbucket.org/xemacs/xemacs
2453 A public-access URL for the bleeding edge.
2455 @item ssh://hg@@bitbucket.org/xemacs/xemacs
2456 The commit access URL for the bleeding edge. Although you cannot easily
2457 push changesets that would create a new head, committers who use named
2458 branches should take care not to push from branches other than
2464 @node comp.emacs.xemacs, xemacs-beta, Mercurial Repository, XEmacs Resources on the Internet
2465 @section The Usenet Newsgroup comp.emacs.xemacs
2471 @node xemacs-beta, xemacs-design, comp.emacs.xemacs, XEmacs Resources on the Internet
2472 @section The xemacs-beta Mailing List
2478 @node xemacs-design, xemacs-patches, xemacs-beta, XEmacs Resources on the Internet
2479 @section The xemacs-design Mailing List
2481 This list is currently inactive. Traffic that used to go to
2482 @value{DESIGN-LIST} should be directed to @value{BETA-LIST} instead.
2484 @strong{Concerning content, write me!}
2488 @node xemacs-patches, xemacs-mule, xemacs-design, XEmacs Resources on the Internet
2489 @section The xemacs-patches Mailing List
2495 @node xemacs-mule, xemacs-winnt, xemacs-patches, XEmacs Resources on the Internet
2496 @section The xemacs-mule Mailing List
2502 @node xemacs-winnt, xemacs-review, xemacs-mule, XEmacs Resources on the Internet
2503 @section The xemacs-winnt Mailing List
2505 This list is obsolete, as the NT console is a fully-supported component
2506 of XEmacs since the release of 21.4. Archives are still available at
2507 @uref{list-archive.xemacs.org,the XEmacs mailing list archives}.
2511 @node xemacs-review, , xemacs-winnt, XEmacs Resources on the Internet
2512 @section The xemacs-review Mailing List
2514 The XEmacs Review mailing list is a closed-subscription list where the
2515 XEmacs Reviewers discuss matters requiring privacy, including the most
2516 controversial policies, and personnel matters. If you wish to propose
2517 someone for committer, package maintainer, or reviewer (including
2518 yourself!), post to this list. Be patient; there will be a moderation
2519 delay (to filter spam).
2523 @node Copying, Nodes borrowed from other projects not adapted to XEmacs, XEmacs Resources on the Internet, Top
2524 @appendix GNU GENERAL PUBLIC LICENSE
2525 @center Version 2, June 1991
2528 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
2529 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2531 Everyone is permitted to copy and distribute verbatim copies
2532 of this license document, but changing it is not allowed.
2535 @appendixsec Preamble
2537 The licenses for most software are designed to take away your
2538 freedom to share and change it. By contrast, the GNU General Public
2539 License is intended to guarantee your freedom to share and change free
2540 software---to make sure the software is free for all its users. This
2541 General Public License applies to most of the Free Software
2542 Foundation's software and to any other program whose authors commit to
2543 using it. (Some other Free Software Foundation software is covered by
2544 the GNU Library General Public License instead.) You can apply it to
2547 When we speak of free software, we are referring to freedom, not
2548 price. Our General Public Licenses are designed to make sure that you
2549 have the freedom to distribute copies of free software (and charge for
2550 this service if you wish), that you receive source code or can get it
2551 if you want it, that you can change the software or use pieces of it
2552 in new free programs; and that you know you can do these things.
2554 To protect your rights, we need to make restrictions that forbid
2555 anyone to deny you these rights or to ask you to surrender the rights.
2556 These restrictions translate to certain responsibilities for you if you
2557 distribute copies of the software, or if you modify it.
2559 For example, if you distribute copies of such a program, whether
2560 gratis or for a fee, you must give the recipients all the rights that
2561 you have. You must make sure that they, too, receive or can get the
2562 source code. And you must show them these terms so they know their
2565 We protect your rights with two steps: (1) copyright the software, and
2566 (2) offer you this license which gives you legal permission to copy,
2567 distribute and/or modify the software.
2569 Also, for each author's protection and ours, we want to make certain
2570 that everyone understands that there is no warranty for this free
2571 software. If the software is modified by someone else and passed on, we
2572 want its recipients to know that what they have is not the original, so
2573 that any problems introduced by others will not reflect on the original
2574 authors' reputations.
2576 Finally, any free program is threatened constantly by software
2577 patents. We wish to avoid the danger that redistributors of a free
2578 program will individually obtain patent licenses, in effect making the
2579 program proprietary. To prevent this, we have made it clear that any
2580 patent must be licensed for everyone's free use or not licensed at all.
2582 The precise terms and conditions for copying, distribution and
2583 modification follow.
2586 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
2589 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
2594 This License applies to any program or other work which contains
2595 a notice placed by the copyright holder saying it may be distributed
2596 under the terms of this General Public License. The ``Program,'' below,
2597 refers to any such program or work, and a ``work based on the Program''
2598 means either the Program or any derivative work under copyright law:
2599 that is to say, a work containing the Program or a portion of it,
2600 either verbatim or with modifications and/or translated into another
2601 language. (Hereinafter, translation is included without limitation in
2602 the term ``modification.'') Each licensee is addressed as ``you.''
2604 Activities other than copying, distribution and modification are not
2605 covered by this License; they are outside its scope. The act of
2606 running the Program is not restricted, and the output from the Program
2607 is covered only if its contents constitute a work based on the
2608 Program (independent of having been made by running the Program).
2609 Whether that is true depends on what the Program does.
2612 You may copy and distribute verbatim copies of the Program's
2613 source code as you receive it, in any medium, provided that you
2614 conspicuously and appropriately publish on each copy an appropriate
2615 copyright notice and disclaimer of warranty; keep intact all the
2616 notices that refer to this License and to the absence of any warranty;
2617 and give any other recipients of the Program a copy of this License
2618 along with the Program.
2620 You may charge a fee for the physical act of transferring a copy, and
2621 you may at your option offer warranty protection in exchange for a fee.
2624 You may modify your copy or copies of the Program or any portion
2625 of it, thus forming a work based on the Program, and copy and
2626 distribute such modifications or work under the terms of Section 1
2627 above, provided that you also meet all of these conditions:
2631 You must cause the modified files to carry prominent notices
2632 stating that you changed the files and the date of any change.
2635 You must cause any work that you distribute or publish, that in
2636 whole or in part contains or is derived from the Program or any
2637 part thereof, to be licensed as a whole at no charge to all third
2638 parties under the terms of this License.
2641 If the modified program normally reads commands interactively
2642 when run, you must cause it, when started running for such
2643 interactive use in the most ordinary way, to print or display an
2644 announcement including an appropriate copyright notice and a
2645 notice that there is no warranty (or else, saying that you provide
2646 a warranty) and that users may redistribute the program under
2647 these conditions, and telling the user how to view a copy of this
2648 License. (Exception: if the Program itself is interactive but
2649 does not normally print such an announcement, your work based on
2650 the Program is not required to print an announcement.)
2653 These requirements apply to the modified work as a whole. If
2654 identifiable sections of that work are not derived from the Program,
2655 and can be reasonably considered independent and separate works in
2656 themselves, then this License, and its terms, do not apply to those
2657 sections when you distribute them as separate works. But when you
2658 distribute the same sections as part of a whole which is a work based
2659 on the Program, the distribution of the whole must be on the terms of
2660 this License, whose permissions for other licensees extend to the
2661 entire whole, and thus to each and every part regardless of who wrote it.
2663 Thus, it is not the intent of this section to claim rights or contest
2664 your rights to work written entirely by you; rather, the intent is to
2665 exercise the right to control the distribution of derivative or
2666 collective works based on the Program.
2668 In addition, mere aggregation of another work not based on the Program
2669 with the Program (or with a work based on the Program) on a volume of
2670 a storage or distribution medium does not bring the other work under
2671 the scope of this License.
2674 You may copy and distribute the Program (or a work based on it,
2675 under Section 2) in object code or executable form under the terms of
2676 Sections 1 and 2 above provided that you also do one of the following:
2680 Accompany it with the complete corresponding machine-readable
2681 source code, which must be distributed under the terms of Sections
2682 1 and 2 above on a medium customarily used for software interchange; or,
2685 Accompany it with a written offer, valid for at least three
2686 years, to give any third party, for a charge no more than your
2687 cost of physically performing source distribution, a complete
2688 machine-readable copy of the corresponding source code, to be
2689 distributed under the terms of Sections 1 and 2 above on a medium
2690 customarily used for software interchange; or,
2693 Accompany it with the information you received as to the offer
2694 to distribute corresponding source code. (This alternative is
2695 allowed only for noncommercial distribution and only if you
2696 received the program in object code or executable form with such
2697 an offer, in accord with Subsection b above.)
2700 The source code for a work means the preferred form of the work for
2701 making modifications to it. For an executable work, complete source
2702 code means all the source code for all modules it contains, plus any
2703 associated interface definition files, plus the scripts used to
2704 control compilation and installation of the executable. However, as a
2705 special exception, the source code distributed need not include
2706 anything that is normally distributed (in either source or binary
2707 form) with the major components (compiler, kernel, and so on) of the
2708 operating system on which the executable runs, unless that component
2709 itself accompanies the executable.
2711 If distribution of executable or object code is made by offering
2712 access to copy from a designated place, then offering equivalent
2713 access to copy the source code from the same place counts as
2714 distribution of the source code, even though third parties are not
2715 compelled to copy the source along with the object code.
2718 You may not copy, modify, sublicense, or distribute the Program
2719 except as expressly provided under this License. Any attempt
2720 otherwise to copy, modify, sublicense or distribute the Program is
2721 void, and will automatically terminate your rights under this License.
2722 However, parties who have received copies, or rights, from you under
2723 this License will not have their licenses terminated so long as such
2724 parties remain in full compliance.
2727 You are not required to accept this License, since you have not
2728 signed it. However, nothing else grants you permission to modify or
2729 distribute the Program or its derivative works. These actions are
2730 prohibited by law if you do not accept this License. Therefore, by
2731 modifying or distributing the Program (or any work based on the
2732 Program), you indicate your acceptance of this License to do so, and
2733 all its terms and conditions for copying, distributing or modifying
2734 the Program or works based on it.
2737 Each time you redistribute the Program (or any work based on the
2738 Program), the recipient automatically receives a license from the
2739 original licensor to copy, distribute or modify the Program subject to
2740 these terms and conditions. You may not impose any further
2741 restrictions on the recipients' exercise of the rights granted herein.
2742 You are not responsible for enforcing compliance by third parties to
2746 If, as a consequence of a court judgment or allegation of patent
2747 infringement or for any other reason (not limited to patent issues),
2748 conditions are imposed on you (whether by court order, agreement or
2749 otherwise) that contradict the conditions of this License, they do not
2750 excuse you from the conditions of this License. If you cannot
2751 distribute so as to satisfy simultaneously your obligations under this
2752 License and any other pertinent obligations, then as a consequence you
2753 may not distribute the Program at all. For example, if a patent
2754 license would not permit royalty-free redistribution of the Program by
2755 all those who receive copies directly or indirectly through you, then
2756 the only way you could satisfy both it and this License would be to
2757 refrain entirely from distribution of the Program.
2759 If any portion of this section is held invalid or unenforceable under
2760 any particular circumstance, the balance of the section is intended to
2761 apply and the section as a whole is intended to apply in other
2764 It is not the purpose of this section to induce you to infringe any
2765 patents or other property right claims or to contest validity of any
2766 such claims; this section has the sole purpose of protecting the
2767 integrity of the free software distribution system, which is
2768 implemented by public license practices. Many people have made
2769 generous contributions to the wide range of software distributed
2770 through that system in reliance on consistent application of that
2771 system; it is up to the author/donor to decide if he or she is willing
2772 to distribute software through any other system and a licensee cannot
2775 This section is intended to make thoroughly clear what is believed to
2776 be a consequence of the rest of this License.
2779 If the distribution and/or use of the Program is restricted in
2780 certain countries either by patents or by copyrighted interfaces, the
2781 original copyright holder who places the Program under this License
2782 may add an explicit geographical distribution limitation excluding
2783 those countries, so that distribution is permitted only in or among
2784 countries not thus excluded. In such case, this License incorporates
2785 the limitation as if written in the body of this License.
2788 The Free Software Foundation may publish revised and/or new versions
2789 of the General Public License from time to time. Such new versions will
2790 be similar in spirit to the present version, but may differ in detail to
2791 address new problems or concerns.
2793 Each version is given a distinguishing version number. If the Program
2794 specifies a version number of this License which applies to it and ``any
2795 later version,'' you have the option of following the terms and conditions
2796 either of that version or of any later version published by the Free
2797 Software Foundation. If the Program does not specify a version number of
2798 this License, you may choose any version ever published by the Free Software
2802 If you wish to incorporate parts of the Program into other free
2803 programs whose distribution conditions are different, write to the author
2804 to ask for permission. For software which is copyrighted by the Free
2805 Software Foundation, write to the Free Software Foundation; we sometimes
2806 make exceptions for this. Our decision will be guided by the two goals
2807 of preserving the free status of all derivatives of our free software and
2808 of promoting the sharing and reuse of software generally.
2811 @heading NO WARRANTY
2818 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
2819 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@. EXCEPT WHEN
2820 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
2821 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
2822 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
2823 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@. THE ENTIRE RISK AS
2824 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@. SHOULD THE
2825 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
2826 REPAIR OR CORRECTION.
2829 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
2830 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
2831 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
2832 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
2833 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
2834 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
2835 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
2836 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
2837 POSSIBILITY OF SUCH DAMAGES.
2841 @heading END OF TERMS AND CONDITIONS
2844 @center END OF TERMS AND CONDITIONS
2848 @appendixsec How to Apply These Terms to Your New Programs
2850 If you develop a new program, and you want it to be of the greatest
2851 possible use to the public, the best way to achieve this is to make it
2852 free software which everyone can redistribute and change under these terms.
2854 To do so, attach the following notices to the program. It is safest
2855 to attach them to the start of each source file to most effectively
2856 convey the exclusion of warranty; and each file should have at least
2857 the ``copyright'' line and a pointer to where the full notice is found.
2860 @var{one line to give the program's name and an idea of what it does.}
2861 Copyright (C) 19@var{yy} @var{name of author}
2863 This program is free software; you can redistribute it and/or
2864 modify it under the terms of the GNU General Public License
2865 as published by the Free Software Foundation; either version 2
2866 of the License, or (at your option) any later version.
2868 This program is distributed in the hope that it will be useful,
2869 but WITHOUT ANY WARRANTY; without even the implied warranty of
2870 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@. See the
2871 GNU General Public License for more details.
2873 You should have received a copy of the GNU General Public License along
2874 with this program; if not, write to the Free Software Foundation, Inc.,
2875 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
2878 Also add information on how to contact you by electronic and paper mail.
2880 If the program is interactive, make it output a short notice like this
2881 when it starts in an interactive mode:
2884 Gnomovision version 69, Copyright (C) 20@var{yy} @var{name of author}
2885 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
2886 type `show w'. This is free software, and you are welcome
2887 to redistribute it under certain conditions; type `show c'
2891 The hypothetical commands @samp{show w} and @samp{show c} should show
2892 the appropriate parts of the General Public License. Of course, the
2893 commands you use may be called something other than @samp{show w} and
2894 @samp{show c}; they could even be mouse-clicks or menu items---whatever
2897 You should also get your employer (if you work as a programmer) or your
2898 school, if any, to sign a ``copyright disclaimer'' for the program, if
2899 necessary. Here is a sample; alter the names:
2903 Yoyodyne, Inc., hereby disclaims all copyright
2904 interest in the program `Gnomovision'
2905 (which makes passes at compilers) written
2908 @var{signature of Ty Coon}, 1 April 1989
2909 Ty Coon, President of Vice
2913 This General Public License does not permit incorporating your program into
2914 proprietary programs. If your program is a subroutine library, you may
2915 consider it more useful to permit linking proprietary applications with the
2916 library. If this is what you want to do, use the GNU Library General
2917 Public License instead of this License.
2920 @node Nodes borrowed from other projects not adapted to XEmacs, Index, Copying, Top
2921 @appendix Nodes borrowed from other projects not adapted to XEmacs
2923 @c #########################################################################
2924 @c #### I haven't seriously worked on the included material. -- stephen ####
2925 @c #########################################################################
2928 * Support Requests::
2930 * Feature Requests::
2935 * Free Software Directories::
2939 @node Support Requests, Bugs, Nodes borrowed from other projects not adapted to XEmacs, Nodes borrowed from other projects not adapted to XEmacs
2940 @chapter Support Requests
2942 @cindex Support Requests
2944 Support requests are made to @value{BETA-LIST}. Developers should read
2945 the mailing list frequently, and after a period of inactivity, browse
2946 the @uref{http://list-archive.xemacs.org/xemacs-beta/,recent archives}.
2950 @node Bugs, Feature Requests, Support Requests, Nodes borrowed from other projects not adapted to XEmacs
2953 @strong{We don't have a tracker. We should. Describe what it should
2958 @cindex bugs, priority
2960 Bug reports, feature requests, and discussions that are expected to lead
2961 to bug reports or feature requests are created in
2962 @uref{https://sourceforge.net/bugs/?group_id=13357, Bugs}. Most
2963 bugs should be set to a priority of 5.
2965 @cindex bug-gnu-emacs
2968 Developers should follow the @i{bug-gnu-emacs} mailing lists/newsgroup
2969 and move bug reports into Bugs if it has not been done already.
2970 Similarly, XEmacs bugs reported in other systems should be transfered to
2971 @value{XEMACSORG}. The bug may be cut and pasted into a new bug report, or a
2972 URL to the source of the original bug report may be all that appears
2975 A brief lifecycle of a bug proceeds something like this. A bug is
2976 entered. A developer ensures that the Category, Priority and Group are
2977 correct. The Group for an Open bug should be set to the version of
2978 software in which the bug was found, or CVS if it was found in the
2979 latest and greatest.
2981 The assignment of bugs in Bugs follows the honor system. If you see an
2982 open bug that you think you could handle, assign the bug to yourself.
2983 Bugs that remain open should be reviewed by a member of the
2984 @value{BOARD}, who should try to find a developer to work on the bug.
2986 If you fix a bug, set the resolution to Fixed and group to CVS. Please
2987 also assign the bug to yourself if you have not done so already, so
2988 you get credit in the
2989 @uref{https://sourceforge.net/tracker/reporting/?atid=113357&what=tech&span=&period=lifespan&group_id=13357#b,
2990 reports}. If a documentation change is not required, set the status to
2991 Closed. If a documentation change is required, set the category to
2992 Documentation, and assign the bug to the documentation tsar,
2993 leave the status Open, and set the priority to 3 to set it
2994 aside in listings sorted by priority.
2996 See @ref{File Releases} for a motivation of why this process is useful.
2998 The rest of this section describes the categories and groups that have
2999 been set up for the XEmacs project.
3008 @node Category, Status, Bugs, Bugs
3012 @cindex bug category
3014 Several categories have been created for the XEmacs project organized by
3015 function. They include @i{General}, @i{UI}, @i{MIME}, @i{Security},
3016 @i{Documentation}, and @i{Contrib}
3022 @cindex general bug category
3023 @cindex bug categories, general
3025 The @dfn{General} category is used for bugs that do not belong in any of
3026 the other categories.
3030 @cindex UI bug category
3031 @cindex bug categories, UI
3033 The @dfn{UI} category is used for bugs in the software that the user sees
3034 such as font-lock, key definitions, menus, and customization.
3038 @cindex MIME bug category
3039 @cindex bug categories, MIME
3041 The @dfn{MIME} category is used for bugs that pertain to MIME.
3045 @cindex security bug category
3046 @cindex bug categories, security
3048 The @dfn{Security} category is used for bugs in the security arena. At
3049 present, XEmacs does not include any security code, so this category might
3050 be used for PGP interaction.
3054 @cindex documentation bug category
3055 @cindex bug categories, documentation
3057 The @dfn{Documentation} category is used for bugs in the documentation
3058 arena. In addition, if there are any code changes made as a result of a
3059 bug report or feature request that require changes to the documentation,
3060 the category of that issue should be set to Documentation after the bug
3061 has been fixed or the feature implemented. Assign the issue to
3062 @i{wohler} for editing and/or writing of the documentation, and set
3063 the priority to 3 to set the issue aside in listings sorted by priority.
3067 @cindex contrib bug category
3068 @cindex bug categories, contrib
3070 The @dfn{Contrib} category is used for all bugs in the contributed
3075 @node Status, Group, Category, Bugs
3081 The bug @dfn{status} is divided into four sections: @i{Open},
3082 @i{Closed}, @i{Deleted} and @i{Pending}.
3088 @cindex open bug status
3089 @cindex bug status, open
3091 When bugs are initially created, they are marked @dfn{Open}.
3093 @cindex discussing bugs
3094 @cindex bugs, discussing
3095 @cindex features, discussing
3097 The Bugs and Feature Requests sections are also used as a method to
3098 get the ball rolling among developers. They are used to register what
3099 we feel we should work on. For example, a developer may have questions
3100 about the way XEmacs handles MIME that we should discuss before we
3101 attempt to fix it: What do other people do? How should we attack this?
3102 That developer opens a bug report in the MIME category and a
3103 discussion ensues. Once the disposition of the issue is resolved, the
3104 bug is assigned to a developer. Later, when the bug is fixed, the bug
3107 Discussion about entirely new features should be opened in the Feature
3108 Requests section (@pxref{Feature Requests}) but otherwise handled in
3113 @cindex closed bug status
3114 @cindex bug status, closed
3116 When all aspects of a bug have been fixed, including code and
3117 documentation, the bug is marked @dfn{Closed}.
3119 When setting the status to Closed, the group should be set to Fixed,
3120 Works For Me, Invalid, or Rejected.
3124 @cindex pending bug status
3125 @cindex bug status, pending
3127 You can set the status to @dfn{Pending} if you are waiting for a
3128 response from the tracker item author. When the author responds, the
3129 status is automatically reset to that of Open. Otherwise, if the
3130 author doesn't respond within 14 days, then the item is given a status
3135 @cindex deleted bug status
3136 @cindex bug status, deleted
3138 If an items has been marked Pending, it will be marked @dfn{Deleted}
3139 if the author of the item does not respond within 14 days.
3143 @node Group, Resolution, Status, Bugs
3149 The bug @dfn{group} contains several items. They include:
3155 Bugs are initially filed in this group.
3159 Bugs in groups starting with CVS have either been found in the CVS
3160 version (in contrast to a released version) if the Status is Open, or
3161 they have been fixed and checked in if the Resolution is Fixed.
3163 After fixing a bug in a beta release, however, developers should not
3164 set the group to CVS but leave it in the group named for the beta
3165 release. Just be sure to mention the issue number in the ChangeLog so
3166 that it can be noted in the next release announcement.
3170 Bugs in groups starting with XE have either been found in the given
3171 version if the Status is Open, or fixed in the given version if the
3176 @node Resolution, , Group, Bugs
3179 A bug can appear in various states:
3185 @cindex accepted resolution
3186 @cindex resolution, accepted
3188 The @dfn{Accepted} resolution means that QA has accepted the fix.
3189 Since we don't have a QA department, it is unlikely that this will be
3190 used in that fashion. Instead, it can be used to indicate that a
3191 developer feels that a feature request (that someone else posted) has
3196 @cindex duplicate resolution
3197 @cindex resolution, duplicate
3199 The @dfn{Duplicate} resolution means that this bug is a duplicate of
3200 another. The status may be set to Closed. Be sure to add a note which
3201 mentions the bug number that this bug is a duplicate of. If this bug
3202 has some good information in it, the URL to this bug should be added
3207 @cindex fixed resolution
3208 @cindex resolution, fixed
3210 The @dfn{Fixed} group is used to indicate a bug or feature request that
3215 @cindex not a bug resolution
3216 @cindex invalid resolution
3217 @cindex resolution, not a bug
3218 @cindex resolution, invalid
3220 The @dfn{Invalid} resolution is used to indicate the problem is with
3221 the user. In other words, this is not a bug. See Works For Me.
3225 @cindex later resolution
3226 @cindex resolution, later
3228 The @dfn{Later} resolution is similar to the Postponed group, although
3229 it connotates a longer delay.
3233 @cindex out of date resolution
3234 @cindex resolution, out of date
3236 The @dfn{Out of Date} resolution is similar to the term OBE (Overcome
3237 By Events). In other words, the bug has not been fixed, but the code
3238 has changed in ways that make it unnecessary to do so.
3242 @cindex postponed resolution
3243 @cindex resolution, postponed
3245 The @dfn{Postponed} resolution is similar to the Later group, although
3246 it connotates a lesser delay.
3250 @cindex rejected resolution
3251 @cindex resolution, rejected
3253 The @dfn{Rejected} resolution means that QA has rejected the fix.
3254 Since we don't have a QA department, it is unlikely that this will be
3255 used in that fashion. Instead, it can be used to indicate that a
3256 developer feels that a feature request does not have merit.
3260 @cindex remind resolution
3261 @cindex resolution, remind
3263 The @dfn{Remind} resolution is similar to the Postponed and Later
3264 groups, although it connotates an even lesser delay.
3268 @cindex wont fix resolution
3269 @cindex resolution, wont fix
3271 The @dfn{Wont Fix} resolution means that the XEmacs developers
3272 acknowledge that the bug exists but are not going to fix it. Or the
3273 developers will not implement a feature request. There is probably a
3274 good reason for these things.
3278 @cindex irreproducible resolution
3279 @cindex resolution, irreproducible
3280 @cindex works for me resolution
3281 @cindex resolution, works for me
3283 The @dfn{Works For Me} group is used to indicate a bug that cannot be
3284 reproduced (irreproducible) and therefore cannot be fixed. See
3289 @node Feature Requests, Patch Queue, Bugs, Nodes borrowed from other projects not adapted to XEmacs
3290 @chapter Feature Requests
3292 @cindex Feature Requests
3294 Developers should check the
3296 occasionally for new feature requests and comment on the feature's
3297 usefulness and integrity. Unless a positive comment has
3298 @c #### define "reasonable"
3299 been added within a ``reasonable'' amount of time, a member of the
3301 may set the status to Closed and the group to Wont Fix. @value{BOARD}
3302 members should regularly check the list of requested features and prune
3303 the oldest in this way to keep the list to a reasonable size.
3304 @c mh-e-devguide sez:
3305 @c will set the status to Closed and the group to Wont Fix. If the
3306 @c feature request is not closed, anyone may assign the request to
3307 @c themselves and implement the feature.
3309 After incorporating the feature, update the feature request as
3310 described in the previous section (@pxref{Bugs}).
3312 @node Patch Queue, File Releases, Feature Requests, Nodes borrowed from other projects not adapted to XEmacs
3313 @chapter Patch Queue
3317 Developers should check @value{PATCHES-LIST}
3318 occasionally for new patches and comment on the patch's usefulness and
3319 integrity. This will greatly help reviewers to review patches. Note
3320 that developers who are active in commenting on patches and bug reports
3321 are the main candidates when recruiting new reviewers.
3323 @c Legally speaking, patches that are less than 15 lines can usually be
3324 @c incorporated, although it is always best to try to incorporate them in
3325 @c a ``clean room'' environment. Do read
3326 @c @uref{http://www.gnu.org/prep/maintain_6.html#SEC6, Legally
3327 @c Significant Changes} for the details.
3331 @node File Releases, News, Patch Queue, Nodes borrowed from other projects not adapted to XEmacs
3332 @chapter File Releases
3334 @strong{This node and all of its children need to be reviewed and
3335 adapted to the XEmacs process. One topic that @emph{must} be addressed
3336 is regenerating and checking in generated files.}
3338 @cindex File Releases
3340 This section contains information about how the XEmacs project releases
3341 software. In additional to making tarballs available, the software and
3342 documentation must be incorporated into Emacs and the online
3343 documentation must be updated.
3346 * Release Schedule::
3347 * Release Prerequisites::
3350 * Updating Version Number::
3351 * Updating ChangeLogs::
3352 * Tagging Releases::
3353 * Creating Tarballs::
3354 * Creating @value{XEMACSORG} Releases::
3355 * Updating the Tracker::
3356 * Announce the Release::
3357 * Updating the Emacs Repository::
3358 * Updating the Debian Package::
3359 * Updating the XEmacs Package::
3360 * Updating the Online Documentation::
3361 * Updating the Free Software Directories::
3362 * After the Release::
3365 @node Release Schedule, Release Prerequisites, File Releases, File Releases
3366 @section Release Schedule
3368 @strong{Totally bogus for XEmacs historical practice, probably totally
3369 unrealistic as future policy.}
3371 Here is a suggested schedule for a release:
3374 @multitable @columnfractions .3 .3 .4
3377 @tab @strong{Milestone}
3378 @tab @strong{Description}
3383 All P7 and higher features must be committed.
3384 P6 features should be committed.
3385 Any other new features destined for the release must be committed no
3386 later than this time.
3387 However, note that it is advisable not to release new user-visible
3388 features this late in the game. It is better to add new features at
3389 the beginning of a release cycle to allow for suitable usability
3396 All P7 and higher bug fixes must be committed.
3397 P6 bug fixes should be committed.
3404 Upload to @value{XEMACSORG}.
3410 Upload to @value{XEMACSORG}.
3416 Upload to @value{XEMACSORG}.
3421 Once a release date has been determined, the milestones leading up to
3422 that release should be posted as a news item (@pxref{News}).
3424 With frequent minor releases, omit the beta releases and
3427 @node Release Prerequisites, Updating NEWS, Release Schedule, File Releases
3428 @section Release Prerequisites
3430 @cindex Release Prerequisites
3431 @cindex Coding Conventions
3432 @cindex Emacs Lisp Coding Conventions
3433 @cindex Conventions, verification
3434 @cindex Verification, conventions
3436 @c #### is this relevant?
3437 The first thing to do is to check the code for coding convention
3438 compliance as described in section @ref{Philosophy}.
3440 Next, check for Emacs changes to XEmacs as described in section
3441 @ref{Updating the Emacs Repository}.
3443 @node Updating NEWS, Updating README, Release Prerequisites, File Releases
3444 @section Updating NEWS
3451 When the @code{src} module is released, the
3452 file @file{NEWS} needs to be updated. Separate the old news with
3453 the new with a @kbd{C-l} and follow the existing format for
3454 documenting user-visible changes only including New Features, New
3455 Variables, and Bug Fixes. List @value{XEMACSORG} issues as @code{(closes SF
3456 #123456)}, as well as third-party issues such as @code{(closes SF
3457 #123456, Debian #123456)}.
3459 In order to find what is appropriate for @file{NEWS}, several
3465 Go to @uref{https://sourceforge.net/bugs/?group_id=13357, Bugs} and
3466 search for all bugs whose status is Closed and group is CVS (no
3467 documentation update needed) or status is Open, group is CVS, and
3468 category is Documentation (documentation update needed but not
3473 @uref{https://sourceforge.net/tracker/?atid=363357&group_id=13357,
3477 @cindex release-utils
3478 Run the @code{release-utils --variable-changes @var{previous-tag}} to
3479 produce a list of new and deleted variables suitable for inclusion in
3483 Run @kbd{C-h m} in MH Folder and MH Letter modes in both the new and
3484 old versions to show the key binding changes.
3487 Search for @code{[0-9][0-9][0-9][0-9][0-9][0-9]} in the
3488 @file{ChangeLog} to get a list of SF numbers.
3495 The previous steps usually catch most items. To use a finer sieve, use
3496 the following commands. These assume that the last version of XEmacs
3504 See section @ref{Updating ChangeLogs} before checking in this file.
3506 @node Updating README, Updating Version Number, Updating NEWS, File Releases
3507 @section Updating README
3511 Ensure that the target Emacs version is correct, as well as the
3512 supported Emacs versions.
3514 Update the version number in various places in the INSTALL section.
3516 See section @ref{Updating ChangeLogs} before checking in this file.
3518 @node Updating Version Number, Updating ChangeLogs, Updating README, File Releases
3519 @section Updating Version Number
3521 @set VERSIONFILE @file{$@{srcdir@}/version.sh}
3523 XEmacs version information is kept in the file
3524 @value{VERSIONFILE}. This file must be valid when sourced
3525 by a POSIX shell and when included by a portable Makefile.
3527 The first in a series of stable releases is a special case, because it
3528 involves creation of a new stable branch and affects numbering of the
3529 trunk as well. In the new stable branch, @value{VERSIONFILE} must
3530 assign the empty value to @samp{emacs_is_beta}. The value ``0'' is
3531 assigned to @samp{emacs_beta_version}. The next @emph{even} number
3532 (which is ``0'' in the case that @samp{emacs_major_version} is bumped)
3533 is assigned to @samp{emacs_minor_version}, and
3534 @samp{emacs_major_version} is bumped if that was authorized by the
3535 XEmacs Review Board. The codename @samp{xemacs_codename} is assigned at
3536 the discretion of the stable release engineer.
3538 At the same time, a new release of the trunk, identical except for
3539 version information, is made. @emph{The version information is the same
3540 as the stable release}, except that @samp{emacs_minor_version} is bumped
3541 to the next @emph{odd} integer, and @samp{xemacs_codename} is assigned
3542 at the discretion of the beta release engineer.
3544 Release engineers usually choose a theme for codenames and make the
3545 proposed series available in a file. The name @samp{emacs_beta_version}
3546 probably could have been more aptly chosen, but it is a historical relic
3547 of the fact that it was first used in the beta series, then adopted in
3548 the stable branch. The name is not user-visible; the value of this
3549 variable is called the patch level in stable branch documentation.
3551 @strong{N.B.} Release engineers should avoid disturbing the order of
3552 variables in @value{VERSIONFILE}. The variables
3553 @samp{emacs_kit_version}, @samp{infodock_major_version},
3554 @samp{infodock_minor_version}, and @samp{infodock_build_version} are
3555 used for version information of various non-@value{PROJECT} releases,
3556 and should be ignored. Both of these features are unclean, but users'
3557 auxiliary tools (and some tools distributed by the @value{PROJECT},
3558 including @file{build.el} and @file{build-report.el} in some releases)
3559 often depend on the syntax of this file to work correctly. In beta
3560 releases, there is an optional variable @samp{xemacs_extra_name} which
3561 is a string that is appended to the version string. It is currently
3562 automatically updated, and used to identify the Mercurial changeset.
3564 Except in cases involving creation of a new stable branch, update of the
3565 version information simply requires bumping @samp{emacs_beta_version}
3566 and assignment of a new @samp{xemacs_codename}.
3569 @node Updating ChangeLogs, Tagging Releases, Updating Version Number, File Releases
3570 @section Updating ChangeLogs
3574 Add a ChangeLog entry to @emph{every} ChangeLog in the tree, marking the
3575 release. The text of the first line should match this regexp:
3578 XEmacs \d+\(?:\.\d+\)+\(?:-b\d+\)?\(?:"\(\w\|\s-\)+"\)? is released
3581 @node Tagging Releases, Creating Tarballs, Updating ChangeLogs, File Releases
3582 @section Tagging Releases
3585 @cindex Mercurial, tag
3586 @cindex version numbers
3588 It is critical that a snapshot of the software is created each time
3589 the software is released. With Mercurial, this is performed with tags.
3591 Every series of stable releases must have a branch tag of the form
3592 @i{release-M-N}. The trunk has no branch tag. Every release must have
3593 a fixed tag of the form @i{release-M-N-B}, where @var{M} is the major
3594 number, @var{N} is the minor number, and @var{B} is the beta release or
3595 patch number. A hyphen is used for historical reasons.
3597 The stable release branch tag doubles as a tag of the most recent
3598 release. While this is not quite true during the process of
3599 accumulating patches to the branch, due to the conservative nature of
3600 that process it seems very unlikely to cause trouble. Since the trunk
3601 has no tag, and many beta testers would prefer to avoid checking out in
3602 the middle of a series of related check-ins, a fixed tag of the form
3603 @i{release-M-N-current-beta} is used to identify the current beta
3604 release. It is updated by a command like @samp{cvs rtag -F -r
3605 release-M-N-B release-M-N-current-beta}.
3607 The packages have independent release schedules, determined by the
3608 XEmacs package maintainer and the XEmacs Package Release Engineer.
3611 @node Creating Tarballs, Creating @value{XEMACSORG} Releases, Tagging Releases, File Releases
3612 @section Creating Tarballs
3614 @cindex Creating Tarballs
3616 @cindex tarballs, naming
3619 @cindex tarballs, making
3620 @cindex tarballs, naming
3622 @cindex Mercurial, tags
3623 @cindex Makefile targets, dist
3624 @cindex version numbers
3628 @node Creating @value{XEMACSORG} Releases, Updating the Tracker, Creating Tarballs, File Releases
3629 @section Creating @value{XEMACSORG} Releases
3631 @cindex Creating @value{XEMACSORG} Releases
3633 @cindex tarballs, making
3637 @node Updating the Tracker, Announce the Release, Creating @value{XEMACSORG} Releases, File Releases
3638 @section Updating the Tracker
3640 @cindex Updating the Tracker
3642 @strong{Write me! (and install a Tracker!)}
3645 @node Announce the Release, Updating the Emacs Repository, Updating the Tracker, File Releases
3646 @section Announce the Release
3648 @cindex Announce the Release
3650 Now that the release is ready for download, announce it as described
3653 @node Updating the Emacs Repository, Updating the Debian Package, Announce the Release, File Releases
3654 @section Updating the Emacs Repository
3656 @strong{Needs review. Although on the face of it this obviously has
3657 nothing to do with XEmacs, in fact there are probably hints here for
3658 XEmacs release engineers.}
3660 @cindex Updating the Emacs Repository
3661 @cindex Emacs, updating
3663 The Emacs repository is updated by the project
3664 admin. Other developers may skip this section.
3666 The project admin must have an account on the @i{gnu.org} machines,
3667 and must also be given access to the Emacs CVS repository. This can be
3668 accomplished by following these steps:
3674 @uref{https://savannah.gnu.org/account/register.php, Savannah login}.
3677 Become an Emacs developer by contacting one of the admins listed on
3678 the @uref{https://savannah.gnu.org/projects/emacs/, Emacs main page}.
3681 Follow the instructions given in
3682 @uref{https://savannah.gnu.org/cvs/?group=emacs, the CVS instructions}.
3687 @cindex mailing lists, emacs-devel
3690 The project admin must also join the @i{emacs-devel} mailing list.
3691 Send a note to @i{emacs-devel-request@@gnu.org} or use the
3692 @uref{http://mail.gnu.org/mailman/listinfo/emacs-devel, Mailman
3693 interface} to subscribe.
3695 This procedure must be performed before any changes have been made to
3696 the XEmacs source since the release. This can be easily accomplished in
3697 by checking out the module with a sticky tag and should be done in any
3700 First, check out the Emacs source:
3703 cvs -d $USER@@savannah.gnu.org:/cvsroot/emacs co emacs
3706 If the Emacs source has already been checked out, ensure that the XEmacs
3707 source is not locally modified. This is essential for the next step to
3708 proceed accurately. If the install-emacs step described below had been
3709 performed during testing leading up to the release, remove the
3710 modified XEmacs files and run @code{cvs update} again.
3712 @cindex import-emacs
3713 @cindex Makefile targets, import-emacs
3715 Next, ensure that there have not been any upstream changes to either
3716 the source or documentation. If so, the changes will need to be
3717 imported into the @file{src} and @file{doc} modules. This is done by
3725 @cindex environment variables, EMACS_HOME
3726 @cindex variables, EMACS_HOME
3727 @cindex install-emacs
3728 @cindex Makefile targets, install-emacs
3730 Then install the sources with:
3737 The @code{install-emacs} target copies the lisp files to
3738 @file{$EMACS_HOME/lisp/mh-e} and copies @file{NEWS} to
3739 @file{$EMACS_HOME/etc}.
3742 @cindex environment variables, EMACS_HOME
3743 @cindex variables, EMACS_HOME
3744 @cindex install-emacs
3745 @cindex Makefile targets, install-emacs
3748 Next, install the documentation with:
3755 This target copies @file{mh-e.texi} to @file{$EMACS_HOME/man}.
3757 Update @code{$EMACS_HOME/etc/ChangeLog} and
3758 @code{$EMACS_HOME/man/ChangeLog}. Simply cite the XEmacs release. For
3762 * NEWS, NEWS: Upgraded to XEmacs version 6.1.
3768 * mh-e.texi: Upgraded to XEmacs documentation version 1.3.
3771 Update @code{$EMACS_HOME/etc/NEWS} by adding text similar to the
3775 * Changes in Emacs 21.4
3779 Upgraded to XEmacs version 6.1. Upgraded to XEmacs manual version 1.3.
3780 See NEWS for details.
3783 It's possible that the update occurs before Emacs had been released
3784 with a previous version of XEmacs; in this case, simply bump the version
3785 number in the text above rather than add an entire new stanza.
3787 Then check in the files like this:
3790 cvs ci -m"Upgraded to XEmacs version 6.1.
3791 See etc/NEWS and lisp/mh-e/ChangeLog for details."
3795 @cindex mailing lists, emacs-devel
3797 Send a note to @i{emacs-devel@@gnu.org}, with a cc to
3798 @i{xemacs-design@@xemacs.org} with the details. The subject
3799 should indicate that the software has been checked in:
3802 XEmacs 7.4.4 checked in
3805 The first paragraph should include the description on the
3806 @uref{https://sourceforge.net/projects/mh-e/, Summary} page, and the
3810 Read on for more details.
3813 The second paragraph should contain:
3816 Project home page at: http://mh-e.sourceforge.net/.
3819 Finally, append the release notes. If only the manual is updated, then
3820 the announcement should read closer to the one used in the @value{XEMACSORG}
3823 After checking XEmacs into Emacs, run @code{make import-emacs} a second
3824 time to put the new code on the Emacs branch. This makes it possible
3825 to detect changes to XEmacs that an Emacs developer may make later.
3828 @node Updating the Debian Package, Updating the XEmacs Package, Updating the Emacs Repository, File Releases
3829 @section Updating the Debian Package
3831 @cindex Updating the Debian Package
3832 @cindex Debian Package, Updating
3835 @strong{Edit me! Or maybe not: currently the various distros have
3836 their own maintainers. It might be useful for Debian/Ubuntu because of
3837 the complex Debian Emacs policy.}
3839 To build a Debian package, you'll need to have installed the Debian
3840 package @code{build-essential} as well as those listed in the
3841 @code{Build-Depends-Indep:} line of the file @file{debian/control}.
3842 Currently, there are the packages @code{debhelper} and @code{texinfo}.
3843 The package @code{fakeroot} is also used below and @code{dpkg-dev-el}
3847 apt-get install build-essential fakeroot debhelper texinfo dpkg-dev-el
3850 Run the following commands from the top of the CVS tree to clean up the
3851 tree of backup files and make a source tar file:
3854 rm `find . -name "*~"`
3858 This will make a new file such as @code{mh-e_7.0.orig.tar.gz}. Unpack
3859 it in a working directory and step into its top directory. Edit the
3860 first line of the file @file{debian/changelog} to change the version
3861 number between parentheses to something appropriate (e.g.
3862 @code{7.0.+cvs-0}), or add another entry to the changelog and edit the
3863 version number. If you installed the package @code{dpkg-dev-el} above,
3864 simply do @kbd{C-c C-v} to insert this block and @kbd{C-c C-f} to
3865 finalise the entry when done editing the version number.
3867 You can then create a Debian package by running:
3870 fakeroot debian/rules binary
3873 This creates @file{../mh-e_7.0.+cvs-0_all.deb} which can be installed
3874 using standard Debian package management:
3877 dpkg -i ../mh-e_7.0.+cvs-0_all.deb
3880 @node Updating the XEmacs Package, Updating the Online Documentation, Updating the Debian Package, File Releases
3881 @section Updating the XEmacs Package
3883 @cindex Updating the XEmacs Package
3884 @cindex XEmacs Package, Updating
3887 This task is the duty of XXX <@i{XXX}>. It may be useful to others to
3888 want to make an unofficial package of the CVS tree.
3890 The rest of this section needs to be completed.
3892 @node Updating the Online Documentation, Updating the Free Software Directories, Updating the XEmacs Package, File Releases
3893 @section Updating the Online Documentation
3895 @strong{Adrian, please review.}
3897 @cindex Updating the Online Documentation
3898 @cindex online documentation, updating
3899 @cindex documentation, updating online
3900 @cindex bitbucket.org
3901 @cindex Mercurial, use in web site
3903 The entire XEmacs web site is kept in a Mercurial repo on Bitbucket,
3904 and automatically rebuilt by the commit trigger.
3906 Thus, the basic procedure is similar to working on XEmacs source code.
3910 Check out the @samp{xemacsweb} module.
3913 Make the needed changes.
3916 Update the ChangeLog(s).
3919 Test the changes with @code{make} to ensure that all @file{genpage}
3920 commands are correct. Then use @code{make validate} to check that the
3921 produced HTML is reasonably correct.
3924 Commit and push the workspace.
3927 The XEmacs online documentation is mostly written in the @file{genpage}
3928 language, which ensures a consistent interface for internal links via
3929 special commands processed by the @code{genpage} script, and a
3930 consistent overall format enforced by use of template files. Some of
3931 the material, such as the online versions of the @emph{XEmacs User's
3932 Guide} is generated directly from Texinfo, and checked in as HTML
3933 rather than @file{genpage} source.
3935 The validator used by @code{make validate} is based on the PSGML
3936 package. It is not perfect, but it is more convenient than the more
3937 accurate online validators provided by the W3C and others. The
3938 webmaster should use the online validators and link checkers regularly.
3942 @node Updating the Free Software Directories, After the Release, Updating the Online Documentation, File Releases
3943 @section Updating the Free Software Directories
3945 @strong{Add FreshMeat, at least.}
3947 Update the @i{source-tarball} and @i{version} fields in the FSF/UNESCO
3948 Free Software Directory (@pxref{Free Software Directories}), as well as
3949 the @i{touched} field. Update any other fields as necessary, including
3950 the @i{updated} field.
3952 @node After the Release, , Updating the Free Software Directories, File Releases
3953 @section After the Release
3955 @cindex After the Release
3957 After the release is complete, add the string @code{+cvs} to the
3958 version number. @xref{Updating Version Number}.
3960 Then, define the next release.
3962 Each developer goes through the bugs and feature requests and chooses
3963 a month's worth of work for him to do. For each selected item, he
3964 increases the priority to 7 and assigns the task to himself. Another
3965 guideline for release size is that releases should only include 7 +/-
3966 2 new features or bug fixes.
3968 The first month should be full of fervent activity. Development should
3969 slow down in the second month while the new features are fine-tuned.
3970 The third month is devoted to the release. @xref{Release Schedule}. It
3971 is acceptable and often desirable to shorten each step in this cycle
3972 in order to keep the number of release note bullet items to 7 +/- 2,
3973 but in order to keep the releases fresh, it's probably not a good idea
3974 to lengthen the process.
3976 If a new bug or feature arises that a developer wants to work on, the
3977 developer sets the priority of that item to 7 and resets the priority
3978 of one of his other items back to 5. This keeps the release from
3979 growing without bound.
3981 The motivation for this schedule is to keep the iteration cycle short,
3982 to keep from adding new features just before a release, and from the
3983 user's point of view, to increase the timeliness and quality of
3984 releases. It also limits the scope of the release, and makes it clear
3987 @node News, Surveys, File Releases, Nodes borrowed from other projects not adapted to XEmacs
3990 @strong{Needs review.}
3994 @cindex xemacs-announce
3995 @cindex mailing lists, xemacs-announce
3997 @cindex mailing lists, emacs-devel
3999 Announcements about new releases are submitted
4000 @uref{http://sourceforge.net/news/?group_id=13357, at @value{XEMACSORG}}, to
4001 @i{xemacs-announce@@lists.sourceforge.net}, and to
4002 @i{emacs-devel@@gnu.org}. The @i{emacs-devel} list should not be used
4003 for contrib releases, however.
4006 @uref{https://sourceforge.net/docman/display_doc.php?docid=12834&group_id=1,
4007 Using Project News with Step-by-Step Instructions} is helpful when
4008 composing your news item.
4010 In all cases, use the following template for the subject:
4013 XEmacs m.n.p released
4014 XEmacs contributed software m.n.p released
4015 XEmacs manual m.n.p released
4018 As only the first paragraph is shown on the @value{XEMACSORG} front page, it
4019 should be written wisely. Emulate the look and feel of previous news
4020 postings. The first sentence should be the same as the first sentence
4021 in the description on the home page. The
4022 following sentences are typically copied from the first paragraph of
4023 the release notes and should briefly describe the benefit of the
4024 release or otherwise entice the reader to read further. The contrib
4025 and doc releases, which do not have release notes, should include a
4026 sentence or two which summarizes the release. The last sentence of the
4027 first paragraph should read:
4030 Read on for more details.
4033 Finally, include the release notes from @file{NEWS}. Because the
4034 introductory paragraph was already used, include the release notes
4035 starting with the ``New Features'' item. To avoid ugly wrapping, first
4036 make every paragraph one line by copying the release notes into a
4037 scratch buffer, setting the fill column to some very large number, and
4038 running @code{fill-region}.
4040 For contrib and doc releases, use the ChangeLog entries since the last
4043 Note that your news posting may be shown on the @value{XEMACSORG} front
4044 page, so discretion is advised.
4046 The announcement that is sent to the @i{xemacs-announce} mailing list
4047 doesn't have the same first-paragraph restrictions as does the
4048 @value{XEMACSORG} news item. Therefore, the announcement should contain the
4052 Project home page at: http://www.xemacs.org/.
4055 followed by the release notes. However, the announcement for contrib
4056 and doc releases, which lack release notes, should be closer to the
4059 The Emacs announcement is described in @ref{Updating the Emacs
4062 @node Surveys, Free Software Directories, News, Nodes borrowed from other projects not adapted to XEmacs
4065 @strong{Interesting. Should we do this, maybe?}
4069 The project admin may create
4070 @c #### need to fix the group_id
4071 @uref{https://sourceforge.net/survey/?group_id=, Surveys}. The
4072 interface is backwards. First you create questions and note the
4073 question IDs. Then you create a survey and list the question IDs.
4075 @node Free Software Directories, , Surveys, Nodes borrowed from other projects not adapted to XEmacs
4076 @chapter Free Software Directories
4078 @cindex FSF/UNESCO Free Software Directory
4079 @cindex Free Software Directories
4080 @cindex Software Directories
4082 The @uref{http://www.gnu.org/directory/, FSF/UNESCO Free Software
4083 Directory} contains a description of all of the free software, including
4084 @uref{http://www.gnu.org/directory/XEmacs.html, XEmacs}. It must be
4085 updated when there is a release of XEmacs, or when a significant new
4086 feature has been added which should be advertised.
4088 This entry is the master for the short and long descriptions of XEmacs
4089 in various places. These items should be updated each time the master
4092 In order to update the entry, first
4093 @uref{http://savannah.gnu.org/cvs/?group_id=32, check out} the
4094 directory via anonymous CVS:
4097 cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/directory login
4098 cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/directory co directory
4104 cvs -z3 -d <membername>@@subversions.gnu.org:/cvsroot/directory co directory
4107 Then make the desired changes to @file{XEmacs.txt}. Next, update the
4108 @i{touched} field. If the changes were significant enough to be
4109 announced, update the @i{updated} field as well. For a description of
4110 each field, see the @uref{http://www.gnu.org/gnulist/README, README}.
4112 Send the patch to @i{bug-directory@@gnu.org}. For more information,
4113 see the @uref{http://www.gnu.org/help/directory.html, instructions}.
4115 Finally, if any changes were made to the short or long descriptions, it
4116 is likely that the following will have to be updated: the
4117 @value{XEMACSORG} XEmacs project description (see
4118 @uref{https://sourceforge.net/project/admin/editgroupinfo.php?group_id=13357,
4119 Editing the @value{XEMACSORG} Project Description}), the top-level
4120 @file{index.php} file in the Project Website (@pxref{Project
4121 Website}), the @file{control} file in the Debian package
4122 (@pxref{Updating the Debian Package}), and the XEmacs package
4123 (@pxref{Updating the XEmacs Package}).
4125 @c #### Nuke this, but check whether the topics below need discussion.
4127 @c @node Miscellaneous Topics, Copying, Free Software Directories, Top
4128 @c @chapter Miscellaneous Topics
4130 @c This section contains a few items that should probably be deleted, but
4131 @c are kept for completeness.
4136 @c * Public Forums::
4137 @c * Anonymous FTP Space::
4140 @node Index, , Nodes borrowed from other projects not adapted to XEmacs, Top