Initial Commit
[packages] / xemacs-packages / general-docs / texi / xemacs / xemacs-devguide.texi
1 \input texinfo   @c -*-texinfo-*-
2 @c $Id: xemacs-devguide.texi,v 1.7 2009-02-24 09:59:13 stephent Exp $
3 @c Generate HTML with:
4 @c   (shell-command "texi2html -number -monolithic xemacs-devguide.texi" nil)
5 @c
6 @c %**start of header
7 @setfilename ../../info/xemacs-devguide.info
8 @settitle xemacs-devguide
9 @c %**end of header
10
11 @c Developer's Guide variables.
12 @set DEVGUIDE @cite{XEmacs Developer's Guide}
13 @set EDITION 0.8.1
14 @set UPDATED 2015-12-03
15 @set UPDATE-MONTH December, 2015
16
17 @c Other variables.
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
30
31 @copying
32 This is Edition @value{EDITION} of the @value{DEVGUIDE},
33 last updated @value{UPDATED}.
34
35 Copyright @copyright{} 2000, 2001, 2002, 2003, 2004 Bill Wohler
36
37 Copyright @copyright{} 2005, 2007 Free Software Foundation
38
39 @quotation
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.
44
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.
49
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
53 02111-1307, USA.
54 @end quotation
55 @end copying
56
57 @setchapternewpage odd
58
59 @dircategory XEmacs Editor
60 @direntry
61 * XEmacs Developer's Guide: (xemacs-devguide).  DRAFT.
62 @end direntry
63
64 @titlepage
65 @title The XEmacs Developer's Guide
66 @subtitle Edition @value{EDITION}
67 @subtitle @value{UPDATE-MONTH}
68 @author Stephen J. Turnbull
69
70 @page
71 @vskip 0pt plus 1filll
72 @insertcopying
73 @end titlepage
74
75 @contents
76
77 @ifnottex
78 @node Top, Acknowledgments, (dir), (dir)
79 @top The XEmacs Developers Guide
80 @insertcopying
81 @end ifnottex
82
83 @cartouche
84
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}.
91
92 @end cartouche
93
94 @menu
95 * Acknowledgments::             
96 * Introduction::                
97 * Philosophy::                  
98 * The Work Roles::              
99 * The Work Flow::               
100 * XEmacs Resources on the Internet::  
101 * Copying::
102 * Nodes borrowed from other projects not adapted to XEmacs::
103 * Index::                       
104
105 @detailmenu
106  --- The Detailed Node Listing ---
107
108 People and the Project
109
110 * Beta Tester::                 
111 * Committer::                   
112 * XEmacs Package Maintainer::   
113 * XEmacs Reviewer::             
114 * Meta-Maintainer::             
115 * Release Engineer::            
116 * Jobs List::                   
117
118 Committer
119
120 * Commit Access::               
121 * Committer Welcome Message::   
122
123 XEmacs Package Maintainer
124
125 * The Package Maintainer Role::
126 * Advice to Package Maintainers::
127
128 XEmacs Reviewer
129
130 * Appointing New Reviewers::    
131 * Welcoming New Reviewers::     
132
133 The Life Cycle of a Patch
134
135 * About Copyright Assignment::  
136 * Scratching That Itch::        
137 * Get the Sources::             
138 * Write Low-Profile Code::      
139 * Test Your Changes::           
140 * Add a ChangeLog Entry::       
141 * Create the Patch::            
142 * Submit the Patch::            
143 * Patch Review::                
144 * Committing the Patch::        
145 * Dispute Resolution::          
146
147 Add a ChangeLog Entry
148
149 * ChangeLogs::                  
150 * Log Messages::                
151
152 Submit the Patch
153
154 * Optional Alternate Procedure for Reviewers::  
155
156 Patch Review
157
158 * Commit-and-Review::           
159
160 Committing the Patch
161
162 * Proposed Alternative Procedure::  
163
164 XEmacs Resources on the Internet
165
166 * Project Website::             
167 * Mercurial Repository::              
168 * comp.emacs.xemacs::           
169 * xemacs-beta::                 
170 * xemacs-design::               
171 * xemacs-patches::              
172 * xemacs-mule::                 
173 * xemacs-winnt::                
174
175 Nodes borrowed from other projects, not adapted to XEmacs
176
177 * Support Requests::            
178 * Bugs::                        
179 * Feature Requests::            
180 * Patch Queue::                 
181 * File Releases::               
182 * News::                        
183 * Surveys::                     
184 * Free Software Directories::   
185
186 Bugs
187
188 * Category::                    
189 * Status::                      
190 * Group::                       
191 * Resolution::                  
192
193 File Releases
194
195 * Release Schedule::            
196 * Release Prerequisites::       
197 * Updating NEWS::               
198 * Updating README::             
199 * Updating Version Number::     
200 * Updating ChangeLogs::         
201 * Tagging Releases::            
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::           
212
213 @end detailmenu
214 @end menu
215
216 @node Acknowledgments, Introduction, Top, Top
217 @chapter Acknowledgments
218
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.
223
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
226 XEmacs distribution.
227
228
229
230 @node Introduction, Philosophy, Acknowledgments, Top
231 @chapter Introduction
232
233 @cindex Introduction
234 @cindex @value{XEMACSORG}
235
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.
242
243 In other words, this is the single sheet of music that all the XEmacs
244 developers are playing.
245
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}.
249
250 @cindex mailing lists, xemacs-design
251 @cindex xemacs-design
252
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.
257
258 @cartouche
259
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}.
266
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
269 great a burden.
270
271 @end cartouche
272
273
274
275 @node Philosophy, The Work Roles, Introduction, Top
276 @chapter Philosophy
277
278 @cindex Philosophy
279
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.}
284
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
288 over time.
289
290 @heading Code
291
292 The core philosophies of the XEmacs project regarding the code are as
293 follows:
294
295 @enumerate
296 @item
297 Keep the C code fast.
298
299 @item
300 Refrain from adding lots of code to the C codebase that would be better
301 served with Lisp.
302
303 @item
304 XEmacs is a cross-platform application.  Features should work on all
305 platforms.
306
307 @item
308 XEmacs should be easy to use out-of-the-box for new users.
309 @end enumerate
310
311 @cindex customize
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.
314
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.)
321
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
329 releases.
330
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.
339
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.
344
345 @heading Guiding Principles
346
347 The guiding principles of the XEmacs developers are:
348
349 @enumerate 1
350 @item
351 We all are scratching an itch on this project.  We respect each others'
352 goals, which are quite varied.
353
354 @item
355 Using vulgar language towards our users and/or developers is
356 unacceptable.
357
358 @item
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.
364
365 @item
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.
369
370 @item
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
373 when you fix his.
374
375 @item
376 Finally, we're here to have fun.
377 @end enumerate
378
379 @heading Coding Conventions
380
381 Coding conventions are described in detail elsewhere.
382 @c #### Make this xref more precise.
383 @xref{Top, Internals Manual, , internals}.
384
385 @c #### Move these somewhere more appropriate
386 Here are a few additional references that you might want to check out.
387
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}
396
397 The (GNU) Emacs Lisp Manual
398 @ifnothtml
399 @ref{Tips, Tips and Conventions, , elisp}.
400 @end ifnothtml
401 @ifhtml
402 @uref{http://www.sunsite.ualberta.ca/Documentation/Gnu/emacs-lisp-ref-21-2.7/html_node/elisp_708.html,
403 Tips and Conventions}.
404 @end ifhtml
405
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.
417
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.)
425
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.
434
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.
437
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.
444
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}.
448
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
452 @ifnothtml
453 @ref{Library Headers, , , elisp},
454 @end ifnothtml
455 @ifhtml
456 @uref{http://www.sunsite.ualberta.ca/Documentation/Gnu/emacs-lisp-ref-21-2.7/html_node/elisp_713.html,
457 Library Headers}
458 @end ifhtml
459 are present.  The @code{checkdoc} function should be run before check-ins
460 as well.  All errors must be fixed.
461
462 You should also @emph{read the comments} in the @file{lisp-mnt} library
463 source.
464
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.
468
469
470 @node The Work Roles, The Work Flow, Philosophy, Top
471 @chapter The Work Roles
472
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
479 another's.
480
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.
484
485 @heading People and the Project
486
487 @cindex Definitions
488 @cindex developer
489 @cindex contributor
490
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
494 XEmacs developer.
495
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.
505
506 Here are some of the better defined roles.  Most are defined by
507 reference to @value{PROJECT} resources.
508
509 @table @dfn
510 @item Developer
511 @itemx Contributor
512 You.  Me.  Generally, anybody who wants to help improve XEmacs.
513 @xref{The Work Flow}.
514
515 @item User
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}.
520
521 @item Beta tester
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}.
525
526 @item Committer
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}.
531
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}.
537
538 @item Reviewer
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}
543 @ref{xemacs-review}.
544
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}}.
550 @xref{Jobs List}.
551
552 @item Chairman of the Board
553 @itemx CEO
554 @itemx Maintainer
555 @itemx Benevolent Dictator for Life
556 Call it what you like, we don't have one any more, by deliberate choice.
557
558 @item Meta-maintainer
559 @itemx Mr. XEmacs
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}.
566
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!
580
581 @item Postmaster
582 @itemx Webmaster
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!
587
588 @item Miscellaneous
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}.
593 @end table
594
595 @menu
596 * Beta Tester::                 
597 * Committer::                   
598 * XEmacs Package Maintainer::   
599 * XEmacs Reviewer::             
600 * Meta-Maintainer::             
601 * Release Engineer::            
602 * Jobs List::                   
603 @end menu
604
605
606
607 @node Beta Tester, Committer, The Work Roles, The Work Roles
608 @section Beta Tester
609
610 @cindex beta tester
611 @cindex tester, beta
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
619 @findex build-report
620
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
630 features.
631 Build reports are submitted to @value{BUILDREPORTS-LIST}
632 via the @kbd{M-x build-report RET} utility.
633
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.
637
638
639
640 @node Committer, XEmacs Package Maintainer, Beta Tester, The Work Roles
641 @section Committer
642
643 @cindex committer
644
645 @c MH-E says that committers may be _assigned_ bugs
646
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}.
654
655 Commit access is generally given to those who have submitted several
656 good patches, to ``well-known'' developers on request, and to XEmacs
657 package maintainers.
658
659 @menu
660 * Commit Access::               
661 * Committer Welcome Message::   
662 @end menu
663
664
665
666 @node Commit Access, Committer Welcome Message, Committer, Committer
667 @subsection Commit Access
668
669 @cindex commit access
670 @cindex bitbucket.org committer accounts
671
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.
675 The second is to
676 @uref{http://www.xemacs.org/Lists/#xemacs-beta, subscribe to
677 the XEmacs Beta mailing list}.
678
679 @cindex XEmacs User's Guide
680 @cindex manuals, XEmacs
681 @cindex XEmacs Lisp Reference
682 @cindex manuals, XEmacs Lisp
683
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}
687 @ifnottex
688 @xref{Top, XEmacs Lisp Reference, , lispref}.
689 @end ifnottex
690 as well as the
691 @uref{http://www.xemacs.org/Documentation/21.5/html/,XEmacs Manual}.
692 @ifnottex
693 @xref{Top, XEmacs User's Guide, , xemacs}.
694 @end ifnottex
695
696 @cindex xemacs-design mailing list
697 @cindex mailing lists, xemacs-design
698 @cindex committer
699 @cindex bitbucket.org
700
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
708 for you.
709
710 @cindex pictures of developers
711 @cindex developers, pictures
712 @cindex information about developers
713 @cindex developers, information about
714
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}.
719
720
721
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.
725
726 @cindex committers, welcoming
727 @cindex welcoming committers
728
729 Here's a typical welcome message for a new package maintainer.  The
730 changes appropriate to a generic committer should be pretty obvious.
731
732 @display
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.
738
739 Hi Newbie!
740
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.
745
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
752 things.
753
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.
756
757         xemacs-beta (for all kinds of code discussion)
758         xemacs-patches (this is where all patches are sent)
759
760 You can subscribe to these (and the other XEmacs mailing lists) at
761 <http://www.xemacs.org/Lists/>.  Or via email, to:
762
763         xemacs-beta-request@@xemacs.org
764         xemacs-patches-request@@xemacs.org
765
766 With "subscribe" (sans quotes) in the body of the emails.
767
768 It also may be worth your while to monitor comp.emacs.xemacs if you
769 have Usenet access.
770
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.
774
775 Building
776 ========
777
778 For a quick start to building packages, see INSTALL under the packages/
779 dir where you set up a local source tree.
780
781 Patches
782 =======
783
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.
790
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/>.
795
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.
802
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.
807
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
814 some other party.
815
816 As the XEmacs Packages Release Manager, I'd like to add a couple of
817 things here:
818
819         1) The packages repository is a "stable" branch, please
820            do all that you can to keep it that way.
821
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.
825
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.
829
830 Here's a brief rundown of how a package gets released:
831 -----------------------------------------------------
832 You
833         - hack hack hack 
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
838
839 Us
840         - hg pull -u
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)
848
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,
852 jump right in.
853
854 Once again, Newbie, thank you for taking on this very important role
855 for us.  And welcome to the Team!
856
857 Oldbert Reviewer,
858 XEmacs Package Release Manager.
859 @end display
860
861
862
863
864 @node XEmacs Package Maintainer, XEmacs Reviewer, Committer, The Work Roles
865 @section XEmacs Package Maintainer
866
867 @cindex XEmacs package maintainer
868 @cindex maintainer, XEmacs package
869 @cindex upstream maintainer
870 @cindex maintainer, upstream
871
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
880 users.
881
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}.
889
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.
898
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
903 release.
904
905 @menu
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::
912 @end menu
913
914
915
916 @node The Package Maintainer Role, Getting Started as a Package Maintainer, , XEmacs Package Maintainer
917 @subsection The Package Maintainer Role
918
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.
931
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.
937
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
947 documentation.
948
949
950
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
953
954 @cindex bitbucket.org
955 @cindex Mercurial recipes
956
957 The first step is to clone the package from the source repository.
958
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:
965
966 @example
967 hg clone https://bitbucket.org/xemacs/xemacs-packages mypackages
968 @end example
969
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.
975
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.
979
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
984
985 @example
986 default=ssh://hg@@bitbucket.org/xemacs/@var{package_name}
987 @end example
988
989 For https, change the @code{default} line in the
990 @file{.hg/hgrc} for each package to
991
992 @example
993 default=https://@var{login}@@bitbucket.org/xemacs/@var{package_name}
994 @end example
995
996 @noindent
997 where @var{login} is your Bitbucket login name.
998
999 The package developer is welcome to change anything in the repo for
1000 his or her
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
1013 attractive.
1014
1015 So now you can
1016
1017 @example
1018 cd mypackages/xemacs-packages/@var{package_name}
1019 xemacs Makefile
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
1023 hg push
1024 @end example
1025
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}.
1031
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.
1036
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}.
1043
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.)
1051
1052 For internal communication purposes, we make aliases for the maintainer
1053 and the package @samp{@@xemacs.org}. The package maintainer addresses are
1054
1055 @example
1056 @var{firstname.lastname}@@xemacs.org
1057 @end example
1058
1059 You can use these publically as you see fit, or not.  The package
1060 addresses are
1061
1062 @example
1063 @var{package}-bugs@@xemacs.org
1064 @var{package}-discuss@@xemacs.org
1065 @var{package}-patches@@xemacs.org
1066 @var{package}-maintainer@@xemacs.org
1067 @end example
1068
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
1074 channels.
1075
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
1078
1079 @cindex Mercurial recipes
1080
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.
1085
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.
1090
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
1094 merge.
1095
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 
1098 @samp{-u} (or
1099 a separate @samp{hg update}) is necessary to pull the subrepo updates from
1100 the parent repository.
1101
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.
1106
1107
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
1110
1111 @cindex Mercurial recipes
1112
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.
1117
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.
1123
1124
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
1127
1128 @cindex Mercurial recipes
1129
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.
1134
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:
1140
1141 @enumerate
1142 @item
1143 Diff the new upstream version against the previous upstream version to
1144 generate a patch file.
1145
1146 @item
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
1149 package.
1150
1151 @item
1152 Make sure that your repository has the latest changesets from
1153 Bitbucket.
1154
1155 @item
1156 Apply the patch and resolve any conflicts by hand.
1157
1158 @item
1159 Manually register any new files with Mercurial (@samp{hg add}) and remove
1160 any files that have been deleted (@samp{hg rm --after}).
1161
1162 @item
1163 Build your package (and optionally build the entire package tree).
1164 Test as seems appropriate.
1165
1166 @item
1167 When you are ready (e.g., after testing), commit and push the new
1168 version as described in the previous section.  
1169     
1170 @end enumerate
1171
1172 After pushing, monitor @uref{http://www.contactor.se/~matsl/smoketest/,
1173 the package smoketest} in case your changes break the build of other
1174 packages.
1175
1176 @heading ChangeLog files
1177
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:
1184     
1185 @example
1186     YYYY-MM-DD  J. Random Hacker  <jrh@@xemacs.org>
1187     
1188         * Sync with foobar 2.7.
1189         Please see the ChangeLog.upstream files for details.
1190 @end example
1191
1192
1193 @node Advice to Package Maintainers, , Updating a Package to a New Upstream Version, XEmacs Package Maintainer
1194 @subsection Advice to Package Maintainers
1195
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.
1200
1201 @heading Setting Up to Build Your Package
1202
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.
1213
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.
1219
1220 @heading Cloning from your local copy
1221
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.,
1227
1228 @example
1229 mkdir mypackages
1230 cd mypackages
1231 hg clone https://bitbucket.org/xemacs/xemacs-packages
1232 @end example
1233
1234 and then run the following script.  In the example above, you would
1235 run it from the @file{mypackages/xemacs-packages} directory.
1236     
1237 @example
1238 #! /bin/sh
1239 top=$(basename $(pwd))
1240 for d in mule-packages xemacs-packages; do
1241   for f in $d/*; do
1242     [ -d $f ] && ln -s $top/$f ..
1243   done
1244 done
1245 mv ../Sun ../sun
1246 mv ../hm--html-menus ../hm-html-menus 
1247 @end example
1248
1249
1250 @heading Lisp macros and autoloads
1251
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.
1256
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.
1266
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.
1271
1272 @heading Application to the XEmacs package infrastructure
1273
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.
1279
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.)
1284
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.
1290
1291 @heading Maintaining Package Metadata
1292
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.
1296
1297 To update the packages that your package depends on, edit the
1298 @samp{REQUIRES} list in the package's
1299 @file{Makefile}.
1300
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}.
1303
1304 @heading For the future
1305
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
1312 occur.
1313
1314 @heading XEmacs-Specific Changes
1315
1316 You can make XEmacs-specific changes easier to find by tagging them
1317 with this comment:
1318
1319 @example
1320 ;; XEmacs change
1321 @end example
1322
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
1327 base.
1328
1329 @heading Changes to Other Packages or Top-Level
1330
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.
1339
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.
1343
1344
1345 @heading Getting Help with Your Package
1346
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
1352 don't.
1353
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.
1361
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.
1365
1366 @heading Learning About Emacs Lisp
1367
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.
1374
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.
1382
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!
1391
1392
1393
1394 @node XEmacs Reviewer, Meta-Maintainer, XEmacs Package Maintainer, The Work Roles
1395 @section XEmacs Reviewer
1396
1397 @cindex reviewer
1398 @cindex XEmacs Review Board
1399 @cindex maintainer
1400 @cindex committer
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
1407
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
1417 reviewers.
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.
1423
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.
1430
1431 @menu
1432 * Appointing New Reviewers::    
1433 * Welcoming New Reviewers::     
1434 @end menu
1435
1436
1437
1438 @node Appointing New Reviewers, Welcoming New Reviewers, XEmacs Reviewer, XEmacs Reviewer
1439 @subsection Appointing New Reviewers
1440
1441 @c #### This node needs improvement!!
1442
1443 @cindex @value{BOARD}
1444 @cindex appointing reviewers
1445 @cindex reviewers, appointing
1446
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.
1450
1451
1452
1453 @node Welcoming New Reviewers,  , Appointing New Reviewers, XEmacs Reviewer
1454 @subsection Welcoming New Reviewers
1455
1456 @cindex reviewers, welcoming
1457 @cindex welcoming reviewers
1458
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.
1463
1464 @display
1465 To: Newbert Reviewer <newbie@@xemacs.org>
1466 CC: XEmacs Review Board <xemacs-review@@xemacs.org>
1467 Subject: Welcome to the Review Board
1468
1469 Dear Newbie,
1470
1471 Welcome to the XEmacs Review Board.
1472
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.
1481
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.
1485
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.
1496
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.
1501
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
1508 line.
1509
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
1516 reviewers.
1517
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.)
1526
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.
1531
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
1538 new one that does.
1539
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.)
1546
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.
1553
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.
1564
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.
1571
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.
1582
1583 Your aliases at xemacs.org have already been set up for some time.
1584 For your information, they are
1585
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
1589
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.
1594
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.
1598
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
1603
1604              http://www.xemacs.org/Develop/hgaccess.html
1605
1606 seem to be pretty clear.
1607
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
1615 access.
1616
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.
1620
1621 Stephen Turnbull <stephen@@xemacs.org>
1622 XEmacs Project Meta-Maintainer
1623 @end display
1624
1625
1626
1627 @node Meta-Maintainer, Release Engineer, XEmacs Reviewer, The Work Roles
1628 @section Meta-Maintainer
1629
1630 @cindex meta-maintainer
1631
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.
1641
1642
1643
1644 @node Release Engineer, Jobs List, Meta-Maintainer, The Work Roles
1645 @section Release Engineer
1646
1647 @cindex release engineer
1648 @cindex release manager
1649
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
1659 already.
1660
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).
1667
1668
1669
1670 @node Jobs List,  , Release Engineer, The Work Roles
1671 @section Jobs List
1672
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}.
1680
1681
1682
1683 @node The Work Flow, XEmacs Resources on the Internet, The Work Roles, Top
1684 @chapter The Work Flow
1685
1686 This section is a description of current best practices, rather than an
1687 attempt to define a standard.
1688
1689 @cindex patch life cycle
1690 @cindex life cycle, patch
1691 @cindex workflow
1692
1693 @heading The Life Cycle of a Patch
1694
1695 @table @emph
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.)
1701
1702 @item Write low-profile code.
1703 Don't distract your users or colleagues from their work.  Just make it
1704 easier.
1705
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}.
1709
1710 @item Add a ChangeLog entry.
1711 Tell us what you did.
1712
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.
1719
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.
1723
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.
1728
1729 @item Assign copyright.
1730 If you like you may assign your coppyright, typically to the FSF; but
1731 this is not required.
1732
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
1736 reviewer.
1737
1738 @item Dispute Resolution
1739 Any three developers will give you four ``best ways'' to do it.  Now you
1740 have to pick one.
1741 @end table
1742
1743 @menu
1744 * About Copyright Assignment::  
1745 * Scratching That Itch::        
1746 * Get the Sources::             
1747 * Write Low-Profile Code::      
1748 * Test Your Changes::           
1749 * Add a ChangeLog Entry::       
1750 * Create the Patch::            
1751 * Submit the Patch::            
1752 * Patch Review::                
1753 * Committing the Patch::        
1754 * Dispute Resolution::          
1755 @end menu
1756
1757
1758
1759 @node About Copyright Assignment, Scratching That Itch, The Work Flow, The Work Flow
1760 @section About Copyright Assignment
1761
1762 @cindex assignment of copyright
1763 @cindex copyright, assignment of
1764
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
1776 to you.
1777
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
1785 the process.)
1786
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}
1792 procedures.
1793
1794
1795
1796 @node Scratching That Itch, Get the Sources, About Copyright Assignment, The Work Flow
1797 @section Scratching That Itch
1798
1799 @c #### needs revision
1800
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.
1806
1807
1808
1809 @node Get the Sources, Write Low-Profile Code, Scratching That Itch, The Work Flow
1810 @section Get the Sources
1811
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.
1822
1823
1824
1825 @node Write Low-Profile Code, Test Your Changes, Get the Sources, The Work Flow
1826 @section Write Low-Profile Code
1827
1828 @quotation
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
1831 ourselves!''
1832 @end quotation
1833
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.
1839
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
1848 integer.
1849
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
1854 following example.
1855
1856 @example
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                   */
1864 @}
1865 @end example
1866
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.
1873
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.
1877
1878
1879
1880 @node Test Your Changes, Add a ChangeLog Entry, Write Low-Profile Code, The Work Flow
1881 @section Test Your Changes
1882
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.
1888
1889 Whenever you add a feature, add new tests to validate its functionality.
1890
1891 Some packages provide their own tests, which you should run before
1892 submitting changes to those packages.
1893
1894
1895
1896 @node Add a ChangeLog Entry, Create the Patch, Test Your Changes, The Work Flow
1897 @section Add a ChangeLog Entry
1898
1899 @strong{Needs review!!}
1900
1901 Add a log entry to @file{ChangeLog} file in the ancestor directory
1902 closest to each changed file.
1903
1904 @menu
1905 * ChangeLogs::                  
1906 * Log Messages::                
1907 @end menu
1908
1909 @node ChangeLogs, Log Messages, Add a ChangeLog Entry, Add a ChangeLog Entry
1910 @subsection ChangeLogs
1911
1912 @strong{This section is pretty close to correct for XEmacs.  Needs review.}
1913
1914 @cindex ChangeLog
1915
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
1919 repository.
1920
1921 Here is an example @file{ChangeLog} entry:
1922
1923 @example
1924 2001-02-18  Bill Wohler  <wohler@@newt.com>
1925
1926         * Release mh-e-doc-1.3 for Emacs 21.1.
1927
1928         * doc/mh-e.texi (Viewing): Added mh-header-display index entry.
1929         (Organizing,Customizing Reading): Added mh-kill-folder index entry.
1930
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.
1936
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.
1947
1948         *doc/mh-e.texi (Viewing, Showing): Use new keymaps (closes
1949         SF #621632).
1950 @end example
1951
1952 The first bullet shows the text that should be used when releasing a
1953 module.
1954
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.
1960
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.
1966
1967 Multiple targets with the same text may appear in the same entry.
1968
1969 @cindex Debian
1970 @c #### @cindex SourceForge
1971 @cindex XEmacs tracker
1972
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
1976
1977 @example
1978     (closes issue1234).
1979 @end example
1980
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:
1984
1985 @example
1986     (closes SourceForge #621632).
1987     (closes Debian #234234).
1988 @end example
1989
1990 The XEmacs manual has full documentation on the @file{ChangeLog}
1991 commands.
1992
1993 When you check in the change log, you do not need to supply any log
1994 message.
1995
1996 @node Log Messages,  , ChangeLogs, Add a ChangeLog Entry
1997 @subsection Log Messages
1998
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.}
2002
2003 @cindex log messages
2004 @cindex ChangeLog
2005
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:
2010
2011 @example
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.
2017 @end example
2018
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.
2023
2024 It is not necessary to add release information since that
2025 information will be encoded in the tags.
2026
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
2030 Mercurial.
2031
2032 I specify the following for @code{log-edit-hook} to make life easier:
2033
2034 @example
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)))
2039 @end example
2040
2041 Log messages for files named @file{ChangeLog} may be empty.
2042
2043
2044
2045 @node Create the Patch, Submit the Patch, Add a ChangeLog Entry, The Work Flow
2046 @section Create the Patch
2047
2048 @cindex Mercurial recipes
2049
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.)
2054
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.
2067
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
2075 changeset.
2076
2077
2078 @node Submit the Patch, Patch Review, Create the Patch, The Work Flow
2079 @section Submit the Patch
2080
2081 @cindex patch submission
2082 @cindex submission, patch
2083
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.)
2088
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:
2095
2096 @example
2097 Subject: [21.5] src/regex.c: synch to recent GNU Emacs
2098
2099 Subject: [PATCH web] Announce the release of XEmacs 21.4.6
2100
2101 Subject: [21.4 21.5] Fix mail truncation bug
2102 @end example
2103
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.
2116
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:
2124
2125 @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>
2131
2132 SUPERSEDES 21.5
2133
2134 Not needed for 21.4.
2135 This patch adapts the fix from
2136 <original.patch.submission@@users.sourceforge.net> to 21.5.
2137
2138 src/ChangeLog:
2139 [etc, etc]
2140 @end example
2141
2142 @menu
2143 * Optional Alternate Procedure for Reviewers::  
2144 @end menu
2145
2146
2147
2148 @node Optional Alternate Procedure for Reviewers,  , Submit the Patch, Submit the Patch
2149 @subsection Optional Alternate Procedure for Reviewers
2150
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
2155 repository
2156 commit-trigger will automatically generate and post the patch to
2157 @value{PATCHES-LIST}.  This may be referred to as @dfn{implicit
2158 self-approval}.
2159
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)}
2163
2164
2165
2166 @node Patch Review, Committing the Patch, Submit the Patch, The Work Flow
2167 @section Patch Review
2168
2169 @cindex patch approval
2170 @cindex approval, patch
2171
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.)
2178
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
2185
2186 @table @samp
2187 @item APPROVE
2188 The patch is accepted, and will be committed by arrangement between the
2189 approving reviewer and the submitting developer.
2190
2191 @item RECOMMEND
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).
2195
2196 @item QUERY
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.
2200
2201 @item REVISE
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.
2206
2207 @item VETO
2208 The reviewer thinks the patch is ill-conceived, and requires redesign
2209 before it will be acceptable.
2210 @end table
2211
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.
2216
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.)
2222
2223
2224
2225 @menu
2226 * Commit-and-Review::           
2227 @end menu
2228
2229 @node Commit-and-Review,  , Patch Review, Patch Review
2230 @subsection Commit-and-Review
2231
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}.
2235
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.
2241
2242
2243
2244 @node Committing the Patch, Dispute Resolution, Patch Review, The Work Flow
2245 @section Committing the Patch
2246
2247 @cindex patch, committing a
2248 @cindex committing a patch
2249
2250 Once the patch has been approved, it should be pushed to the source
2251 repository as soon
2252 as possible.  The committer should also send a commit message using the
2253 keyword @samp{COMMIT} as a reply to the approval message.
2254
2255 @menu
2256 * Proposed Alternative Procedure::  
2257 @end menu
2258
2259
2260
2261 @node Proposed Alternative Procedure,  , Committing the Patch, Committing the Patch
2262 @subsection Proposed Alternative Procedure
2263
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.
2270
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)}
2273
2274
2275
2276 @node Dispute Resolution,  , Committing the Patch, The Work Flow
2277 @section Dispute Resolution
2278
2279 @cindex contesting vetos
2280 @cindex vetos, contesting
2281 @cindex protesting check-ins
2282 @cindex check-ins, protesting
2283 @cindex dispute resolution
2284
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.}
2287
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.
2292
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.
2300
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
2303 vetos.
2304
2305 @table @emph
2306 @item Only patches can be reviewed.
2307
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
2313 it.
2314
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.
2321
2322 @item Reviewer decisions apply to the whole patch.
2323
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.
2331
2332 @item Reasonable time constraints for reviewers.
2333
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.
2341
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.)
2348
2349 @item Each resubmission of a patch restarts the clock.
2350
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,
2354 once for each bug.
2355
2356 @item The submitter must revert an immediate commit if vetoed.
2357
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.
2362
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.
2365
2366 @item A veto after commit of a fully reviewed patch must be supported.
2367
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.
2375
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
2380 self-approval).
2381
2382 (It's arguable that ``full review process'' should mean approval by a
2383 reviewer other than the submitter.)
2384 @end table
2385
2386
2387
2388 @node XEmacs Resources on the Internet, Copying, The Work Flow, Top
2389 @chapter XEmacs Resources on the Internet
2390
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}.
2394
2395 There should also be a node for the Emacs Wiki.
2396
2397 @cindex XEmacs Resources on the Internet
2398
2399 @menu
2400 * Project Website::             
2401 * Mercurial Repository::              
2402 * comp.emacs.xemacs::           
2403 * xemacs-beta::                 
2404 * xemacs-design::               
2405 * xemacs-patches::              
2406 * xemacs-mule::                 
2407 * xemacs-winnt::                
2408 * xemacs-review::               
2409 @end menu
2410
2411
2412
2413 @node Project Website, Mercurial Repository, XEmacs Resources on the Internet, XEmacs Resources on the Internet
2414 @section Project Website
2415
2416 @strong{Needs review.  Adrian?}
2417
2418 @cindex Project Website
2419 @cindex @value{XEMACSORG}, XEmacs Web space
2420
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.
2424
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
2430 spaces.
2431
2432
2433 @node Mercurial Repository, comp.emacs.xemacs, Project Website, XEmacs Resources on the Internet
2434 @section Mercurial Repository
2435
2436 @cindex Mercurial Repository
2437
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.
2442
2443 @table @uref
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.
2451
2452 @item https://bitbucket.org/xemacs/xemacs
2453 A public-access URL for the bleeding edge.
2454
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
2459 @file{default}.
2460
2461 @end table
2462
2463
2464 @node comp.emacs.xemacs, xemacs-beta, Mercurial Repository, XEmacs Resources on the Internet
2465 @section The Usenet Newsgroup comp.emacs.xemacs
2466
2467 @strong{Write me!}
2468
2469
2470
2471 @node xemacs-beta, xemacs-design, comp.emacs.xemacs, XEmacs Resources on the Internet
2472 @section The xemacs-beta Mailing List
2473
2474 @strong{Write me!}
2475
2476
2477
2478 @node xemacs-design, xemacs-patches, xemacs-beta, XEmacs Resources on the Internet
2479 @section The xemacs-design Mailing List
2480
2481 This list is currently inactive.  Traffic that used to go to
2482 @value{DESIGN-LIST} should be directed to @value{BETA-LIST} instead.
2483
2484 @strong{Concerning content, write me!}
2485
2486
2487
2488 @node xemacs-patches, xemacs-mule, xemacs-design, XEmacs Resources on the Internet
2489 @section The xemacs-patches Mailing List
2490
2491 @strong{Write me!}
2492
2493
2494
2495 @node xemacs-mule, xemacs-winnt, xemacs-patches, XEmacs Resources on the Internet
2496 @section The xemacs-mule Mailing List
2497
2498 @strong{Write me!}
2499
2500
2501
2502 @node xemacs-winnt, xemacs-review, xemacs-mule, XEmacs Resources on the Internet
2503 @section The xemacs-winnt Mailing List
2504
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}.
2508
2509
2510
2511 @node xemacs-review, , xemacs-winnt, XEmacs Resources on the Internet
2512 @section The xemacs-review Mailing List
2513
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).
2520
2521
2522
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
2526
2527 @display
2528 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
2529 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2530
2531 Everyone is permitted to copy and distribute verbatim copies
2532 of this license document, but changing it is not allowed.
2533 @end display
2534
2535 @appendixsec Preamble
2536
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
2545 your programs, too.
2546
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.
2553
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.
2558
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
2563 rights.
2564
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.
2568
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.
2575
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.
2581
2582   The precise terms and conditions for copying, distribution and
2583 modification follow.
2584
2585 @iftex
2586 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
2587 @end iftex
2588 @ifnottex
2589 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
2590 @end ifnottex
2591
2592 @enumerate 0
2593 @item
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.''
2603
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.
2610
2611 @item
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.
2619
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.
2622
2623 @item
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:
2628
2629 @enumerate a
2630 @item
2631 You must cause the modified files to carry prominent notices
2632 stating that you changed the files and the date of any change.
2633
2634 @item
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.
2639
2640 @item
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.)
2651 @end enumerate
2652
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.
2662
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.
2667
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.
2672
2673 @item
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:
2677
2678 @enumerate a
2679 @item
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,
2683
2684 @item
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,
2691
2692 @item
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.)
2698 @end enumerate
2699
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.
2710
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.
2716
2717 @item
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.
2725
2726 @item
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.
2735
2736 @item
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
2743 this License.
2744
2745 @item
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.
2758
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
2762 circumstances.
2763
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
2773 impose that choice.
2774
2775 This section is intended to make thoroughly clear what is believed to
2776 be a consequence of the rest of this License.
2777
2778 @item
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.
2786
2787 @item
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.
2792
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
2799 Foundation.
2800
2801 @item
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.
2809
2810 @iftex
2811 @heading NO WARRANTY
2812 @end iftex
2813 @ifnottex
2814 @center NO WARRANTY
2815 @end ifnottex
2816
2817 @item
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.
2827
2828 @item
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.
2838 @end enumerate
2839
2840 @iftex
2841 @heading END OF TERMS AND CONDITIONS
2842 @end iftex
2843 @ifnottex
2844 @center END OF TERMS AND CONDITIONS
2845 @end ifnottex
2846
2847 @page
2848 @appendixsec How to Apply These Terms to Your New Programs
2849
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.
2853
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.
2858
2859 @smallexample
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}
2862
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.
2867
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.
2872
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.
2876 @end smallexample
2877
2878 Also add information on how to contact you by electronic and paper mail.
2879
2880 If the program is interactive, make it output a short notice like this
2881 when it starts in an interactive mode:
2882
2883 @smallexample
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'
2888 for details.
2889 @end smallexample
2890
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
2895 suits your program.
2896
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:
2900
2901 @smallexample
2902 @group
2903 Yoyodyne, Inc., hereby disclaims all copyright
2904 interest in the program `Gnomovision'
2905 (which makes passes at compilers) written
2906 by James Hacker.
2907
2908 @var{signature of Ty Coon}, 1 April 1989
2909 Ty Coon, President of Vice
2910 @end group
2911 @end smallexample
2912
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.
2918
2919
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
2922
2923 @c #########################################################################
2924 @c #### I haven't seriously worked on the included material. -- stephen ####
2925 @c #########################################################################
2926
2927 @menu
2928 * Support Requests::            
2929 * Bugs::                        
2930 * Feature Requests::            
2931 * Patch Queue::                 
2932 * File Releases::               
2933 * News::                        
2934 * Surveys::                     
2935 * Free Software Directories::   
2936 @end menu
2937
2938
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
2941
2942 @cindex Support Requests
2943
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}.
2947
2948
2949
2950 @node Bugs, Feature Requests, Support Requests, Nodes borrowed from other projects not adapted to XEmacs
2951 @chapter Bugs
2952
2953 @strong{We don't have a tracker.  We should.  Describe what it should
2954 look like here.}
2955
2956 @cindex Bugs
2957 @cindex priority
2958 @cindex bugs, priority
2959
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.
2964
2965 @cindex bug-gnu-emacs
2966 @cindex Debian
2967
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
2973 in the bug report.
2974
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.
2980
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.
2985
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.
2995
2996 See @ref{File Releases} for a motivation of why this process is useful.
2997
2998 The rest of this section describes the categories and groups that have
2999 been set up for the XEmacs project.
3000
3001 @menu
3002 * Category::                    
3003 * Status::                      
3004 * Group::                       
3005 * Resolution::                  
3006 @end menu
3007
3008 @node Category, Status, Bugs, Bugs
3009 @section Category
3010
3011 @cindex category
3012 @cindex bug category
3013
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}
3017
3018 @table @b
3019
3020 @item General
3021
3022 @cindex general bug category
3023 @cindex bug categories, general
3024
3025 The @dfn{General} category is used for bugs that do not belong in any of
3026 the other categories.
3027
3028 @item UI
3029
3030 @cindex UI bug category
3031 @cindex bug categories, UI
3032
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.
3035
3036 @item MIME
3037
3038 @cindex MIME bug category
3039 @cindex bug categories, MIME
3040
3041 The @dfn{MIME} category is used for bugs that pertain to MIME.
3042
3043 @item Security
3044
3045 @cindex security bug category
3046 @cindex bug categories, security
3047
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.
3051
3052 @item Documentation
3053
3054 @cindex documentation bug category
3055 @cindex bug categories, documentation
3056
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.
3064
3065 @item Contrib
3066
3067 @cindex contrib bug category
3068 @cindex bug categories, contrib
3069
3070 The @dfn{Contrib} category is used for all bugs in the contributed
3071 software.
3072
3073 @end table
3074
3075 @node Status, Group, Category, Bugs
3076 @section Status
3077
3078 @cindex status
3079 @cindex bug status
3080
3081 The bug @dfn{status} is divided into four sections: @i{Open},
3082 @i{Closed}, @i{Deleted} and @i{Pending}.
3083
3084 @table @b
3085
3086 @item Open
3087
3088 @cindex open bug status
3089 @cindex bug status, open
3090
3091 When bugs are initially created, they are marked @dfn{Open}.
3092
3093 @cindex discussing bugs
3094 @cindex bugs, discussing
3095 @cindex features, discussing
3096
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
3105 can be closed.
3106
3107 Discussion about entirely new features should be opened in the Feature
3108 Requests section (@pxref{Feature Requests}) but otherwise handled in
3109 the same way.
3110
3111 @item Closed
3112
3113 @cindex closed bug status
3114 @cindex bug status, closed
3115
3116 When all aspects of a bug have been fixed, including code and
3117 documentation, the bug is marked @dfn{Closed}.
3118
3119 When setting the status to Closed, the group should be set to Fixed,
3120 Works For Me, Invalid, or Rejected.
3121
3122 @item Pending
3123
3124 @cindex pending bug status
3125 @cindex bug status, pending
3126
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
3131 of Deleted.
3132
3133 @item Deleted
3134
3135 @cindex deleted bug status
3136 @cindex bug status, deleted
3137
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.
3140
3141 @end table
3142
3143 @node Group, Resolution, Status, Bugs
3144 @section Group
3145
3146 @cindex group
3147 @cindex bug group
3148
3149 The bug @dfn{group} contains several items.  They include:
3150
3151 @table @b
3152
3153 @item None
3154
3155 Bugs are initially filed in this group.
3156
3157 @item CVS*
3158
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.
3162
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.
3167
3168 @item XE*
3169
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
3172 Status is Closed.
3173
3174 @end table
3175
3176 @node Resolution,  , Group, Bugs
3177 @section Resolution
3178
3179 A bug can appear in various states:
3180
3181 @table @b
3182
3183 @item Accepted
3184
3185 @cindex accepted resolution
3186 @cindex resolution, accepted
3187
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
3192 merit.
3193
3194 @item Duplicate
3195
3196 @cindex duplicate resolution
3197 @cindex resolution, duplicate
3198
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
3203 to the duplicate.
3204
3205 @item Fixed
3206
3207 @cindex fixed resolution
3208 @cindex resolution, fixed
3209
3210 The @dfn{Fixed} group is used to indicate a bug or feature request that
3211 has been fixed.
3212
3213 @item Invalid
3214
3215 @cindex not a bug resolution
3216 @cindex invalid resolution
3217 @cindex resolution, not a bug
3218 @cindex resolution, invalid
3219
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.
3222
3223 @item Later
3224
3225 @cindex later resolution
3226 @cindex resolution, later
3227
3228 The @dfn{Later} resolution is similar to the Postponed group, although
3229 it connotates a longer delay.
3230
3231 @item Out of Date
3232
3233 @cindex out of date resolution
3234 @cindex resolution, out of date
3235
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.
3239
3240 @item Postponed
3241
3242 @cindex postponed resolution
3243 @cindex resolution, postponed
3244
3245 The @dfn{Postponed} resolution is similar to the Later group, although
3246 it connotates a lesser delay.
3247
3248 @item Rejected
3249
3250 @cindex rejected resolution
3251 @cindex resolution, rejected
3252
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.
3257
3258 @item Remind
3259
3260 @cindex remind resolution
3261 @cindex resolution, remind
3262
3263 The @dfn{Remind} resolution is similar to the Postponed and Later
3264 groups, although it connotates an even lesser delay.
3265
3266 @item Wont Fix
3267
3268 @cindex wont fix resolution
3269 @cindex resolution, wont fix
3270
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.
3275
3276 @item Works For Me
3277
3278 @cindex irreproducible resolution
3279 @cindex resolution, irreproducible
3280 @cindex works for me resolution
3281 @cindex resolution, works for me
3282
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
3285 Invalid.
3286
3287 @end table
3288
3289 @node Feature Requests, Patch Queue, Bugs, Nodes borrowed from other projects not adapted to XEmacs
3290 @chapter Feature Requests
3291
3292 @cindex Feature Requests
3293
3294 Developers should check the
3295 Feature Requests
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
3300 @value{BOARD}
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.
3308
3309 After incorporating the feature, update the feature request as
3310 described in the previous section (@pxref{Bugs}).
3311
3312 @node Patch Queue, File Releases, Feature Requests, Nodes borrowed from other projects not adapted to XEmacs
3313 @chapter Patch Queue
3314
3315 @cindex Patch Queue
3316
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.
3322
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.
3328
3329
3330
3331 @node File Releases, News, Patch Queue, Nodes borrowed from other projects not adapted to XEmacs
3332 @chapter File Releases
3333
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.}
3337
3338 @cindex File Releases
3339
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.
3344
3345 @menu
3346 * Release Schedule::            
3347 * Release Prerequisites::       
3348 * Updating NEWS::               
3349 * Updating README::             
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::           
3363 @end menu
3364
3365 @node Release Schedule, Release Prerequisites, File Releases, File Releases
3366 @section Release Schedule
3367
3368 @strong{Totally bogus for XEmacs historical practice, probably totally
3369 unrealistic as future policy.}
3370
3371 Here is a suggested schedule for a release:
3372
3373 @quotation
3374 @multitable @columnfractions .3 .3 .4
3375
3376 @item @strong{Time}
3377 @tab @strong{Milestone}
3378 @tab @strong{Description}
3379
3380 @item T-4 weeks
3381 @tab Soft Freeze
3382 @tab
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
3390 testing.
3391 Testing commences.
3392
3393 @item T-3 weeks
3394 @tab Hard Freeze
3395 @tab
3396 All P7 and higher bug fixes must be committed.
3397 P6 bug fixes should be committed.
3398 Testing continues.
3399
3400 @item T-2 weeks
3401 @tab Beta 1
3402 @tab
3403 Cut beta release.
3404 Upload to @value{XEMACSORG}.
3405
3406 @item T-1 weeks
3407 @tab Beta 2
3408 @tab
3409 Cut beta release.
3410 Upload to @value{XEMACSORG}.
3411
3412 @item T-0 weeks
3413 @tab Release!
3414 @tab
3415 Cut release.
3416 Upload to @value{XEMACSORG}.
3417
3418 @end multitable
3419 @end quotation
3420
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}).
3423
3424 With frequent minor releases, omit the beta releases and
3425 pre-announcement.
3426
3427 @node Release Prerequisites, Updating NEWS, Release Schedule, File Releases
3428 @section Release Prerequisites
3429
3430 @cindex Release Prerequisites
3431 @cindex Coding Conventions
3432 @cindex Emacs Lisp Coding Conventions
3433 @cindex Conventions, verification
3434 @cindex Verification, conventions
3435
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}.
3439
3440 Next, check for Emacs changes to XEmacs as described in section
3441 @ref{Updating the Emacs Repository}.
3442
3443 @node Updating NEWS, Updating README, Release Prerequisites, File Releases
3444 @section Updating NEWS
3445
3446 @cindex NEWS
3447 @cindex news
3448 @cindex src
3449 @cindex Debian
3450
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)}.
3458
3459 In order to find what is appropriate for @file{NEWS}, several
3460 things can be done.
3461
3462 @enumerate
3463
3464 @item
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
3469 finished).
3470
3471 @item
3472 Repeat for
3473 @uref{https://sourceforge.net/tracker/?atid=363357&group_id=13357,
3474 Feature Requests}.
3475
3476 @item
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
3480 @file{NEWS}.
3481
3482 @item
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.
3485
3486 @item
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.
3489
3490 @item
3491 Use the ChangeLog.
3492
3493 @end enumerate
3494
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
3497 was 21.4.20.
3498
3499 @example
3500     cvs log -rr21-4-20
3501     cvs diff -rr21-4-20
3502 @end example
3503
3504 See section @ref{Updating ChangeLogs} before checking in this file.
3505
3506 @node Updating README, Updating Version Number, Updating NEWS, File Releases
3507 @section Updating README
3508
3509 @cindex README
3510
3511 Ensure that the target Emacs version is correct, as well as the
3512 supported Emacs versions.
3513
3514 Update the version number in various places in the INSTALL section.
3515
3516 See section @ref{Updating ChangeLogs} before checking in this file.
3517
3518 @node Updating Version Number, Updating ChangeLogs, Updating README, File Releases
3519 @section Updating Version Number
3520
3521 @set VERSIONFILE @file{$@{srcdir@}/version.sh}
3522
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.
3526
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.
3537
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.
3543
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.
3550
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.
3563
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}.
3567
3568
3569 @node Updating ChangeLogs, Tagging Releases, Updating Version Number, File Releases
3570 @section Updating ChangeLogs
3571
3572 @cindex ChangeLog
3573
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:
3576
3577 @example
3578 XEmacs \d+\(?:\.\d+\)+\(?:-b\d+\)?\(?:"\(\w\|\s-\)+"\)? is released
3579 @end example
3580
3581 @node Tagging Releases, Creating Tarballs, Updating ChangeLogs, File Releases
3582 @section Tagging Releases
3583
3584 @cindex tags
3585 @cindex Mercurial, tag
3586 @cindex version numbers
3587
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.
3590
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.
3596
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}.
3606
3607 The packages have independent release schedules, determined by the
3608 XEmacs package maintainer and the XEmacs Package Release Engineer.
3609
3610
3611 @node Creating Tarballs, Creating @value{XEMACSORG} Releases, Tagging Releases, File Releases
3612 @section Creating Tarballs
3613
3614 @cindex Creating Tarballs
3615 @cindex modules
3616 @cindex tarballs, naming
3617
3618
3619 @cindex tarballs, making
3620 @cindex tarballs, naming
3621 @cindex tags
3622 @cindex Mercurial, tags
3623 @cindex Makefile targets, dist
3624 @cindex version numbers
3625
3626 @strong{Write me!}
3627
3628 @node Creating @value{XEMACSORG} Releases, Updating the Tracker, Creating Tarballs, File Releases
3629 @section Creating @value{XEMACSORG} Releases
3630
3631 @cindex Creating @value{XEMACSORG} Releases
3632 @cindex releases
3633 @cindex tarballs, making
3634
3635 @strong{Write me!}
3636
3637 @node Updating the Tracker, Announce the Release, Creating @value{XEMACSORG} Releases, File Releases
3638 @section Updating the Tracker
3639
3640 @cindex Updating the Tracker
3641
3642 @strong{Write me!  (and install a Tracker!)}
3643
3644
3645 @node Announce the Release, Updating the Emacs Repository, Updating the Tracker, File Releases
3646 @section Announce the Release
3647
3648 @cindex Announce the Release
3649
3650 Now that the release is ready for download, announce it as described
3651 in @xref{News}.
3652
3653 @node Updating the Emacs Repository, Updating the Debian Package, Announce the Release, File Releases
3654 @section Updating the Emacs Repository
3655
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.}
3659
3660 @cindex Updating the Emacs Repository
3661 @cindex Emacs, updating
3662
3663 The Emacs repository is updated by the project
3664 admin.  Other developers may skip this section.
3665
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:
3669
3670 @enumerate
3671
3672 @item
3673 Obtain a
3674 @uref{https://savannah.gnu.org/account/register.php, Savannah login}.
3675
3676 @item
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}.
3679
3680 @item
3681 Follow the instructions given in
3682 @uref{https://savannah.gnu.org/cvs/?group=emacs, the CVS instructions}.
3683
3684 @end enumerate
3685
3686 @cindex emacs-devel
3687 @cindex mailing lists, emacs-devel
3688 @cindex mailman
3689
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.
3694
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
3698 case.
3699
3700 First, check out the Emacs source:
3701
3702 @example
3703     cvs -d $USER@@savannah.gnu.org:/cvsroot/emacs co emacs
3704 @end example
3705
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.
3711
3712 @cindex import-emacs
3713 @cindex Makefile targets, import-emacs
3714
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
3718 running:
3719
3720 @example
3721     make import-emacs
3722 @end example
3723
3724 @cindex EMACS_HOME
3725 @cindex environment variables, EMACS_HOME
3726 @cindex variables, EMACS_HOME
3727 @cindex install-emacs
3728 @cindex Makefile targets, install-emacs
3729
3730 Then install the sources with:
3731
3732 @example
3733     cd src
3734     make install-emacs
3735 @end example
3736
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}.
3740
3741 @cindex EMACS_HOME
3742 @cindex environment variables, EMACS_HOME
3743 @cindex variables, EMACS_HOME
3744 @cindex install-emacs
3745 @cindex Makefile targets, install-emacs
3746 @cindex ChangeLog
3747
3748 Next, install the documentation with:
3749
3750 @example
3751     cd doc
3752     make install-emacs
3753 @end example
3754
3755 This target copies @file{mh-e.texi} to @file{$EMACS_HOME/man}.
3756
3757 Update @code{$EMACS_HOME/etc/ChangeLog} and
3758 @code{$EMACS_HOME/man/ChangeLog}.  Simply cite the XEmacs release.  For
3759 example:
3760
3761 @example
3762     * NEWS, NEWS: Upgraded to XEmacs version 6.1.
3763 @end example
3764
3765 and
3766
3767 @example
3768     * mh-e.texi: Upgraded to XEmacs documentation version 1.3.
3769 @end example
3770
3771 Update @code{$EMACS_HOME/etc/NEWS} by adding text similar to the
3772 following:
3773
3774 @example
3775     * Changes in Emacs 21.4
3776
3777     ** XEmacs changes.
3778
3779     Upgraded to XEmacs version 6.1.  Upgraded to XEmacs manual version 1.3.
3780     See NEWS for details.
3781 @end example
3782
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.
3786
3787 Then check in the files like this:
3788
3789 @example
3790     cvs ci -m"Upgraded to XEmacs version 6.1.
3791               See etc/NEWS and lisp/mh-e/ChangeLog for details."
3792 @end example
3793
3794 @cindex emacs-devel
3795 @cindex mailing lists, emacs-devel
3796
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:
3800
3801 @example
3802     XEmacs 7.4.4 checked in
3803 @end example
3804
3805 The first paragraph should include the description on the
3806 @uref{https://sourceforge.net/projects/mh-e/, Summary} page, and the
3807 text:
3808
3809 @example
3810     Read on for more details.
3811 @end example
3812
3813 The second paragraph should contain:
3814
3815 @example
3816     Project home page at: http://mh-e.sourceforge.net/.
3817 @end example
3818
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}
3821 news item.
3822
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.
3826
3827
3828 @node Updating the Debian Package, Updating the XEmacs Package, Updating the Emacs Repository, File Releases
3829 @section Updating the Debian Package
3830
3831 @cindex Updating the Debian Package
3832 @cindex Debian Package, Updating
3833 @cindex Debian
3834
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.}
3838
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}
3844 is also useful.
3845
3846 @example
3847     apt-get install build-essential fakeroot debhelper texinfo dpkg-dev-el
3848 @end example
3849
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:
3852
3853 @example
3854     rm `find . -name "*~"`
3855     debian/rules source
3856 @end example
3857
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.
3866
3867 You can then create a Debian package by running:
3868
3869 @example
3870     fakeroot debian/rules binary
3871 @end example
3872
3873 This creates @file{../mh-e_7.0.+cvs-0_all.deb} which can be installed
3874 using standard Debian package management:
3875
3876 @example
3877     dpkg -i ../mh-e_7.0.+cvs-0_all.deb
3878 @end example
3879
3880 @node Updating the XEmacs Package, Updating the Online Documentation, Updating the Debian Package, File Releases
3881 @section Updating the XEmacs Package
3882
3883 @cindex Updating the XEmacs Package
3884 @cindex XEmacs Package, Updating
3885 @cindex XEmacs
3886
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.
3889
3890 The rest of this section needs to be completed.
3891
3892 @node Updating the Online Documentation, Updating the Free Software Directories, Updating the XEmacs Package, File Releases
3893 @section Updating the Online Documentation
3894
3895 @strong{Adrian, please review.}
3896
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
3902
3903 The entire XEmacs web site is kept in a Mercurial repo on Bitbucket,
3904 and automatically rebuilt by the commit trigger.
3905
3906 Thus, the basic procedure is similar to working on XEmacs source code.
3907
3908 @enumerate
3909 @item
3910 Check out the @samp{xemacsweb} module.
3911
3912 @item
3913 Make the needed changes.
3914
3915 @item
3916 Update the ChangeLog(s).
3917
3918 @item
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.
3922
3923 @item
3924 Commit and push the workspace.
3925 @end enumerate
3926
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.
3934
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.
3939
3940
3941
3942 @node Updating the Free Software Directories, After the Release, Updating the Online Documentation, File Releases
3943 @section Updating the Free Software Directories
3944
3945 @strong{Add FreshMeat, at least.}
3946
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.
3951
3952 @node After the Release,  , Updating the Free Software Directories, File Releases
3953 @section After the Release
3954
3955 @cindex After the Release
3956
3957 After the release is complete, add the string @code{+cvs} to the
3958 version number.  @xref{Updating Version Number}.
3959
3960 Then, define the next release.
3961
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.
3967
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.
3975
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.
3980
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
3985 when we're done.
3986
3987 @node News, Surveys, File Releases, Nodes borrowed from other projects not adapted to XEmacs
3988 @chapter News
3989
3990 @strong{Needs review.}
3991
3992 @cindex News
3993
3994 @cindex xemacs-announce
3995 @cindex mailing lists, xemacs-announce
3996 @cindex emacs-devel
3997 @cindex mailing lists, emacs-devel
3998
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.
4004
4005 The document
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.
4009
4010 In all cases, use the following template for the subject:
4011
4012 @example
4013     XEmacs m.n.p released
4014     XEmacs contributed software m.n.p released
4015     XEmacs manual m.n.p released
4016 @end example
4017
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:
4028
4029 @example
4030     Read on for more details.
4031 @end example
4032
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}.
4039
4040 For contrib and doc releases, use the ChangeLog entries since the last
4041 release.
4042
4043 Note that your news posting may be shown on the @value{XEMACSORG} front
4044 page, so discretion is advised.
4045
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
4049 text:
4050
4051 @example
4052     Project home page at: http://www.xemacs.org/.
4053 @end example
4054
4055 followed by the release notes.  However, the announcement for contrib
4056 and doc releases, which lack release notes, should be closer to the
4057 news item.
4058
4059 The Emacs announcement is described in @ref{Updating the Emacs
4060 Repository}.
4061
4062 @node Surveys, Free Software Directories, News, Nodes borrowed from other projects not adapted to XEmacs
4063 @chapter Surveys
4064
4065 @strong{Interesting.  Should we do this, maybe?}
4066
4067 @cindex Surveys
4068
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.
4074
4075 @node Free Software Directories, , Surveys, Nodes borrowed from other projects not adapted to XEmacs
4076 @chapter Free Software Directories
4077
4078 @cindex FSF/UNESCO Free Software Directory
4079 @cindex Free Software Directories
4080 @cindex Software Directories
4081
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.
4087
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
4090 entry is modified.
4091
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:
4095
4096 @example
4097 cvs -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/directory login
4098 cvs -z3 -d:pserver:anoncvs@@subversions.gnu.org:/cvsroot/directory co directory
4099 @end example
4100
4101 or CVS via SSH:
4102
4103 @example
4104 cvs -z3 -d <membername>@@subversions.gnu.org:/cvsroot/directory co directory
4105 @end example
4106
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}.
4111
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}.
4114
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}).
4124
4125 @c #### Nuke this, but check whether the topics below need discussion.
4126
4127 @c @node Miscellaneous Topics, Copying, Free Software Directories, Top
4128 @c @chapter Miscellaneous Topics
4129 @c 
4130 @c This section contains a few items that should probably be deleted, but
4131 @c are kept for completeness.
4132 @c 
4133 @c @menu
4134 @c * Task Manager::                
4135 @c * DocManager::                  
4136 @c * Public Forums::               
4137 @c * Anonymous FTP Space::         
4138 @c @end menu
4139
4140 @node Index,  , Nodes borrowed from other projects not adapted to XEmacs, Top
4141 @unnumbered Index
4142
4143 @printindex cp
4144
4145 @bye