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