428
|
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
|
442
|
120 * Anatomy of a Module:: Basic module layout and technology
|
428
|
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
|
442
|
128 Anatomy of a Module
|
428
|
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
|
442
|
133 * Loading other Modules:: How to load dependent modules
|
428
|
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
|
442
|
151 @node Introduction, Anatomy of a Module, Top, Top
|
428
|
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.
|
440
|
163 So although Elisp is a general purpose language, and very high level,
|
442
|
164 there are times when it is desirable to descend to a lower level compiled
|
428
|
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
|
442
|
169 more commonly known language, and because it is compiled, more suited to
|
428
|
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
|
442
|
178 loadable modules (also known as dynamically loadable libraries (DLLs),
|
|
179 dynamic shared objects (DSOs) or just simply shared objects), which can
|
428
|
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
|
442
|
202 compiler modes (such as PIC mode), setting the correct include paths for
|
428
|
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
|
442
|
210 available for module authors to use. This is often required to get data
|
428
|
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.
|
442
|
215 @xref{Top,,,internals,@value{emacs} Internals Manual}, for a
|
|
216 more complete discussion on how to extend and understand @value{emacs}. All of
|
428
|
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
|
442
|
248 @node Anatomy of a Module, Using ellcc, Introduction, Top
|
|
249 @chapter Anatomy of a Module
|
|
250 @cindex anatomy
|
428
|
251 @cindex module skeleton
|
|
252 @cindex skeleton, module
|
|
253 @cindex module format
|
|
254 @cindex format, module
|
|
255
|
442
|
256 Each dynamically loadable @value{emacs} extension (hereafter referred to as a
|
|
257 module) has a certain compulsory format, and must contain several
|
|
258 pieces of information and several mandatory functions. This chapter
|
428
|
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
|
442
|
267 * Loading other Modules:: How to load dependent modules
|
428
|
268 @end menu
|
|
269
|
442
|
270 @node Required Header File, Required Functions, Anatomy of a Module, Anatomy of a Module
|
428
|
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
|
442
|
278 will include several other @value{emacs} internal header files, and will set up
|
428
|
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
|
442
|
286 Depending on exactly what your module will be doing, you will probably
|
428
|
287 need to include one or more of the @value{emacs} internal header files. When
|
442
|
288 you @code{#include <emodules.h>}, you will get a few of the most important
|
428
|
289 @value{emacs} header files included automatically for you. The files included
|
|
290 are:
|
|
291
|
|
292 @table @file
|
|
293 @item lisp.h
|
442
|
294 This file contains most of the macros required for declaring Lisp object
|
428
|
295 types, macros for accessing Lisp objects, and global variable
|
|
296 declarations.
|
|
297
|
|
298 @item sysdep.h
|
442
|
299 All system dependent declarations and abstraction macros live here. You
|
428
|
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
|
442
|
320 @node Required Functions, Required Variables, Required Header File, Anatomy of a Module
|
428
|
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
|
442
|
327 responsibility of these functions to load in any dependent modules, and to
|
|
328 declare all variables and functions which are to be made visible to the
|
428
|
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
|
442
|
342 This required function is responsible for introducing to the Lisp reader
|
428
|
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
|
442
|
358 module depends on. The @value{emacs} module loading code makes sure that the
|
428
|
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
|
442
|
371 @node Required Variables, Loading other Modules, Required Functions, Anatomy of a Module
|
428
|
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
|
442
|
379 the module loading code searches for in order to determine the viability
|
428
|
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
|
442
|
391 regardless of the version of @value{emacs} that was installed at the time the
|
428
|
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
|
442
|
400 also the name by which the module is recognized when loading dependent
|
428
|
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
|
442
|
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
|
428
|
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
|
442
|
426 @node Loading other Modules, , Required Variables, Anatomy of a Module
|
428
|
427 @section Loading other Modules
|
442
|
428 @cindex dependencies
|
428
|
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.
|
442
|
436 However, if it does have dependencies, it must call
|
428
|
437 @code{emodules_load}:
|
|
438
|
|
439 @example
|
|
440 @cartouche
|
442
|
441 int emodules_load (const char *module,
|
|
442 const char *modname,
|
|
443 const char *modver)
|
428
|
444 @end cartouche
|
|
445 @end example
|
|
446
|
442
|
447 The first argument @var{module} is the name of the actual shared object
|
428
|
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,
|
442
|
453 @code{emodules_load} will signal an error and loading of the module
|
428
|
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
|
442
|
458 module to be loaded. A mis-match will cause the module load to fail. If
|
428
|
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
|
442
|
468 during the loading of modules a failure is encountered, then all modules
|
428
|
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
|
442
|
474 @node Using ellcc, Defining Functions, Anatomy of a Module, Top
|
428
|
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
|
442
|
497 compile, link or initialization mode. These modes are discussed in more
|
428
|
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
|
442
|
516 assumes that all of the command line arguments are C compiler arguments,
|
428
|
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
|
442
|
529 @file{Makefile} as you would for a normal program, and simply insert, at
|
428
|
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
|
442
|
557 the documentation from these comments, producing the @value{emacs} @file{DOC}
|
428
|
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
|
442
|
564 somewhat problematic. Fortunately, as a module writer you are insulated
|
428
|
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,
|
442
|
572 title and gather together all of the documentation strings for the
|
|
573 functions and variables in your module. There are several options that
|
428
|
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
|
442
|
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
|
428
|
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,
|
442
|
659 although @file{.ell} is the preferred extension.
|
428
|
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
|
442
|
666 generated init file) you need to link them all together to create the
|
428
|
667 loadable module. To do this, you invoke @code{ellcc} in link mode, by
|
442
|
668 passing the @code{--mode-link} option. You need to specify the final
|
|
669 output file using the @code{--mod-output=NAME} option, but other than
|
428
|
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
|
442
|
689 in a @file{Makefile} to determine installation paths. @code{ellcc} also
|
428
|
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
|
442
|
703 required variables. Produces a C source file that must be compiled with
|
428
|
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
|
442
|
708 executed, as well as the version number of @code{ellcc}. If you specify
|
428
|
709 this option twice, then some extra debugging information is displayed.
|
|
710
|
|
711 @item --mod-name=NAME
|
442
|
712 Sets the short internal module @var{NAME} to the string specified,
|
428
|
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
|
442
|
732 This will print the name of the standard module installation path on the
|
428
|
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
|
442
|
740 Prints the name of the root of the architecture-dependent directory that
|
|
741 @value{emacs} searches for architecture-dependent files.
|
428
|
742
|
|
743 @item --mod-config
|
442
|
744 Prints the name of the configuration for which @value{emacs} and @code{ellcc}
|
428
|
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
|
442
|
754 certain rare circumstances you may wish to over-ride the flags passed to
|
428
|
755 the compiler or linker, and you can do so using environment variables.
|
442
|
756 The table below lists all of the environment variables that @code{ellcc}
|
|
757 recognizes.
|
428
|
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.
|
442
|
805 The term
|
428
|
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
|
442
|
812 instructions there. The format of the function declaration is identical
|
428
|
813 in modules.
|
|
814
|
442
|
815 Normal Lisp primitives document the functions they defining by including
|
428
|
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
|
442
|
829 string, and we need to set the documentation pointer of the subr to this
|
428
|
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
|
442
|
846 Although the full syntax of a function declaration is discussed in the
|
428
|
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
|
442
|
857 The specified FILE is frobnicated before it is fnozzled.
|
428
|
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
|
442
|
874 Lisp reader. This must be provided as a string. The second argument is
|
428
|
875 the name of the actual C function that will be created. This is
|
442
|
876 typically the Lisp function name with a preceding capital @code{F}, with
|
428
|
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
|
442
|
894 available to the Lisp reader. You have to, during module
|
428
|
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
|
442
|
936 behavior of the function, or store the results of the function being
|
428
|
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
|
442
|
941 @xref{Adding Global Lisp Variables,,,internals,XEmacs Internals Manual},
|
428
|
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}
|
442
|
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
|
428
|
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
|
442
|
954 storage is of a limited size, and is initialized properly during the
|
428
|
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
|