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