aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
Diffstat (limited to 'admin')
-rw-r--r--admin/ChangeLog10
-rw-r--r--admin/FOR-RELEASE4
-rw-r--r--admin/admin.el3
-rw-r--r--admin/emacs-pretesters312
-rw-r--r--admin/make-tarball.txt8
5 files changed, 65 insertions, 272 deletions
diff --git a/admin/ChangeLog b/admin/ChangeLog
index 03f5e0ed066..d833ea77a5e 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,3 +1,13 @@
12005-06-10 Lute Kamstra <lute@gnu.org>
2
3 * admin.el (set-version): Set version in lisp manual too.
4 * make-tarball.txt: Commit lispref/elisp.texi too.
5
62005-06-04 Richard M. Stallman <rms@gnu.org>
7
8 * emacs-pretesters: Refer to etc/DEBUG instead of duplicating it.
9 Other cleanups.
10
12005-04-19 Lute Kamstra <lute@gnu.org> 112005-04-19 Lute Kamstra <lute@gnu.org>
2 12
3 * make-tarball.txt: Don't commit lisp/loaddefs.el. 13 * make-tarball.txt: Don't commit lisp/loaddefs.el.
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index 441c8fe4fa2..0d2b5d0ee0b 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -82,6 +82,8 @@ is encountered.
82 82
83** Finish updating the Emacs Lisp manual. 83** Finish updating the Emacs Lisp manual.
84 84
85*** Update lispref/README.
86
85** Update the Emacs manual. 87** Update the Emacs manual.
86 88
87*** Update man/info.texi. 89*** Update man/info.texi.
@@ -187,7 +189,7 @@ lispref/control.texi "Luc Teirlinck" Chong Yidong
187lispref/customize.texi Chong Yidong 189lispref/customize.texi Chong Yidong
188lispref/debugging.texi Joakim Verona <joakim@verona.se> Lute Kamstra 190lispref/debugging.texi Joakim Verona <joakim@verona.se> Lute Kamstra
189lispref/display.texi Chong Yidong 191lispref/display.texi Chong Yidong
190lispref/edebug.texi Chong Yidong 192lispref/edebug.texi Chong Yidong "Luc Teirlinck"
191lispref/elisp.texi "Luc Teirlinck" Lute Kamstra 193lispref/elisp.texi "Luc Teirlinck" Lute Kamstra
192lispref/errors.texi "Luc Teirlinck" 194lispref/errors.texi "Luc Teirlinck"
193lispref/eval.texi "Luc Teirlinck" Chong Yidong 195lispref/eval.texi "Luc Teirlinck" Chong Yidong
diff --git a/admin/admin.el b/admin/admin.el
index 44fbd8ed543..07a2bcb757e 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -84,6 +84,9 @@ Root must be the root of an Emacs source tree."
84 (submatch (1+ (in "0-9.")))))) 84 (submatch (1+ (in "0-9."))))))
85 (set-version-in-file root "man/emacs.texi" version 85 (set-version-in-file root "man/emacs.texi" version
86 (rx (and "EMACSVER" (1+ space) 86 (rx (and "EMACSVER" (1+ space)
87 (submatch (1+ (in "0-9."))))))
88 (set-version-in-file root "lispref/elisp.texi" version
89 (rx (and "EMACSVER" (1+ space)
87 (submatch (1+ (in "0-9."))))))) 90 (submatch (1+ (in "0-9.")))))))
88 91
89;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5 92;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5
diff --git a/admin/emacs-pretesters b/admin/emacs-pretesters
index 169c7ee466d..f7b17afd580 100644
--- a/admin/emacs-pretesters
+++ b/admin/emacs-pretesters
@@ -30,13 +30,13 @@ noise into long discussions or even arguments, and that can waste a
30lot of time. But when you have a reason to ask other pretesters for 30lot of time. But when you have a reason to ask other pretesters for
31help, you can do it that way. 31help, you can do it that way.
32 32
33* It is absolutely vital that you tell me about even the smallest 33* It is absolutely vital that you report even the smallest change or
34change or departure from the standard sources and procedure. 34departure from the standard sources and procedure.
35 35
36Otherwise, you are not testing the same program that I asked you to 36Otherwise, you are not testing the same program that we asked you to
37test. Testing a different program is usually of no use whatever. It 37test. Testing a different program is usually of no use whatever. It
38can even cause trouble if you fail to tell me that you tested some 38can even cause trouble, if you fail to tell us that you tested some
39other program instead of what I am about to release. I might think 39other program instead of what we are about to release. We might think
40that Emacs works, when in fact it has not even been tried, and might 40that Emacs works, when in fact it has not even been tried, and might
41have a glaring fault. 41have a glaring fault.
42 42
@@ -46,8 +46,8 @@ site would use it.
46 46
47Actually, it does no harm to test Emacs with such customizations *as 47Actually, it does no harm to test Emacs with such customizations *as
48well as* testing it "out of the box". Anything you do that could find 48well as* testing it "out of the box". Anything you do that could find
49a bug is useful, as long as you make sure I know exactly what you did. 49a bug is useful, as long as you make sure we know exactly what you
50The important point is that testing with local changes is no 50did. The important point is that testing with local changes is no
51substitute for testing Emacs exactly as it is distributed. 51substitute for testing Emacs exactly as it is distributed.
52 52
53* Even changing the compilation options counts as a change in the 53* Even changing the compilation options counts as a change in the
@@ -71,10 +71,10 @@ this is effectively changing Emacs. Because the crucial fact about
71the planned release is that, without changes, it doesn't work on that 71the planned release is that, without changes, it doesn't work on that
72machine. 72machine.
73 73
74To make Emacs work on that machine, I would need to install new 74To make Emacs work on that machine, we would need to install new
75configuration files. That is not out of the question, since it is 75configuration files. That is not out of the question, since it is
76safe--it certainly won't break any other machines that already work. 76safe--it certainly won't break any other machines that already work.
77But you will have to rush me the legal papers to give the FSF 77But you will have to rush in the legal papers to give the FSF
78permission to use such a large piece of text. 78permission to use such a large piece of text.
79 79
80* Look in the etc/MACHINES file. 80* Look in the etc/MACHINES file.
@@ -92,25 +92,25 @@ recommendations also, for the same reason.
92* Send your problem reports to emacs-pretest-bug@gnu.org, not 92* Send your problem reports to emacs-pretest-bug@gnu.org, not
93bug-gnu-emacs. 93bug-gnu-emacs.
94 94
95Sometimes I won't know what to do about a system-dependent issue, and 95Sometimes we won't know what to do about a system-dependent issue, and
96I may need people to tell me what happens if you try a certain thing 96we may need people to say what happens if you try a certain thing on a
97on a certain system. When this happens, I'll send out a query. 97certain system. When this happens, we'll send out a query.
98 98
99* Don't delay sending information. 99* Don't delay sending information.
100 100
101When you test on a system and encounter no problems, please tell me 101When you test on a system and encounter no problems, please report it
102about it right away. That way, I will know that someone has tested 102right away. That way, we will know that someone has tested Emacs on
103Emacs on that kind of system. 103that kind of system.
104 104
105Please don't wait for several days "to see if it really works before 105Please don't wait for several days "to see if it really works before
106you say anything." Tell me right away that Emacs seems basically to 106you say anything." Tell us right away that Emacs seems basically to
107work; then, if you notice a problem a few days later, tell me 107work; then, if you notice a problem a few days later, tell us
108immediately about that when you see it. 108immediately about that when you see it.
109 109
110It is okay if you double check things before reporting a problem, such 110It is okay if you double check things before reporting a problem, such
111as to see if you can easily fix it. But don't wait very long. A good 111as to see if you can easily fix it. But don't wait very long. A good
112rule to use in pretesting is always to tell me about every problem on 112rule to use in pretesting is always to report every problem on the
113the same day you encounter it, even if that means you can't find a 113same day you encounter it, even if that means you can't find a
114solution before you report the problem. 114solution before you report the problem.
115 115
116I'd much rather hear about a problem today and a solution tomorrow 116I'd much rather hear about a problem today and a solution tomorrow
@@ -123,20 +123,22 @@ else, then it will be necessary for anyone who wants to investigate
123the bug to find the other message. This may be difficult, it is 123the bug to find the other message. This may be difficult, it is
124probably time-consuming. 124probably time-consuming.
125 125
126To help me save time, simply copy the relevant parts of any previous 126To help save our time, simply copy the relevant parts of any previous
127messages into your own bug report. 127messages into your own bug report.
128 128
129In particular, if I ask you for more information because a bug report 129In particular, if we ask you for more information because a bug report
130was incomplete, it is best to send me the *entire* collection of 130was incomplete, it is best to send me the *entire* collection of
131relevant information, all together. If you send just the additional 131relevant information, all together. If you send just the additional
132information, that makes me do extra work. There is even a risk that 132information, that makes extra work for us. There is even a risk that
133I won't remember what question you are sending me the answer to. 133we won't remember what question you are sending the answer to.
134 134
135* When you encounter a bug that manifests itself as a Lisp error, 135* When you encounter a bug that manifests itself as a Lisp error,
136try setting debug-on-error to t and making the bug happen again. 136try setting debug-on-error to t and making the bug happen again.
137Then you will get a Lisp backtrace. Including that in your bug report 137Then you will get a Lisp backtrace. Including that in your bug report
138is very useful. 138is very useful.
139 139
140* For advice on debugging, see etc/DEBUG.
141
140* Debugging optimized code is possible, if you compile with GCC, but 142* Debugging optimized code is possible, if you compile with GCC, but
141in some cases the optimized code can be confusing. If you are not 143in some cases the optimized code can be confusing. If you are not
142accustomed to that, recompile Emacs without -O. One way to do this is 144accustomed to that, recompile Emacs without -O. One way to do this is
@@ -144,193 +146,6 @@ accustomed to that, recompile Emacs without -O. One way to do this is
144 make clean 146 make clean
145 make CFLAGS=-g 147 make CFLAGS=-g
146 148
147* If you use X windows, it is a good idea to run Emacs under GDB (or
148some other suitable debugger) *all the time*, at least while
149pretesting.
150
151Then, when Emacs crashes, you will be able to debug the live process,
152not just a core dump. The `pr' command defined in src/.gdbinit is very
153useful in this case for examining Lisp_Object values as they would
154appear in Lisp.
155
156If you can't use `pr' because Emacs has got a fault already, or
157because you have only a core dump, you can use `xtype' to look at the
158type of a value, and then choose one of the other commands `xsymbol',
159`xstring', `xcons', `xvector' and so on to examine the contents.
160
161I myself *always* run Emacs under GDB so that I can debug conveniently
162if the occasion arises.
163
164* To get Lisp-level backtrace information within GDB,
165look for stack frames that call Ffuncall. Select them one by one in GDB
166and type this:
167
168 p *args
169 pr
170
171This will print the name of the Lisp function called by that level
172of function calling.
173
174By printing the remaining elements of args, you can see the argument
175values. Here's how to print the first argument:
176
177 p args[1]
178 pr
179
180If you do not have a live process, you can use xtype and the other
181x... commands such as xsymbol to get such information, albeit less
182conveniently.
183
184* Even with a live process, these x... commands are useful for
185examining the fields in a buffer, window, process, frame or marker.
186Here's an example using concepts explained in the node "Value History"
187of the GDB manual to print the variable frame from this line in
188xmenu.c:
189
190 buf.frame_or_window = Fcons (frame, prefix);
191
192First, use these commands:
193
194 cd src
195 gdb emacs
196 b xmenu.c:1209
197 r -q
198
199Then type C-x 5 2 to create a new frame, and it hits the breakpoint:
200
201 (gdb) p frame
202 $1 = 1077872640
203 (gdb) xtype
204 Lisp_Vectorlike
205 PVEC_FRAME
206 (gdb) xframe
207 $2 = (struct frame *) 0x3f0800
208 (gdb) p *$
209 $3 = {
210 size = 536871989,
211 next = 0x366240,
212 name = 809661752,
213 [...]
214 }
215 (gdb) p $3->name
216 $4 = 809661752
217
218Now we can use `pr' to print the name of the frame:
219
220 (gdb) pr
221 "emacs@steenrod.math.nwu.edu"
222
223* The Emacs C code heavily uses macros defined in lisp.h. So suppose
224we want the address of the l-value expression near the bottom of
225`kbd_buffer_store_event' from keyboard.c:
226
227 XVECTOR (kbd_buffer_frame_or_window)->contents[kbd_store_ptr
228 - kbd_buffer]
229 = event->frame_or_window);
230
231XVECTOR is a macro, and therefore GDB does not know about it.
232GDB cannot evaluate p XVECTOR (kbd_buffer_frame_or_window).
233
234However, you can use the xvector command in GDB to get the same
235result. Here is how:
236
237 (gdb) p kbd_buffer_frame_or_window
238 $1 = 1078005760
239 (gdb) xvector
240 $2 = (struct Lisp_Vector *) 0x411000
241 0
242 (gdb) p $->contents[kbd_store_ptr - kbd_buffer]
243 $3 = 1077872640
244 (gdb) p &$
245 $4 = (int *) 0x411008
246
247* Here's a related example of macros and the GDB `define' command.
248There are many Lisp vectors such as `recent_keys', which contains the
249last 100 keystrokes. We can print this Lisp vector
250
251p recent_keys
252pr
253
254But this may be inconvenient, since `recent_keys' is much more verbose
255than `C-h l'. We might want to print only the last 10 elements of
256this vector. `recent_keys' is updated in keyboard.c by the command
257
258 XVECTOR (recent_keys)->contents[recent_keys_index] = c;
259
260So we define a GDB command `xvector-elts', so the last 10 keystrokes
261are printed by
262
263 xvector-elts recent_keys recent_keys_index 10
264
265where you can define xvector-elts as follows:
266
267 define xvector-elts
268 set $i = 0
269 p $arg0
270 xvector
271 set $foo = $
272 while $i < $arg2
273 p $foo->contents[$arg1-($i++)]
274 pr
275 end
276 document xvector-elts
277 Prints a range of elements of a Lisp vector.
278 xvector-elts v n i
279 prints `i' elements of the vector `v' ending at the index `n'.
280 end
281
282* To debug what happens while preloading and dumping Emacs,
283do `gdb temacs' and start it with `r -batch -l loadup dump'.
284
285If temacs actually succeeds when running under GDB in this way, do not
286try to run the dumped Emacs, because it was dumped with the GDB
287breakpoints in it.
288
289* If you encounter X protocol errors, try evaluating (x-synchronize t).
290That puts Emacs into synchronous mode, where each Xlib call checks for
291errors before it returns. This mode is much slower, but when you get
292an error, you will see exactly which call really caused the error.
293
294* If the symptom of the bug is that Emacs fails to respond, don't
295assume Emacs is `hung'--it may instead be in an infinite loop. To
296find out which, make the problem happen under GDB and stop Emacs once
297it is not responding. (If Emacs is using X Windows directly, you can
298stop Emacs by typing C-z at the GDB job.) Then try stepping with
299`step'. If Emacs is hung, the `step' command won't return. If it is
300looping, `step' will return.
301
302If this shows Emacs is hung in a system call, stop it again and
303examine the arguments of the call. In your bug report, state exactly
304where in the source the system call is, and what the arguments are.
305
306If Emacs is in an infinite loop, please determine where the loop
307starts and ends. The easiest way to do this is to use the GDB command
308`finish'. Each time you use it, Emacs resumes execution until it
309exits one stack frame. Keep typing `finish' until it doesn't
310return--that means the infinite loop is in the stack frame which you
311just tried to finish.
312
313Stop Emacs again, and use `finish' repeatedly again until you get back
314to that frame. Then use `next' to step through that frame. By
315stepping, you will see where the loop starts and ends. Also please
316examine the data being used in the loop and try to determine why the
317loop does not exit when it should. Include all of this information in
318your bug report.
319
320* If certain operations in Emacs are slower than they used to be, here
321is some advice for how to find out why.
322
323Stop Emacs repeatedly during the slow operation, and make a backtrace
324each time. Compare the backtraces looking for a pattern--a specific
325function that shows up more often than you'd expect.
326
327If you don't see a pattern in the C backtraces, get some Lisp
328backtrace information by looking at Ffuncall frames (see above), and
329again look for a pattern.
330
331When using X, you can stop Emacs at any time by typing C-z at GDB.
332When not using X, you can do this with C-g.
333
334* Configure tries to figure out what kind of system you have by 149* Configure tries to figure out what kind of system you have by
335compiling and linking programs which calls various functions and looks 150compiling and linking programs which calls various functions and looks
336at whether that succeeds. The file config.log contains any messages 151at whether that succeeds. The file config.log contains any messages
@@ -344,6 +159,9 @@ or more simply,
344rm config.cache 159rm config.cache
345./configure 160./configure
346 161
162* Don't try changing Emacs *in any way* during pretest unless it fails
163to work unchanged.
164
347* Always be precise when talking about changes you have made. Show 165* Always be precise when talking about changes you have made. Show
348things rather than describing them. Use exact filenames (relative to 166things rather than describing them. Use exact filenames (relative to
349the main directory of the distribution), not partial ones. For 167the main directory of the distribution), not partial ones. For
@@ -352,27 +170,27 @@ makefile". Instead of saying "I defined the MUMBLE macro", send a
352diff. 170diff.
353 171
354* Always use `diff -c' to make diffs. If you don't include context, it 172* Always use `diff -c' to make diffs. If you don't include context, it
355may be hard for me to figure out where you propose to make the 173may be hard for us to figure out where you propose to make the
356changes. So I might have to ignore your patch. 174changes. So we might ignore your patch.
357 175
358* When you write a fix, keep in mind that I can't install a change 176* When you write a fix, keep in mind that we can't install a change
359that *might* break other systems without the risk that it will fail to 177that *might* break other systems without the risk that it will fail to
360work and therefore require an additional cycle of pretesting. 178work and therefore require an additional cycle of pretesting.
361 179
362People often suggest fixing a problem by changing config.h or 180People often suggest fixing a problem by changing config.h or
363src/ymakefile or even src/Makefile to do something special that a 181src/ymakefile or even src/Makefile to do something special that a
364particular system needs. Sometimes it is totally obvious that such 182particular system needs. Sometimes it is totally obvious that such
365changes would break Emacs for almost all users. I can't possibly make 183changes would break Emacs for almost all users. We can't possibly
366a change like that. All I can do is send it back to you and ask you 184make a change like that. All we can do is ask you to find a fix that
367to find a fix that is safe to install. 185is safe to install.
368 186
369Sometimes people send fixes that *might* be an improvement in 187Sometimes people send fixes that *might* be an improvement in
370general--but it is hard to be sure of this. I can install such 188general--but it is hard to be sure of this. I can install such
371changes some of the time, but not during pretest, when I am trying to 189changes some of the time, but not during pretest, when I am trying to
372get a new version to work reliably as quickly as possible. 190get a new version to work reliably as quickly as possible.
373 191
374The safest changes for me to install are changes to the s- and m- 192The safest changes for us to install are changes to the s- and m-
375files. At least I know those can't affect most systems. 193files. At least those can't break other systems.
376 194
377Another safe kind of change is one that uses a conditional to make 195Another safe kind of change is one that uses a conditional to make
378sure it will apply only to a particular kind of system. Ordinarily, 196sure it will apply only to a particular kind of system. Ordinarily,
@@ -380,60 +198,20 @@ that is a bad way to solve a problem, and I would want to find a
380cleaner alternative. But the virtue of safety can make it superior at 198cleaner alternative. But the virtue of safety can make it superior at
381pretest time. 199pretest time.
382 200
383* Don't try changing Emacs *in any way* unless it fails to work unchanged. 201* Don't suggest changes during pretest to add features or make
384 202something cleaner. Every change risks introducing a bug, so I won't
385* Don't even suggest changes to add features or make something 203install a change during pretest unless it is *necessary*.
386cleaner. Every change I install could introduce a bug, so I won't
387install a change during pretest unless I see it is *necessary*.
388 204
389* If you would like to suggest changes for purposes other than fixing 205* If you would like to suggest changes for purposes other than fixing
390user-visible bugs, don't wait till pretest time. Instead, send them 206user-visible bugs, don't wait till pretest time. Instead, send them
391after I have made a release that proves to be stable. Then I can give 207after we have made a release that proves to be stable. That is the
392your suggestions proper consideration. If you send them at pretest 208easiest time to consider such suggestions. If you send them at
393time, I will have to defer them till later, and that might mean I 209pretest time, we will have to defer them till later, and that might
394forget all about them. 210mean we forget all about them.
395 211
396* In some cases, if you don't follow these guidelines, your 212* In some cases, if you don't follow these guidelines, your
397information might still be useful, but I might have to do more work to 213information might still be useful, but we would have to do more work
398make use of it. Unfortunately, I am so far behind in my work that I 214to make use of it. That might cause it to fall by the wayside.
399just can't keep up unless you help me to do it efficiently.
400
401Some suggestions for debugging on MS Windows:
402
403 Marc Fleischeuers, Geoff Voelker and Andrew Innes
404
405To debug emacs with Microsoft Visual C++, you either start emacs from
406the debugger or attach the debugger to a running emacs process. To
407start emacs from the debugger, you can use the file bin/debug.bat. The
408Microsoft Developer studio will start and under Project, Settings,
409Debug, General you can set the command-line arguments and emacs'
410startup directory. Set breakpoints (Edit, Breakpoints) at Fsignal and
411other functions that you want to examine. Run the program (Build,
412Start debug). Emacs will start and the debugger will take control as
413soon as a breakpoint is hit.
414
415You can also attach the debugger to an already running emacs process.
416To do this, start up the Microsoft Developer studio and select Build,
417Start debug, Attach to process. Choose the emacs process from the
418list. Send a break to the running process (Debug, Break) and you will
419find that execution is halted somewhere in user32.dll. Open the stack
420trace window and go up the stack to w32_msg_pump. Now you can set
421breakpoints in emacs (Edit, Breakpoints). Continue the running emacs
422process (Debug, Step out) and control will return to emacs, until a
423breakpoint is hit.
424
425To examine the contents of a lisp variable, you can use the function
426'debug_print'. Right-click on a variable, select QuickWatch, and
427place 'debug_print(' and ')' around the expression. Press
428'Recalculate' and the output is sent to the 'Debug' pane in the Output
429window. If emacs was started from the debugger, a console window was
430opened at emacs' startup; this console window also shows the output of
431'debug_print'. It is also possible to keep appropriately masked and
432typecast lisp symbols in the Watch window, this is more convenient
433when steeping though the code. For instance, on entering
434apply_lambda, you can watch (struct Lisp_Symbol *) (0xfffffff &
435args[0]).
436
437 215
438Local Variables: 216Local Variables:
439mode: text 217mode: text
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 4ca4a21feab..10fca7e84ac 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -22,10 +22,10 @@ For each step, check for possible errors.
225. rm configure; make bootstrap 225. rm configure; make bootstrap
23 23
246. Commit configure, README, AUTHORS, lisp/cus-load.el, 246. Commit configure, README, AUTHORS, lisp/cus-load.el,
25 lisp/finder-inf.el, lisp/version.el, man/emacs.texi. 25 lisp/finder-inf.el, lisp/version.el, man/emacs.texi,
26 Copy lisp/loaddefs.el to lisp/ldefs-boot.el and commit 26 lispref/elisp.texi. Copy lisp/loaddefs.el to lisp/ldefs-boot.el
27 lisp/ldefs-boot.el. For a release, also commit the ChangeLog 27 and commit lisp/ldefs-boot.el. For a release, also commit the
28 files in all directories. 28 ChangeLog files in all directories.
29 29
307. make-dist --snapshot. Check the contents of the new tar with 307. make-dist --snapshot. Check the contents of the new tar with
31 admin/diff-tar-files against an older tar file. Some old pretest 31 admin/diff-tar-files against an older tar file. Some old pretest