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