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