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