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