XEmacs 21.2.22 "Mercedes".
[chise/xemacs-chise.git.1] / man / emodules.texi
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