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