]> code.delx.au - gnu-emacs/blob - doc/misc/ede.texi
7a824acfed5b23d94e7cc452a3c6e872d366cb79
[gnu-emacs] / doc / misc / ede.texi
1 \input texinfo
2 @setfilename ../../info/ede.info
3 @settitle Emacs Development Environment
4 @include docstyle.texi
5
6 @copying
7 This file describes EDE, the Emacs Development Environment.
8
9 Copyright @copyright{} 1998--2001, 2004--2005, 2008--2015
10 Free Software Foundation, Inc.
11
12 @quotation
13 Permission is granted to copy, distribute and/or modify this document
14 under the terms of the GNU Free Documentation License, Version 1.3 or
15 any later version published by the Free Software Foundation; with no
16 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
17 and with the Back-Cover Texts as in (a) below. A copy of the license
18 is included in the section entitled ``GNU Free Documentation License.''
19
20 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
21 modify this GNU manual.''
22 @end quotation
23 @end copying
24
25 @dircategory Emacs misc features
26 @direntry
27 * EDE: (ede). The Emacs Development Environment.
28 @end direntry
29
30 @titlepage
31 @center @titlefont{EDE (The Emacs Development Environment)}
32 @sp 4
33 @center by Eric Ludlam
34 @page
35 @vskip 0pt plus 1filll
36 @insertcopying
37 @end titlepage
38 @page
39
40 @macro cedet{}
41 @i{CEDET}
42 @end macro
43
44 @macro semantic{}
45 @i{Semantic}
46 @end macro
47
48 @macro srecode{}
49 @i{SRecode}
50 @end macro
51
52 @macro eieio{}
53 @i{EIEIO}
54 @end macro
55
56 @macro ede{}
57 @i{EDE}
58 @end macro
59
60 @macro cogre{}
61 @i{COGRE}
62 @end macro
63
64 @macro speedbar{}
65 @i{Speedbar}
66 @end macro
67
68 @contents
69
70 @node Top, EDE Project Concepts, (dir), (dir)
71 @top EDE
72 @comment node-name, next, previous, up
73
74 @ede{} is the Emacs Development Environment: an Emacs extension that
75 simplifies building and debugging programs in Emacs. It attempts to
76 emulate a typical IDE (Integrated Development Environment). @ede{}
77 can manage or create your makefiles and other building environment
78 duties, allowing you to concentrate on writing code rather than
79 support files. It aims to make it much easier for new programmers to
80 learn and adopt GNU ways of doing things.
81
82 @ifnottex
83 @insertcopying
84 @end ifnottex
85
86 @menu
87 * EDE Project Concepts:: @ede{} Project Concepts
88 * EDE Mode:: Turning on @ede{} mode.
89 * Quick Start:: Quick start to building a project.
90 * Creating a project:: Creating a project.
91 * Modifying your project:: Adding and removing files and targets.
92 * Building and Debugging:: Initiating a build or debug session.
93 * Miscellaneous commands:: Other project related commands.
94 * Extending EDE:: Programming and extending @ede{}.
95 * GNU Free Documentation License:: The license for this documentation.
96 @end menu
97
98 @node EDE Project Concepts, EDE Mode, Top, Top
99 @chapter @ede{} Project Concepts
100
101 @ede{} is a generic interface for managing projects. It specifies a
102 single set of menus and keybindings, while supporting multiple ways to
103 express a project via a build system.
104
105 In the subsequent chapters, we will describe the different project
106 types (@pxref{Creating a project}), as well as the commands to build
107 and debug projects (@pxref{Building and Debugging}).
108
109 In @ede{}, a project hierarchy matches a directory hierarchy. The
110 project's topmost directory is called the @dfn{project root}, and its
111 subdirectories are @dfn{subprojects}.
112
113 Each project can contain multiple @dfn{targets}. A target, at the
114 simplest level, is a named collection of files within a project. A
115 target can specify two different types of information:
116
117 @enumerate
118 @item
119 A collection of files to be added to a distribution (e.g., a tarball
120 that you intend to distribute to others).
121
122 @item
123 A collection of files that can be built into something else (e.g., a
124 program or compiled documentation).
125 @end enumerate
126
127 Lastly, @ede{} provides a way for other tools to easily learn file
128 associations. For example, a program might need to restrict some sort
129 of search to files in a single target, or to discover the location of
130 documentation or interface files. @ede{} can provide this
131 information.
132
133 @node EDE Mode, Quick Start, EDE Project Concepts, Top
134 @chapter @ede{} Mode
135
136 @ede{} is implemented as a minor mode, which augments other modes such
137 as C mode, and Texinfo mode. You can enable @ede{} for all buffers by
138 running the command @code{global-ede-mode}, or by putting this in your
139 init file:
140
141 @example
142 (global-ede-mode t)
143 @end example
144
145 Activating @ede{} adds a menu named @samp{Development} to the menu
146 bar. This menu provides several menu items for high-level @ede{}
147 commands. These menu items, and their corresponding keybindings, are
148 independent of the type of project you are actually working on.
149
150 @node Quick Start, Creating a project, EDE Mode, Top
151 @chapter Quick Start
152
153 Once you have @ede{} enabled, you can create a project. This chapter
154 provides an example C++ project that will create Automake files for
155 compilation.
156
157 @section Step 1: Create root directory
158
159 First, lets create a directory for our project. For this example,
160 we'll start with something in @file{/tmp}.
161
162 @example
163 C-x C-f /tmp/myproject/README RET
164 M-x make-directory RET RET
165 @end example
166
167 Now put some plain text in your README file to start.
168
169 Now, lets create the project:
170
171 @example
172 M-x ede-new RET Automake RET myproject RET
173 @end example
174
175
176 Nothing visible happened, but if you use @code{dired} to look at the
177 directory, you should see this:
178
179 @example
180 /tmp/myproject:
181 total used in directory 32 available 166643476
182 drwxr-xr-x 2 zappo users 4096 2012-02-23 22:10 .
183 drwxrwxrwt 73 root root 20480 2012-02-23 22:10 ..
184 -rw-r--r-- 1 zappo users 195 2012-02-23 22:10 Project.ede
185 -rw-r--r-- 1 zappo users 10 2012-02-23 22:09 README
186 @end example
187
188 @section Step 2: Create Subdirectories and Files
189
190 We'll make a more complex project, so use dired to create some more
191 directories using the @kbd{+} key, and typing in new directories:
192
193 @example
194 + include RET
195 + src RET
196 @end example
197
198 Now I'll short-cut in this tutorial. Create the following files:
199
200 @file{include/myproj.hh}
201 @example
202 /** myproj.hh ---
203 */
204
205 #ifndef myproj_hh
206 #define myproj_hh 1
207
208 #define IMPORTANT_MACRO 1
209
210 int my_lib_function();
211
212 #endif // myproj_hh
213 @end example
214
215
216 @file{src/main.cpp}
217 @example
218 /** main.cpp ---
219 */
220
221 #include <iostream>
222 #include "myproj.hh"
223
224 int main() @{
225
226 @}
227
228 #ifdef IMPORTANT_MACRO
229 int my_fcn() @{
230
231 @}
232 #endif
233 @end example
234
235 @file{src/mylib.cpp}
236 @example
237 /** mylib.cpp ---
238 *
239 * Shared Library to build
240 */
241
242 int my_lib_function() @{
243
244 @}
245 @end example
246
247 @section Step 3: Create subprojects
248
249 @ede{} needs subdirectories to also have projects in them. You can
250 now create those projects.
251
252 With @file{main.cpp} as your current buffer, type:
253
254 @example
255 M-x ede-new RET Automake RET src RET
256 @end example
257
258 and in @file{myproj.hh} as your current buffer, type:
259
260 @example
261 M-x ede-new RET Automake RET include RET
262 @end example
263
264 These steps effectively only create the Project.ede file in which you
265 will start adding targets.
266
267 @section Step 4: Create targets
268
269 In order to build a program, you must have targets in your @ede{}
270 Projects. You can create targets either from a buffer, or from a
271 @code{dired} directory buffer.
272
273 Note: If for some reason a directory list buffer, or file does not have the
274 @samp{Project} menu item, or if @ede{} keybindings don't work, just
275 use @kbd{M-x revert-buffer RET} to force a refresh. Sometimes
276 creating a new project doesn't restart buffers correctly.
277
278 Lets start with the header file. In @file{include/myproj.hh}, you
279 could use the menu, but we will now start using the @ede{} command prefix
280 which is @kbd{C-c .}.
281
282 @example
283 C-c . t includes RET miscellaneous RET y
284 @end example
285
286
287 This creates a misc target for holding your includes, and then adds
288 myproj.hh to the target. Automake (the tool) has better ways to do
289 this, but for this project, it is sufficient.
290
291 Next, visit the @file{src} directory using dired. There should be a
292 @samp{Project} menu. You can create a new target with
293
294 @example
295 . t myprogram RET program RET
296 @end example
297
298 Note that @kbd{. t} is a command for creating a target. This command
299 is also in the menu. This will create a target that will build a
300 program. If you want, visit @file{Project.ede} to see the structure
301 built so far.
302
303 Next, place the cursor on @file{main.cpp}, and use @kbd{. a} to add
304 that file to your target.
305
306 @example
307 . a myprogram RET
308 @end example
309
310 Note that these prompts often have completion, so you can just press
311 @kbd{TAB} to complete the name @file{myprogram}.
312
313 If you had many files to add to the same target, you could mark them
314 all in your dired buffer, and add them all at the same time.
315
316 Next, do the same for the library by placing the cursor on @file{mylib.cpp}.
317
318 @example
319 . t mylib RET sharedobject RET
320 . a mylib RET
321 @end example
322
323 @section Step 5: Compile, and fail
324
325 Next, we'll try to compile the project, but we aren't done yet, so it
326 won't work right away.
327
328 Visit @file{/tmp/myproject/Project.ede}. We're starting here because
329 we don't have any program files in this directory yet. Now we can use
330 the compile command:
331
332 @example
333 C-c . C
334 @end example
335
336 Because this is the very first time, it will create a bunch of files
337 for you that are required by Automake. It will then use automake to
338 build the support infrastructure it needs. This step is skipped if
339 you choose just a @file{Makefile} build system.
340
341 After the Automake init, it runs compile. You will immediately
342 discover the error in main.cpp can't find @file{myproj.hh}. We need
343 to go fix this.
344
345 @section Step 6: Customizing your project
346
347 To fix the failed compile, we need to add
348 @file{/tmp/myproject/include} to the include path.
349
350 Visit @file{main.cpp}.
351
352 @example
353 M-x customize-project RET
354 @end example
355
356 Select the @samp{[Settings]} subgroup of options. Under
357 @samp{Variable :} click @samp{[INS]}. At this point, you need to be
358 somewhat savvy with Automake. Add a variable named @samp{CPPFLAGS},
359 and set the value to @samp{../include}.
360
361 You should see something like this:
362
363 @example
364 Variables :
365 [INS] [DEL] Cons-cell:
366 Name: AM_CPPFLAGS
367 Value: -I../include
368 [INS]
369 Variables to set in this Makefile.
370 @end example
371
372 Click @samp{[Apply]}. Feel free to visit @file{Project.ede} to see
373 how it changed the config file.
374
375 Compile the whole project again with @kbd{C-c . C} from
376 @file{main.cpp}. It should now compile.
377
378 @section Step 7: Shared library dependency
379
380 Note: Supporting shared libraries for Automake in this way is easy,
381 but doing so from a project of type Makefile is a bit tricky. If you
382 are creating shared libraries too, stick to Automake projects.
383
384 Next, lets add a dependency from @file{main.cpp} on our shared
385 library. To do that, update main like this:
386
387 @example
388 int main() @{
389
390 my_lib_function();
391
392 @}
393 @end example
394
395 Now compile with:
396
397 @example
398 C-c . c
399 @end example
400
401 where the lower case @kbd{c} compiles just that target. You should
402 see an error.
403
404 This time, we need to add a dependency from @file{main.cpp} on our shared
405 library. To do that, we need to customize our target instead of the
406 project. This is because variables such as the include path are
407 treated globally, whereas dependencies for a target are target specific.
408
409 @example
410 M-x customize-target RET
411 @end example
412
413 On the first page, you will see an Ldlibs-local section. Add mylib to
414 it by first clicking @samp{[INS]}, and they adding the library. It
415 should look like this:
416
417 @example
418 Ldlibs-Local :
419 [INS] [DEL] Local Library: libmylib.la
420 [INS]
421 Libraries that are part of this project. [Hide Rest]
422 The full path to these libraries should be specified, such as:
423 ../lib/libMylib.la or ../ar/myArchive.a
424 @end example
425
426 You will also see other variables for library related flags and system
427 libraries if you need them. Click @samp{[Accept]}, and from
428 @file{main.cpp}, again compile the whole project to force all
429 dependent elements to compile:
430
431 @example
432 C-c . C
433 @end example
434
435 @section Step 8: Run your program
436
437 You can run your program directly from @ede{}.
438
439 @example
440 C-c . R RET RET
441 @end example
442
443 If your program takes command line arguments, you can type them in
444 when it offers the command line you want to use to run your program.
445
446 @node Creating a project, Modifying your project, Quick Start, Top
447 @chapter Creating a project
448
449 To create a new project, first visit a file that you want to include
450 in that project. If you have a hierarchy of directories, first visit
451 a file in the topmost directory. From this buffer, type @kbd{M-x
452 ede-new}, or click on the @samp{Create Project} item in the
453 @samp{Development} menu.
454
455 The @command{ede-new} command prompts for the type of project you
456 would like to create. Each project type has its own benefits or
457 language specific enhancements. Not all projects that @ede{} supports
458 also allow creating a new project. Projects such as @code{emacs}
459 or @code{linux} are designed to recognize existing projects only.
460 Project types such as @samp{Make} and @samp{Automake} do support
461 creating new project types with @command{ede-new}.
462
463 @itemize
464 @item
465 For the @samp{Make} project type, @ede{} creates a @dfn{project file},
466 called @file{Project.ede}, in each project directory. Information
467 about the project is stored in this file. This project autogenerates
468 a @file{Makefile}.
469
470 @item
471 For the @samp{Automake} project type, @ede{} creates a
472 @file{Project.ede} project file similar to a @samp{Make} project.
473 Unlike a @samp{Make} project, this project autogenerates a
474 @file{Makefile.am} file. @ede{} handles the Automake bootstrapping
475 routines, which import and maintain a @file{configure.am} script and
476 other required files.
477 @end itemize
478
479 A subproject is merely a project in a subdirectory of another project.
480 You can create a subproject by using the @command{ede-new} command (or
481 the @samp{Create Project} menu item), while visiting a buffer in a
482 subdirectory of the project root. This new project is automatically
483 added to the parent project, and will be automatically loaded when
484 @ede{} reads the parent project.
485
486 When using a project command that involves a makefile, @ede{} uses
487 the top-most project's makefile as a starting place for the build. How
488 the toplevel project handles subprojects in the build process is
489 dependent on that project's type.
490
491 @node Modifying your project, Building and Debugging, Creating a project, Top
492 @chapter Modifying your project
493
494 In this chapter, we describe the generic features for manipulating
495 projects, including the targets and files within them. Subsequent
496 chapters, which describe specific project types, will provide more
497 detailed information about exactly what these features do.
498
499 @menu
500 * Add/Remove target::
501 * Add/Remove files::
502 * Customize Features::
503 * Project Local Variables::
504 * EDE Project Features::
505 @end menu
506
507 @node Add/Remove target, Add/Remove files, Modifying your project, Modifying your project
508 @section Add/Remove target
509
510 To create a new target, type @kbd{C-c . t} (@code{ede-new-target}) or
511 use the @samp{Add Target} menu item in the @samp{Project Options}
512 submenu. This prompts for a target name, and adds the current buffer
513 to that target.
514
515 The @command{ede-new-target} command also prompts for a @dfn{target
516 type}. Each target type has its own build process and class of files
517 that it will accept.
518
519 To remove a target from the project, type @kbd{M-x ede-delete-target},
520 or use the @samp{Remove Target} menu item in the @samp{Project
521 Options} submenu.
522
523 @node Add/Remove files, Customize Features, Add/Remove target, Modifying your project
524 @section Add/Remove files
525
526 To add the current file to an existing target, type @kbd{C-c . a}
527 (@code{ede-add-file}), or use the @samp{Add File} menu item in the
528 @samp{Target Options} submenu.
529
530 You can add a file to more than one target; this is OK.
531
532 To remove the current file from a target, type @kbd{C-c . d}
533 (@code{ede-remove-file}), or use the @samp{Remove File} menu item
534 in the @samp{Target Options} submenu. If the file belongs to multiple
535 targets, this command prompts for each target it could be removed
536 from.
537
538 While working in a project, if you visit a file that is not part of an
539 existing target, @ede{} automatically prompts for a target. If you do
540 not wish to add the file to any target, you can choose @samp{none}.
541 You can customize this behavior with the variable
542 @command{ede-auto-add-method}.
543
544 @node Customize Features, Project Local Variables, Add/Remove files, Modifying your project
545 @section Customize Features
546
547 A project, and its targets, are objects using the @samp{EIEIO} object
548 system. @xref{Top,,,eieio,EIEIO manual}. These objects have data
549 fields containing important information related to your work.
550
551 If the high-level functions aren't enough, you can tweak all
552 user-customizable fields at any time by running the command
553 @command{customize-project} or @command{customize-target}. This loads
554 the current project or target into a customization buffer, where you
555 can tweak individual slots. This is usually necessary for complex
556 projects.
557
558 Some project modes do not have a project file, but directly read a
559 Makefile or other existing file. Instead of directly editing the
560 object, you can edit the file by typing @kbd{C-c . e}
561 (@code{ede-edit-file-target}). You should ``rescan'' the project
562 afterwards (@pxref{Miscellaneous commands}).
563
564 @node Project Local Variables, EDE Project Features, Customize Features, Modifying your project
565 @section Project Local Variables
566
567 EDE projects can store and manager project local variables. The
568 variables are stored in the project, and will be restored when a
569 project reloads.
570
571 Projects which are not stored on disk WILL NOT restore your project
572 local variables later.
573
574 You can use @ref{Customize Features} to of the project to edit the
575 project local variables. They are under the 'Settings' group as
576 ``Project Local Variables''.
577
578 You can also use @kbd{M-x ede-set} to set a new variable local in the
579 mini buffer.
580
581 In multi-level projects such as Automake and Make generating projects,
582 project local variables are installed from both the TOP most project,
583 and the local directory's project. In that way, you can have some
584 variables across your whole project, and some specific to a
585 subdirectory.
586
587 You can use project local variables to set any Emacs variable so that
588 buffers belonging to different projects can have different settings.
589
590 NOTE: When you use project-local variables with @ref{ede-cpp-root},
591 the format is an association list. For example:
592
593 @example
594 (ede-cpp-root-project "SOMENAME"
595 :file "/dir/to/some/file"
596 :local-variables
597 '((grep-command . "grep -nHi -e ")
598 (compile-command . "make -f MyCustomMakefile all")))
599 @end example
600
601 @node EDE Project Features, , Project Local Variables, Modifying your project
602 @section EDE Project Features
603
604 This section details user facing features of an @ede{} @samp{Make}
605 style project. An @samp{Automake} project has similar options (but a
606 direct Automake project does not).
607
608 To modify any of the specific features mentioned here, you need to
609 customize the project or target with @command{customize-project} or
610 @command{customize-target}.
611
612 When you are customizing, you are directly manipulating slot values in
613 @eieio{} objects. @xref{Extending EDE}, if you are interested in
614 additional details.
615
616 @menu
617 * Changing Compilers and Flags::
618 * Configurations::
619 @end menu
620
621 @node Changing Compilers and Flags, Configurations, EDE Project Features, EDE Project Features
622 @subsection Changing Compilers and Flags
623
624 Targets that build stuff need compilers. To change compilers, you
625 need to customize the desired target.
626
627 In the @samp{[Make]} section, you can choose a new compiler or linker
628 from the list. If a linker you need is not available, you will need
629 to create a new one. @xref{Compiler and Linker objects}.
630
631 If an existing compiler or linker is close, but you need to modify
632 some flag set such as adding an include path you will need to add a
633 configuration variable.
634
635 To start, you should create the basic setup, and construct a makefile
636 with @command{ede-proj-regenerate}. Look in the @file{Makefile} to
637 see what commands are inserted. Once you have determined the variable
638 you need to modify, you can add a configuration for it.
639 @xref{Configurations}.
640
641 @node Configurations, , Changing Compilers and Flags, EDE Project Features
642 @subsection Configurations
643
644 Configurations specify different ways to build a project. For
645 example, you may configure a project to be in ``debug'' mode, or
646 perhaps in ``release'' mode.
647
648 The project, and each target type all have a slot named
649 @code{configuration-variables}. To add new variables to a
650 configuration find this slot in the custom buffer, and insert a new
651 configuration. Name it either ``debug'' or ``release'', then insert
652 some number of name/value pairs to it.
653
654 You can have any number of valid configurations too. To add a new
655 configuration, customize your project. Work in the @samp{[Settings]}
656 block for ``configurations''. Add a new named configuration here.
657
658 To switch between different active configurations, modify the
659 ``configuration default'' slot.
660
661 @node Building and Debugging, Miscellaneous commands, Modifying your project, Top
662 @chapter Building and Debugging
663
664 @ede{} provides the following ``project-aware'' compilation and
665 debugging commands:
666
667 @table @kbd
668 @item C-c . c
669 Compile the current target (@code{ede-compile-target}).
670 @item C-c . C
671 Compile the entire project (@code{ede-compile-project}).
672 @item c-c . D
673 Debug the current target (@code{ede-debug-target}).
674 @item M-x ede-make-dist
675 Build a distribution file for your project.
676 @end table
677
678 These commands are also available from the @samp{Development} menu.
679
680 @node Miscellaneous commands, Extending EDE, Building and Debugging, Top
681 @chapter Miscellaneous commands
682
683 If you opt to go in and edit @ede{} project files directly---for
684 instance, by using @kbd{C-c . e} (@pxref{Customize Features})---you
685 must then ``rescan'' the project files to update the internal data
686 structures. To rescan the current project, type @kbd{C-c . g}
687 (@code{ede-rescan-toplevel}).
688
689 @ede{} can help you find files in your project, via the command
690 @kbd{C-c . f} (@code{ede-find-file}). This prompts for a file name;
691 you need not specify the directory. EDE then tries to visit a file
692 with that name somewhere in your project.
693
694 @ede{} can use external tools to help with file finding. To do this,
695 customize @code{ede-locate-setup-options}.
696
697 @defvar ede-locate-setup-options
698 @anchor{ede-locate-setup-options}
699 List of locate objects to try out by default.
700 Listed in order of preference. If the first item cannot be used in
701 a particular project, then the next one is tried.
702 It is always assumed that @dfn{ede-locate-base} is at end of the list.
703 @end defvar
704
705 @ede{} also provides a project display mode for the speedbar
706 (@pxref{Speedbar,,,emacs,GNU Emacs Manual}). This allows you to view
707 your source files as they are structured in your project: as a
708 hierarchical tree, grouped according to target.
709
710 To activate the speedbar in this mode, type @kbd{C-c . s}
711 (@code{ede-speedbar}).
712
713 @menu
714 * Make and Automake projects:: Project types of @samp{ede-project}
715 * Automake direct projects:: Project interface on hand-written automake files.
716 * Simple projects:: Projects @ede{} doesn't manage.
717 @end menu
718
719 @node Make and Automake projects, Automake direct projects, Miscellaneous commands, Miscellaneous commands
720 @section Make and Automake projects
721
722 A project of @samp{ede-project} type creates a file called
723 @file{Project.ede} in every project directory. This is used to track
724 your configuration information. If you configure this project to be
725 in @samp{Makefile} mode, then this project will autogenerate a
726 @file{Makefile}. If you configure it in @samp{Automake} mode a
727 @file{Makefile.am} file will be created. The automake bootstrapping
728 routines will also import and maintain a configure.am script and a
729 host of other files required by Automake.
730
731 @node Automake direct projects, Simple projects, Make and Automake projects, Miscellaneous commands
732 @section Automake direct projects
733
734 The project type that reads @file{Makefile.am} directly is derived
735 from the sources of the original @file{project-am.el} mode that was
736 distributed independently. This mode eventually became @ede{}. The
737 @samp{project-am} project will read existing automake files, but will
738 not generate them automatically, or create new ones. As such, it is
739 useful as a browsing tool, or as maintenance in managing file lists.
740
741 @node Simple projects, , Automake direct projects, Miscellaneous commands
742 @section Simple Projects
743
744 There is a wide array of simple projects. In this case a simple
745 project is one that detects, or is directed to identify a directory as
746 belonging to a project, but doesn't provide many features of a typical
747 @ede{} project. Having the project however allows tools such as
748 @semantic{} to find sources and perform project level completions.
749
750
751 @menu
752 * ede-cpp-root:: This project marks the root of a C/C++ code project.
753 * ede-emacs:: A project for working with Emacs.
754 * ede-linux:: A project for working with Linux kernels.
755 * ede-generic-project:: A project type for wrapping build systems with EDE.
756 * Custom Locate:: Customizing how to locate files in a simple project
757 @end menu
758
759 @node ede-cpp-root, ede-emacs, Simple projects, Simple projects
760 @subsection ede-cpp-root
761
762 The @code{ede-cpp-root} project type allows you to create a single
763 object with no save-file in your @file{.emacs} file. It allows @ede{}
764 to provide the @semantic{} package with the ability to find header
765 files quickly.
766
767 The @code{ede-cpp-root} class knows a few things about C++ projects,
768 such as the prevalence of "include" directories, and typical
769 file-layout stuff. If this isn't sufficient, you can subclass
770 @code{ede-cpp-root-project} and add your own tweaks in just a few
771 lines. See the end of this file for an example.
772
773 In the most basic case, add this to your @file{.emacs} file, modifying
774 appropriate bits as needed.
775
776 @example
777 (ede-cpp-root-project "SOMENAME" :file "/dir/to/some/file")
778 @end example
779
780 Replace @var{SOMENAME} with whatever name you want, and the filename
781 to an actual file at the root of your project. It might be a
782 Makefile, a README file. Whatever. It doesn't matter. It's just a
783 key to hang the rest of @ede{} off of.
784
785 The most likely reason to create this project, is to speed up
786 searching for includes files, or to simplify bootstrapping @semantic{}'s
787 ability to find files without much user interaction. In conjunction
788 with @semantic{} completion, having a short include path is key. You can
789 override the default include path and system include path like this:
790
791 @example
792 (ede-cpp-root-project "NAME" :file "FILENAME"
793 :include-path '( "/include" "../include" "/c/include" )
794 :system-include-path '( "/usr/include/c++/3.2.2/" )
795 :compile-command "make compile"
796 :spp-table '( ("MOOSE" . "")
797 ("CONST" . "const") ) )
798 @end example
799
800 In this case each item in the include path list is searched. If the
801 directory starts with "/", then that expands to the project root
802 directory. If a directory does not start with "/", then it is
803 relative to the default-directory of the current buffer when the file
804 name is expanded.
805
806 The include path only affects C/C++ header files. Use the slot
807 @code{:header-match-regexp} to change it.
808
809 The @code{:system-include-path} allows you to specify full directory
810 names to include directories where system header files can be found.
811 These will be applied to files in this project only.
812
813 With @code{:compile-command} you can provide a command which should be
814 run when calling @code{ede-compile-project}.
815
816 The @code{:spp-table} provides a list of project specific #define
817 style macros that are unique to this project, passed in to the
818 compiler on the command line, or are in special headers.
819 See the @code{semantic-lex-c-preprocessor-symbol-map} for more
820 on how to format this entry.
821
822 If there is a single file in your project, you can instead set the
823 @code{:spp-files} to a list of file names relative to the root of your
824 project. Specifying this is like setting the variable
825 @code{semantic-lex-c-preprocessor-symbol-file} in semantic.
826
827 If you want to override the file-finding tool with your own
828 function you can do this:
829
830 @example
831 (ede-cpp-root-project "NAME" :file "FILENAME" :locate-fcn 'MYFCN)
832 @end example
833
834 Where @var{MYFCN} is a symbol for a function. The locate function can
835 be used in place of @code{ede-expand-filename} so you can quickly
836 customize your custom target to use specialized local routines instead
837 of the default @ede{} routines. The function symbol must take two
838 arguments:
839
840 @table @var
841 @item NAME
842 The name of the file to find.
843 @item DIR
844 The directory root for this cpp-root project.
845 @end table
846
847 When creating a project with @code{ede-cpp-root}, you can get
848 additional configurations via @ref{Project Local Variables}. Be aware
849 that the format for project local variables is an association list.
850 You cannot use @kbd{M-x ede-set} and have your project local variables
851 persist between sessions.
852
853 If the cpp-root project style is right for you, but you want a dynamic
854 loader, instead of hard-coding path name values in your @file{.emacs}, you
855 can do that too, but you will need to write some lisp code.
856
857 To do that, you need to add an entry to the
858 @code{ede-project-class-files} list, and also provide two functions to
859 teach @ede{} how to load your project pattern
860
861 It would look like this:
862
863 @example
864 (defun MY-FILE-FOR-DIR (&optional dir)
865 "Return a full file name to the project file stored in DIR."
866 <write your code here, or return nil>
867 )
868
869 (defun MY-ROOT-FCN ()
870 "Return the root fcn for `default-directory'"
871 ;; You might be able to use 'ede-cpp-root-project-root'
872 ;; and not write this at all.
873 )
874
875 (defun MY-LOAD (dir)
876 "Load a project of type `cpp-root' for the directory DIR.
877 Return nil if there isn't one."
878 ;; Use your preferred construction method here.
879 (ede-cpp-root-project "NAME" :file (expand-file-name "FILE" dir)
880 :locate-fcn 'MYFCN)
881 )
882
883 (add-to-list 'ede-project-class-files
884 (ede-project-autoload "cpp-root"
885 :name "CPP ROOT"
886 :file 'ede-cpp-root
887 :proj-file 'MY-FILE-FOR-DIR
888 :proj-root 'MY-ROOT-FCN
889 :load-type 'MY-LOAD
890 :class-sym 'ede-cpp-root)
891 t)
892 @end example
893
894 This example only creates an auto-loader, and does not create a new kind
895 of project.
896
897 @xref{ede-cpp-root-project}, for details about the class that defines
898 the @code{ede-cpp-root} project type.
899
900 @node ede-emacs, ede-linux, ede-cpp-root, Simple projects
901 @subsection ede-emacs
902
903 The @code{ede-emacs} project automatically identifies an Emacs source
904 tree, and enables EDE project mode for it.
905
906 It pre-populates the C Preprocessor symbol map for correct parsing,
907 and has an optimized include file identification function.
908
909 @node ede-linux, ede-generic-project, ede-emacs, Simple projects
910 @subsection ede-linux
911
912 The @code{ede-linux} project will automatically identify a Linux
913 Kernel source tree, and enable EDE project mode for it.
914
915 It pre-populates the C Preprocessor symbol map for reasonable parsing,
916 and has an optimized include file identification function.
917
918 Through the variables @code{project-linux-build-directory-default} and
919 @code{project-linux-architecture-default}, you can set the build
920 directory and its architecture, respectively. The default is to assume that
921 the build happens in the source directory and to auto-detect the
922 architecture; if the auto-detection fails, you will be asked.
923
924 @node ede-generic-project, Custom Locate, ede-linux, Simple projects
925 @subsection ede-generic-project
926
927 The @code{ede-generic-project} is a project system that makes it easy
928 to wrap up different kinds of build systems as an EDE project.
929 Projects such as @ref{ede-emacs} require coding skills to create.
930 Generic projects also require writing Emacs Lisp code, but the
931 requirements are minimal. You can then use
932 @command{customize-project} to configure build commands, includes, and
933 other options for that project. The configuration is saved in
934 @file{EDEConfig.el}.
935
936 Generic projects are disabled by default because they have the
937 potential to interfere with other projects. To use the generic
938 project system to start detecting projects, you need to enable it.
939
940 @deffn Command ede-enable-generic-projects
941 Enable generic project loaders.
942
943 This enables generic loaders for projects that are detected using
944 either a @file{Makefile}, @file{SConstruct}, or @file{CMakeLists}.
945
946 You do not need to use this command if you create your own generic
947 project type.
948 @end deffn
949
950 If you want to create your own generic project loader, you need to
951 define your own project and target classes, and create an autoloader.
952 The example for Makefiles looks like this:
953
954 @example
955 ;;; MAKEFILE
956
957 (defclass ede-generic-makefile-project (ede-generic-project)
958 ((buildfile :initform "Makefile")
959 )
960 "Generic Project for makefiles.")
961
962 (defmethod ede-generic-setup-configuration ((proj ede-generic-makefile-project) config)
963 "Setup a configuration for Make."
964 (oset config build-command "make -k")
965 (oset config debug-command "gdb ")
966 )
967
968 (ede-generic-new-autoloader "generic-makefile" "Make"
969 "Makefile" 'ede-generic-makefile-project)
970 @end example
971
972 This example project will detect any directory with the file
973 @file{Makefile} in it as belonging to this project type.
974 Customization of the project will allow you to make build and debug
975 commands more precise.
976
977 @node Custom Locate, , ede-generic-project, Simple projects
978 @subsection Custom Locate
979
980 The various simple project styles all have one major drawback, which
981 is that the files in the project are not completely known to EDE@.
982 When the EDE API is used to try and file files by some reference name
983 in the project, then that could fail.
984
985 @ede{} can therefore use some external locate commands, such as the unix
986 ``locate'' command, or ``GNU Global''.
987
988 Configuration of the tool you want to use such as @code{locate}, or
989 @code{global} will need to be done without the aid of @ede{}. Once
990 configured, however, @ede{} can use it.
991
992 To enable one of these tools, set the variable
993 @code{ede-locate-setup-options} with the names of different locate
994 objects. @ref{Miscellaneous commands}.
995
996 Configure this in your @file{.emacs} before loading in CEDET or EDE@.
997 If you want to add support for GNU Global, your configuration would
998 look like this:
999
1000 @example
1001 (setq ede-locate-setup-options '(ede-locate-global ede-locate-base))
1002 @end example
1003
1004 That way, when a search needs to be done, it will first try using
1005 GLOBAL@. If global is not available for that directory, then it will
1006 revert to the base locate object. The base object always fails to
1007 find a file.
1008
1009 You can add your own locate tool but subclassing from
1010 @code{ede-locate-base}. The subclass should also implement two
1011 methods. See the code in @file{ede-locate.el} for GNU Global as a
1012 simple example.
1013
1014 @@TODO - Add ID Utils and CScope examples
1015
1016 More on idutils and cscope is in the CEDET manual, and they each have
1017 their own section.
1018
1019 @node Extending EDE, GNU Free Documentation License, Miscellaneous commands, Top
1020 @chapter Extending @ede{}
1021
1022 This chapter is intended for users who want to write new parts or fix
1023 bugs in @ede{}. A knowledge of Emacs Lisp, and some @eieio{}(CLOS) is
1024 required.
1025
1026 @ede{} uses @eieio{}, the CLOS package for Emacs, to define two object
1027 superclasses, specifically the PROJECT and TARGET@. All commands in
1028 @ede{} are usually meant to address the current project, or current
1029 target.
1030
1031 All specific projects in @ede{} derive subclasses of the @ede{}
1032 superclasses. In this way, specific behaviors such as how a project
1033 is saved, or how a target is compiled can be customized by a project
1034 author in detail. @ede{} communicates to these project objects via an
1035 API using methods. The commands you use in @ede{} mode are high-level
1036 functional wrappers over these methods. @xref{Top,,, eieio, EIEIO manual}. For
1037 details on using @eieio{} to extending classes, and writing methods.
1038
1039 If you intend to extend @ede{}, it is most likely that a new target type is
1040 needed in one of the existing project types. The rest of this chapter
1041 will discuss extending the @code{ede-project} class, and it's targets.
1042 See @file{project-am.el} for basic details on adding targets to it.
1043
1044 For the @code{ede-project} type, the core target class is called
1045 @code{ede-proj-target}. Inheriting from this will give you everything
1046 you need to start, including adding your sources into the makefile. If
1047 you also need additional rules in the makefile, you will want to inherit
1048 from @code{ede-proj-target-makefile} instead. You may want to also add
1049 new fields to track important information.
1050
1051 If you are building currently unsupported code into a program or shared
1052 library, it is unlikely you need a new target at all. Instead you
1053 would need to create a new compiler or linker object that compiles
1054 source code of the desired type. @ref{Compiler and Linker objects}.
1055
1056 Once your new class exists, you will want to fill in some basic methods.
1057 See the @file{ede-skel.el} file for examples of these. The files
1058 @file{ede-proj-info.el} and @file{ede-proj-elisp.el} are two interesting
1059 examples.
1060
1061 @menu
1062 * Development Overview::
1063 * Detecting a Project::
1064 * User interface methods:: Methods associated with keybindings
1065 * Base project methods:: The most basic methods on @ede{} objects.
1066 * Sourcecode objects:: Defining new sourcecode classes.
1067 * Compiler and Linker objects:: Defining new compilers and linkers.
1068 * Project:: Details of project classes.
1069 * Targets:: Details of target classes.
1070 * Sourcecode:: Details of source code classes.
1071 * Compilers:: Details of compiler classes.
1072 @end menu
1073
1074 @node Development Overview, Detecting a Project, Extending EDE, Extending EDE
1075 @section Development Overview
1076
1077 @ede{} is made up of a series of classes implemented with @eieio{}.
1078 These classes define an interface that can be used to create different
1079 types of projects.
1080
1081 @ede{} defines two superclasses which are @code{ede-project} and
1082 @code{ede-target}. All commands in @ede{} are usually meant to
1083 address the current project, or current target.
1084
1085 All specific projects in @ede{} derive subclasses of the @ede{} superclasses.
1086 In this way, specific behaviors such as how a project is saved, or how a
1087 target is compiled can be customized by a project author in detail. @ede{}
1088 communicates to these project objects via an API using methods. The
1089 commands you use in @ede{} mode are high-level functional wrappers over
1090 these methods.
1091
1092 Some example project types are:
1093
1094 @table @code
1095 @item project-am
1096 Automake project which reads existing Automake files.
1097 @item ede-proj-project
1098 This project type will create @file{Makefiles},
1099 or @file{Makefile.am} files to compile your project.
1100 @item ede-linux
1101 This project type will detect linux source trees.
1102 @item ede-emacs
1103 This project will detect an Emacs source tree.
1104 @end table
1105
1106 There are several other project types as well.
1107
1108 The first class you need to know to create a new project type is
1109 @code{ede-project-autoload}. New instances of this class are needed
1110 to define how Emacs associates different files/buffers with different
1111 project types. All the autoloads are kept in the variable
1112 @code{ede-project-class-files}.
1113
1114 The next most important class to know is @code{ede-project}. This is
1115 the baseclass defines how all projects behave. The basic pattern for
1116 a project is that there is one project per directory, and the topmost
1117 project or directory defines the project as a whole.
1118
1119 Key features of @code{ede-project} are things like name and version
1120 number. It also holds a list of @code{ede-target} objects and a list
1121 of sub projects, or more @code{ede-project} objects.
1122
1123 New project types must subclass @code{ede-project} to add special
1124 behavior. New project types also need to subclass @code{ede-target} to
1125 add specialty behavior.
1126
1127 In this way, the common @ede{} interface is designed to work against
1128 @code{ede-project}, and thus all subclasses.
1129
1130 @code{ede-project} subclasses @code{ede-project-placeholder}. This is
1131 the minimum necessary project needed to be cached between runs of
1132 Emacs. This way, Emacs can track all projects ever seen, without
1133 loading those projects into memory.
1134
1135 Here is a high-level UML diagram for the @ede{} system created with @cogre{}..
1136
1137 @example
1138 +-----------------------+ +-----------------------+
1139 | | |ede-project-placeholder|
1140 |ede-project-class-files| +-----------------------+
1141 | | +-----------------------+
1142 +-----------------------+ +-----------------------+
1143 /\ ^
1144 \/ /_\
1145 | |
1146 +--------------------+ +-----------+ +----------+
1147 |ede-project-autoload| |ede-project| |ede-target|
1148 +--------------------+<>--------------+-----------+<>-------+----------+
1149 +--------------------+ +-----------+ +----------+
1150 +--------------------+ +-----------+ +----------+
1151 ^
1152 /_\
1153 |
1154 +---------------------+-----------------+
1155 | | |
1156 | | |
1157 | | |
1158 +----------------+ +-------------------+ +---------+
1159 |ede-proj-project| |project-am-makefile| |ede-emacs|
1160 +----------------+ +-------------------+ +---------+
1161 +----------------+ +-------------------+ +---------+
1162 +----------------+ +-------------------+ +---------+
1163 @end example
1164
1165
1166 @node Detecting a Project, User interface methods, Development Overview, Extending EDE
1167 @section Detecting a Project
1168
1169 Project detection happens with the list of @code{ede-project-autoload}
1170 instances stored in @code{ede-project-class-files}. The full project
1171 detection scheme works like this:
1172
1173 @table @asis
1174 @item Step 1:
1175 @code{find-file-hook} calls @code{ede-turn-on-hook} on BUFFER.
1176 @item Step 2:
1177 @code{ede-turn-on-hook} turns on @code{ede-minor-mode}
1178 @item Step 3:
1179 @code{ede-minor-mode} looks to see if BUFFER is associated with any
1180 open projects. If not, it calls @code{ede-load-project-file} to find
1181 a project associated with the current directory BUFFER is in.
1182 @item Step 4:
1183 @code{ede-minor-mode} associates the found project with the current
1184 buffer with a series of variables, such as @code{ede-object}, and
1185 @code{ede-object-project} and @code{ede-object-root-project}.
1186 @end table
1187
1188 Once a buffer is associated, @ede{} minor mode commands will operate
1189 on that buffer.
1190
1191 The function @code{ede-load-project-file} is at the heart of detecting
1192 projects, and it works by looping over all the known project autoload
1193 types in @code{ede-project-autoload} using the utility
1194 @code{ede-directory-project-p}.
1195
1196 The function @code{ede-directory-project-p} will call
1197 @code{ede-dir-to-projectfile} on every @code{ede-project-autoload}
1198 until one of them returns true. The method
1199 @code{ede-dir-to-projectfile} in turn gets the @code{:proj-file} slot
1200 from the autoload. If it is a string (i.e., a project file name), it
1201 checks to see if that exists in BUFFER's directory. If it is a
1202 function, then it calls that function and expects it to return a file
1203 name or @code{nil}. If the file exists, then this directory is assumed to be
1204 part of a project, and @code{ede-directory-project-p} returns the
1205 instance of @code{ede-project-autoload} that matched.
1206
1207 If the current directory contains the file @code{.ede-ignore} then
1208 that directory is automatically assumed to contain no projects, even
1209 if there is a matching pattern. Use this type of file in a directory
1210 that may contain many other sub projects, but still has a Makefile of
1211 some sort.
1212
1213 If the current directory is a project, then @ede{} scans upwards till
1214 it finds the top of the project. It does this by calling
1215 @code{ede-toplevel-project}. If this hasn't already been discovered,
1216 the directories as scanned upward one at a time until a directory with
1217 no project is found. The last found project becomes the project
1218 root. If the found instance of @code{ede-project-autoload} has a
1219 valid @code{proj-root} slot value, then that function is called instead
1220 of scanning the project by hand. Some project types have a short-cut
1221 for determining the root of a project, so this comes in handy.
1222
1223 Getting back to @code{ede-load-project-file}, this now has an instance
1224 of @code{ede-project-autoload}. It uses the @code{load-type} slot to
1225 both autoload in the project type, and to create a new instance of the
1226 project type found for the root of the project. That project is added
1227 to the global list of all projects. All subprojects are then created
1228 and assembled into the project data structures.
1229
1230
1231 @node User interface methods, Base project methods, Detecting a Project, Extending EDE
1232 @section User interface methods
1233
1234 These methods are core behaviors associated with user commands.
1235 If you do not implement a method, there is a reasonable default that
1236 may do what you need.
1237
1238 @table @code
1239 @item project-add-file
1240 Add a file to your project. Override this if you want to put new
1241 sources into different fields depending on extension, or other details.
1242 @item project-remove-file
1243 Reverse of project-add-file.
1244 @item project-compile-target
1245 Override this if you want to do something special when the user
1246 "compiles" this target.
1247 @item project-debug-target
1248 What to do when a user wants to debug your target.
1249 @item project-update-version
1250 Easily update the version number of your project.
1251 @item project-edit-file-target
1252 Edit the file the project's information is stored in.
1253 @item project-new-target
1254 Create a new target in a project.
1255 @item project-delete-target
1256 Delete a target from a project.
1257 @item project-make-dist
1258 Make a distribution (tar archive) of the project.
1259 @item project-rescan
1260 Rescan a project file, changing the data in the existing objects.
1261 @end table
1262
1263 @node Base project methods, Sourcecode objects, User interface methods, Extending EDE
1264 @section Base project methods
1265
1266 These methods are important for querying base information from project
1267 and target types:
1268
1269 @table @code
1270 @item ede-name
1271 Return a string that is the name of this target.
1272 @item ede-target-name
1273 Return a string that is the name of the target used by a Make system.
1274 @item ede-description
1275 A brief description of the project or target. This is currently used
1276 by the @samp{ede-speedbar} interface.
1277 @item ede-want-file-p
1278 Return non-@code{nil} if a target will accept a given file.
1279 It is generally unnecessary to override this. See the section on source
1280 code.
1281 @item ede-buffer-mine
1282 Return non-@code{nil} if a buffer belongs to this target. Used during
1283 association when a file is loaded. It is generally unnecessary to
1284 override this unless you keep auxiliary files.
1285 @end table
1286
1287 These methods are used by the semantic package extensions.
1288 @xref{Top,,, semantic, Semantic manual}.
1289
1290 @table @code
1291 @item ede-buffer-header-file
1292 Return a header file belonging to a given buffer. Prototypes are place
1293 there when appropriate
1294 @item ede-buffer-documentation-files
1295 Return the documentation file information about this file would be
1296 stored in.
1297 @item ede-documentation
1298 List all documentation a project or target is responsible for.
1299 @end table
1300
1301 @node Sourcecode objects, Compiler and Linker objects, Base project methods, Extending EDE
1302 @section Sourcecode objects
1303
1304 @ede{} projects track source file / target associates via source code
1305 objects. The definitions for this is in @file{ede-source.el}. A source
1306 code object contains methods that know how to identify a file as being
1307 of that class, (i.e., a C file ends with @file{.c}). Some targets can
1308 handle many different types of sources which must all be compiled
1309 together. For example, a mixed C and C++ program would have
1310 instantiations of both sourcecode types.
1311
1312 When a target needs to know if it will accept a source file, it
1313 references its list of source code objects. These objects then make
1314 that decision.
1315
1316 Source code objects are stored in the target objects as a list of
1317 symbols, where the symbol's value is the object. This enables the
1318 project save file mechanism to work.
1319
1320 Here is an example for an instantiation of an Emacs Lisp source code object:
1321
1322 @example
1323 (defvar ede-source-emacs
1324 (ede-sourcecode "ede-emacs-source"
1325 :name "Emacs Lisp"
1326 :sourcepattern "\\.el$"
1327 :garbagepattern '("*.elc"))
1328 "Emacs Lisp source code definition.")
1329 @end example
1330
1331 If you want to recycle parts of an existing sourcecode object, you can
1332 clone the original, and then just tweak the parts that are different.
1333 For example:
1334
1335 @example
1336 (defvar ede-source-emacs-autoload
1337 (clone ede-source-emacs "ede-source-emacs-autoload"
1338 :name "Emacs Lisp Autoload"
1339 :sourcepattern "-loaddefs\\.el")
1340 "Emacs Lisp autoload source code.")
1341 @end example
1342
1343 In this case, the garbage pattern is the same.
1344
1345 @xref{Sourcecode}.
1346
1347 @node Compiler and Linker objects, Project, Sourcecode objects, Extending EDE
1348 @section Compiler and Linker objects
1349
1350 In order for a target to create a @file{Makefile}, it must know how to
1351 compile the sources into the program or desired data file, and
1352 possibly link them together.
1353
1354 A compiler object instantiation is used to associate a given target
1355 with a given source code type. Some targets can handle many types of
1356 sources, and thus has many compilers available to it. Some targets
1357 may have multiple compilers for a given type of source code.
1358
1359 @ede{} will examine the actual source files in a target, cross reference
1360 that against the compiler list to come up with the final set of
1361 compilers that will be inserted into the Makefile.
1362
1363 Compiler instantiations must also insert variables specifying the
1364 compiler it plans to use, in addition to creating Automake settings for
1365 @file{configure.ac} when appropriate.
1366
1367 Compiler objects are stored in the target objects as a list of
1368 symbols, where the symbols value is the object. This enables the
1369 project output mechanism to work more efficiently.
1370
1371 Targets will also have a special "compiler" slot which lets a user
1372 explicitly choose the compiler they want to use.
1373
1374 Here is an example for texinfo:
1375
1376 @example
1377 (defvar ede-makeinfo-compiler
1378 (ede-compiler
1379 "ede-makeinfo-compiler"
1380 :name "makeinfo"
1381 :variables '(("MAKEINFO" . "makeinfo"))
1382 :commands '("makeinfo -o $@ $<")
1383 :autoconf '(("AC_CHECK_PROG" . "MAKEINFO, makeinfo"))
1384 :sourcetype '(ede-makeinfo-source)
1385 )
1386 "Compile texinfo files into info files.")
1387 @end example
1388
1389 @xref{Compilers}.
1390
1391 When creating compiler instantiations, it may be useful to @code{clone}
1392 an existing compiler variable. Cloning allows you to only modify
1393 parts of the original, while keeping the rest of the same.
1394 Modification of the original will result in the clone also being
1395 changed for shared value slots.
1396
1397 The second important object is the linker class. The linker is similar
1398 to the compiler, except several compilers might be used to create some
1399 object files, and only one linker is used to link those objects together.
1400
1401 See @file{ede-proj-obj.el} for examples of the combination.
1402
1403 @defindex pj
1404 @defindex tg
1405 @defindex sc
1406 @defindex cm
1407
1408 @node Project, Targets, Compiler and Linker objects, Extending EDE
1409 @section Project
1410
1411 @menu
1412 * ede-project-placeholder::
1413 * ede-project::
1414 * ede-cpp-root-project::
1415 * ede-simple-project::
1416 * ede-simple-base-project::
1417 * ede-proj-project::
1418 * project-am-makefile::
1419 * ede-step-project::
1420 @end menu
1421
1422 @node ede-project-placeholder, ede-project, Project, Project
1423 @subsection ede-project-placeholder
1424 @pjindex ede-project-placeholder
1425
1426 @table @asis
1427 @item Inheritance Tree:
1428 @table @code
1429 @item eieio-speedbar
1430 @table @code
1431 @item eieio-speedbar-directory-button
1432 @table @code
1433 @item ede-project-placeholder
1434 @table @asis
1435 @item Children:
1436 @w{@xref{ede-project}.}
1437 @end table
1438 @end table
1439 @end table
1440 @end table
1441 @end table
1442
1443 @table @asis
1444 @item Slots:
1445
1446 @table @code
1447 @item :name
1448 Type: @code{string} @*
1449 Default Value: @code{"Untitled"}
1450
1451 The name used when generating distribution files.
1452
1453 @item :version
1454 Type: @code{string} @*
1455 Default Value: @code{"1.0"}
1456
1457 The version number used when distributing files.
1458
1459 @item :directory
1460 Type: @code{string}
1461
1462 Directory this project is associated with.
1463
1464 @item :file
1465 Type: @code{string}
1466
1467 File name where this project is stored.
1468
1469 @end table
1470
1471 @end table
1472
1473 @subsubsection Specialized Methods
1474
1475 @deffn Method ede--project-inode :AFTER proj
1476 Get the inode of the directory project @var{PROJ} is in.
1477 @end deffn
1478
1479 @deffn Method ede-project-root :AFTER this
1480 If a project knows it's root, return it here.
1481 Allows for one-project-object-for-a-tree type systems.
1482 @end deffn
1483
1484 @deffn Method ede-find-subproject-for-directory :AFTER proj dir
1485 Find a subproject of @var{PROJ} that corresponds to @var{DIR}.
1486 @end deffn
1487
1488 @deffn Method ede-project-root-directory :AFTER this &optional file
1489 If a project knows it's root, return it here.
1490 Allows for one-project-object-for-a-tree type systems.
1491 Optional @var{FILE} is the file to test. It is ignored in preference
1492 of the anchor file for the project.
1493 @end deffn
1494
1495 @deffn Method ede-project-force-load :AFTER this
1496 Make sure the placeholder @var{THIS} is replaced with the real thing.
1497 Return the new object created in its place.
1498 @end deffn
1499
1500 @deffn Method project-interactive-select-target :AFTER this prompt
1501 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
1502 @end deffn
1503
1504 @deffn Method project-add-file :AFTER this file
1505 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
1506 @end deffn
1507
1508 @node ede-project, ede-cpp-root-project, ede-project-placeholder, Project
1509 @subsection ede-project
1510 @pjindex ede-project
1511
1512 @table @asis
1513 @item Inheritance Tree:
1514 @table @code
1515 @item eieio-speedbar
1516 @table @code
1517 @item eieio-speedbar-directory-button
1518 @table @code
1519 @item @w{@xref{ede-project-placeholder}.}
1520 @table @code
1521 @item ede-project
1522 @table @asis
1523 @item Children:
1524 @w{@xref{ede-cpp-root-project},} @w{ede-emacs-project,} @w{ede-linux-project,} @w{ede-maven-project,} @w{@xref{ede-simple-project},} @w{@xref{ede-simple-base-project},} @w{@xref{ede-proj-project},} @w{@xref{project-am-makefile},} @w{@xref{ede-step-project}.}
1525 @end table
1526 @end table
1527 @end table
1528 @end table
1529 @end table
1530 @end table
1531
1532 @table @asis
1533 @item Slots:
1534
1535 @table @code
1536 @item :targets
1537 Type: @code{list}
1538
1539 List of top level targets in this project.
1540
1541 @item :tool-cache
1542 Type: @code{list}
1543
1544 List of tool cache configurations in this project.
1545 This allows any tool to create, manage, and persist project-specific settings.
1546
1547 @item :web-site-url
1548 Type: @code{string} @*
1549
1550 URL to this projects web site.
1551 This is a URL to be sent to a web site for documentation.
1552
1553 @item :web-site-directory @*
1554
1555 A directory where web pages can be found by Emacs.
1556 For remote locations use a path compatible with ange-ftp or EFS@.
1557 You can also use TRAMP for use with rcp & scp.
1558
1559 @item :web-site-file @*
1560
1561 A file which contains the home page for this project.
1562 This file can be relative to slot @code{web-site-directory}.
1563 This can be a local file, use ange-ftp, EFS, or TRAMP.
1564
1565 @item :ftp-site
1566 Type: @code{string} @*
1567
1568 FTP site where this project's distribution can be found.
1569 This FTP site should be in Emacs form, as needed by @code{ange-ftp}, but can
1570 also be of a form used by TRAMP for use with scp, or rcp.
1571
1572 @item :ftp-upload-site
1573 Type: @code{string} @*
1574
1575 FTP Site to upload new distributions to.
1576 This FTP site should be in Emacs form as needed by @code{ange-ftp}.
1577 If this slot is @code{nil}, then use @code{ftp-site} instead.
1578
1579 @item :configurations
1580 Type: @code{list} @*
1581 Default Value: @code{("debug" "release")}
1582
1583 List of available configuration types.
1584 Individual target/project types can form associations between a configuration,
1585 and target specific elements such as build variables.
1586
1587 @item :configuration-default @*
1588 Default Value: @code{"debug"}
1589
1590 The default configuration.
1591
1592 @item :local-variables @*
1593 Default Value: @code{nil}
1594
1595 Project local variables
1596
1597 @end table
1598
1599 @end table
1600 @subsubsection Specialized Methods
1601
1602 @deffn Method ede-preprocessor-map :AFTER this
1603 Get the pre-processor map for project @var{THIS}.
1604 @end deffn
1605
1606 @deffn Method ede-subproject-relative-path :AFTER proj &optional parent-in
1607 Get a path name for @var{PROJ} which is relative to the parent project.
1608 If PARENT is specified, then be relative to the PARENT project.
1609 Specifying PARENT is useful for sub-sub projects relative to the root project.
1610 @end deffn
1611
1612 @deffn Method eieio-speedbar-description :AFTER obj
1613 Provide a speedbar description for @var{OBJ}.
1614 @end deffn
1615
1616 @deffn Method ede-map-any-target-p :AFTER this proc
1617 For project @var{THIS}, map @var{PROC} to all targets and return if any non-@code{nil}.
1618 Return the first non-@code{nil} value returned by @var{PROC}.
1619 @end deffn
1620
1621 @deffn Method ede-map-subprojects :AFTER this proc
1622 For object @var{THIS}, execute @var{PROC} on all direct subprojects.
1623 This function does not apply @var{PROC} to sub-sub projects.
1624 See also @dfn{ede-map-all-subprojects}.
1625 @end deffn
1626
1627 @deffn Method ede-convert-path :AFTER this path
1628 Convert path in a standard way for a given project.
1629 Default to making it project relative.
1630 Argument @var{THIS} is the project to convert @var{PATH} to.
1631 @end deffn
1632
1633 @deffn Method ede-name :AFTER this
1634 Return a short-name for @var{THIS} project file.
1635 Do this by extracting the lowest directory name.
1636 @end deffn
1637
1638 @deffn Method ede-set-project-variables :AFTER project &optional buffer
1639 Set variables local to @var{PROJECT} in @var{BUFFER}.
1640 @end deffn
1641
1642 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1643 Return the path to @var{OBJ}.
1644 Optional @var{DEPTH} is the depth we start at.
1645 @end deffn
1646
1647 @deffn Method ede-map-all-subprojects :AFTER this allproc
1648 For object @var{THIS}, execute PROC on @var{THIS} and all subprojects.
1649 This function also applies PROC to sub-sub projects.
1650 See also @dfn{ede-map-subprojects}.
1651 @end deffn
1652
1653 @deffn Method project-update-version :AFTER ot
1654 The @code{:version} of the project @var{OT} has been updated.
1655 Handle saving, or other detail.
1656 @end deffn
1657
1658 @deffn Method ede-buffer-header-file :AFTER this buffer
1659 Return @code{nil}, projects don't have header files.
1660 @end deffn
1661
1662 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1663 Return all documentation in project @var{THIS} based on @var{BUFFER}.
1664 @end deffn
1665
1666 @deffn Method ede-map-targets :AFTER this proc
1667 For object @var{THIS}, execute @var{PROC} on all targets.
1668 @end deffn
1669
1670 @deffn Method ede-buffer-mine :AFTER this buffer
1671 Return non-@code{nil} if object @var{THIS} lays claim to the file in @var{BUFFER}.
1672 @end deffn
1673
1674 @deffn Method ede-object-keybindings :BEFORE this
1675 Retrieves the slot @code{keybindings} from an object of class @code{ede-project}
1676 @end deffn
1677
1678 @deffn Method ede-description :AFTER this
1679 Return a description suitable for the minibuffer about @var{THIS}.
1680 @end deffn
1681
1682 @deffn Method eieio-speedbar-object-children :AFTER this
1683 Return the list of speedbar display children for @var{THIS}.
1684 @end deffn
1685
1686 @deffn Method project-make-dist :AFTER this
1687 Build a distribution for the project based on @var{THIS} project.
1688 @end deffn
1689
1690 @deffn Method ede-system-include-path :AFTER this
1691 Get the system include path used by project @var{THIS}.
1692 @end deffn
1693
1694 @deffn Method project-new-target-custom :AFTER proj
1695 Create a new target. It is up to the project @var{PROJ} to get the name.
1696 @end deffn
1697
1698 @deffn Method ede-subproject-p :AFTER proj
1699 Return non-@code{nil} if @var{PROJ} is a sub project.
1700 @end deffn
1701
1702 @deffn Method ede-expand-filename :AFTER this filename &optional force
1703 Return a fully qualified file name based on project @var{THIS}.
1704 @var{FILENAME} should be just a filename which occurs in a directory controlled
1705 by this project.
1706 Optional argument @var{FORCE} forces the default filename to be provided even if it
1707 doesn't exist.
1708 @end deffn
1709
1710 @deffn Method ede-menu-items-build :AFTER obj &optional current
1711 Return a list of menu items for building project @var{OBJ}.
1712 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1713 @end deffn
1714
1715 @deffn Method ede-update-version-in-source :AFTER this version
1716 Change occurrences of a version string in sources.
1717 In project @var{THIS}, cycle over all targets to give them a chance to set
1718 their sources to @var{VERSION}.
1719 @end deffn
1720
1721 @deffn Method project-new-target :AFTER proj &rest args
1722 Create a new target. It is up to the project @var{PROJ} to get the name.
1723 @end deffn
1724
1725 @deffn Method project-compile-project :AFTER obj &optional command
1726 Compile the entire current project @var{OBJ}.
1727 Argument @var{COMMAND} is the command to use when compiling.
1728 @end deffn
1729
1730 @deffn Method eieio-speedbar-object-buttonname :AFTER object
1731 Return a string to use as a speedbar button for @var{OBJECT}.
1732 @end deffn
1733
1734 @deffn Method ede-map-project-buffers :AFTER this proc
1735 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1736 @end deffn
1737
1738 @deffn Method ede-expand-filename-impl :AFTER this filename &optional force
1739 Return a fully qualified file name based on project @var{THIS}.
1740 @var{FILENAME} should be just a filename which occurs in a directory controlled
1741 by this project.
1742 Optional argument @var{FORCE} forces the default filename to be provided even if it
1743 doesn't exist.
1744 @end deffn
1745
1746 @deffn Method eieio-done-customizing :AFTER proj
1747 Call this when a user finishes customizing @var{PROJ}.
1748 @end deffn
1749
1750 @deffn Method ede-html-documentation :AFTER this
1751 Return a list of HTML files provided by project @var{THIS}.
1752 @end deffn
1753
1754 @deffn Method ede-documentation :AFTER this
1755 Return a list of files that provides documentation.
1756 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
1757 files in the project.
1758 @end deffn
1759
1760 @deffn Method project-interactive-select-target :AFTER this prompt
1761 Interactively query for a target that exists in project @var{THIS}.
1762 Argument @var{PROMPT} is the prompt to use when querying the user for a target.
1763 @end deffn
1764
1765 @deffn Method ede-target-in-project-p :AFTER proj target
1766 Is @var{PROJ} the parent of @var{TARGET}?
1767 If @var{TARGET} belongs to a subproject, return that project file.
1768 @end deffn
1769
1770 @deffn Method ede-find-target :AFTER proj buffer
1771 Fetch the target in @var{PROJ} belonging to @var{BUFFER} or @code{nil}.
1772 @end deffn
1773
1774 @deffn Method ede-add-subproject :AFTER proj-a proj-b
1775 Add into @var{PROJ-A}, the subproject @var{PROJ-B}.
1776 @end deffn
1777
1778 @deffn Method ede-commit-project :AFTER proj
1779 Commit any change to @var{PROJ} to its file.
1780 @end deffn
1781
1782 @deffn Method project-dist-files :AFTER this
1783 Return a list of files that constitutes a distribution of @var{THIS} project.
1784 @end deffn
1785
1786 @deffn Method ede-object-menu :BEFORE this
1787 Retrieves the slot @code{menu} from an object of class @code{ede-project}
1788 @end deffn
1789
1790 @deffn Method ede-commit-local-variables :AFTER proj
1791 Commit change to local variables in @var{PROJ}.
1792 @end deffn
1793
1794 @node ede-cpp-root-project, ede-simple-project, ede-project, Project
1795 @subsection ede-cpp-root-project
1796 @pjindex ede-cpp-root-project
1797
1798 @table @asis
1799 @item Inheritance Tree:
1800 @table @code
1801 @item eieio-speedbar
1802 @table @code
1803 @item eieio-speedbar-directory-button
1804 @table @code
1805 @item @w{@xref{ede-project-placeholder}.}
1806 @table @code
1807 @item @w{@xref{ede-project}.}
1808 @table @code
1809 @item ede-cpp-root-project
1810 No children
1811 @end table
1812 @end table
1813 @end table
1814 @end table
1815 @end table
1816 @end table
1817
1818 This class implements the @code{ede-cpp-root} project type.
1819 @xref{ede-cpp-root}, for information about using this project type.
1820
1821 @table @asis
1822 @item Slots:
1823
1824 @table @code
1825 @item :include-path
1826 Type: @code{list} @*
1827 Default Value: @code{(quote ("/include" "../include/"))}
1828
1829 The default locate function expands filenames within a project.
1830 If a header file (.h, .hh, etc.)@: name is expanded, and
1831 the @code{:locate-fcn} slot is @code{nil}, then the include path is checked
1832 first, and other directories are ignored. For very large
1833 projects, this optimization can save a lot of time.
1834
1835 Directory names in the path can be relative to the current
1836 buffer's @code{default-directory} (not starting with a /). Directories
1837 that are relative to the project's root should start with a /, such
1838 as "/include", meaning the directory @code{include} off the project root
1839 directory.
1840
1841 @item :system-include-path
1842 Type: @code{list} @*
1843 Default Value: @code{nil}
1844
1845 The system include path for files in this project.
1846 C files initialized in an ede-cpp-root-project have their semantic
1847 system include path set to this value. If this is @code{nil}, then the
1848 semantic path is not modified.
1849
1850 @item :spp-table
1851 Type: @code{list} @*
1852 Default Value: @code{nil}
1853
1854 C Preprocessor macros for your files.
1855 Preprocessor symbols will be used while parsing your files.
1856 These macros might be passed in through the command line compiler, or
1857 are critical symbols derived from header files. Providing header files
1858 macro values through this slot improves accuracy and performance.
1859 Use @code{:spp-files} to use these files directly.
1860
1861 @item :spp-files
1862 Type: @code{list} @*
1863 Default Value: @code{nil}
1864
1865 C header file with Preprocessor macros for your files.
1866 The PreProcessor symbols appearing in these files will be used while
1867 parsing files in this project.
1868 See @code{semantic-lex-c-preprocessor-symbol-map} for more on how this works.
1869
1870 @item :header-match-regexp
1871 Type: @code{string} @*
1872 Default Value: @code{"\\.\\(h\\(h\\|xx\\|pp\\|\\+\\+\\)?\\|H\\)$\\|\\<\\w+$"}
1873
1874 Regexp used to identify C/C++ header files.
1875
1876 @item :locate-fcn
1877 Type: @code{(or null function)} @*
1878 Default Value: @code{nil}
1879
1880 The locate function can be used in place of
1881 @dfn{ede-expand-filename} so you can quickly customize your custom target
1882 to use specialized local routines instead of the EDE routines.
1883 The function symbol must take two arguments:
1884 NAME - The name of the file to find.
1885 DIR - The directory root for this cpp-root project.
1886
1887 It should return the fully qualified file name passed in from NAME@.
1888 If that file does not exist, it should return @code{nil}.
1889
1890 @end table
1891
1892 @end table
1893 @subsubsection Specialized Methods
1894
1895 @deffn Method initialize-instance :AFTER this &rest fields
1896 Make sure the @code{:file} is fully expanded.
1897 @end deffn
1898
1899 @deffn Method ede-preprocessor-map :AFTER this
1900 Get the pre-processor map for project @var{THIS}.
1901 @end deffn
1902
1903 @deffn Method ede-cpp-root-header-file-p :AFTER proj name
1904 Non @code{nil} if in @var{PROJ} the filename @var{NAME} is a header.
1905 @end deffn
1906
1907 @deffn Method ede-system-include-path :AFTER this
1908 Get the system include path used by project @var{THIS}.
1909 @end deffn
1910
1911 @deffn Method ede-expand-filename-impl :AFTER proj name
1912 Within this project @var{PROJ}, find the file @var{NAME}.
1913 This knows details about or source tree.
1914 @end deffn
1915
1916 @node ede-simple-project, ede-simple-base-project, ede-cpp-root-project, Project
1917 @subsection ede-simple-project
1918 @pjindex ede-simple-project
1919
1920 @table @asis
1921 @item Inheritance Tree:
1922 @table @code
1923 @item eieio-speedbar
1924 @table @code
1925 @item eieio-speedbar-directory-button
1926 @table @code
1927 @item @w{@xref{ede-project-placeholder}.}
1928 @table @code
1929 @item @w{@xref{ede-project}.}
1930 @table @code
1931 @item ede-simple-project
1932 No children
1933 @end table
1934 @end table
1935 @end table
1936 @end table
1937 @end table
1938 @end table
1939
1940 @subsubsection Specialized Methods
1941
1942 @deffn Method ede-commit-project :AFTER proj
1943 Commit any change to @var{PROJ} to its file.
1944 @end deffn
1945
1946 @node ede-simple-base-project, ede-proj-project, ede-simple-project, Project
1947 @subsection ede-simple-base-project
1948 @pjindex ede-simple-base-project
1949
1950 @table @asis
1951 @item Inheritance Tree:
1952 @table @code
1953 @item eieio-speedbar
1954 @table @code
1955 @item eieio-speedbar-directory-button
1956 @table @code
1957 @item @w{@xref{ede-project-placeholder}.}
1958 @table @code
1959 @item @w{@xref{ede-project}.}
1960 @table @code
1961 @item ede-simple-base-project
1962 No children
1963 @end table
1964 @end table
1965 @end table
1966 @end table
1967 @end table
1968 @end table
1969
1970 EDE Simple project base class.
1971 This one project could control a tree of subdirectories.
1972
1973 @table @asis
1974 @end table
1975
1976 @node ede-proj-project, project-am-makefile, ede-simple-base-project, Project
1977 @subsection ede-proj-project
1978 @pjindex ede-proj-project
1979
1980 @table @asis
1981 @item Inheritance Tree:
1982 @table @code
1983 @item eieio-speedbar
1984 @table @code
1985 @item eieio-speedbar-directory-button
1986 @table @code
1987 @item @w{@xref{ede-project-placeholder}.}
1988 @table @code
1989 @item @w{@xref{ede-project}.}
1990 @table @code
1991 @item ede-proj-project
1992 No children
1993 @end table
1994 @end table
1995 @end table
1996 @end table
1997 @end table
1998 @end table
1999
2000 @table @asis
2001 @item Slots:
2002
2003 @table @code
2004 @item :makefile-type
2005 Type: @code{symbol} @*
2006 Default Value: @code{Makefile}
2007
2008 The type of Makefile to generate.
2009 Can be one of @code{'Makefile}, 'Makefile.in, or 'Makefile.am.
2010 If this value is NOT @code{'Makefile}, then that overrides the @code{:makefile} slot
2011 in targets.
2012
2013 @item :variables
2014 Type: @code{list} @*
2015 Default Value: @code{nil}
2016
2017 Variables to set in this Makefile.
2018
2019 @item :configuration-variables
2020 Type: @code{list} @*
2021 Default Value: @code{("debug" (("DEBUG" . "1")))}
2022
2023 Makefile variables to use in different configurations.
2024 These variables are used in the makefile when a configuration becomes active.
2025
2026 @item :inference-rules @*
2027 Default Value: @code{nil}
2028
2029 Inference rules to add to the makefile.
2030
2031 @item :include-file @*
2032 Default Value: @code{nil}
2033
2034 Additional files to include.
2035 These files can contain additional rules, variables, and customizations.
2036
2037 @item :automatic-dependencies
2038 Type: @code{boolean} @*
2039 Default Value: @code{t}
2040
2041 Non-@code{nil} to do implement automatic dependencies in the Makefile.
2042
2043 @item :metasubproject
2044 Type: @code{boolean} @*
2045 Default Value: @code{nil}
2046
2047 Non-@code{nil} if this is a metasubproject.
2048 Usually, a subproject is determined by a parent project. If multiple top level
2049 projects are grouped into a large project not maintained by EDE, then you need
2050 to set this to non-@code{nil}. The only effect is that the @code{dist} rule will then avoid
2051 making a tar file.
2052
2053 @end table
2054
2055 @end table
2056 @subsubsection Specialized Methods
2057
2058 @deffn Method ede-proj-makefile-create :AFTER this mfilename
2059 Create a Makefile for all Makefile targets in @var{THIS}.
2060 @var{MFILENAME} is the makefile to generate.
2061 @end deffn
2062
2063 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2064 Insert rules needed by @var{THIS} target.
2065 @end deffn
2066
2067 @deffn Method ede-proj-makefile-tags :AFTER this targets
2068 Insert into the current location rules to make recursive TAGS files.
2069 Argument @var{THIS} is the project to create tags for.
2070 Argument @var{TARGETS} are the targets we should depend on for TAGS.
2071 @end deffn
2072
2073 @deffn Method ede-proj-makefile-insert-variables :AFTER this
2074 Insert variables needed by target @var{THIS}.
2075 @end deffn
2076
2077 @deffn Method project-make-dist :AFTER this
2078 Build a distribution for the project based on @var{THIS} target.
2079 @end deffn
2080
2081 @deffn Method ede-proj-makefile-insert-dist-rules :AFTER this
2082 Insert distribution rules for @var{THIS} in a Makefile, such as CLEAN and DIST.
2083 @end deffn
2084
2085 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2086 Insert any symbols that the DIST rule should depend on.
2087 Argument @var{THIS} is the project that should insert stuff.
2088 @end deffn
2089
2090 @deffn Method ede-proj-makefile-insert-subproj-rules :AFTER this
2091 Insert a rule for the project @var{THIS} which should be a subproject.
2092 @end deffn
2093
2094 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
2095 Create a Makefile for all Makefile targets in @var{THIS} if needed.
2096 @var{MFILENAME} is the makefile to generate.
2097 @end deffn
2098
2099 @deffn Method ede-proj-configure-test-required-file :AFTER this file
2100 For project @var{THIS}, test that the file @var{FILE} exists, or create it.
2101 @end deffn
2102
2103 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
2104 Setup the build environment for project @var{THIS}.
2105 Handles the Makefile, or a Makefile.am configure.ac combination.
2106 Optional argument @var{FORCE} will force items to be regenerated.
2107 @end deffn
2108
2109 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
2110 Return a list of patterns that are considered garbage to @var{THIS}.
2111 These are removed with make clean.
2112 @end deffn
2113
2114 @deffn Method ede-proj-configure-synchronize :AFTER this
2115 Synchronize what we know about project @var{THIS} into configure.ac.
2116 @end deffn
2117
2118 @deffn Method ede-proj-makefile-insert-variables-new :AFTER this
2119 Insert variables needed by target @var{THIS}.
2120
2121 NOTE: Not yet in use! This is part of an SRecode conversion of
2122 EDE that is in progress.
2123 @end deffn
2124
2125 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
2126 Return a list of configuration variables from @var{THIS}.
2127 Use @var{CONFIGURATION} as the current configuration to query.
2128 @end deffn
2129
2130 @deffn Method eieio-done-customizing :AFTER proj
2131 Call this when a user finishes customizing this object.
2132 Argument @var{PROJ} is the project to save.
2133 @end deffn
2134
2135 @deffn Method ede-proj-configure-recreate :AFTER this
2136 Delete project @var{THIS}'s configure script and start over.
2137 @end deffn
2138
2139 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
2140 Insert user specified rules needed by @var{THIS} target.
2141 This is different from @dfn{ede-proj-makefile-insert-rules} in that this
2142 function won't create the building rules which are auto created with
2143 automake.
2144 @end deffn
2145
2146 @deffn Method ede-proj-dist-makefile :AFTER this
2147 Return the name of the Makefile with the DIST target in it for @var{THIS}.
2148 @end deffn
2149
2150 @deffn Method ede-proj-configure-file :AFTER this
2151 The configure.ac script used by project @var{THIS}.
2152 @end deffn
2153
2154 @deffn Method ede-commit-project :AFTER proj
2155 Commit any change to @var{PROJ} to its file.
2156 @end deffn
2157
2158 @deffn Method project-dist-files :AFTER this
2159 Return a list of files that constitutes a distribution of @var{THIS} project.
2160 @end deffn
2161
2162 @deffn Method ede-commit-local-variables :AFTER proj
2163 Commit change to local variables in @var{PROJ}.
2164 @end deffn
2165
2166 @node project-am-makefile, ede-step-project, ede-proj-project, Project
2167 @subsection project-am-makefile
2168 @pjindex project-am-makefile
2169
2170 @table @asis
2171 @item Inheritance Tree:
2172 @table @code
2173 @item eieio-speedbar
2174 @table @code
2175 @item eieio-speedbar-directory-button
2176 @table @code
2177 @item @w{@xref{ede-project-placeholder}.}
2178 @table @code
2179 @item @w{@xref{ede-project}.}
2180 @table @code
2181 @item project-am-makefile
2182 No children
2183 @end table
2184 @end table
2185 @end table
2186 @end table
2187 @end table
2188 @end table
2189
2190 @subsubsection Specialized Methods
2191
2192 @deffn Method project-am-subtree :AFTER ampf subdir
2193 Return the sub project in @var{AMPF} specified by @var{SUBDIR}.
2194 @end deffn
2195
2196 @deffn Method project-targets-for-file :AFTER proj
2197 Return a list of targets the project @var{PROJ}.
2198 @end deffn
2199
2200 @deffn Method project-new-target :AFTER proj &optional name type
2201 Create a new target named @var{NAME}.
2202 Argument @var{TYPE} is the type of target to insert. This is a string
2203 matching something in @code{project-am-type-alist} or type class symbol.
2204 Despite the fact that this is a method, it depends on the current
2205 buffer being in order to provide a smart default target type.
2206 @end deffn
2207
2208 @node ede-step-project, , project-am-makefile, Project
2209 @subsection ede-step-project
2210 @pjindex ede-step-project
2211
2212 @table @asis
2213 @item Inheritance Tree:
2214 @table @code
2215 @item eieio-speedbar
2216 @table @code
2217 @item eieio-speedbar-directory-button
2218 @table @code
2219 @item @w{@xref{ede-project-placeholder}.}
2220 @table @code
2221 @item @w{@xref{ede-project}.}
2222 @table @code
2223 @item ede-step-project
2224 No children
2225 @end table
2226 @end table
2227 @end table
2228 @end table
2229 @end table
2230 @end table
2231
2232 @table @asis
2233 @item Slots:
2234
2235 @table @code
2236 @item :init-variables
2237 Type: @code{list} @*
2238 Default Value: @code{nil}
2239
2240 Variables to set in this Makefile, at top of file.
2241
2242 @item :additional-variables
2243 Type: @code{(or null list)} @*
2244 Default Value: @code{nil}
2245
2246 Arbitrary variables needed from this project.
2247 It is safe to leave this blank.
2248
2249 @item :additional-rules
2250 Type: @code{(or null list)} @*
2251 Default Value: @code{nil}
2252
2253 Arbitrary rules and dependencies needed to make this target.
2254 It is safe to leave this blank.
2255
2256 @item :installation-domain
2257 Type: @code{symbol} @*
2258 Default Value: @code{user}
2259
2260 Installation domain specification.
2261 The variable GNUSTEP_INSTALLATION_DOMAIN is set at this value.
2262
2263 @item :preamble
2264 Type: @code{(or null list)} @*
2265 Default Value: @code{(quote ("GNUmakefile.preamble"))}
2266
2267 The auxiliary makefile for additional variables.
2268 Included just before the specific target files.
2269
2270 @item :postamble
2271 Type: @code{(or null list)} @*
2272 Default Value: @code{(quote ("GNUmakefile.postamble"))}
2273
2274 The auxiliary makefile for additional rules.
2275 Included just after the specific target files.
2276
2277 @item :metasubproject
2278 Type: @code{boolean} @*
2279 Default Value: @code{nil}
2280
2281 Non-@code{nil} if this is a metasubproject.
2282 Usually, a subproject is determined by a parent project. If multiple top level
2283 projects are grouped into a large project not maintained by EDE, then you need
2284 to set this to non-@code{nil}. The only effect is that the @code{dist} rule will then avoid
2285 making a tar file.
2286
2287 @end table
2288
2289 @end table
2290 @subsubsection Specialized Methods
2291
2292 @deffn Method ede-proj-makefile-create :AFTER this mfilename
2293 Create a GNUmakefile for all Makefile targets in @var{THIS}.
2294 @var{MFILENAME} is the makefile to generate.
2295 @end deffn
2296
2297 @deffn Method project-make-dist :AFTER this
2298 Build a distribution for the project based on @var{THIS} target.
2299 @end deffn
2300
2301 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
2302 Create a Makefile for all Makefile targets in @var{THIS} if needed.
2303 @var{MFILENAME} is the makefile to generate.
2304 @end deffn
2305
2306 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
2307 Setup the build environment for project @var{THIS}.
2308 Handles the Makefile, or a Makefile.am configure.ac combination.
2309 Optional argument @var{FORCE} will force items to be regenerated.
2310 @end deffn
2311
2312 @deffn Method eieio-done-customizing :AFTER proj
2313 Call this when a user finishes customizing this object.
2314 Argument @var{PROJ} is the project to save.
2315 @end deffn
2316
2317 @deffn Method ede-proj-dist-makefile :AFTER this
2318 Return the name of the Makefile with the DIST target in it for @var{THIS}.
2319 @end deffn
2320
2321 @deffn Method ede-commit-project :AFTER proj
2322 Commit any change to @var{PROJ} to its file.
2323 @end deffn
2324
2325 @deffn Method project-dist-files :AFTER this
2326 Return a list of files that constitutes a distribution of @var{THIS} project.
2327 @end deffn
2328
2329 @deffn Method ede-commit-local-variables :AFTER proj
2330 Commit change to local variables in @var{PROJ}.
2331 @end deffn
2332
2333 @node Targets, Sourcecode, Project, Extending EDE
2334 @section Targets
2335
2336 @menu
2337 * ede-target::
2338 * ede-proj-target::
2339 * ede-proj-target-makefile::
2340 * semantic-ede-proj-target-grammar::
2341 * ede-proj-target-makefile-objectcode::
2342 * ede-proj-target-makefile-archive::
2343 * ede-proj-target-makefile-program::
2344 * ede-proj-target-makefile-shared-object::
2345 * ede-proj-target-elisp::
2346 * ede-proj-target-elisp-autoloads::
2347 * ede-proj-target-makefile-miscelaneous::
2348 * ede-proj-target-makefile-info::
2349 * ede-proj-target-scheme::
2350 * project-am-target::
2351 * project-am-objectcode::
2352 * project-am-program::
2353 * project-am-header-noinst::
2354 * project-am-header-inst::
2355 * project-am-lisp::
2356 * project-am-texinfo::
2357 * project-am-man::
2358 @end menu
2359
2360
2361 @node ede-target, ede-proj-target, Targets, Targets
2362 @subsection ede-target
2363 @tgindex ede-target
2364
2365 @table @asis
2366 @item Inheritance Tree:
2367 @table @code
2368 @item eieio-speedbar
2369 @table @code
2370 @item eieio-speedbar-directory-button
2371 @table @code
2372 @item ede-target
2373 @table @asis
2374 @item Children:
2375 @w{ede-cpp-root-target,} @w{ede-emacs-target-c,} @w{ede-emacs-target-el,} @w{ede-emacs-target-misc,} @w{ede-linux-target-c,} @w{ede-linux-target-misc,} @w{ede-maven-target-java,} @w{ede-maven-target-c,} @w{ede-maven-target-misc,} @w{ede-simple-target,} @w{@xref{ede-proj-target},} @w{@xref{project-am-target}.}
2376 @end table
2377 @end table
2378 @end table
2379 @end table
2380 @end table
2381
2382 @table @asis
2383 @item Slots:
2384
2385 @table @code
2386 @item :name
2387 Type: @code{string}
2388
2389 Name of this target.
2390
2391 @item :path
2392 Type: @code{string}
2393
2394 The path to the sources of this target.
2395 Relative to the path of the project it belongs to.
2396
2397 @item :source
2398 Type: @code{list} @*
2399 Default Value: @code{nil}
2400
2401 Source files in this target.
2402
2403 @item :versionsource
2404 Type: @code{list} @*
2405 Default Value: @code{nil}
2406
2407 Source files with a version string in them.
2408 These files are checked for a version string whenever the EDE version
2409 of the master project is changed. When strings are found, the version
2410 previously there is updated.
2411
2412 @end table
2413
2414 @end table
2415 @subsubsection Specialized Methods
2416
2417 @deffn Method ede-preprocessor-map :AFTER this
2418 Get the pre-processor map for project @var{THIS}.
2419 @end deffn
2420
2421 @deffn Method eieio-speedbar-description :AFTER obj
2422 Provide a speedbar description for @var{OBJ}.
2423 @end deffn
2424
2425 @deffn Method project-compile-target :AFTER obj &optional command
2426 Compile the current target @var{OBJ}.
2427 Argument @var{COMMAND} is the command to use for compiling the target.
2428 @end deffn
2429
2430 @deffn Method project-debug-target :AFTER obj
2431 Run the current project target @var{OBJ} in a debugger.
2432 @end deffn
2433
2434 @deffn Method ede-convert-path :AFTER this path
2435 Convert path in a standard way for a given project.
2436 Default to making it project relative.
2437 Argument @var{THIS} is the project to convert @var{PATH} to.
2438 @end deffn
2439
2440 @deffn Method ede-name :AFTER this
2441 Return the name of @var{THIS} targt.
2442 @end deffn
2443
2444 @deffn Method ede-target-buffer-in-sourcelist :AFTER this buffer source
2445 Return non-@code{nil} if object @var{THIS} is in @var{BUFFER} to a @var{SOURCE} list.
2446 Handles complex path issues.
2447 @end deffn
2448
2449 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
2450 Return the path to @var{OBJ}.
2451 Optional @var{DEPTH} is the depth we start at.
2452 @end deffn
2453
2454 @deffn Method ede-buffer-header-file :AFTER this buffer
2455 There are no default header files in EDE@.
2456 Do a quick check to see if there is a Header tag in this buffer.
2457 @end deffn
2458
2459 @deffn Method project-remove-file :AFTER ot fnnd
2460 Remove the current buffer from project target @var{OT}.
2461 Argument @var{FNND} is an argument.
2462 @end deffn
2463
2464 @deffn Method ede-buffer-documentation-files :AFTER this buffer
2465 Check for some documentation files for @var{THIS}.
2466 Also do a quick check to see if there is a Documentation tag in this @var{BUFFER}.
2467 @end deffn
2468
2469 @deffn Method ede-map-target-buffers :AFTER this proc
2470 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
2471 @end deffn
2472
2473 @deffn Method eieio-speedbar-child-description :AFTER obj
2474 Provide a speedbar description for a plain-child of @var{OBJ}.
2475 A plain child is a child element which is not an EIEIO object.
2476 @end deffn
2477
2478 @deffn Method ede-object-keybindings :BEFORE this
2479 Retrieves the slot @code{keybindings} from an object of class @code{ede-target}
2480 @end deffn
2481
2482 @deffn Method ede-description :AFTER this
2483 Return a description suitable for the minibuffer about @var{THIS}.
2484 @end deffn
2485
2486 @deffn Method eieio-speedbar-object-children :AFTER this
2487 Return the list of speedbar display children for @var{THIS}.
2488 @end deffn
2489
2490 @deffn Method ede-system-include-path :AFTER this
2491 Get the system include path used by project @var{THIS}.
2492 @end deffn
2493
2494 @deffn Method ede-object-sourcecode :BEFORE this
2495 Retrieves the slot @code{sourcetype} from an object of class @code{ede-target}
2496 @end deffn
2497
2498 @deffn Method ede-expand-filename :AFTER this filename &optional force
2499 Return a fully qualified file name based on target @var{THIS}.
2500 @var{FILENAME} should be a filename which occurs in a directory in which @var{THIS} works.
2501 Optional argument @var{FORCE} forces the default filename to be provided even if it
2502 doesn't exist.
2503 @end deffn
2504
2505 @deffn Method ede-menu-items-build :AFTER obj &optional current
2506 Return a list of menu items for building target @var{OBJ}.
2507 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
2508 @end deffn
2509
2510 @deffn Method ede-want-file-p :AFTER this file
2511 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2512 @end deffn
2513
2514 @deffn Method ede-update-version-in-source :AFTER this version
2515 In sources for @var{THIS}, change version numbers to @var{VERSION}.
2516 @end deffn
2517
2518 @deffn Method project-delete-target :AFTER ot
2519 Delete the current target @var{OT} from it's parent project.
2520 @end deffn
2521
2522 @deffn Method ede-target-sourcecode :AFTER this
2523 Return the sourcecode objects which @var{THIS} permits.
2524 @end deffn
2525
2526 @deffn Method eieio-speedbar-child-make-tag-lines :AFTER this depth
2527 Create a speedbar tag line for a child of @var{THIS}.
2528 It has depth @var{DEPTH}.
2529 @end deffn
2530
2531 @deffn Method eieio-speedbar-object-buttonname :AFTER object
2532 Return a string to use as a speedbar button for @var{OBJECT}.
2533 @end deffn
2534
2535 @deffn Method eieio-done-customizing :AFTER target
2536 Call this when a user finishes customizing @var{TARGET}.
2537 @end deffn
2538
2539 @deffn Method project-edit-file-target :AFTER ot
2540 Edit the target @var{OT} associated w/ this file.
2541 @end deffn
2542
2543 @deffn Method ede-documentation :AFTER this
2544 Return a list of files that provides documentation.
2545 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2546 files in the project.
2547 @end deffn
2548
2549 @deffn Method ede-want-file-source-p :AFTER this file
2550 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2551 @end deffn
2552
2553 @deffn Method ede-want-file-auxiliary-p :AFTER this file
2554 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2555 @end deffn
2556
2557 @deffn Method project-add-file :AFTER ot file
2558 Add the current buffer into project project target @var{OT}.
2559 Argument @var{FILE} is the file to add.
2560 @end deffn
2561
2562 @deffn Method ede-target-name :AFTER this
2563 Return the name of @var{THIS} target, suitable for make or debug style commands.
2564 @end deffn
2565
2566 @deffn Method ede-object-menu :BEFORE this
2567 Retrieves the slot @code{menu} from an object of class @code{ede-target}
2568 @end deffn
2569
2570 @node ede-proj-target, ede-proj-target-makefile, ede-target, Targets
2571 @subsection ede-proj-target
2572 @tgindex ede-proj-target
2573
2574 @table @asis
2575 @item Inheritance Tree:
2576 @table @code
2577 @item eieio-speedbar
2578 @table @code
2579 @item eieio-speedbar-directory-button
2580 @table @code
2581 @item @w{@xref{ede-target}.}
2582 @table @code
2583 @item ede-proj-target
2584 @table @asis
2585 @item Children:
2586 @w{@xref{ede-proj-target-makefile},} @w{ede-proj-target-aux,} @w{@xref{ede-proj-target-scheme}.}
2587 @end table
2588 @end table
2589 @end table
2590 @end table
2591 @end table
2592 @end table
2593
2594 @table @asis
2595 @item Slots:
2596
2597 @table @code
2598 @item :name
2599 Type: @code{string}
2600
2601 Name of this target.
2602
2603 @item :path
2604 Type: @code{string}
2605
2606 The path to the sources of this target.
2607 Relative to the path of the project it belongs to.
2608
2609 @item :auxsource
2610 Type: @code{list} @*
2611 Default Value: @code{nil}
2612
2613 Auxiliary source files included in this target.
2614 Each of these is considered equivalent to a source file, but it is not
2615 distributed, and each should have a corresponding rule to build it.
2616
2617 @item :compiler
2618 Type: @code{(or null symbol)} @*
2619 Default Value: @code{nil}
2620
2621 The compiler to be used to compile this object.
2622 This should be a symbol, which contains the object defining the compiler.
2623 This enables save/restore to do so by name, permitting the sharing
2624 of these compiler resources, and global customization thereof.
2625
2626 @item :linker
2627 Type: @code{(or null symbol)} @*
2628 Default Value: @code{nil}
2629
2630 The linker to be used to link compiled sources for this object.
2631 This should be a symbol, which contains the object defining the linker.
2632 This enables save/restore to do so by name, permitting the sharing
2633 of these linker resources, and global customization thereof.
2634
2635 @end table
2636
2637 @end table
2638 @subsubsection Specialized Methods
2639
2640 @deffn Method project-compile-target :AFTER obj &optional command
2641 Compile the current target @var{OBJ}.
2642 Argument @var{COMMAND} is the command to use for compiling the target.
2643 @end deffn
2644
2645 @deffn Method project-debug-target :AFTER obj
2646 Run the current project target @var{OBJ} in a debugger.
2647 @end deffn
2648
2649 @deffn Method ede-proj-configure-add-missing :AFTER this
2650 Query if any files needed by @var{THIS} provided by automake are missing.
2651 Results in --add-missing being passed to automake.
2652 @end deffn
2653
2654 @deffn Method ede-proj-flush-autoconf :AFTER this
2655 Flush the configure file (current buffer) to accommodate @var{THIS}.
2656 By flushing, remove any cruft that may be in the file. Subsequent
2657 calls to @dfn{ede-proj-tweak-autoconf} can restore items removed by flush.
2658 @end deffn
2659
2660 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2661 Insert rules needed by @var{THIS} target.
2662 @end deffn
2663
2664 @deffn Method project-remove-file :AFTER target file
2665 For @var{TARGET}, remove @var{FILE}.
2666 @var{FILE} must be massaged by @dfn{ede-convert-path}.
2667 @end deffn
2668
2669 @deffn Method ede-proj-configure-create-missing :AFTER this
2670 Add any missing files for @var{THIS} by creating them.
2671 @end deffn
2672
2673 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2674 Return the variable name for @var{THIS}'s sources.
2675 @end deffn
2676
2677 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2678 Insert variables needed by target @var{THIS}.
2679 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2680 sources variable.
2681 @end deffn
2682
2683 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2684 Insert variables needed by target @var{THIS} in Makefile.am after SOURCES.
2685 @end deffn
2686
2687 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2688 Insert any symbols that the DIST rule should depend on.
2689 Argument @var{THIS} is the target that should insert stuff.
2690 @end deffn
2691
2692 @deffn Method ede-proj-linkers :AFTER obj
2693 List of linkers being used by @var{OBJ}.
2694 If the @code{linker} slot is empty, concoct one on a first match found
2695 basis for any given type from the @code{availablelinkers} slot.
2696 Otherwise, return the @code{linker} slot.
2697 Converts all symbols into the objects to be used.
2698 @end deffn
2699
2700 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
2701 Return a list of patterns that are considered garbage to @var{THIS}.
2702 These are removed with make clean.
2703 @end deffn
2704
2705 @deffn Method ede-proj-tweak-autoconf :AFTER this
2706 Tweak the configure file (current buffer) to accommodate @var{THIS}.
2707 @end deffn
2708
2709 @deffn Method ede-proj-compilers :AFTER obj
2710 List of compilers being used by @var{OBJ}.
2711 If the @code{compiler} slot is empty, concoct one on a first match found
2712 basis for any given type from the @code{availablecompilers} slot.
2713 Otherwise, return the @code{compiler} slot.
2714 Converts all symbols into the objects to be used.
2715 @end deffn
2716
2717 @deffn Method project-delete-target :AFTER this
2718 Delete the current target @var{THIS} from it's parent project.
2719 @end deffn
2720
2721 @deffn Method ede-proj-makefile-target-name :AFTER this
2722 Return the name of the main target for @var{THIS} target.
2723 @end deffn
2724
2725 @deffn Method eieio-done-customizing :AFTER target
2726 Call this when a user finishes customizing this object.
2727 Argument @var{TARGET} is the project we are completing customization on.
2728 @end deffn
2729
2730 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
2731 Insert user specified rules needed by @var{THIS} target.
2732 @end deffn
2733
2734 @deffn Method project-add-file :AFTER this file
2735 Add to target @var{THIS} the current buffer represented as @var{FILE}.
2736 @end deffn
2737
2738 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2739 Insert variables needed by target @var{THIS} in Makefile.am before SOURCES.
2740 @end deffn
2741
2742 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2743 Insert any symbols that the DIST rule should depend on.
2744 Argument @var{THIS} is the target that should insert stuff.
2745 @end deffn
2746
2747 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2748 Return a list of source files to convert to dependencies.
2749 Argument @var{THIS} is the target to get sources from.
2750 @end deffn
2751
2752 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2753 Insert the source variables needed by @var{THIS}.
2754 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2755 sources variable.
2756 @end deffn
2757
2758
2759 @node ede-proj-target-makefile, semantic-ede-proj-target-grammar, ede-proj-target, Targets
2760 @subsection ede-proj-target-makefile
2761 @tgindex ede-proj-target-makefile
2762
2763 @table @asis
2764 @item Inheritance Tree:
2765 @table @code
2766 @item eieio-speedbar
2767 @table @code
2768 @item eieio-speedbar-directory-button
2769 @table @code
2770 @item @w{@xref{ede-target}.}
2771 @table @code
2772 @item @w{@xref{ede-proj-target}.}
2773 @table @code
2774 @item ede-proj-target-makefile
2775 @table @asis
2776 @item Children:
2777 @w{@xref{semantic-ede-proj-target-grammar},} @w{@xref{ede-proj-target-makefile-objectcode},} @w{@xref{ede-proj-target-elisp},} @w{@xref{ede-proj-target-makefile-miscelaneous},} @w{@xref{ede-proj-target-makefile-info}.}
2778 @end table
2779 @end table
2780 @end table
2781 @end table
2782 @end table
2783 @end table
2784 @end table
2785
2786 @table @asis
2787 @item Slots:
2788
2789 @table @code
2790 @item :makefile
2791 Type: @code{string} @*
2792 Default Value: @code{"Makefile"}
2793
2794 File name of generated Makefile.
2795
2796 @item :partofall
2797 Type: @code{boolean} @*
2798 Default Value: @code{t}
2799
2800 Non @code{nil} means the rule created is part of the all target.
2801 Setting this to @code{nil} creates the rule to build this item, but does not
2802 include it in the @code{all:} rule.
2803
2804 @item :configuration-variables
2805 Type: @code{list} @*
2806 Default Value: @code{nil}
2807
2808 Makefile variables appended to use in different configurations.
2809 These variables are used in the makefile when a configuration becomes active.
2810 Target variables are always renamed such as foo_CFLAGS, then included into
2811 commands where the variable would usually appear.
2812
2813 @item :rules
2814 Type: @code{list} @*
2815 Default Value: @code{nil}
2816
2817 Arbitrary rules and dependencies needed to make this target.
2818 It is safe to leave this blank.
2819
2820 @end table
2821
2822 @end table
2823 @subsubsection Specialized Methods
2824
2825 @deffn Method ede-proj-makefile-dependencies :AFTER this
2826 Return a string representing the dependencies for @var{THIS}.
2827 Some compilers only use the first element in the dependencies, others
2828 have a list of intermediates (object files), and others don't care.
2829 This allows customization of how these elements appear.
2830 @end deffn
2831
2832 @deffn Method project-compile-target :AFTER obj &optional command
2833 Compile the current target program @var{OBJ}.
2834 Optional argument @var{COMMAND} is the s the alternate command to use.
2835 @end deffn
2836
2837 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2838 Insert rules needed by @var{THIS} target.
2839 @end deffn
2840
2841 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2842 Insert variables needed by target @var{THIS}.
2843 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2844 sources variable.
2845 @end deffn
2846
2847 @deffn Method ede-proj-makefile-insert-commands :AFTER this
2848 Insert the commands needed by target @var{THIS}.
2849 For targets, insert the commands needed by the chosen compiler.
2850 @end deffn
2851
2852 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
2853 Return a list of configuration variables from @var{THIS}.
2854 Use @var{CONFIGURATION} as the current configuration to query.
2855 @end deffn
2856
2857 @node semantic-ede-proj-target-grammar, ede-proj-target-makefile-objectcode, ede-proj-target-makefile, Targets
2858 @subsection semantic-ede-proj-target-grammar
2859 @tgindex semantic-ede-proj-target-grammar
2860
2861 @table @asis
2862 @item Inheritance Tree:
2863 @table @code
2864 @item eieio-speedbar
2865 @table @code
2866 @item eieio-speedbar-directory-button
2867 @table @code
2868 @item @w{@xref{ede-target}.}
2869 @table @code
2870 @item @w{@xref{ede-proj-target}.}
2871 @table @code
2872 @item @w{@xref{ede-proj-target-makefile}.}
2873 @table @code
2874 @item semantic-ede-proj-target-grammar
2875 No children
2876 @end table
2877 @end table
2878 @end table
2879 @end table
2880 @end table
2881 @end table
2882 @end table
2883
2884 @subsubsection Specialized Methods
2885
2886 @deffn Method project-compile-target :AFTER obj
2887 Compile all sources in a Lisp target @var{OBJ}.
2888 @end deffn
2889
2890 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2891 Insert rules needed by @var{THIS} target.
2892 @end deffn
2893
2894 @deffn Method ede-buffer-mine :AFTER this buffer
2895 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2896 Lays claim to all -by.el, and -wy.el files.
2897 @end deffn
2898
2899 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2900 Return the variable name for @var{THIS}'s sources.
2901 @end deffn
2902
2903 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2904 Insert dist dependencies, or intermediate targets.
2905 This makes sure that all grammar lisp files are created before the dist
2906 runs, so they are always up to date.
2907 Argument @var{THIS} is the target that should insert stuff.
2908 @end deffn
2909
2910
2911 @node ede-proj-target-makefile-objectcode, ede-proj-target-makefile-archive, semantic-ede-proj-target-grammar, Targets
2912 @subsection ede-proj-target-makefile-objectcode
2913 @tgindex ede-proj-target-makefile-objectcode
2914
2915 @table @asis
2916 @item Inheritance Tree:
2917 @table @code
2918 @item eieio-speedbar
2919 @table @code
2920 @item eieio-speedbar-directory-button
2921 @table @code
2922 @item @w{@xref{ede-target}.}
2923 @table @code
2924 @item @w{@xref{ede-proj-target}.}
2925 @table @code
2926 @item @w{@xref{ede-proj-target-makefile}.}
2927 @table @code
2928 @item ede-proj-target-makefile-objectcode
2929 @table @asis
2930 @item Children:
2931 @w{@xref{ede-proj-target-makefile-archive},} @w{@xref{ede-proj-target-makefile-program}.}
2932 @end table
2933 @end table
2934 @end table
2935 @end table
2936 @end table
2937 @end table
2938 @end table
2939 @end table
2940
2941 @table @asis
2942 @item Slots:
2943
2944 @table @code
2945 @item :configuration-variables
2946 Type: @code{list} @*
2947 Default Value: @code{("debug" ("CFLAGS" . "-g") ("LDFLAGS" . "-g"))}
2948
2949 @xref{ede-proj-target-makefile}.
2950 @end table
2951 @end table
2952 @subsubsection Specialized Methods
2953
2954 @deffn Method ede-buffer-header-file :AFTER this buffer
2955 There are no default header files.
2956 @end deffn
2957
2958 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2959 Return the variable name for @var{THIS}'s sources.
2960 @end deffn
2961
2962 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2963 Insert variables needed by target @var{THIS}.
2964 Optional argument @var{MORESOURCE} is not used.
2965 @end deffn
2966
2967 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2968 Return a list of source files to convert to dependencies.
2969 Argument @var{THIS} is the target to get sources from.
2970 @end deffn
2971
2972
2973 @node ede-proj-target-makefile-archive, ede-proj-target-makefile-program, ede-proj-target-makefile-objectcode, Targets
2974 @subsection ede-proj-target-makefile-archive
2975 @tgindex ede-proj-target-makefile-archive
2976
2977 @table @asis
2978 @item Inheritance Tree:
2979 @table @code
2980 @item eieio-speedbar
2981 @table @code
2982 @item eieio-speedbar-directory-button
2983 @table @code
2984 @item @w{@xref{ede-target}.}
2985 @table @code
2986 @item @w{@xref{ede-proj-target}.}
2987 @table @code
2988 @item @w{@xref{ede-proj-target-makefile}.}
2989 @table @code
2990 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2991 @table @code
2992 @item ede-proj-target-makefile-archive
2993 No children
2994 @end table
2995 @end table
2996 @end table
2997 @end table
2998 @end table
2999 @end table
3000 @end table
3001 @end table
3002
3003 @subsubsection Specialized Methods
3004
3005 @deffn Method ede-proj-makefile-insert-rules :AFTER this
3006 Create the make rule needed to create an archive for @var{THIS}.
3007 @end deffn
3008
3009 @deffn Method ede-proj-makefile-insert-source-variables :PRIMARY this
3010 Insert bin_PROGRAMS variables needed by target @var{THIS}.
3011 We aren't actually inserting SOURCE details, but this is used by the
3012 Makefile.am generator, so use it to add this important bin program.
3013 @end deffn
3014
3015
3016 @node ede-proj-target-makefile-program, ede-proj-target-makefile-shared-object, ede-proj-target-makefile-archive, Targets
3017 @subsection ede-proj-target-makefile-program
3018 @tgindex ede-proj-target-makefile-program
3019
3020 @table @asis
3021 @item Inheritance Tree:
3022 @table @code
3023 @item eieio-speedbar
3024 @table @code
3025 @item eieio-speedbar-directory-button
3026 @table @code
3027 @item @w{@xref{ede-target}.}
3028 @table @code
3029 @item @w{@xref{ede-proj-target}.}
3030 @table @code
3031 @item @w{@xref{ede-proj-target-makefile}.}
3032 @table @code
3033 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
3034 @table @code
3035 @item ede-proj-target-makefile-program
3036 @table @asis
3037 @item Children:
3038 @w{@xref{ede-proj-target-makefile-shared-object}.}
3039 @end table
3040 @end table
3041 @end table
3042 @end table
3043 @end table
3044 @end table
3045 @end table
3046 @end table
3047 @end table
3048
3049 @table @asis
3050 @item Slots:
3051
3052 @table @code
3053 @item :ldlibs
3054 Type: @code{list} @*
3055 Default Value: @code{nil}
3056
3057 Libraries, such as "m" or "Xt" which this program depends on.
3058 The linker flag "-l" is automatically prepended. Do not include a "lib"
3059 prefix, or a ".so" suffix.
3060
3061 Note: Currently only used for Automake projects.
3062
3063 @item :ldflags
3064 Type: @code{list} @*
3065 Default Value: @code{nil}
3066
3067 Additional flags to add when linking this target.
3068 Use ldlibs to add addition libraries. Use this to specify specific
3069 options to the linker.
3070
3071 Note: Not currently used. This bug needs to be fixed.
3072
3073 @end table
3074
3075 @end table
3076 @subsubsection Specialized Methods
3077
3078 @deffn Method project-debug-target :AFTER obj
3079 Debug a program target @var{OBJ}.
3080 @end deffn
3081
3082 @deffn Method ede-proj-makefile-insert-rules :AFTER this
3083 Insert rules needed by @var{THIS} target.
3084 @end deffn
3085
3086 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
3087 Insert bin_PROGRAMS variables needed by target @var{THIS}.
3088 @end deffn
3089
3090 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
3091 Insert bin_PROGRAMS variables needed by target @var{THIS}.
3092 @end deffn
3093
3094
3095 @node ede-proj-target-makefile-shared-object, ede-proj-target-elisp, ede-proj-target-makefile-program, Targets
3096 @subsection ede-proj-target-makefile-shared-object
3097 @tgindex ede-proj-target-makefile-shared-object
3098
3099 @table @asis
3100 @item Inheritance Tree:
3101 @table @code
3102 @item eieio-speedbar
3103 @table @code
3104 @item eieio-speedbar-directory-button
3105 @table @code
3106 @item @w{@xref{ede-target}.}
3107 @table @code
3108 @item @w{@xref{ede-proj-target}.}
3109 @table @code
3110 @item @w{@xref{ede-proj-target-makefile}.}
3111 @table @code
3112 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
3113 @table @code
3114 @item @w{@xref{ede-proj-target-makefile-program}.}
3115 @table @code
3116 @item ede-proj-target-makefile-shared-object
3117 No children
3118 @end table
3119 @end table
3120 @end table
3121 @end table
3122 @end table
3123 @end table
3124 @end table
3125 @end table
3126 @end table
3127
3128 @subsubsection Specialized Methods
3129
3130 @deffn Method ede-proj-configure-add-missing :AFTER this
3131 Query if any files needed by @var{THIS} provided by automake are missing.
3132 Results in --add-missing being passed to automake.
3133 @end deffn
3134
3135 @deffn Method ede-proj-makefile-sourcevar :AFTER this
3136 Return the variable name for @var{THIS}'s sources.
3137 @end deffn
3138
3139 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
3140 Insert bin_PROGRAMS variables needed by target @var{THIS}.
3141 We need to override -program which has an LDADD element.
3142 @end deffn
3143
3144 @deffn Method ede-proj-makefile-target-name :AFTER this
3145 Return the name of the main target for @var{THIS} target.
3146 @end deffn
3147
3148 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
3149 Insert bin_PROGRAMS variables needed by target @var{THIS}.
3150 We aren't actually inserting SOURCE details, but this is used by the
3151 Makefile.am generator, so use it to add this important bin program.
3152 @end deffn
3153
3154
3155 @node ede-proj-target-elisp, ede-proj-target-elisp-autoloads, ede-proj-target-makefile-shared-object, Targets
3156 @subsection ede-proj-target-elisp
3157 @tgindex ede-proj-target-elisp
3158
3159 @table @asis
3160 @item Inheritance Tree:
3161 @table @code
3162 @item eieio-speedbar
3163 @table @code
3164 @item eieio-speedbar-directory-button
3165 @table @code
3166 @item @w{@xref{ede-target}.}
3167 @table @code
3168 @item @w{@xref{ede-proj-target}.}
3169 @table @code
3170 @item @w{@xref{ede-proj-target-makefile}.}
3171 @table @code
3172 @item ede-proj-target-elisp
3173 @table @asis
3174 @item Children:
3175 @w{@xref{ede-proj-target-elisp-autoloads}.}
3176 @end table
3177 @end table
3178 @end table
3179 @end table
3180 @end table
3181 @end table
3182 @end table
3183 @end table
3184
3185 @table @asis
3186 @item Slots:
3187
3188 @table @code
3189 @item :aux-packages
3190 Type: @code{list} @*
3191 Default Value: @code{nil}
3192
3193 Additional packages needed.
3194 There should only be one toplevel package per auxiliary tool needed.
3195 These packages location is found, and added to the compile time
3196 load path.
3197
3198 @end table
3199
3200 @end table
3201 @subsubsection Specialized Methods
3202
3203 @deffn Method project-compile-target :AFTER obj
3204 Compile all sources in a Lisp target @var{OBJ}.
3205 Bonus: Return a cons cell: (COMPILED . UPTODATE).
3206 @end deffn
3207
3208 @deffn Method ede-proj-flush-autoconf :AFTER this
3209 Flush the configure file (current buffer) to accommodate @var{THIS}.
3210 @end deffn
3211
3212 @deffn Method ede-buffer-mine :AFTER this buffer
3213 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
3214 Lays claim to all .elc files that match .el files in this target.
3215 @end deffn
3216
3217 @deffn Method ede-proj-makefile-sourcevar :AFTER this
3218 Return the variable name for @var{THIS}'s sources.
3219 @end deffn
3220
3221 @deffn Method ede-proj-tweak-autoconf :AFTER this
3222 Tweak the configure file (current buffer) to accommodate @var{THIS}.
3223 @end deffn
3224
3225 @deffn Method ede-update-version-in-source :AFTER this version
3226 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
3227 There are standards in Elisp files specifying how the version string
3228 is found, such as a @code{-version} variable, or the standard header.
3229 @end deffn
3230
3231 @node ede-proj-target-elisp-autoloads, ede-proj-target-makefile-miscelaneous, ede-proj-target-elisp, Targets
3232 @subsection ede-proj-target-elisp-autoloads
3233 @tgindex ede-proj-target-elisp-autoloads
3234
3235 @table @asis
3236 @item Inheritance Tree:
3237 @table @code
3238 @item eieio-speedbar
3239 @table @code
3240 @item eieio-speedbar-directory-button
3241 @table @code
3242 @item @w{@xref{ede-target}.}
3243 @table @code
3244 @item @w{@xref{ede-proj-target}.}
3245 @table @code
3246 @item @w{@xref{ede-proj-target-makefile}.}
3247 @table @code
3248 @item @w{@xref{ede-proj-target-elisp}.}
3249 @table @code
3250 @item ede-proj-target-elisp-autoloads
3251 No children
3252 @end table
3253 @end table
3254 @end table
3255 @end table
3256 @end table
3257 @end table
3258 @end table
3259 @end table
3260
3261 @table @asis
3262 @item Slots:
3263
3264 @table @code
3265 @item :aux-packages
3266 Type: @code{list} @*
3267 Default Value: @code{("cedet-autogen")}
3268
3269 @xref{ede-proj-target-elisp}.
3270 @item :autoload-file
3271 Type: @code{string} @*
3272 Default Value: @code{"loaddefs.el"}
3273
3274 The file that autoload definitions are placed in.
3275 There should be one load defs file for a given package. The load defs are created
3276 for all Emacs Lisp sources that exist in the directory of the created target.
3277
3278 @item :autoload-dirs
3279 Type: @code{list} @*
3280 Default Value: @code{nil}
3281
3282 The directories to scan for autoload definitions.
3283 If @code{nil} defaults to the current directory.
3284
3285 @end table
3286
3287 @end table
3288 @subsubsection Specialized Methods
3289
3290 @deffn Method ede-proj-makefile-dependencies :AFTER this
3291 Return a string representing the dependencies for @var{THIS}.
3292 Always return an empty string for an autoloads generator.
3293 @end deffn
3294
3295 @deffn Method project-compile-target :AFTER obj
3296 Create or update the autoload target.
3297 @end deffn
3298
3299 @deffn Method ede-proj-flush-autoconf :AFTER this
3300 Flush the configure file (current buffer) to accommodate @var{THIS}.
3301 @end deffn
3302
3303 @deffn Method ede-buffer-mine :AFTER this buffer
3304 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
3305 Lays claim to all .elc files that match .el files in this target.
3306 @end deffn
3307
3308 @deffn Method ede-proj-makefile-sourcevar :AFTER this
3309 Return the variable name for @var{THIS}'s sources.
3310 @end deffn
3311
3312 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
3313 Insert any symbols that the DIST rule should depend on.
3314 Emacs Lisp autoload files ship the generated .el files.
3315 Argument @var{THIS} is the target which needs to insert an info file.
3316 @end deffn
3317
3318 @deffn Method ede-proj-tweak-autoconf :AFTER this
3319 Tweak the configure file (current buffer) to accommodate @var{THIS}.
3320 @end deffn
3321
3322 @deffn Method ede-update-version-in-source :AFTER this version
3323 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
3324 There are standards in Elisp files specifying how the version string
3325 is found, such as a @code{-version} variable, or the standard header.
3326 @end deffn
3327
3328 @deffn Method ede-proj-compilers :AFTER obj
3329 List of compilers being used by @var{OBJ}.
3330 If the @code{compiler} slot is empty, get the car of the compilers list.
3331 @end deffn
3332
3333 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
3334 Insert any symbols that the DIST rule should distribute.
3335 Emacs Lisp autoload files ship the generated .el files.
3336 Argument @var{THIS} is the target which needs to insert an info file.
3337 @end deffn
3338
3339 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
3340 Insert the source variables needed by @var{THIS}.
3341 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
3342 sources variable.
3343 @end deffn
3344
3345
3346 @node ede-proj-target-makefile-miscelaneous, ede-proj-target-makefile-info, ede-proj-target-elisp-autoloads, Targets
3347 @subsection ede-proj-target-makefile-miscelaneous
3348 @tgindex ede-proj-target-makefile-miscelaneous
3349
3350 @table @asis
3351 @item Inheritance Tree:
3352 @table @code
3353 @item eieio-speedbar
3354 @table @code
3355 @item eieio-speedbar-directory-button
3356 @table @code
3357 @item @w{@xref{ede-target}.}
3358 @table @code
3359 @item @w{@xref{ede-proj-target}.}
3360 @table @code
3361 @item @w{@xref{ede-proj-target-makefile}.}
3362 @table @code
3363 @item ede-proj-target-makefile-miscelaneous
3364 No children
3365 @end table
3366 @end table
3367 @end table
3368 @end table
3369 @end table
3370 @end table
3371 @end table
3372
3373 @table @asis
3374 @item Slots:
3375
3376 @table @code
3377 @item :submakefile
3378 Type: @code{string} @*
3379 Default Value: @code{""}
3380
3381 Miscellaneous sources which have a specialized makefile.
3382 The sub-makefile is used to build this target.
3383
3384 @end table
3385
3386 @end table
3387 @subsubsection Specialized Methods
3388
3389 @deffn Method ede-proj-makefile-insert-rules :AFTER this
3390 Create the make rule needed to create an archive for @var{THIS}.
3391 @end deffn
3392
3393 @deffn Method ede-proj-makefile-sourcevar :AFTER this
3394 Return the variable name for @var{THIS}'s sources.
3395 @end deffn
3396
3397 @deffn Method ede-proj-makefile-dependency-files :AFTER this
3398 Return a list of files which @var{THIS} target depends on.
3399 @end deffn
3400
3401
3402 @node ede-proj-target-makefile-info, ede-proj-target-scheme, ede-proj-target-makefile-miscelaneous, Targets
3403 @subsection ede-proj-target-makefile-info
3404 @tgindex ede-proj-target-makefile-info
3405
3406 @table @asis
3407 @item Inheritance Tree:
3408 @table @code
3409 @item eieio-speedbar
3410 @table @code
3411 @item eieio-speedbar-directory-button
3412 @table @code
3413 @item @w{@xref{ede-target}.}
3414 @table @code
3415 @item @w{@xref{ede-proj-target}.}
3416 @table @code
3417 @item @w{@xref{ede-proj-target-makefile}.}
3418 @table @code
3419 @item ede-proj-target-makefile-info
3420 No children
3421 @end table
3422 @end table
3423 @end table
3424 @end table
3425 @end table
3426 @end table
3427 @end table
3428
3429 @table @asis
3430 @item Slots:
3431
3432 @table @code
3433 @item :mainmenu
3434 Type: @code{string} @*
3435 Default Value: @code{""}
3436
3437 The main menu resides in this file.
3438 All other sources should be included independently.
3439
3440 @end table
3441
3442 @end table
3443 @subsubsection Specialized Methods
3444
3445 @deffn Method ede-proj-configure-add-missing :AFTER this
3446 Query if any files needed by @var{THIS} provided by automake are missing.
3447 Results in --add-missing being passed to automake.
3448 @end deffn
3449
3450 @deffn Method object-write :AFTER this
3451 Before committing any change to @var{THIS}, make sure the mainmenu is first.
3452 @end deffn
3453
3454 @deffn Method ede-proj-makefile-sourcevar :AFTER this
3455 Return the variable name for @var{THIS}'s sources.
3456 @end deffn
3457
3458 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
3459 Insert any symbols that the DIST rule should depend on.
3460 Texinfo files want to insert generated @file{.info} files.
3461 Argument @var{THIS} is the target which needs to insert an info file.
3462 @end deffn
3463
3464 @deffn Method ede-proj-makefile-target-name :AFTER this
3465 Return the name of the main target for @var{THIS} target.
3466 @end deffn
3467
3468 @deffn Method ede-documentation :AFTER this
3469 Return a list of files that provides documentation.
3470 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
3471 files in the project.
3472 @end deffn
3473
3474 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
3475 Insert any symbols that the DIST rule should depend on.
3476 Texinfo files want to insert generated @file{.info} files.
3477 Argument @var{THIS} is the target which needs to insert an info file.
3478 @end deffn
3479
3480 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
3481 Insert the source variables needed by @var{THIS} info target.
3482 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
3483 sources variable.
3484 Does the usual for Makefile mode, but splits source into two variables
3485 when working in Automake mode.
3486 @end deffn
3487
3488 @node ede-proj-target-scheme, project-am-target, ede-proj-target-makefile-info, Targets
3489 @subsection ede-proj-target-scheme
3490 @tgindex ede-proj-target-scheme
3491
3492 @table @asis
3493 @item Inheritance Tree:
3494 @table @code
3495 @item eieio-speedbar
3496 @table @code
3497 @item eieio-speedbar-directory-button
3498 @table @code
3499 @item @w{@xref{ede-target}.}
3500 @table @code
3501 @item @w{@xref{ede-proj-target}.}
3502 @table @code
3503 @item ede-proj-target-scheme
3504 No children
3505 @end table
3506 @end table
3507 @end table
3508 @end table
3509 @end table
3510 @end table
3511
3512 @table @asis
3513 @item Slots:
3514
3515 @table @code
3516 @item :interpreter
3517 Type: @code{string} @*
3518 Default Value: @code{"guile"}
3519
3520 The preferred interpreter for this code.
3521
3522 @end table
3523
3524 @end table
3525 @subsubsection Specialized Methods
3526
3527 @deffn Method ede-proj-tweak-autoconf :AFTER this
3528 Tweak the configure file (current buffer) to accommodate @var{THIS}.
3529 @end deffn
3530
3531
3532 @node project-am-target, project-am-objectcode, ede-proj-target-scheme, Targets
3533 @subsection project-am-target
3534 @tgindex project-am-target
3535
3536 @table @asis
3537 @item Inheritance Tree:
3538 @table @code
3539 @item eieio-speedbar
3540 @table @code
3541 @item eieio-speedbar-directory-button
3542 @table @code
3543 @item @w{@xref{ede-target}.}
3544 @table @code
3545 @item project-am-target
3546 @table @asis
3547 @item Children:
3548 @w{@xref{project-am-objectcode},} @w{project-am-header,} @w{@xref{project-am-lisp},} @w{@xref{project-am-texinfo},} @w{@xref{project-am-man}.}
3549 @end table
3550 @end table
3551 @end table
3552 @end table
3553 @end table
3554 @end table
3555
3556 @subsubsection Specialized Methods
3557
3558 @deffn Method project-compile-target-command :AFTER this
3559 Default target to use when compiling a given target.
3560 @end deffn
3561
3562 @deffn Method project-make-dist :AFTER this
3563 Run the current project in the debugger.
3564 @end deffn
3565
3566 @deffn Method project-edit-file-target :AFTER obj
3567 Edit the target associated w/ this file.
3568 @end deffn
3569
3570 @node project-am-objectcode, project-am-program, project-am-target, Targets
3571 @subsection project-am-objectcode
3572 @tgindex project-am-objectcode
3573
3574 @table @asis
3575 @item Inheritance Tree:
3576 @table @code
3577 @item eieio-speedbar
3578 @table @code
3579 @item eieio-speedbar-directory-button
3580 @table @code
3581 @item @w{@xref{ede-target}.}
3582 @table @code
3583 @item @w{@xref{project-am-target}.}
3584 @table @code
3585 @item project-am-objectcode
3586 @table @asis
3587 @item Children:
3588 @w{@xref{project-am-program},} @w{project-am-lib.}
3589 @end table
3590 @end table
3591 @end table
3592 @end table
3593 @end table
3594 @end table
3595 @end table
3596
3597 @subsubsection Specialized Methods
3598
3599 @deffn Method project-am-macro :AFTER this
3600 Return the default macro to 'edit' for this object type.
3601 @end deffn
3602
3603 @deffn Method project-debug-target :AFTER obj
3604 Run the current project target in a debugger.
3605 @end deffn
3606
3607 @deffn Method project-compile-target-command :AFTER this
3608 Default target to use when compiling an object code target.
3609 @end deffn
3610
3611 @deffn Method ede-buffer-header-file :AFTER this buffer
3612 There are no default header files.
3613 @end deffn
3614
3615 @node project-am-program, project-am-header-noinst, project-am-objectcode, Targets
3616 @subsection project-am-program
3617 @tgindex project-am-program
3618
3619 @table @asis
3620 @item Inheritance Tree:
3621 @table @code
3622 @item eieio-speedbar
3623 @table @code
3624 @item eieio-speedbar-directory-button
3625 @table @code
3626 @item @w{@xref{ede-target}.}
3627 @table @code
3628 @item @w{@xref{project-am-target}.}
3629 @table @code
3630 @item @w{@xref{project-am-objectcode}.}
3631 @table @code
3632 @item project-am-program
3633 No children
3634 @end table
3635 @end table
3636 @end table
3637 @end table
3638 @end table
3639 @end table
3640 @end table
3641
3642 @table @asis
3643 @item Slots:
3644
3645 @table @code
3646 @item :ldadd @*
3647 Default Value: @code{nil}
3648
3649 Additional LD args.
3650 @end table
3651 @end table
3652
3653 @node project-am-header-noinst, project-am-header-inst, project-am-program, Targets
3654 @subsection project-am-header-noinst
3655 @tgindex project-am-header-noinst
3656
3657 @table @asis
3658 @item Inheritance Tree:
3659 @table @code
3660 @item eieio-speedbar
3661 @table @code
3662 @item eieio-speedbar-directory-button
3663 @table @code
3664 @item @w{@xref{ede-target}.}
3665 @table @code
3666 @item @w{@xref{project-am-target}.}
3667 @table @code
3668 @item @w{project-am-header.}
3669 @table @code
3670 @item project-am-header-noinst
3671 No children
3672 @end table
3673 @end table
3674 @end table
3675 @end table
3676 @end table
3677 @end table
3678 @end table
3679
3680 @subsubsection Specialized Methods
3681
3682 @deffn Method project-am-macro :AFTER this
3683 Return the default macro to 'edit' for this object.
3684 @end deffn
3685
3686 @node project-am-header-inst, project-am-lisp, project-am-header-noinst, Targets
3687 @subsection project-am-header-inst
3688 @tgindex project-am-header-inst
3689
3690 @table @asis
3691 @item Inheritance Tree:
3692 @table @code
3693 @item eieio-speedbar
3694 @table @code
3695 @item eieio-speedbar-directory-button
3696 @table @code
3697 @item @w{@xref{ede-target}.}
3698 @table @code
3699 @item @w{@xref{project-am-target}.}
3700 @table @code
3701 @item @w{project-am-header.}
3702 @table @code
3703 @item project-am-header-inst
3704 No children
3705 @end table
3706 @end table
3707 @end table
3708 @end table
3709 @end table
3710 @end table
3711 @end table
3712
3713 @subsubsection Specialized Methods
3714
3715 @deffn Method project-am-macro :AFTER this
3716 Return the default macro to 'edit' for this object.
3717 @end deffn
3718
3719 @node project-am-lisp, project-am-texinfo, project-am-header-inst, Targets
3720 @subsection project-am-lisp
3721 @tgindex project-am-lisp
3722
3723 @table @asis
3724 @item Inheritance Tree:
3725 @table @code
3726 @item eieio-speedbar
3727 @table @code
3728 @item eieio-speedbar-directory-button
3729 @table @code
3730 @item @w{@xref{ede-target}.}
3731 @table @code
3732 @item @w{@xref{project-am-target}.}
3733 @table @code
3734 @item project-am-lisp
3735 No children
3736 @end table
3737 @end table
3738 @end table
3739 @end table
3740 @end table
3741 @end table
3742
3743 @subsubsection Specialized Methods
3744
3745 @deffn Method project-am-macro :AFTER this
3746 Return the default macro to 'edit' for this object.
3747 @end deffn
3748
3749 @node project-am-texinfo, project-am-man, project-am-lisp, Targets
3750 @subsection project-am-texinfo
3751 @tgindex project-am-texinfo
3752
3753 @table @asis
3754 @item Inheritance Tree:
3755 @table @code
3756 @item eieio-speedbar
3757 @table @code
3758 @item eieio-speedbar-directory-button
3759 @table @code
3760 @item @w{@xref{ede-target}.}
3761 @table @code
3762 @item @w{@xref{project-am-target}.}
3763 @table @code
3764 @item project-am-texinfo
3765 No children
3766 @end table
3767 @end table
3768 @end table
3769 @end table
3770 @end table
3771 @end table
3772
3773 @table @asis
3774 @item Slots:
3775
3776 @table @code
3777 @item :include @*
3778 Default Value: @code{nil}
3779
3780 Additional texinfo included in this one.
3781
3782 @end table
3783 @end table
3784 @subsubsection Specialized Methods
3785
3786 @deffn Method project-am-macro :AFTER this
3787 Return the default macro to 'edit' for this object type.
3788 @end deffn
3789
3790 @deffn Method project-compile-target-command :AFTER this
3791 Default target to use when compiling a texinfo file.
3792 @end deffn
3793
3794 @deffn Method ede-documentation :AFTER this
3795 Return a list of files that provides documentation.
3796 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
3797 files in the project.
3798 @end deffn
3799
3800 @node project-am-man, , project-am-texinfo, Targets
3801 @comment node-name, next, previous, up
3802 @subsection project-am-man
3803 @tgindex project-am-man
3804
3805 @table @asis
3806 @item Inheritance Tree:
3807 @table @code
3808 @item eieio-speedbar
3809 @table @code
3810 @item eieio-speedbar-directory-button
3811 @table @code
3812 @item @w{@xref{ede-target}.}
3813 @table @code
3814 @item @w{@xref{project-am-target}.}
3815 @table @code
3816 @item project-am-man
3817 No children
3818 @end table
3819 @end table
3820 @end table
3821 @end table
3822 @end table
3823 @end table
3824
3825 @subsubsection Specialized Methods
3826
3827 @deffn Method project-am-macro :AFTER this
3828 Return the default macro to 'edit' for this object type.
3829 @end deffn
3830
3831 @node Sourcecode, Compilers, Targets, Extending EDE
3832 @section Sourcecode
3833
3834 The source code type is an object designed to associated files with
3835 targets.
3836
3837 @menu
3838 * ede-sourcecode::
3839 @end menu
3840
3841
3842 @node ede-sourcecode, , Sourcecode, Sourcecode
3843 @subsection ede-sourcecode
3844 @scindex ede-sourcecode
3845
3846 @table @asis
3847 @item Inheritance Tree:
3848 @table @code
3849 @item eieio-instance-inheritor
3850 @table @code
3851 @item ede-sourcecode
3852 No children
3853 @end table
3854 @end table
3855 @end table
3856
3857 @table @asis
3858 @item Slots:
3859
3860 @table @code
3861 @item :parent-instance
3862 Type: @code{eieio-instance-inheritor-child}
3863
3864 The parent of this instance.
3865 If a slot of this class is reference, and is unbound, then the parent
3866 is checked for a value.
3867
3868 @item :name
3869 Type: @code{string}
3870
3871 The name of this type of source code.
3872 Such as "C" or "Emacs Lisp"
3873
3874 @item :sourcepattern
3875 Type: @code{string} @*
3876 Default Value: @code{".*"}
3877
3878 Emacs regex matching sourcecode this target accepts.
3879
3880 @item :auxsourcepattern
3881 Type: @code{(or null string)} @*
3882 Default Value: @code{nil}
3883
3884 Emacs regex matching auxiliary source code this target accepts.
3885 Aux source are source code files needed for compilation, which are not compiled
3886 themselves.
3887
3888 @item :enable-subdirectories
3889 Type: @code{boolean} @*
3890 Default Value: @code{nil}
3891
3892 Non @code{nil} if this sourcecode type uses subdirectores.
3893 If sourcecode always lives near the target creating it, this should be nil.
3894 If sourcecode can, or typically lives in a subdirectory of the owning
3895 target, set this to t.
3896
3897 @item :garbagepattern
3898 Type: @code{list} @*
3899 Default Value: @code{nil}
3900
3901 Shell file regex matching files considered as garbage.
3902 This is a list of items added to an @code{rm} command when executing a @code{clean}
3903 type directive.
3904
3905 @end table
3906
3907 @end table
3908 @subsubsection Specialized Methods
3909
3910 @deffn Method ede-want-any-files-p :AFTER this filenames
3911 Return non-@code{nil} if @var{THIS} will accept any files in @var{FILENAMES}.
3912 @end deffn
3913
3914 @deffn Method ede-want-any-source-files-p :AFTER this filenames
3915 Return non-@code{nil} if @var{THIS} will accept any source files in @var{FILENAMES}.
3916 @end deffn
3917
3918 @deffn Method ede-want-any-auxiliary-files-p :AFTER this filenames
3919 Return non-@code{nil} if @var{THIS} will accept any aux files in @var{FILENAMES}.
3920 @end deffn
3921
3922 @deffn Method ede-buffer-header-file :AFTER this filename
3923 Return a list of file names of header files for @var{THIS} with @var{FILENAME}.
3924 Used to guess header files, but uses the auxsource regular expression.
3925 @end deffn
3926
3927 @deffn Method ede-want-file-p :AFTER this filename
3928 Return non-@code{nil} if sourcecode definition @var{THIS} will take @var{FILENAME}.
3929 @end deffn
3930
3931 @deffn Method ede-want-file-source-p :AFTER this filename
3932 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3933 @end deffn
3934
3935 @deffn Method ede-want-file-auxiliary-p :AFTER this filename
3936 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3937 @end deffn
3938
3939 @node Compilers, , Sourcecode, Extending EDE
3940 @section Compilers
3941
3942 The compiler object is designed to associate source code with
3943 compilers. The target then references the compilers it can use.
3944 When the makefile is created, this object type knows how to create
3945 compile commands.
3946
3947 @menu
3948 * ede-compilation-program::
3949 * ede-compiler::
3950 * ede-object-compiler::
3951 * ede-linker::
3952 @end menu
3953
3954
3955 @node ede-compilation-program, ede-compiler, Compilers, Compilers
3956 @subsection ede-compilation-program
3957 @cmindex ede-compilation-program
3958
3959 @table @asis
3960 @item Inheritance Tree:
3961 @table @code
3962 @item eieio-instance-inheritor
3963 @table @code
3964 @item ede-compilation-program
3965 @table @asis
3966 @item Children:
3967 @w{@xref{ede-compiler},} @w{@xref{ede-linker}.}
3968 @end table
3969 @end table
3970 @end table
3971 @end table
3972
3973 @table @asis
3974 @item Slots:
3975
3976 @table @code
3977 @item :parent-instance
3978 Type: @code{eieio-instance-inheritor-child}
3979
3980 The parent of this instance.
3981 If a slot of this class is reference, and is unbound, then the parent
3982 is checked for a value.
3983
3984 @item :name
3985 Type: @code{string}
3986
3987 Name of this type of compiler.
3988
3989 @item :variables
3990 Type: @code{list}
3991
3992 Variables needed in the Makefile for this compiler.
3993 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3994 is a string, and VALUE is either a string, or a list of strings.
3995 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3996
3997 @item :sourcetype
3998 Type: @code{list}
3999
4000 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
4001 This is used to match target objects with the compilers and linkers
4002 they can use, and which files this object is interested in.
4003
4004 @item :rules
4005 Type: @code{list} @*
4006 Default Value: @code{nil}
4007
4008 Auxiliary rules needed for this compiler to run.
4009 For example, yacc/lex files need additional chain rules, or inferences.
4010
4011 @item :commands
4012 Type: @code{list}
4013
4014 The commands used to execute this compiler.
4015 The object which uses this compiler will place these commands after
4016 it's rule definition.
4017
4018 @item :autoconf
4019 Type: @code{list} @*
4020 Default Value: @code{nil}
4021
4022 Autoconf function to call if this type of compiler is used.
4023 When a project is in Automake mode, this defines the autoconf function to
4024 call to initialize automake to use this compiler.
4025 For example, there may be multiple C compilers, but they all probably
4026 use the same autoconf form.
4027
4028 @item :objectextention
4029 Type: @code{string}
4030
4031 A string which is the extension used for object files.
4032 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
4033
4034 @end table
4035
4036 @end table
4037 @subsubsection Specialized Methods
4038
4039 @deffn Method ede-proj-flush-autoconf :AFTER this
4040 Flush the configure file (current buffer) to accommodate @var{THIS}.
4041 @end deffn
4042
4043 @deffn Method ede-proj-makefile-insert-rules :AFTER this
4044 Insert rules needed for @var{THIS} compiler object.
4045 @end deffn
4046
4047 @deffn Method ede-proj-makefile-insert-variables :AFTER this
4048 Insert variables needed by the compiler @var{THIS}.
4049 @end deffn
4050
4051 @deffn Method ede-proj-makefile-insert-commands :AFTER this
4052 Insert the commands needed to use compiler @var{THIS}.
4053 The object creating makefile rules must call this method for the
4054 compiler it decides to use after inserting in the rule.
4055 @end deffn
4056
4057 @deffn Method ede-object-sourcecode :AFTER this
4058 Retrieves the slot @code{sourcetype} from an object of class @code{ede-compilation-program}
4059 @end deffn
4060
4061 @deffn Method ede-proj-tweak-autoconf :AFTER this
4062 Tweak the configure file (current buffer) to accommodate @var{THIS}.
4063 @end deffn
4064
4065
4066 @node ede-compiler, ede-object-compiler, ede-compilation-program, Compilers
4067 @subsection ede-compiler
4068 @cmindex ede-compiler
4069
4070 @table @asis
4071 @item Inheritance Tree:
4072 @table @code
4073 @item eieio-instance-inheritor
4074 @table @code
4075 @item @w{@xref{ede-compilation-program}.}
4076 @table @code
4077 @item ede-compiler
4078 @table @asis
4079 @item Children:
4080 @w{@xref{ede-object-compiler},} @w{semantic-ede-grammar-compiler-class.}
4081 @end table
4082
4083 @end table
4084
4085 @end table
4086
4087 @end table
4088 @end table
4089
4090 Create a new object with name NAME of class type ede-compiler
4091
4092 @table @asis
4093 @item Slots:
4094
4095 @table @code
4096 @item :parent-instance
4097 Type: @code{eieio-instance-inheritor-child}
4098
4099 The parent of this instance.
4100 If a slot of this class is reference, and is unbound, then the parent
4101 is checked for a value.
4102
4103 @item :name
4104 Type: @code{string}
4105
4106 Name of this type of compiler.
4107
4108 @item :variables
4109 Type: @code{list}
4110
4111 Variables needed in the Makefile for this compiler.
4112 An assoc list where each element is (VARNAME . VALUE) where VARNAME
4113 is a string, and VALUE is either a string, or a list of strings.
4114 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
4115
4116 @item :sourcetype
4117 Type: @code{list}
4118
4119 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
4120 This is used to match target objects with the compilers and linkers
4121 they can use, and which files this object is interested in.
4122
4123 @item :commands
4124 Type: @code{list}
4125
4126 The commands used to execute this compiler.
4127 The object which uses this compiler will place these commands after
4128 it's rule definition.
4129
4130 @item :objectextention
4131 Type: @code{string}
4132
4133 A string which is the extension used for object files.
4134 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
4135
4136 @item :makedepends
4137 Type: @code{boolean} @*
4138 Default Value: @code{nil}
4139
4140 Non-@code{nil} if this compiler can make dependencies.
4141
4142 @item :uselinker
4143 Type: @code{boolean} @*
4144 Default Value: @code{nil}
4145
4146 Non-@code{nil} if this compiler creates code that can be linked.
4147 This requires that the containing target also define a list of available
4148 linkers that can be used.
4149
4150 @end table
4151
4152 @end table
4153 @subsubsection Specialized Methods
4154
4155 @deffn Method ede-proj-makefile-insert-object-variables :AFTER this targetname sourcefiles
4156 Insert an OBJ variable to specify object code to be generated for @var{THIS}.
4157 The name of the target is @var{TARGETNAME} as a string. @var{SOURCEFILES} is the list of
4158 files to be objectified.
4159 Not all compilers do this.
4160 @end deffn
4161
4162 @deffn Method ede-compiler-intermediate-objects-p :AFTER this
4163 Return non-@code{nil} if @var{THIS} has intermediate object files.
4164 If this compiler creates code that can be linked together,
4165 then the object files created by the compiler are considered intermediate.
4166 @end deffn
4167
4168 @deffn Method ede-compiler-intermediate-object-variable :AFTER this targetname
4169 Return a string based on @var{THIS} representing a make object variable.
4170 @var{TARGETNAME} is the name of the target that these objects belong to.
4171 @end deffn
4172
4173
4174 @node ede-object-compiler, ede-linker, ede-compiler, Compilers
4175 @subsection ede-object-compiler
4176 @cmindex ede-object-compiler
4177
4178 @table @asis
4179 @item Inheritance Tree:
4180 @table @code
4181 @item eieio-instance-inheritor
4182 @table @code
4183 @item @w{@xref{ede-compilation-program}.}
4184 @table @code
4185 @item @w{@xref{ede-compiler}.}
4186 @table @code
4187 @item ede-object-compiler
4188 No children
4189 @end table
4190 @end table
4191 @end table
4192 @end table
4193 @end table
4194
4195 @table @asis
4196 @item Slots:
4197
4198 @table @code
4199 @item :uselinker
4200 Type: @code{boolean} @*
4201 Default Value: @code{t}
4202
4203 @xref{ede-compiler}.
4204 @item :dependencyvar
4205 Type: @code{list}
4206
4207 A variable dedicated to dependency generation.
4208 @end table
4209 @end table
4210
4211 @subsubsection Specialized Methods
4212
4213 @deffn Method ede-proj-makefile-insert-variables :AFTER this
4214 Insert variables needed by the compiler @var{THIS}.
4215 @end deffn
4216
4217 @node ede-linker, , ede-object-compiler, Compilers
4218 @subsection ede-linker
4219 @cmindex ede-linker
4220
4221 @table @asis
4222 @item Inheritance Tree:
4223 @table @code
4224 @item eieio-instance-inheritor
4225 @table @code
4226 @item @w{@xref{ede-compilation-program}.}
4227 @table @code
4228 @item ede-linker
4229 No children
4230 @end table
4231
4232 @end table
4233
4234 @end table
4235 @end table
4236
4237 Create a new object with name NAME of class type ede-linker
4238
4239 @table @asis
4240 @item Slots:
4241
4242 @table @code
4243 @item :name
4244 Type: @code{string}
4245
4246 Name of this type of compiler.
4247
4248 @item :variables
4249 Type: @code{list}
4250
4251 Variables needed in the Makefile for this compiler.
4252 An assoc list where each element is (VARNAME . VALUE) where VARNAME
4253 is a string, and VALUE is either a string, or a list of strings.
4254 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
4255
4256 @item :sourcetype
4257 Type: @code{list}
4258
4259 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
4260 This is used to match target objects with the compilers and linkers
4261 they can use, and which files this object is interested in.
4262
4263 @item :commands
4264 Type: @code{list}
4265
4266 The commands used to execute this compiler.
4267 The object which uses this compiler will place these commands after
4268 it's rule definition.
4269
4270 @item :objectextention
4271 Type: @code{string}
4272
4273 A string which is the extension used for object files.
4274 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
4275
4276 @end table
4277 @end table
4278
4279 @node GNU Free Documentation License, , Extending EDE, Top
4280 @appendix GNU Free Documentation License
4281 @include doclicense.texi
4282
4283 @bye