Mercurial > hg > xemacs-beta
comparison man/emodules.texi @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 8de8e3f6228a |
comparison
equal
deleted
inserted
replaced
427:0a0253eac470 | 428:3ecd8885ac67 |
---|---|
1 \input texinfo @c -*-texinfo-*- | |
2 | |
3 @c %**start of header | |
4 @setfilename ../info/emodules.info | |
5 @settitle Extending Emacs using C Modules | |
6 @c %**end of header | |
7 | |
8 @c | |
9 @c Use some macros so that we can format for either XEmacs | |
10 @c or (shudder) GNU Emacs. | |
11 @c | |
12 | |
13 @ifset XEMACS | |
14 @set emacs XEmacs | |
15 @clear EMACS | |
16 @set HAVE-EMACS | |
17 @end ifset | |
18 | |
19 @ifset EMACS | |
20 @set emacs Emacs | |
21 @clear XEMACS | |
22 @set HAVE-EMACS | |
23 @end ifset | |
24 | |
25 @ifclear HAVE-EMACS | |
26 @set XEMACS | |
27 @set emacs XEmacs | |
28 @end ifclear | |
29 | |
30 @ifinfo | |
31 This file documents the module loading technology of @value{emacs}. | |
32 | |
33 Copyright @copyright{} 1998 J. Kean Johnston. | |
34 | |
35 Permission is granted to make and distribute verbatim copies of this | |
36 manual provided the copyright notice and this permission notice are | |
37 preserved on all copies. | |
38 | |
39 @ignore | |
40 Permission is granted to process this file through TeX and print the | |
41 results, provided the printed document carries copying permission notice | |
42 identical to this one except for the removal of this paragraph (this | |
43 paragraph not being relevant to the printed manual). | |
44 | |
45 @end ignore | |
46 Permission is granted to copy and distribute modified versions of this | |
47 manual under the conditions for verbatim copying, provided that the | |
48 entire resulting derived work is distributed under the terms of a | |
49 permission notice identical to this one. | |
50 | |
51 Permission is granted to copy and distribute translations of this manual | |
52 into another language, under the above conditions for modified versions, | |
53 except that this permission notice may be stated in a translation | |
54 approved by the Foundation. | |
55 | |
56 Permission is granted to copy and distribute modified versions of this | |
57 manual under the conditions for verbatim copying, provided also that the | |
58 section entitled ``GNU General Public License'' is included exactly as | |
59 in the original, and provided that the entire resulting derived work is | |
60 distributed under the terms of a permission notice identical to this | |
61 one. | |
62 | |
63 Permission is granted to copy and distribute translations of this manual | |
64 into another language, under the above conditions for modified versions, | |
65 except that the section entitled ``GNU General Public License'' may be | |
66 included in a translation approved by the Free Software Foundation | |
67 instead of in the original English. | |
68 @end ifinfo | |
69 | |
70 @c Combine indices. | |
71 @syncodeindex fn cp | |
72 @syncodeindex vr cp | |
73 @syncodeindex ky cp | |
74 @syncodeindex pg cp | |
75 @syncodeindex tp cp | |
76 | |
77 @setchapternewpage odd | |
78 @finalout | |
79 | |
80 @titlepage | |
81 @title Extending @value{emacs} using C and C++ | |
82 @subtitle Version 1.0, September 1998 | |
83 | |
84 @author J. Kean Johnston | |
85 @page | |
86 @vskip 0pt plus 1fill | |
87 | |
88 @noindent | |
89 Copyright @copyright{} 1998 J. Kean Johnston. @* | |
90 | |
91 @sp 2 | |
92 Version 1.0 @* | |
93 September, 1998.@* | |
94 | |
95 Permission is granted to make and distribute verbatim copies of this | |
96 manual provided the copyright notice and this permission notice are | |
97 preserved on all copies. | |
98 | |
99 Permission is granted to copy and distribute modified versions of this | |
100 manual under the conditions for verbatim copying, provided also that the | |
101 section entitled ``GNU General Public License'' is included | |
102 exactly as in the original, and provided that the entire resulting | |
103 derived work is distributed under the terms of a permission notice | |
104 identical to this one. | |
105 | |
106 Permission is granted to copy and distribute translations of this manual | |
107 into another language, under the above conditions for modified versions, | |
108 except that the section entitled ``GNU General Public License'' may be | |
109 included in a translation approved by the Free Software Foundation | |
110 instead of in the original English. | |
111 @end titlepage | |
112 @page | |
113 | |
114 @ifinfo | |
115 @node Top, Introduction, (dir), (dir) | |
116 This Info file contains v1.0 of the @value{emacs} dynamic loadable module | |
117 support documentation. | |
118 @menu | |
119 * Introduction:: Introducing Emacs Modules | |
120 * Annatomy of a Module:: Basic module layout and technology | |
121 * Using ellcc:: How to use the module compiler | |
122 * Defining Functions:: Creating new Lisp primitives | |
123 * Defining Variables:: Creating new Lisp variables | |
124 * Index:: Concept Index | |
125 | |
126 --- The Detailed Node Listing --- | |
127 | |
128 Annatomy of a Module | |
129 | |
130 * Required Header File:: Always include <emodules.h> | |
131 * Required Functions:: Functions you must always provide | |
132 * Required Variables:: Variables whose values you must provide | |
133 * Loading other Modules:: How to load dependant modules | |
134 | |
135 Using @code{ellcc} | |
136 | |
137 * Compile Mode:: Compiling modules using ellcc | |
138 * Initialization Mode:: Generating documentation and variables | |
139 * Link Mode:: Creating the final loadable module | |
140 * Other ellcc options:: Other useful options | |
141 * Environment Variables:: How to control ellcc | |
142 | |
143 Defining Functions | |
144 | |
145 * Using DEFUN:: Using the DEFUN macro to define functions | |
146 * Declaring Functions:: Declaring functions to the Lisp reader | |
147 @end menu | |
148 | |
149 @end ifinfo | |
150 | |
151 @node Introduction, Annatomy of a Module, Top, Top | |
152 @chapter Introduction | |
153 | |
154 @value{emacs} is a powerful, extensible editor. The traditional way of | |
155 extending the functionality of @value{emacs} is to use its built-in Lisp | |
156 language (called Emacs Lisp, or Elisp for short). However, while Elisp | |
157 is a full programming language and capable of extending @value{emacs} in more | |
158 ways than you can imagine, it does have its short-comings. | |
159 | |
160 Firstly, Elisp is an interpreted language, and this has serious speed | |
161 implications. Like all other interpreted languages (like Java), Elisp | |
162 is often suitable only for certain types of application or extension. | |
163 So although Elisp is a general purpose language, and very ligh level, | |
164 there are times when it is desirable to descend to a lower level compiled | |
165 language for speed purposes. | |
166 | |
167 Secondly, Elisp (or Lisp in general) is not a very common language any | |
168 more, except for certain circles in the computer industry. C is a far | |
169 more commonly known language, and because it is compiled, more suited to | |
170 a wider range of applications, especially those that require low level | |
171 access to a system or need to be as quick as possible. | |
172 | |
173 @cindex Emacs Modules | |
174 @cindex DLL | |
175 @cindex DSO | |
176 @cindex shared object | |
177 This manual describes a new way of extending @value{emacs}, by using dynamic | |
178 loadable modules (also knows as dynamicaly loadable libraries (DLLs), | |
179 dynamic shared objects (DSOs) or just simply shared objectcs), which can | |
180 be written in C or C++ and loaded into @value{emacs} at any time. I sometimes | |
181 refer to this technology as @dfn{CEmacs}, which is short for @dfn{C | |
182 Extensible Emacs}. | |
183 | |
184 @value{emacs} modules are configured into and installed with @value{emacs} by | |
185 default on all systems that support loading of shared objects. From a | |
186 users perspective, the internals of @value{emacs} modules are irrelevant. | |
187 All a user will ever need to know about shared objects is the name of | |
188 the shared object when they want to load a given module. From a | |
189 developers perspective though, a lot more is provided. | |
190 | |
191 @itemize @bullet | |
192 @item | |
193 @pindex ellcc | |
194 @cindex compiler | |
195 @cindex linker | |
196 Of primary interest is the @code{ellcc} program. This program is | |
197 created during compile time, and is intended to abstract compiler | |
198 specific characteristics from the developer. This program is called to | |
199 compile and link all objects that will make up the final shared object, | |
200 and accepts all common C compiler flags. @code{ellcc} also sets up the | |
201 correct environment for compiling modules by enabling any special | |
202 compiler modes (such as PIC mode), setting the correct include paths for | |
203 the location of @value{emacs} internal header files etc. The program will also | |
204 invoke the linker correctly to created the final shared object which is | |
205 loaded into @value{emacs}. | |
206 | |
207 @item | |
208 @cindex header files | |
209 CEmacs also makes all of the relevant @value{emacs} internal header files | |
210 availible for module authors to use. This is often required to get data | |
211 structure definitions and external variable declarations. The header | |
212 files installed include the module specific header file | |
213 @file{emodules.h}. Due to the nature of dynamic modules, most of the | |
214 internals of @value{emacs} are exposed. | |
215 @xref{Top,,,internals,@value{emacs} Internals Manual}, for a | |
216 more complete discussion on how to extend and understand @value{emacs}. All of | |
217 the rules for C modules are discussed there. | |
218 | |
219 @item | |
220 @cindex samples | |
221 Part of the @value{emacs} distribution is a set of sample modules. These are | |
222 not installed when @value{emacs} is, but remain in the @value{emacs} source tree. | |
223 These modules live in the directory @file{modules}, which is a | |
224 sub-directory of the main @value{emacs} source code directory. Please look at | |
225 the samples carefully, and maybe even use them as a basis for making | |
226 your own modules. Most of the concepts required for writing extension | |
227 modules are covered in the samples. | |
228 | |
229 @item | |
230 @cindex documentation | |
231 @cindex help | |
232 Last, but not least is this manual. This can be viewed from within | |
233 @value{emacs}, and it can be printed out as well. It is the intention of this | |
234 document that it will describe everything you need to know about | |
235 extending @value{emacs} in C. If you do not find this to be the case, please | |
236 contact the author(s). | |
237 @end itemize | |
238 | |
239 The rest of this document will discuss the actual mechanics of | |
240 @value{emacs} modules and work through several of the samples. Please be | |
241 sure that you have read the @value{emacs} Internals Manual and understand | |
242 everything in it. The concepts there apply to all modules. This | |
243 document may have some overlap, but it is the internals manual which | |
244 should be considered the final authority. It will also help a great | |
245 deal to look at the actual @value{emacs} source code to see how things are | |
246 done. | |
247 | |
248 @node Annatomy of a Module, Using ellcc, Introduction, Top | |
249 @chapter Annatomy of a Module | |
250 @cindex annatomy | |
251 @cindex module skeleton | |
252 @cindex skeleton, module | |
253 @cindex module format | |
254 @cindex format, module | |
255 | |
256 Each dynamically loadable @value{emacs} extension (hereafter refered to as a | |
257 module) has a certain compulsory format, and must contain several | |
258 pieces of information and several mandatory functions. This chapter | |
259 describes the basic layout of a module, and provides a very simple | |
260 sample. The source for this sample can be found in the file | |
261 @file{modules/simple/sample.c} in the main @value{emacs} source code tree. | |
262 | |
263 @menu | |
264 * Required Header File:: Always include <emodules.h> | |
265 * Required Functions:: Functions you must always provide | |
266 * Required Variables:: Variables whose values you must provide | |
267 * Loading other Modules:: How to load dependant modules | |
268 @end menu | |
269 | |
270 @node Required Header File, Required Functions, Annatomy of a Module, Annatomy of a Module | |
271 @section Required Header File | |
272 @cindex required header | |
273 @cindex include files | |
274 | |
275 @cindex emodules.h | |
276 @cindex config.h | |
277 Every module must include the file @file{<emodules.h>}. This | |
278 will include several other @value{emacs} internal header files, and will set up | |
279 certain vital macros. One of the most important files included by | |
280 @file{emodules.h} is the generated @file{config.h} file, which contains | |
281 all of the required system abstraction macros and definitions. Most | |
282 modules will probably require some pre-processor conditionals based on | |
283 constants defined in @file{config.h}. Please read that file to | |
284 familiarize yourself with the macros defined there. | |
285 | |
286 Depending on exactly what your module will be doing, you will probably | |
287 need to include one or more of the @value{emacs} internal header files. When | |
288 you @code{#include <emodules.h>}, you will get a few of the most important | |
289 @value{emacs} header files included automatically for you. The files included | |
290 are: | |
291 | |
292 @table @file | |
293 @item lisp.h | |
294 This file contains most of the macros required for declaring Lisp object | |
295 types, macros for accessing Lisp objects, and global variable | |
296 declarations. | |
297 | |
298 @item sysdep.h | |
299 All system dependant declarations and abstraction macros live here. You | |
300 should never call low level system functions directly. Rather, you | |
301 should use the abstraction macros provided in this header file. | |
302 | |
303 @item window.h | |
304 This header file defines the window structures and Lisp types, and | |
305 provides functions and macros for manipulating multiple @value{emacs} windows. | |
306 | |
307 @item buffer.h | |
308 All macros and function declarations for manipulating internal and user | |
309 visible buffers appear in this file. | |
310 | |
311 @item insdel.h | |
312 This header provides the information required for performing text | |
313 insertion and deletion. | |
314 | |
315 @item frame.h | |
316 Provides the required structure, macro and function definitions for | |
317 manipulating @value{emacs} frames. | |
318 @end table | |
319 | |
320 @node Required Functions, Required Variables, Required Header File, Annatomy of a Module | |
321 @section Required Functions | |
322 @cindex initialization | |
323 @cindex functions, required | |
324 @cindex required functions | |
325 | |
326 Every module requires several initialization functions. It is the | |
327 responsibility of these functions to load in any dependant modules, and to | |
328 declare all variables and functions which are to be made visibile to the | |
329 @value{emacs} Lisp reader. Each of these functions performs a very specific | |
330 task, and they are executed in the correct order by @value{emacs}. All of | |
331 these functions are @code{void} functions which take no arguments. | |
332 Here, briefly, are the required module functions. Note that the actual | |
333 function names do not end with the string @code{_module}, but rather | |
334 they end with the abbreviated module name by which the module is known. | |
335 More on the module name and its importance later. Just bear in mind | |
336 that the text @code{_module} in the functions below is simply a | |
337 place-holder, not an actual function name. | |
338 | |
339 @table @code | |
340 @item syms_of_module | |
341 @findex syms_of_module | |
342 This required function is responsible for introducing to the Lisp reader | |
343 all functions that you have defined in your module using | |
344 @code{DEFUN()}. Note that @emph{only} functions are declared here, using | |
345 the @code{DEFSUBR()} macro. No variables are declared. | |
346 | |
347 @item vars_of_module | |
348 @findex vars_of_module | |
349 This required function contains calls to macros such as | |
350 @code{DEFVAR_LISP()}, @code{DEFVAR_BOOL()} etc, and its purpose is to | |
351 declare and initialize all and any variables that your module defines. | |
352 They syntax for declaring variables is identical to the syntax used for | |
353 all internal @value{emacs} source code. | |
354 | |
355 @item modules_of_module | |
356 @findex modules_of_module | |
357 This optional function should be used to load in any modules which your | |
358 module depends on. The @value{emacs} module loading code makes sure that the | |
359 same module is not loaded twice, so several modules can safely call the | |
360 module load function for the same module. Only one copy of each module | |
361 (at a given version) will ever be loaded. | |
362 | |
363 @item docs_of_module | |
364 @findex docs_of_module | |
365 This is a required function, but not one which you need ever write. | |
366 This function is created automatically by @code{ellcc} when the module | |
367 initialization code is produced. It is required to document all | |
368 functions and variables declared in your module. | |
369 @end table | |
370 | |
371 @node Required Variables, Loading other Modules, Required Functions, Annatomy of a Module | |
372 @section Required Variables | |
373 @cindex initialization | |
374 @cindex variables, required | |
375 @cindex required variables | |
376 | |
377 Not only does a module need to declare the initialization functions | |
378 mentioned above, it is also required to provide certain variables which | |
379 the module loading code searches for in order to determine the viability | |
380 of a module. You are @emph{not} required to provide these variables in | |
381 your source files. They are automatically set up in the module | |
382 initialization file by the @code{ellcc} compiler. These variables are | |
383 discussed here simply for the sake of completeness. | |
384 | |
385 @table @code | |
386 @item emodules_compiler | |
387 This is a variable of type @code{long}, and is used to indicate the | |
388 version of the @value{emacs} loading technology that was used to produce the | |
389 module being loaded. This version number is completely unrelated to | |
390 the @value{emacs} version number, as a given module may quite well work | |
391 regardless of the version of @value{emacs} that was installed at the time the | |
392 module was created. | |
393 | |
394 The @value{emacs} modules version is used to differentiate between major | |
395 changes in the module loading technology, not versions of @value{emacs}. | |
396 | |
397 @item emodules_name | |
398 This is a short (typically 10 characters or less) name for the module, | |
399 and it is used as a suffix for all of the required functions. This is | |
400 also the name by which the module is recognised when loading dependant | |
401 modules. The name does not necessarily have to be the same as the | |
402 physical file name, although keeping the two names in sync is a pretty | |
403 good idea. The name must not be empty, and it must be a valid part of a | |
404 C function name. The value of this variable is appended to the function | |
405 names @code{syms_of_}, @code{vars_of_}, @code{modules_of_} and | |
406 @code{docs_of_} to form the actual function names that the module | |
407 loading code looks for when loading a module. | |
408 | |
409 This variable is set by the @code{--mod-name} argument to @code{ellcc}. | |
410 | |
411 @item emodules_version | |
412 This string variable is used to load specific versions of a module. | |
413 Rarely will two or more versions of a module be left lying around, but | |
414 just in case this does happen, this variable can be used to control | |
415 exactly which module should be loaded. See the Lisp function | |
416 @code{load-module} for more details. This variable is set by the | |
417 @code{--mod-version} argument to @code{ellcc}. | |
418 | |
419 @item emodules_title | |
420 This is a string which describes the module, and can contain spaces or | |
421 other special characters. It is used solely for descriptive purposes, | |
422 and does not affect the loading of the module. The value is set by the | |
423 @code{--mod-title} argument to @code{ellcc}. | |
424 @end table | |
425 | |
426 @node Loading other Modules, , Required Variables, Annatomy of a Module | |
427 @section Loading other Modules | |
428 @cindex dependancies | |
429 @findex modules_of_module | |
430 @findex emodules_load | |
431 | |
432 During the loading of a module, it is the responsibility of the function | |
433 @code{modules_of_module} to load in any modules which the current module | |
434 depends on. If the module is stand-alone, and does not depend on other | |
435 modules, then this function can be left empty or even undeclared. | |
436 However, if it does have dependnacies, it must call | |
437 @code{emodules_load}: | |
438 | |
439 @example | |
440 @cartouche | |
441 int emodules_load (CONST char *module, | |
442 CONST char *modname, | |
443 CONST char *modver) | |
444 @end cartouche | |
445 @end example | |
446 | |
447 The first argument @var{module} is the name of the actual shared object | |
448 or DLL. You can omit the @file{.so}, @file{.ell} or @file{.dll} | |
449 extension of you wish. If you do not specify an absolute path name, | |
450 then the same rules as apply to loading Lisp modules are applied when | |
451 searching for the module. If the module cannot be found in any of the | |
452 standard places, and an absolute path name was not specified, | |
453 @code{emodules_load} will signal an error and loading of the module | |
454 will stop. | |
455 | |
456 The second argument (@var{modname}) is the module name to load, and | |
457 must match the contents of the variable @var{emodule_name} in the | |
458 module to be loaded. A mis-match will cause the module load to fail. If | |
459 this parameter is @code{NULL} or empty, then no checks are performed | |
460 against the target module's @var{emodule_name} variable. | |
461 | |
462 The last argument, @var{modver}, is the desired version of the module | |
463 to load, and is compared to the target module's | |
464 @var{emodule_version} value. If this parameter is not @code{NULL} | |
465 or empty, and the match fails, then the load of the module will fail. | |
466 | |
467 @code{emodules_load} can be called recursively. If, at any point | |
468 during the loading of modules a failure is encountered, then all modules | |
469 that were loaded since the top level call to @code{emodules_load} | |
470 will be unloaded. This means that if any child modules fail to load, | |
471 then their parents will also fail to load. This does not include | |
472 previous successful calls to @code{emodules_load} at the top level. | |
473 | |
474 @node Using ellcc, Defining Functions, Annatomy of a Module, Top | |
475 @chapter Using @code{ellcc} | |
476 @cindex @code{ellcc} | |
477 @cindex module compiler | |
478 | |
479 Before discussing the anatomy of a module in greater detail, you should | |
480 be aware of the steps required in order to correctly compile and link a | |
481 module for use within @value{emacs}. There is little difference between | |
482 compiling normal C code and compiling a module. In fact, all that | |
483 changes is the command used to compile the module, and a few extra | |
484 arguments to the compiler. | |
485 | |
486 @value{emacs} now ships with a new user utility, called @code{ellcc}. This | |
487 is the @dfn{Emacs Loadable Library C Compiler}. This is a wrapper | |
488 program that will invoke the real C compiler with the correct arguments | |
489 to compile and link your module. With the exception of a few command | |
490 line options, this program can be considered a replacement for your C | |
491 compiler. It accepts all of the same flags and arguments that your C | |
492 compiler does, so in many cases you can simply set the @code{make} | |
493 variable @code{CC} to @code{ellcc} and your code will be compiled as | |
494 an Emacs module rather than a static C object. | |
495 | |
496 @code{ellcc} has three distinct modes of operation. It can be run in | |
497 compile, link or initialization mode. These modes are discussed in more | |
498 detail below. If you want @code{ellcc} to show the commands it is | |
499 executing, you can specify the option @code{--mode=verbose} to | |
500 @code{ellcc}. Specifying this option twice will enable certain extra | |
501 debugging messages to be displayed on the standard output. | |
502 | |
503 @menu | |
504 * Compile Mode:: Compiling modules using ellcc | |
505 * Initialization Mode:: Generating documentation and variables | |
506 * Link Mode:: Creating the final loadable module | |
507 * Other ellcc options:: Other useful options | |
508 * Environment Variables:: How to control ellcc | |
509 @end menu | |
510 | |
511 @node Compile Mode, Initialization Mode, Using ellcc, Using ellcc | |
512 @section Compile Mode | |
513 @cindex compiling | |
514 | |
515 By default, @code{ellcc} is in @dfn{compile} mode. This means that it | |
516 assumes that all of the command line arguments are C compiler arguments, | |
517 and that you want to compile the specified source file or files. You | |
518 can force compile mode by specifying the @code{--mode=compile} argument | |
519 to @code{ellcc}. | |
520 | |
521 In this mode, @code{ellcc} is simply a front-end to the same C compiler | |
522 that was used to create the @value{emacs} binary itself. All @code{ellcc} | |
523 does in this mode is insert a few extra command line arguments before | |
524 the arguments you specify to @code{ellcc} itself. @code{ellcc} will | |
525 then invoke the C compiler to compile your module, and will return the | |
526 same exit codes and messages that your C compiler does. | |
527 | |
528 By far the easiest way to compile modules is to construct a | |
529 @file{Makefile} as you would for a normal program, and simply insert, at | |
530 some appropriate place something similar to: | |
531 | |
532 @example | |
533 @cartouche | |
534 CC=ellcc --mode=compile | |
535 | |
536 .c.o: | |
537 $(CC) $(CFLAGS) -c $< | |
538 @end cartouche | |
539 @end example | |
540 | |
541 After this, all you need to do is provide simple @code{make} rules for | |
542 compiling your module source files. Since modules are most useful when | |
543 they are small and self-contained, most modules will have a single | |
544 source file, aside from the module specific initialization file (see | |
545 below for details). | |
546 | |
547 @node Initialization Mode, Link Mode, Compile Mode, Using ellcc | |
548 @section Initialization Mode | |
549 @cindex initialization | |
550 @cindex documentation | |
551 | |
552 @value{emacs} uses a rather bizarre way of documenting variables and | |
553 functions. Rather than have the documentation for compiled functions | |
554 and variables passed as static strings in the source code, the | |
555 documentation is included as a C comment. A special program, called | |
556 @file{make-docfile}, is used to scan the source code files and extract | |
557 the documentation from these comments, producing the @value{emacs} @file{DOC} | |
558 file, which the internal help engine scans when the documentation for a | |
559 function or variable is requested. | |
560 | |
561 Due to the internal construction of Lisp objects, subrs and other such | |
562 things, adding documentation for a compiled function or variable in a | |
563 compiled module, at any time after @value{emacs} has been @dfn{dumped} is | |
564 somewhat problematic. Fortunately, as a module writer you are insulated | |
565 from the difficulties thanks to your friend @code{ellcc} and some | |
566 internal trickery in the module loading code. This is all done using | |
567 the @dfn{initialization} mode of @code{ellcc}. | |
568 | |
569 The result of running @code{ellcc} in initialization mode is a C source | |
570 file which you compile with (you guessed it) @code{ellcc} in compile | |
571 mode. Initialization mode is where you set the module name, version, | |
572 title and gather together all of the documentaion strings for the | |
573 functions and vairables in your module. There are several options that | |
574 you are required to pass @code{ellcc} in initialization mode, the first | |
575 of which is the mode switch itself, @code{--mode=init}. | |
576 | |
577 Next, you need to specify the name of the C source code file that | |
578 @code{ellcc} will produce, and you specify this using the | |
579 @code{--mod-output=FILENAME} argument. @var{FILENAME} is the name of | |
580 the C source code file that will contain the module variables and | |
581 @code{docs_of_module} function. | |
582 | |
583 As discussed previously, each module requires a short @dfn{handle} or | |
584 module name. This is specified with the @code{--mod-name=NAME} option, | |
585 where @var{NAME} is the abbreviated module name. This @var{NAME} must | |
586 consist only of characters that are valid in C function and variable | |
587 names. | |
588 | |
589 The module version is specified using @code{--mod-version=VERSION} | |
590 argument, with @var{VERSION} being any arbitrary version string. This | |
591 version can be passed as an optional second argument to the Lisp | |
592 function @code{load-module}, and as the third argument to the internal | |
593 module loading command @code{emodules_load}. This version string is | |
594 used to distinguish between different versions of the same module, and | |
595 to ensure that the module is loaded at a specific version. | |
596 | |
597 Last, but not least, is the module title. Specified using the | |
598 @code{--mod-title=TITLE} option, the specified @var{TITLE} is used when | |
599 the list of loaded modules is displayed. The module title serves no | |
600 purpose other than to inform the user of the function of the module. | |
601 This string should be brief, as it has to be formatted to fit the | |
602 screen. | |
603 | |
604 Following all of these parameters, you need to provide the list of all | |
605 source code modules that make up your module. These are the files which | |
606 are scanned by @file{make-docfile}, and provide the information required | |
607 to populate the @code{docs_of_module} function. Below is a sample | |
608 @file{Makefile} fragment which indicates how all of this is used. | |
609 | |
610 @example | |
611 @cartouche | |
612 CC=ellcc --mode=compile | |
613 LD=ellcc --mode=link | |
614 MODINIT=ellcc --mode=init | |
615 CFLAGS=-O2 -DSOME_STUFF | |
616 | |
617 .c.o: | |
618 $(CC) $(CFLAGS) -c $< | |
619 | |
620 MODNAME=sample | |
621 MODVER=1.0.0 | |
622 MODTITLE="Small sample module" | |
623 | |
624 SRCS=modfile1.c modfile2.c modfile3.c | |
625 OBJS=$(SRCS:.c=.o) | |
626 | |
627 all: sample.ell | |
628 clean: | |
629 rm -f $(OBJS) sample_init.o sample.ell | |
630 | |
631 install: all | |
632 mkdir `ellcc --mod-location`/mymods > /dev/null | |
633 cp sample.ell `ellcc --mod-location`/mymods/sample.ell | |
634 | |
635 sample.ell: $(OBJS) sample_init.o | |
636 $(LD) --mod-output=$@ $(OBJS) sample_init.o | |
637 | |
638 sample_init.o: sample_init.c | |
639 sample_init.c: $(SRCS) | |
640 $(MODINIT) --mod-name=$(MODNAME) --mod-version=$(MODVER) \ | |
641 --mod-title=$(MODTITLE) --mod-output=$@ $(SRCS) | |
642 @end cartouche | |
643 @end example | |
644 | |
645 The above @file{Makefile} is, in fact, complete, and would compile the | |
646 sample module, and optionally install it. The @code{--mod-location} | |
647 argument to @code{ellcc} will produce, on the standard output, the base | |
648 location of the @value{emacs} module directory. Each sub-directory of that | |
649 directory is automatically searched for for modules when they are loaded | |
650 with @code{load-module}. An alternative location would be | |
651 @file{/usr/local/lib/xemacs/site-modules}. That path can change | |
652 depending on the options the person who compiled @value{emacs} chose, so you | |
653 can always determine the correct site location using the | |
654 @code{--mod-site-location} option. This directory is treated the same | |
655 way as the main module directory. Each sub-directory within it is | |
656 searched for a given module when the user attempts to load it. The | |
657 valid extensions that the loader attempts to use are @file{.so}, | |
658 @file{.ell} and @file{.dll}. You can use any of these extensions, | |
659 although @file{.ell} is the prefered extension. | |
660 | |
661 @node Link Mode, Other ellcc options, Initialization Mode, Using ellcc | |
662 @section Link Mode | |
663 @cindex linking | |
664 | |
665 Once all of your source code files have been compiled (including the | |
666 generated init file) you need to link them all together to created the | |
667 loadable module. To do this, you invoke @code{ellcc} in link mode, by | |
668 pasing the @code{--mode-link} command. You need to specify the final | |
669 output file using the @code{--mod-output=NAME} command, but other than | |
670 that all other arguments are passed on directly to the system compiler | |
671 or linker, along with any other required arguments to create the | |
672 loadable module. | |
673 | |
674 The module has complete access to all symbols that were present in the | |
675 dumped @value{emacs}, so you do not need to link against libraries that were | |
676 linked in with the main executable. If your library uses some other | |
677 extra libraries, you will need to link with those. There is nothing | |
678 particularly complicated about link mode. All you need to do is make | |
679 sure you invoke it correctly in the @file{Makefile}. See the sample | |
680 @file{Makefile} above for an example of a well constructed | |
681 @file{Makefile} that invoked the linker correctly. | |
682 | |
683 @node Other ellcc options, Environment Variables, Link Mode, Using ellcc | |
684 @section Other @code{ellcc} options | |
685 @cindex paths | |
686 | |
687 Aside from the three main @code{ellcc} modes described above, | |
688 @code{ellcc} can accept several other options. These are typically used | |
689 in a @file{Makefile} to determine installation paths. @code{ellcc} also | |
690 allows you to over-ride several of its built-in compiler and linker | |
691 options using environment variables. Here is the complete list of | |
692 options that @code{ellcc} accepts. | |
693 | |
694 @table @code | |
695 @item --mode=compile | |
696 Enables compilation mode. Use this to compile source modules. | |
697 | |
698 @item --mode=link | |
699 Enabled link edit mode. Use this to create the final module. | |
700 | |
701 @item --mode=init | |
702 Used to create the documentation function and to initialize other | |
703 required variables. Produces a C source file that must be compiled with | |
704 @code{ellcc} in compile mode before linking the final module. | |
705 | |
706 @item --mode=verbose | |
707 Enables verbose mode. This will show you the commands that are being | |
708 executed, as well as the version number of @code{ellcc}. If you specify | |
709 this option twice, then some extra debugging information is displayed. | |
710 | |
711 @item --mod-name=NAME | |
712 Sets the short internaml module @var{NAME} to the string specified, | |
713 which must consist only of valid C identifiers. Required during | |
714 initialization mode. | |
715 | |
716 @item --mod-version=VERSION | |
717 Sets the internal module @var{VERSION} to the specified string. | |
718 Required during initialization mode. | |
719 | |
720 @item --mod-title=TITLE | |
721 Sets the module descriptive @var{TITLE} to the string specified. This | |
722 string can contain any printable characters, but should not be too | |
723 long. It is required during initialization mode. | |
724 | |
725 @item --mod-output=FILENAME | |
726 Used to control the output file name. This is used during | |
727 initialization mode to set the name of the C source file that will be | |
728 created to @var{FILENAME}. During link mode, it sets the name of the | |
729 final loadable module to @var{FILENAME}. | |
730 | |
731 @item --mod-location | |
732 This will print the name of the standard module installation path on the | |
733 standard output and immediately exit @code{ellcc}. Use this option to | |
734 determine the directory prefix of where you should install your modules. | |
735 | |
736 @item --mod-site-location | |
737 This will print the name of the site specific module location and exit. | |
738 | |
739 @item --mod-archdir | |
740 Prints the name of the root of the architecture-dependant directory that | |
741 @value{emacs} searches for architecture-dependant files. | |
742 | |
743 @item --mod-config | |
744 Prints the name of the configuration for which @value{emacs} and @code{ellcc} | |
745 were compiled. | |
746 @end table | |
747 | |
748 @node Environment Variables, , Other ellcc options, Using ellcc | |
749 @section Environment Variables | |
750 @cindex environment variables | |
751 | |
752 During its normal operation, @code{ellcc} uses the compiler and linker | |
753 flags that were determined at the time @value{emacs} was configured. In | |
754 certain rare circumstances you may wish to over-ride the flags passed to | |
755 the compiler or linker, and you can do so using environment variables. | |
756 The table below lists all of the environment variables that @code{ellcc} | |
757 recognises. | |
758 | |
759 @table @code | |
760 @item ELLCC | |
761 @cindex @code{ELLCC} | |
762 This is used to over-ride the name of the C compiler that is invoked by | |
763 @code{ellcc}. | |
764 | |
765 @item ELLLD | |
766 @cindex @code{ELLLD} | |
767 Sets the name of the link editor to use to created the final module. | |
768 | |
769 @item ELLCFLAGS | |
770 @cindex @code{ELLCFLAGS} | |
771 Sets the compiler flags passed on when compiling source modules. This | |
772 only sets the basic C compiler flags. There are certain hard-coded | |
773 flags that will always be passed. | |
774 | |
775 @item ELLLDFLAGS | |
776 @cindex @code{ELLLDFLAGS} | |
777 Sets the flags passed on to the linker. This does @strong{not} include | |
778 the flags for enabling PIC mode. This just sets basic linker flags. | |
779 | |
780 @item ELLDLLFLAGS | |
781 @cindex @code{ELLDLLFLAGS} | |
782 Sets the flags passed to the linker that are required to created shared | |
783 and loadable objects. | |
784 | |
785 @item ELLPICFLAGS | |
786 @cindex @code{ELLPICFLAGS} | |
787 Sets the C compiler option required to produce an object file that is | |
788 suitable for including in a shared library. This option should turn on | |
789 PIC mode, or the moral equivalent thereof on the target system. | |
790 | |
791 @item ELLMAKEDOC | |
792 @cindex @code{ELLMAKEDOC} | |
793 Sets the name of the @file{make-docfile} program to use. Usually | |
794 @code{ellcc} will use the version that was compiled and installed with | |
795 @value{emacs}, but this option allows you to specify an alternative path. | |
796 Used during the compile phase of @value{emacs} itself. | |
797 @end table | |
798 | |
799 @node Defining Functions, Defining Variables, Using ellcc, Top | |
800 @chapter Defining Functions | |
801 @cindex defining functions | |
802 | |
803 One of the main reasons you would ever write a module is to | |
804 provide one or more @dfn{functions} for the user or the editor to use. | |
805 The term | |
806 @dfn{function} is a bit overloaded here, as it refers to both a C | |
807 function and the way it appears to Lisp, which is a @dfn{subroutine}, or | |
808 simply a @dfn{subr}. A Lisp subr is also known as a Lisp primitive, but | |
809 that term applies less to dynamic modules. @xref{Writing Lisp | |
810 Primitives,,,internals,@value{emacs} Internals Manual}, for details on how to | |
811 declare functions. You should familiarize yourself with the | |
812 instructions there. The format of the function declaration is identical | |
813 in modules. | |
814 | |
815 Normal Lisp primitives document the functions they defining by including | |
816 the documentation as a C comment. During the build process, a program | |
817 called @file{make-docfile} is run, which will extract all of these | |
818 comments, build up a single large documentation file, and will store | |
819 pointers to the start of each documentation entry in the dumped @value{emacs}. | |
820 This, of course, will not work for dynamic modules, as they are loaded | |
821 long after @value{emacs} has been dumped. For this reason, we require a | |
822 special means for adding documentation for new subrs. This is what the | |
823 macro @code{CDOCSUBR} is used for, and this is used extensively during | |
824 @code{ellcc} initialization mode. | |
825 | |
826 When using @code{DEFUN} in normal @value{emacs} C code, the sixth | |
827 ``parameter'' is a C comment which documents the function. For a | |
828 dynamic module, we of course need to convert the C comment to a usable | |
829 string, and we need to set the documentation pointer of the subr to this | |
830 string. As a module programmer, you don't actually need to do any work | |
831 for this to happen. It is all taken care of in the | |
832 @code{docs_of_module} function created by @code{ellcc}. | |
833 | |
834 @menu | |
835 * Using DEFUN:: Using the DEFUN macro to define functions | |
836 * Declaring Functions:: Declaring functions to the Lisp reader | |
837 @end menu | |
838 | |
839 @node Using DEFUN, Declaring Functions, Defining Functions, Defining Functions | |
840 @section Using @code{DEFUN} | |
841 @cindex subrs | |
842 @findex DEFUN | |
843 @cindex functions, Lisp | |
844 @cindex functions, defining | |
845 | |
846 Although the full syntax of a function declaration is discussed in the | |
847 @value{emacs} internals manual in greater depth, what follows is a brief | |
848 description of how to define and implement a new Lisp primitive in a | |
849 module. This is done using the @code{DEFUN} macro. Here is a small | |
850 example: | |
851 | |
852 @example | |
853 @cartouche | |
854 DEFUN ("my-function", Fmy_function, 1, 1, "FFile name: ", /* | |
855 Sample Emacs primitive function. | |
856 | |
857 The specified FILE is frobricated before it is fnozzled. | |
858 */ | |
859 (file)) | |
860 @{ | |
861 char *filename; | |
862 | |
863 if (NILP(file)) | |
864 return Qnil; | |
865 | |
866 filename = (char *)XSTRING_DATA(file); | |
867 frob(filename); | |
868 return Qt; | |
869 @} | |
870 @end cartouche | |
871 @end example | |
872 | |
873 The first argument is the name of the function as it will appear to the | |
874 Lisp reader. This must be provided as a string. The second argument is | |
875 the name of the actual C function that will be created. This is | |
876 typically the Lisp function name with a preceding capital @code{F}, with | |
877 hyphens converted to underscores. This must be a valid C function | |
878 name. Next come the minimum and maximum number of arguments, | |
879 respectively. This is used to ensure that the correct number of | |
880 arguments are passed to the function. Next is the @code{interactive} | |
881 definition. If this function is meant to be run by a user | |
882 interactively, then you need to specify the argument types and prompts | |
883 in this string. Please consult the @value{emacs} Lisp manual for more | |
884 details. Next comes a C comment that is the documentation for this | |
885 function. This comment @strong{must} exist. Last comes the list of | |
886 function argument names, if any. | |
887 | |
888 @node Declaring Functions, , Using DEFUN, Defining Functions | |
889 @section Declaring Functions | |
890 @findex DEFSUBR | |
891 @cindex functions, declaring | |
892 | |
893 Simply writing the code for a function is not enough to make it | |
894 availible to the Lisp reader. You have to, during module | |
895 initialization, let the Lisp reader know about the new function. This | |
896 is done by calling @code{DEFSUBR} with the name of the function. This | |
897 is the sole purpose of the initialization function | |
898 @code{syms_of_module}. @xref{Required Functions}, for more details. | |
899 | |
900 Each call to @code{DEFSUBR} takes as its only argument the name of the | |
901 function, which is the same as the second argument to the call to | |
902 @code{DEFUN}. Using the example function above, you would insert the | |
903 following code in the @code{syms_of_module} function: | |
904 | |
905 @example | |
906 @cartouche | |
907 DEFSUBR(Fmy_function); | |
908 @end cartouche | |
909 @end example | |
910 | |
911 This call will instruct @value{emacs} to make the function visible to the Lisp | |
912 reader and will prepare for the insertion of the documentation into | |
913 the right place. Once this is done, the user can call the Lisp | |
914 function @code{my-function}, if it was defined as an interactive | |
915 function (which in this case it was). | |
916 | |
917 Thats all there is to defining and announcing new functions. The rules | |
918 for what goes inside the functions, and how to write good modules, is | |
919 beyond the scope of this document. Please consult the @value{emacs} | |
920 internals manual for more details. | |
921 | |
922 @node Defining Variables, Index, Defining Functions, Top | |
923 @chapter Defining Variables | |
924 @cindex defining variables | |
925 @cindex defining objects | |
926 @findex DEFVAR_LISP | |
927 @findex DEFVAR_BOOL | |
928 @findex DEFVAR_INT | |
929 @cindex variables, Lisp | |
930 @cindex variables, defining | |
931 @cindex objects, defining | |
932 @cindex objects, Lisp | |
933 | |
934 Rarely will you write a module that only contains functions. It is | |
935 common to also provide variables which can be used to control the | |
936 behaviour of the function, or store the results of the function being | |
937 executed. The actual C variable types are the same for modules | |
938 and internal @value{emacs} primitives, and the declaration of the variables | |
939 is identical. | |
940 | |
941 @xref{Adding Global Lisp Variables,,,internals,XEmacs Internals Manual}, | |
942 for more information on variables and naming conventions. | |
943 | |
944 Once your variables are defined, you need to initialize them and make | |
945 the Lisp reader aware of them. This is done in the | |
946 @code{vars_of_module} initialization function using special @value{emacs} | |
947 macros such as @code{DEFVAR_LISP}, @code{DEFVAR_BOOL}, @code{DEFVAR_INT} | |
948 etc. The best way to see how to use these macros is to look at existing | |
949 source code, or read the internals manual. | |
950 | |
951 One @emph{very} important difference between @value{emacs} variables and | |
952 module variables is how you use pure space. Simply put, you | |
953 @strong{never} use pure space in @value{emacs} modules. The pure space | |
954 storage is of a limited size, and is initialized propperly during the | |
955 dumping of @value{emacs}. Because variables are being added dynamically to | |
956 an already running @value{emacs} when you load a module, you cannot use pure | |
957 space. Be warned: @strong{do not use pure space in modules. Repeat, do | |
958 not use pure space in modules.} Once again, to remove all doubts: | |
959 @strong{DO NOT USE PURE SPACE IN MODULES!!!} | |
960 | |
961 Below is a small example which declares and initializes two | |
962 variables. You will note that this code takes into account the fact | |
963 that this module may very well be compiled into @value{emacs} itself. This | |
964 is a prudent thing to do. | |
965 | |
966 @example | |
967 @cartouche | |
968 Lisp_Object Vsample_string; | |
969 int sample_boolean; | |
970 | |
971 void | |
972 vars_of_module() | |
973 @{ | |
974 DEFVAR_LISP ("sample-string", &Vsample_string /* | |
975 This is a sample string, declared in a module. | |
976 | |
977 Nothing magical about it. | |
978 */); | |
979 | |
980 DEFVAR_BOOL("sample-boolean", &sample_boolean /* | |
981 *Sample user-settable boolean. | |
982 */); | |
983 | |
984 sample_boolean = 0; | |
985 Vsample_string = build_string("My string"); | |
986 @} | |
987 @end cartouche | |
988 @end example | |
989 | |
990 @c Print the tables of contents | |
991 @contents | |
992 @c That's all | |
993 | |
994 @node Index, , Defining Variables, Top | |
995 @unnumbered Index | |
996 | |
997 @printindex cp | |
998 | |
999 @bye | |
1000 |