2 @setfilename ../../info/ede
3 @settitle Emacs Development Environment
6 This file describes EDE, the Emacs Development Environment.
8 Copyright @copyright{} 1998, 1999, 2000, 2001, 2004, 2005, 2008, 2009
9 Free Software Foundation, Inc.
12 Permission is granted to copy, distribute and/or modify this document
13 under the terms of the GNU Free Documentation License, Version 1.3 or
14 any later version published by the Free Software Foundation; with no
15 Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
16 and with the Back-Cover Texts as in (a) below. A copy of the license
17 is included in the section entitled ``GNU Free Documentation License.''
19 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
20 modify this GNU manual. Buying copies from the FSF supports it in
21 developing GNU and promoting software freedom.''
28 * ede: (ede). Project management for Emacs
34 @center @titlefont{EDE (The Emacs Development Environment)}
36 @center by Eric Ludlam
70 @node top, EDE Project Concepts, (dir), (dir)
72 @comment node-name, next, previous, up
74 @ede{} is the Emacs Development Environment: an Emacs extension that
75 simplifies building and debugging programs in Emacs. It attempts to
76 emulate a typical IDE (Integrated Development Environment). @ede{}
77 can manage or create your makefiles and other building environment
78 duties, allowing you to concentrate on writing code rather than
79 support files. It aims to make it much easier for new programmers to
80 learn and adopt GNU ways of doing things.
87 * EDE Project Concepts:: @ede{} Project Concepts
88 * EDE Mode:: Turning on @ede{} mode.
89 * Creating a project:: Creating a project.
90 * Modifying your project:: Adding and removing files and targets.
91 * Building and Debugging:: Initiating a build or debug session.
92 * Miscellaneous commands:: Other project related commands.
93 * Simple projects:: Projects not managed by @ede{}.
94 * Extending EDE:: Programming and extending @ede{}.
97 @node EDE Project Concepts, EDE Mode, top, top
98 @chapter @ede{} Project Concepts
100 @ede{} is a generic interface for managing projects. It specifies a
101 single set of menus and keybindings, while supporting multiple ways to
102 express a project via a build system.
104 In the subsequent chapters, we will describe the different project
105 types (@pxref{Creating a project}), as well as the commands to build
106 and debug projects (@pxref{Building and Debugging}).
108 In @ede{}, a project hierarchy matches a directory hierarchy. The
109 project's topmost directory is called the @dfn{project root}, and its
110 subdirectories are @dfn{subprojects}.
112 Each project can contain multiple @dfn{targets}. A target, at the
113 simplest level, is a named collection of files within a project. A
114 target can specify two different types of information:
118 A collection of files to be added to a distribution (e.g., a tarball
119 that you intend to distribute to others).
122 A collection of files that can be built into something else (e.g., a
123 program or compiled documentation).
126 Lastly, @ede{} provides a way for other tools to easily learn file
127 associations. For example, a program might need to restrict some sort
128 of search to files in a single target, or to discover the location of
129 documentation or interface files. @ede{} can provide this
132 @node EDE Mode, Creating a project, EDE Project Concepts, top
135 @ede{} is implemented as a minor-mode, which augments other modes such
136 as C mode, and Texinfo mode. You can enable @ede{} for all buffers by
137 running the command @code{global-ede-mode}, or by putting this in your
138 @file{~/.emacs} file:
144 When @ede{} is active for a given buffer, the menu item
145 ``Development'' appears. This menu provides several menu items for
146 high-level @ede{} commands. These menu items, and their corresponding
147 keybindings, are independent of the type of project you are actually
150 @node Creating a project, Modifying your project, EDE Mode, top
151 @chapter Creating a project
153 To create a new project, first visit a file that you want to include
154 in that project. If you have a hierarchy of directories, choose a
155 file in the topmost directory first. From this buffer, type @kbd{M-x
156 ede-new}, or click on the @samp{Create Project} item in the
157 @samp{Development} menu.
159 The @command{ede-new} command prompts for the type of project you
160 would like to create. Each project type has its own benefits or
161 language specific enhancements. @ede{} supports four different
162 project types: @samp{Make}, @samp{Automake}, @samp{direct Automake},
167 For the @samp{Make} project type, @ede{} creates a @dfn{project file},
168 called @file{Project.ede}, in each project directory. Information
169 about the project is stored in this file. This project autogenerates
173 For the @samp{Automake} project type, @ede{} creates a
174 @file{Project.ede} project file similar to a @samp{Make} project.
175 Unlike a @samp{Make} project, this project autogenerates a
176 @file{Makefile.am} file. @ede{} handles the Automake bootstrapping
177 routines, which import and maintain a @file{configure.am} script and
178 other required files.
181 For the @samp{direct Automake} project type, @ede{} reads directly
182 from the Automake files.
184 You cannot create direct Automake projects with the @command{ede-new}
185 command. Instead, when you visit a project with existing Automake
186 files, @ede{} automatically detects them.
189 The @samp{Simple} project type provides light-weight constructs for
190 identifying a project root and looking up files. If you already have
191 a non-@ede{} project infrastructure, you can use a @samp{Simple}
192 project to provide other Emacs packages, such as Semantic, with some
193 information about the project. @xref{Simple projects}.
196 A subproject is merely a project in a subdirectory of another project.
197 You can create a subproject by using the @command{ede-new} command (or
198 the @samp{Create Project} menu item), while visiting a buffer in a
199 subdirectory of the project root. This new project is automatically
200 added to the parent project, and will be automatically loaded when
201 @ede{} reads the parent project.
203 When using a project command that involves a makefile, @ede{} uses
204 the top-most project's makefile as a starting place for the build. How
205 the toplevel project handles subprojects in the build process is
206 dependent on that project's type.
208 @node Modifying your project, Building and Debugging, Creating a project, top
209 @chapter Modifying your project
211 In this chapter, we describe the generic features for manipulating
212 projects, including the targets and files within them. Subsequent
213 chapters, which describe specific project types, will provide more
214 detailed information about exactly what these features do.
217 * Add/Remove target::
219 * Customize Features::
220 * EDE Project Features::
223 @node Add/Remove target, Add/Remove files, Modifying your project, Modifying your project
224 @section Add/Remove target
226 To create a new target, type @kbd{C-c . t} (@code{M-x ede-new-target})
227 or use the @samp{Add Target} menu item in the @samp{Project Options}
228 submenu. This prompts for a target name, and adds the current buffer
231 The @command{ede-new-target} command also prompts for a @dfn{target
232 type}. Each target type has its own build process and class of files
235 To remove a target from the project, type @kbd{M-x ede-delete-target},
236 or use the @samp{Remove Target} menu item in the @samp{Project
239 @node Add/Remove files, Customize Features, Add/Remove target, Modifying your project
240 @section Add/Remove files
242 To add the current file to an existing target, type @kbd{C-c . a}
243 (@code{ede-add-file}), or or use the @samp{Add File} menu item in the
244 @samp{Target Options} submenu.
246 You can add a file to more than one target; this is OK.
248 To remove the current file from a target, type @kbd{C-c . d}
249 (@code{ede-remove-file}), or or use the @samp{Remove File} menu item
250 in the @samp{Target Options} submenu. If the file belongs to multiple
251 targets, this command prompts for each target it could be removed
254 While working in a project, if you visit a file that is not part of an
255 existing target, @ede{} automatically prompts for a target. If you do
256 not wish to add the file to any target, you can choose @samp{none}.
257 You can customize this behavior with the variable
258 @command{ede-auto-add-method}.
260 @node Customize Features, EDE Project Features, Add/Remove files, Modifying your project
261 @section Customize Features
263 A project, and its targets, are objects using the @samp{EIEIO} object
264 system. @xref{Top,,,eieio,EIEIO manual}. These objects have data
265 fields containing important information related to your work.
267 If the high-level functions aren't enough, you can tweak all
268 user-customizable fields at any time by running the command
269 @command{customize-project} or @command{customize-target}. This loads
270 the current project or target into a customization buffer, where you
271 can tweak individual slots. This is usually necessary for complex
274 Some project modes do not have a project file, but directly read a
275 Makefile or other existing file. Instead of directly editing the
276 object, you can edit the file by typine @kbd{C-c . e}
277 (@code{ede-edit-file-target}). You should ``rescan'' the project
278 afterwards (@pxref{Miscellaneous commands}).
280 @node EDE Project Features, , Customize Features, Modifying your project
281 @section EDE Project Features
283 This section details user facing features of an @ede{} @samp{Make}
284 style project. An @samp{Automake} project has similar options (but a
285 direct Automake project does not).
287 To modify any of the specific features mentioned here, you need to
288 customize the project or target with @command{customize-project} or
289 @command{customize-target}.
291 When you are customizing, you are directly manipulating slot values in
292 @eieio{} objects. @xref{Extending EDE}, if you are interested in
296 * Changing Compilers and Flags::
300 @node Changing Compilers and Flags, Configurations, EDE Project Features, EDE Project Features
301 @subsection Changing Compilers and Flags
303 Targets that build stuff need compilers. To change compilers, you
304 need to customize the desired target.
306 In the @samp{[Make]} section, you can choose a new compiler or linker
307 from the list. If a linker you need is not available, you will need
308 to create a new one. @xref{Compiler and Linker objects}.
310 If an existing compiler or linker is close, but you need to modify
311 some flag set such as adding an include path you will need to add a
312 configuration variable.
314 To start, you should create the basic setup, and construct a makefile
315 with @command{ede-proj-regenerate}. Look in the @file{Makefile} to
316 see what commands are inserted. Once you have determined the variable
317 you need to modify, you can add a configuration for it.
318 @xref{Configurations}.
320 @node Configurations, , Changing Compilers and Flags, EDE Project Features
321 @subsection Configurations
323 Configurations specify different ways to build a project. For
324 example, you may configure a project to be in ``debug'' mode, or
325 perhaps in ``release'' mode.
327 The project, and each target type all have a slot named
328 @code{configuration-variables}. To add new variables to a
329 configuration find this slot in the custom buffer, and insert a new
330 configuration. Name it either ``debug'' or ``release'', then insert
331 some number of name/value pairs to it.
333 You can have any number of valid configurations too. To add a new
334 configuration, customize your project. Work in the @samp{[Settings]}
335 block for ``configurations''. Add a new named configuration here.
337 To switch between different active configurations, modify the
338 ``configuration default'' slot.
340 @node Building and Debugging, Miscellaneous commands, Modifying your project, top
341 @chapter Building and Debugging
343 @ede{} provides the following ``project-aware'' compilation and
348 Compile the current target (@code{ede-compile-target}).
350 Compile the entire project (@code{ede-compile-project}).
352 Debug the current target (@code{ede-debug-target}).
353 @item M-x ede-make-dist
354 Build a distribution file for your project.
357 These commands are also available from the @samp{Development} menu.
359 @node Miscellaneous commands, Simple projects, Building and Debugging, top
360 @chapter Miscellaneous commands
362 If you opt to go in and edit @ede{} project files directly---for
363 instance, by using @kbd{C-c . e} (@pxref{Customize Features})---you
364 must then ``rescan'' the project files to update the internal data
365 structures. To rescan the current project, type @kbd{C-c . g}
366 (@code{ede-rescan-toplevel}).
368 @ede{} can help you find files in your project, via the command
369 @kbd{C-c . f} (@code{ede-find-file}). This prompts for a file name;
370 you need not specify the directory. EDE then tries to visit a file
371 with that name somewhere in your project.
373 @ede{} can use external tools to help with file finding. To do this,
374 customize @code{ede-locate-setup-options}.
376 @defvar ede-locate-setup-options
377 @anchor{ede-locate-setup-options}
378 List of locate objects to try out by default.
379 Listed in order of preference. If the first item cannot be used in
380 a particular project, then the next one is tried.
381 It is always assumed that @dfn{ede-locate-base} is at end of the list.
384 @ede{} also provides a project display mode for the speedbar
385 (@pxref{Speedbar,,,emacs,GNU Emacs Manual}). This allows you to view
386 your source files as they are structured in your project: as a
387 hierarchical tree, grouped according to target.
389 To activate the speedbar in this mode, type @kbd{C-c . s}
390 (@code{ede-speedbar}).
392 @node Simple projects, Extending EDE, Miscellaneous commands, top
393 @section Simple Projects
395 There is a wide array of Simple projects. The root for simple
396 projects is the class @code{ede-simple-project}. This handles the
397 infrastructure of storing a .ede file if needed.
399 The class @code{ede-simple-project} is designed to be subclassed.
400 Then key @ede{} methods can be overridden to provide a quick wrapper
403 A second project type is @code{ede-cpp-root}. This project type is
404 designed to be created for a directory hierarchy full of C/C++ code.
405 It can be configured with minimal lisp knowledge to do header file
406 lookup for @semantic{}, improving code completion performance.
409 * ede-cpp-root:: This project marks the root of a C/C++ code project.
410 * ede-simple subclassing:: Create your own simple project.
411 * ede-emacs:: A project for working with Emacs.
412 * ede-linux:: A project for working with Linux kernels.
413 * Custom Locate:: Customizing how to locate files in a simple project
417 @subsection ede-cpp-root
419 The @code{ede-cpp-root} project type allows you to create a single
420 object with no save-file in your @file{.emacs} file. It allows @ede{}
421 to provide the @semantic{} package with the ability to find header
424 The @code{ede-cpp-root} class knows a few things about C++ projects,
425 such as the prevalence of "include" directories, and typical
426 file-layout stuff. If this isn't sufficient, you can subclass
427 @code{ede-cpp-root-project} and add your own tweaks in just a few
428 lines. See the end of this file for an example.
430 In the most basic case, add this to your @file{.emacs} file, modifying
431 appropriate bits as needed.
434 (ede-cpp-root-project "SOMENAME" :file "/dir/to/some/file")
437 Replace @var{SOMENAME} with whatever name you want, and the filename
438 to an actual file at the root of your project. It might be a
439 Makefile, a README file. Whatever. It doesn't matter. It's just a
440 key to hang the rest of @ede{} off of.
442 The most likely reason to create this project, is to speed up
443 searching for includes files, or to simplify bootstrapping @semantic{}'s
444 ability to find files without much user interaction. In conjunction
445 with @semantic{} completion, having a short include path is key. You can
446 override the default include path and system include path like this:
449 (ede-cpp-root-project "NAME" :file "FILENAME"
450 :include-path '( "/include" "../include" "/c/include" )
451 :system-include-path '( "/usr/include/c++/3.2.2/" )
452 :spp-table '( ("MOOSE" . "")
453 ("CONST" . "const") ) )
456 In this case each item in the include path list is searched. If the
457 directory starts with "/", then that expands to the project root
458 directory. If a directory does not start with "/", then it is
459 relative to the default-directory of the current buffer when the file
462 The include path only affects C/C++ header files. Use the slot
463 @code{:header-match-regexp} to change it.
465 The @code{:system-include-path} allows you to specify full directory
466 names to include directories where system header files can be found.
467 These will be applied to files in this project only.
469 The @code{:spp-table} provides a list of project specific #define
470 style macros that are unique to this project, passed in to the
471 compiler on the command line, or are in special headers.
472 See the @code{semantic-lex-c-preprocessor-symbol-map} for more
473 on how to format this entry.
475 If there is a single file in your project, you can instead set the
476 @code{:spp-files} to a list of file names relative to the root of your
477 project. Specifying this is like setting the variable
478 @code{semantic-lex-c-preprocessor-symbol-file} in semantic.
480 If you want to override the file-finding tool with your own
481 function you can do this:
484 (ede-cpp-root-project "NAME" :file "FILENAME" :locate-fcn 'MYFCN)
487 Where @var{MYFCN} is a symbol for a function. The locate function can
488 be used in place of @code{ede-expand-filename} so you can quickly
489 customize your custom target to use specialized local routines instead
490 of the default @ede{} routines. The function symbol must take two
495 The name of the file to find.
497 The directory root for this cpp-root project.
501 If the cpp-root project style is right for you, but you want a dynamic
502 loader, instead of hard-coding path name values in your @file{.emacs}, you
503 can do that too, but you will need to write some lisp code.
505 To do that, you need to add an entry to the
506 @code{ede-project-class-files} list, and also provide two functions to
507 teach @ede{} how to load your project pattern
509 It would look like this:
512 (defun MY-FILE-FOR-DIR (&optional dir)
513 "Return a full file name to the project file stored in DIR."
514 <write your code here, or return nil>
517 (defun MY-ROOT-FCN ()
518 "Return the root fcn for `default-directory'"
519 ;; You might be able to use `ede-cpp-root-project-root'
520 ;; and not write this at all.
524 "Load a project of type `cpp-root' for the directory DIR.
525 Return nil if there isn't one."
526 ;; Use your preferred constructin method here.
527 (ede-cpp-root-project "NAME" :file (expand-file-name "FILE" dir)
531 (add-to-list 'ede-project-class-files
532 (ede-project-autoload "cpp-root"
535 :proj-file 'MY-FILE-FOR-DIR
536 :proj-root 'MY-ROOT-FCN
538 :class-sym 'ede-cpp-root)
542 This example only creates an auto-loader, and does not create a new kind
545 @xref{ede-cpp-root-project}, for details about the class that defines
546 the @code{ede-cpp-root} project type.
548 @node ede-simple subclassing
549 @subsection ede-simple Subclassing
551 todo - Write some doc.
553 In the meantime look in the commentary of ede-simple.el
556 @subsection ede-emacs
558 The @code{ede-emacs} project automatically identifies an Emacs source
559 tree, and enables EDE project mode for it.
561 It pre-populates the C Preprocessor symbol map for correct parsing,
562 and has an optimized include file identification function.
565 @subsection ede-linux
567 The @code{ede-linux} project will automatically identify a Linux
568 Kernel source tree, and enable EDE project mode for it.
570 It pre-populates the C Preprocessor symbol map for reasonable parsing,
571 and has an optimized include file identification function.
574 @subsection Custom Locate
576 The various simple project styles all have one major drawback, which
577 is that the files in the project are not completely known to EDE.
578 When the EDE API is used to try and file files by some reference name
579 in the project, then that could fail.
581 @@TODO - Add ID Utils and CScope examples
583 @ede{} can therefore use some external locate commands, such as the unix
584 ``locate'' command, or ``GNU Global''.
586 Configuration of the tool you want to use such as @code{locate}, or
587 @code{global} will need to be done without the aid of @ede{}. Once
588 configured, however, @ede{} can use it.
590 To enable one of these tools, set the variable
591 @code{ede-locate-setup-options} with the names of different locate
592 objects. @ref{Miscellaneous commands}.
594 Configure this in your @file{.emacs} before loading in CEDET or EDE.
595 If you want to add support for GNU Global, your configuration would
599 (setq ede-locate-setup-options '(ede-locate-global ede-locate-base))
602 That way, when a search needs to be done, it will first try using
603 GLOBAL. If global is not available for that directory, then it will
604 revert to the base locate object. The base object always fails to
607 You can add your own locate tool but subclassing from
608 @code{ede-locate-base}. The subclass should also implement two
609 methods. See the code in @file{ede-locate.el} for GNU Global as a
612 @node Extending EDE, , Simple projects, top
613 @chapter Extending @ede{}
615 This chapter is intended for users who want to write new parts or fix
616 bugs in @ede{}. A knowledge of Emacs Lisp, and some @eieio{}(CLOS) is
619 @ede{} uses @eieio{}, the CLOS package for Emacs, to define two object
620 superclasses, specifically the PROJECT and TARGET. All commands in
621 @ede{} are usually meant to address the current project, or current
624 All specific projects in @ede{} derive subclasses of the @ede{}
625 superclasses. In this way, specific behaviors such as how a project
626 is saved, or how a target is compiled can be customized by a project
627 author in detail. @ede{} communicates to these project objects via an
628 API using methods. The commands you use in @ede{} mode are high-level
629 functional wrappers over these methods. @xref{(eieio)Top}. For
630 details on using @eieio{} to extending classes, and writing methods.
632 If you intend to extend @ede{}, it is most likely that a new target type is
633 needed in one of the existing project types. The rest of this chapter
634 will discuss extending the @code{ede-project} class, and it's targets.
635 See @file{project-am.el} for basic details on adding targets to it.
637 For the @code{ede-project} type, the core target class is called
638 @code{ede-proj-target}. Inheriting from this will give you everything
639 you need to start, including adding your sources into the makefile. If
640 you also need additional rules in the makefile, you will want to inherit
641 from @code{ede-proj-target-makefile} instead. You may want to also add
642 new fields to track important information.
644 If you are building currently unsupported code into a program or shared
645 library, it is unlikely you need a new target at all. Instead you
646 would need to create a new compiler or linker object that compiles
647 source code of the desired type. @ref{Compiler and Linker objects}.
649 Once your new class exists, you will want to fill in some basic methods.
650 See the @file{ede-skel.el} file for examples of these. The files
651 @file{ede-proj-info.el} and @file{ede-proj-elisp.el} are two interesting
655 * User interface methods:: Methods associated with keybindings
656 * Base project methods:: The most basic methods on @ede{} objects.
657 * Sourcecode objects:: Defining new sourcecode classes.
658 * Compiler and Linker objects:: Defining new compilers and linkers.
659 * Project:: Details of project classes.
660 * Targets:: Details of target classes.
661 * Sourcecode:: Details of source code classes.
662 * Compilers:: Details of compiler classes.
665 @node User interface methods
666 @section User interface methods
668 These methods are core behaviors associated with user commands.
669 If you do not implement a method, there is a reasonable default that
670 may do what you need.
673 @item project-add-file
674 Add a file to your project. Override this if you want to put new
675 sources into different fields depending on extension, or other details.
676 @item project-remove-file
677 Reverse of project-add-file.
678 @item project-compile-target
679 Override this if you want to do something special when the user
680 "compiles" this target.
681 @item project-debug-target
682 What to do when a user wants to debug your target.
683 @item project-update-version
684 Easily update the version number of your project.
685 @item project-edit-file-target
686 Edit the file the project's information is stored in.
687 @item project-new-target
688 Create a new target in a project.
689 @item project-delete-target
690 Delete a target from a project.
691 @item project-make-dist
692 Make a distribution (tar archive) of the project.
694 Rescan a project file, changing the data in the existing objects.
697 @node Base project methods
698 @section Base project methods
700 These methods are important for querying base information from project
705 Return a string that is the name of this target.
706 @item ede-target-name
707 Return a string that is the name of the target used by a Make system.
708 @item ede-description
709 A brief description of the project or target. This is currently used
710 by the @samp{ede-speedbar} interface.
711 @item ede-want-file-p
712 Return non-nil if a target will accept a given file.
713 It is generally unecessary to override this. See the section on source
715 @item ede-buffer-mine
716 Return non-nil if a buffer belongs to this target. Used during
717 association when a file is loaded. It is generally unecessary to
718 override this unless you keep auxiliary files.
721 These methods are used by the semantic package extensions @xref{(semantic)Top}.
724 @item ede-buffer-header-file
725 Return a header file belonging to a given buffer. Prototypes are place
726 there when appropriate
727 @item ede-buffer-documentation-files
728 Return the documentation file information about this file would be
730 @item ede-documentation
731 List all documentation a project or target is responsible for.
734 @node Sourcecode objects
735 @section Sourcecode objects
737 @ede{} projects track source file / target associates via source code
738 objects. The definitions for this is in @file{ede-source.el}. A source
739 code object contains methods that know how to identify a file as being
740 of that class, (ie, a C file ends with @file{.c}). Some targets can
741 handle many different types of sources which must all be compiled
742 together. For example, a mixed C and C++ program would have
743 instantiations of both sourcecode types.
745 When a target needs to know if it will accept a source file, it
746 references its list of source code objects. These objects then make
749 Source code objects are stored in the target objects as a list of
750 symbols, where the symbol's value is the object. This enables the
751 project save file mechanism to work.
753 Here is an example for an instantiation of an Emacs Lisp source code object:
756 (defvar ede-source-emacs
757 (ede-sourcecode "ede-emacs-source"
759 :sourcepattern "\\.el$"
760 :garbagepattern '("*.elc"))
761 "Emacs Lisp source code definition.")
764 If you want to recycle parts of an existing sourcecode object, you can
765 clone the original, and then just tweak the parts that are different.
769 (defvar ede-source-emacs-autoload
770 (clone ede-source-emacs "ede-source-emacs-autoload"
771 :name "Emacs Lisp Autoload"
772 :sourcepattern "-loaddefs\\.el")
773 "Emacs Lisp autoload source code.")
776 In this case, the garbage pattern is the same.
780 @node Compiler and Linker objects
781 @section Compiler and Linker objects
783 In order for a target to create a @file{Makefile}, it must know how to
784 compile the sources into the program or desired data file, and
785 possibly link them together.
787 A compiler object instantiation is used to associate a given target
788 with a given source code type. Some targets can handle many types of
789 sources, and thus has many compilers available to it. Some targets
790 may have multiple compilers for a given type of source code.
792 @ede{} will examine the actual source files in a target, cross reference
793 that against the compiler list to come up with the final set of
794 compilers that will be inserted into the Makefile.
796 Compiler instantiations must also insert variables specifying the
797 compiler it plans to use, in addition to creating Automake settings for
798 @file{configure.in} when appropriate.
800 Compiler objects are stored in the target objects as a list of
801 symbols, where the symbols value is the object. This enables the
802 project output mechanism to work more efficiently.
804 Targets will also have a special "compiler" slot which lets a user
805 explicitly choose the compiler they want to use.
807 Here is an example for texinfo:
810 (defvar ede-makeinfo-compiler
812 "ede-makeinfo-compiler"
814 :variables '(("MAKEINFO" . "makeinfo"))
815 :commands '("makeinfo -o $@ $<")
816 :autoconf '(("AC_CHECK_PROG" . "MAKEINFO, makeinfo"))
817 :sourcetype '(ede-makeinfo-source)
819 "Compile texinfo files into info files.")
824 When creating compiler instantiations, it may be useful to @code{clone}
825 an existing compiler variable. Cloning allows you to only modify
826 parts of the original, while keeping the rest of the same.
827 Modification of the original will result in the clone also being
828 changed for shared value slots.
830 The second important object is the linker class. The linker is similar
831 to the compiler, except several compilers might be used to create some
832 object files, and only one linker is used to link those objects together.
834 See @file{ede-proj-obj.el} for examples of the combination.
845 * ede-project-placeholder ::
847 * ede-cpp-root-project ::
848 * ede-simple-project ::
849 * ede-simple-base-project ::
850 * ede-proj-project ::
851 * project-am-makefile ::
852 * ede-step-project ::
855 @node ede-project-placeholder
856 @subsection ede-project-placeholder
857 @pjindex ede-project-placeholder
860 @item Inheritance Tree:
864 @item eieio-speedbar-directory-button
866 @item ede-project-placeholder
869 @w{@xref{ede-project}.}
881 Type: @code{string} @*
882 Default Value: @code{"Untitled"}
884 The name used when generating distribution files.
888 Type: @code{string} @*
889 Default Value: @code{"1.0"}
891 The version number used when distributing files.
897 Directory this project is associated with.
903 File name where this project is stored.
910 @subsubsection Specialized Methods
912 @deffn Method ede--project-inode :AFTER proj
913 Get the inode of the directory project @var{PROJ} is in.
916 @deffn Method ede-project-root :AFTER this
917 If a project knows it's root, return it here.
918 Allows for one-project-object-for-a-tree type systems.
921 @deffn Method ede-find-subproject-for-directory :AFTER proj dir
922 Find a subproject of @var{PROJ} that corresponds to @var{DIR}.
925 @deffn Method ede-project-root-directory :AFTER this &optional file
926 If a project knows it's root, return it here.
927 Allows for one-project-object-for-a-tree type systems.
928 Optional @var{FILE} is the file to test. It is ignored in preference
929 of the anchor file for the project.
932 @deffn Method ede-project-force-load :AFTER this
933 Make sure the placeholder @var{THIS} is replaced with the real thing.
934 Return the new object created in its place.
937 @deffn Method project-interactive-select-target :AFTER this prompt
938 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
941 @deffn Method project-add-file :AFTER this file
942 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
946 @subsection ede-project
950 @item Inheritance Tree:
954 @item eieio-speedbar-directory-button
956 @item @w{@xref{ede-project-placeholder}.}
961 @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}.}
976 List of top level targets in this project.
982 List of tool cache configurations in this project.
983 This allows any tool to create, manage, and persist project-specific settings.
987 Type: @code{string} @*
989 URL to this projects web site.
990 This is a URL to be sent to a web site for documentation.
993 @item :web-site-directory @*
995 A directory where web pages can be found by Emacs.
996 For remote locations use a path compatible with ange-ftp or EFS.
997 You can also use TRAMP for use with rcp & scp.
1000 @item :web-site-file @*
1002 A file which contains the home page for this project.
1003 This file can be relative to slot @code{web-site-directory}.
1004 This can be a local file, use ange-ftp, EFS, or TRAMP.
1008 Type: @code{string} @*
1010 FTP site where this project's distribution can be found.
1011 This FTP site should be in Emacs form, as needed by @code{ange-ftp}, but can
1012 also be of a form used by TRAMP for use with scp, or rcp.
1015 @item :ftp-upload-site
1016 Type: @code{string} @*
1018 FTP Site to upload new distributions to.
1019 This FTP site should be in Emacs form as needed by @code{ange-ftp}.
1020 If this slot is @code{nil}, then use @code{ftp-site} instead.
1023 @item :configurations
1024 Type: @code{list} @*
1025 Default Value: @code{("debug" "release")}
1027 List of available configuration types.
1028 Individual target/project types can form associations between a configuration,
1029 and target specific elements such as build variables.
1032 @item :configuration-default @*
1033 Default Value: @code{"debug"}
1035 The default configuration.
1038 @item :local-variables @*
1039 Default Value: @code{nil}
1041 Project local variables
1047 @subsubsection Specialized Methods
1049 @deffn Method ede-preprocessor-map :AFTER this
1050 Get the pre-processor map for project @var{THIS}.
1053 @deffn Method ede-subproject-relative-path :AFTER proj &optional parent-in
1054 Get a path name for @var{PROJ} which is relative to the parent project.
1055 If PARENT is specified, then be relative to the PARENT project.
1056 Specifying PARENT is useful for sub-sub projects relative to the root project.
1059 @deffn Method eieio-speedbar-description :AFTER obj
1060 Provide a speedbar description for @var{OBJ}.
1063 @deffn Method ede-map-any-target-p :AFTER this proc
1064 For project @var{THIS}, map @var{PROC} to all targets and return if any non-nil.
1065 Return the first non-@code{nil} value returned by @var{PROC}.
1068 @deffn Method ede-map-subprojects :AFTER this proc
1069 For object @var{THIS}, execute @var{PROC} on all direct subprojects.
1070 This function does not apply @var{PROC} to sub-sub projects.
1071 See also @dfn{ede-map-all-subprojects}.
1074 @deffn Method ede-convert-path :AFTER this path
1075 Convert path in a standard way for a given project.
1076 Default to making it project relative.
1077 Argument @var{THIS} is the project to convert @var{PATH} to.
1080 @deffn Method ede-name :AFTER this
1081 Return a short-name for @var{THIS} project file.
1082 Do this by extracting the lowest directory name.
1085 @deffn Method ede-set-project-variables :AFTER project &optional buffer
1086 Set variables local to @var{PROJECT} in @var{BUFFER}.
1089 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1090 Return the path to @var{OBJ}.
1091 Optional @var{DEPTH} is the depth we start at.
1094 @deffn Method ede-map-all-subprojects :AFTER this allproc
1095 For object @var{THIS}, execute PROC on @var{THIS} and all subprojects.
1096 This function also applies PROC to sub-sub projects.
1097 See also @dfn{ede-map-subprojects}.
1100 @deffn Method project-update-version :AFTER ot
1101 The @code{:version} of the project @var{OT} has been updated.
1102 Handle saving, or other detail.
1105 @deffn Method ede-buffer-header-file :AFTER this buffer
1106 Return @code{nil}, projects don't have header files.
1109 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1110 Return all documentation in project @var{THIS} based on @var{BUFFER}.
1113 @deffn Method ede-map-targets :AFTER this proc
1114 For object @var{THIS}, execute @var{PROC} on all targets.
1117 @deffn Method ede-buffer-mine :AFTER this buffer
1118 Return non-@code{nil} if object @var{THIS} lays claim to the file in @var{BUFFER}.
1121 @deffn Method ede-object-keybindings :BEFORE this
1122 Retrieves the slot @code{keybindings} from an object of class @code{ede-project}
1125 @deffn Method ede-description :AFTER this
1126 Return a description suitable for the minibuffer about @var{THIS}.
1129 @deffn Method eieio-speedbar-object-children :AFTER this
1130 Return the list of speedbar display children for @var{THIS}.
1133 @deffn Method project-make-dist :AFTER this
1134 Build a distribution for the project based on @var{THIS} project.
1137 @deffn Method ede-system-include-path :AFTER this
1138 Get the system include path used by project @var{THIS}.
1141 @deffn Method project-new-target-custom :AFTER proj
1142 Create a new target. It is up to the project @var{PROJ} to get the name.
1145 @deffn Method ede-subproject-p :AFTER proj
1146 Return non-@code{nil} if @var{PROJ} is a sub project.
1149 @deffn Method ede-expand-filename :AFTER this filename &optional force
1150 Return a fully qualified file name based on project @var{THIS}.
1151 @var{FILENAME} should be just a filename which occurs in a directory controlled
1153 Optional argument @var{FORCE} forces the default filename to be provided even if it
1157 @deffn Method ede-menu-items-build :AFTER obj &optional current
1158 Return a list of menu items for building project @var{OBJ}.
1159 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1162 @deffn Method ede-update-version-in-source :AFTER this version
1163 Change occurrences of a version string in sources.
1164 In project @var{THIS}, cycle over all targets to give them a chance to set
1165 their sources to @var{VERSION}.
1168 @deffn Method project-new-target :AFTER proj &rest args
1169 Create a new target. It is up to the project @var{PROJ} to get the name.
1172 @deffn Method project-compile-project :AFTER obj &optional command
1173 Compile the entire current project @var{OBJ}.
1174 Argument @var{COMMAND} is the command to use when compiling.
1177 @deffn Method eieio-speedbar-object-buttonname :AFTER object
1178 Return a string to use as a speedbar button for @var{OBJECT}.
1181 @deffn Method ede-map-project-buffers :AFTER this proc
1182 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1185 @deffn Method ede-expand-filename-impl :AFTER this filename &optional force
1186 Return a fully qualified file name based on project @var{THIS}.
1187 @var{FILENAME} should be just a filename which occurs in a directory controlled
1189 Optional argument @var{FORCE} forces the default filename to be provided even if it
1193 @deffn Method eieio-done-customizing :AFTER proj
1194 Call this when a user finishes customizing @var{PROJ}.
1197 @deffn Method ede-html-documentation :AFTER this
1198 Return a list of HTML files provided by project @var{THIS}.
1201 @deffn Method ede-documentation :AFTER this
1202 Return a list of files that provides documentation.
1203 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
1204 files in the project.
1207 @deffn Method project-interactive-select-target :AFTER this prompt
1208 Interactively query for a target that exists in project @var{THIS}.
1209 Argument @var{PROMPT} is the prompt to use when querying the user for a target.
1212 @deffn Method ede-target-in-project-p :AFTER proj target
1213 Is @var{PROJ} the parent of @var{TARGET}?
1214 If @var{TARGET} belongs to a subproject, return that project file.
1217 @deffn Method ede-find-target :AFTER proj buffer
1218 Fetch the target in @var{PROJ} belonging to @var{BUFFER} or nil.
1221 @deffn Method ede-add-subproject :AFTER proj-a proj-b
1222 Add into @var{PROJ-A}, the subproject @var{PROJ-B}.
1225 @deffn Method ede-commit-project :AFTER proj
1226 Commit any change to @var{PROJ} to its file.
1229 @deffn Method project-dist-files :AFTER this
1230 Return a list of files that constitutes a distribution of @var{THIS} project.
1233 @deffn Method ede-object-menu :BEFORE this
1234 Retrieves the slot @code{menu} from an object of class @code{ede-project}
1237 @deffn Method ede-commit-local-variables :AFTER proj
1238 Commit change to local variables in @var{PROJ}.
1241 @node ede-cpp-root-project
1242 @subsection ede-cpp-root-project
1243 @pjindex ede-cpp-root-project
1246 @item Inheritance Tree:
1248 @item eieio-speedbar
1250 @item eieio-speedbar-directory-button
1252 @item @w{@xref{ede-project-placeholder}.}
1254 @item @w{@xref{ede-project}.}
1256 @item ede-cpp-root-project
1265 This class implements the @code{ede-cpp-root} project type.
1266 @xref{ede-cpp-root}, for information about using this project type.
1273 Type: @code{list} @*
1274 Default Value: @code{(quote ("/include" "../include/"))}
1276 The default locate function expands filenames within a project.
1277 If a header file (.h, .hh, etc) name is expanded, and
1278 the @code{:locate-fcn} slot is @code{nil}, then the include path is checked
1279 first, and other directories are ignored. For very large
1280 projects, this optimization can save a lot of time.
1282 Directory names in the path can be relative to the current
1283 buffer's @code{default-directory} (not starting with a /). Directories
1284 that are relative to the project's root should start with a /, such
1285 as "/include", meaning the directory @code{include} off the project root
1289 @item :system-include-path
1290 Type: @code{list} @*
1291 Default Value: @code{nil}
1293 The system include path for files in this project.
1294 C files initialized in an ede-cpp-root-project have their semantic
1295 system include path set to this value. If this is @code{nil}, then the
1296 semantic path is not modified.
1300 Type: @code{list} @*
1301 Default Value: @code{nil}
1303 C Preprocessor macros for your files.
1304 Preprocessor symbols will be used while parsing your files.
1305 These macros might be passed in through the command line compiler, or
1306 are critical symbols derived from header files. Providing header files
1307 macro values through this slot improves accuracy and performance.
1308 Use `:spp-files' to use these files directly.
1312 Type: @code{list} @*
1313 Default Value: @code{nil}
1315 C header file with Preprocessor macros for your files.
1316 The PreProcessor symbols appearing in these files will be used while
1317 parsing files in this project.
1318 See @code{semantic-lex-c-preprocessor-symbol-map} for more on how this works.
1321 @item :header-match-regexp
1322 Type: @code{string} @*
1323 Default Value: @code{"\\.\\(h\\(h\\|xx\\|pp\\|\\+\\+\\)?\\|H\\)$\\|\\<\\w+$"}
1325 Regexp used to identify C/C++ header files.
1329 Type: @code{(or null function)} @*
1330 Default Value: @code{nil}
1332 The locate function can be used in place of
1333 @dfn{ede-expand-filename} so you can quickly customize your custom target
1334 to use specialized local routines instead of the EDE routines.
1335 The function symbol must take two arguments:
1336 NAME - The name of the file to find.
1337 DIR - The directory root for this cpp-root project.
1339 It should return the fully qualified file name passed in from NAME. If that file does not
1340 exist, it should return nil.
1346 @subsubsection Specialized Methods
1348 @deffn Method initialize-instance :AFTER this &rest fields
1349 Make sure the @code{:file} is fully expanded.
1352 @deffn Method ede-preprocessor-map :AFTER this
1353 Get the pre-processor map for project @var{THIS}.
1356 @deffn Method ede-cpp-root-header-file-p :AFTER proj name
1357 Non @code{nil} if in @var{PROJ} the filename @var{NAME} is a header.
1360 @deffn Method ede-system-include-path :AFTER this
1361 Get the system include path used by project @var{THIS}.
1364 @deffn Method ede-expand-filename-impl :AFTER proj name
1365 Within this project @var{PROJ}, find the file @var{NAME}.
1366 This knows details about or source tree.
1369 @node ede-simple-project
1370 @subsection ede-simple-project
1371 @pjindex ede-simple-project
1374 @item Inheritance Tree:
1376 @item eieio-speedbar
1378 @item eieio-speedbar-directory-button
1380 @item @w{@xref{ede-project-placeholder}.}
1382 @item @w{@xref{ede-project}.}
1384 @item ede-simple-project
1393 @subsubsection Specialized Methods
1395 @deffn Method ede-commit-project :AFTER proj
1396 Commit any change to @var{PROJ} to its file.
1399 @node ede-simple-base-project
1400 @subsection ede-simple-base-project
1401 @pjindex ede-simple-base-project
1404 @item Inheritance Tree:
1406 @item eieio-speedbar
1408 @item eieio-speedbar-directory-button
1410 @item @w{@xref{ede-project-placeholder}.}
1412 @item @w{@xref{ede-project}.}
1414 @item ede-simple-base-project
1423 EDE Simple project base class.
1424 This one project could control a tree of subdirectories.
1429 @node ede-proj-project
1430 @subsection ede-proj-project
1431 @pjindex ede-proj-project
1434 @item Inheritance Tree:
1436 @item eieio-speedbar
1438 @item eieio-speedbar-directory-button
1440 @item @w{@xref{ede-project-placeholder}.}
1442 @item @w{@xref{ede-project}.}
1444 @item ede-proj-project
1457 @item :makefile-type
1458 Type: @code{symbol} @*
1459 Default Value: @code{Makefile}
1461 The type of Makefile to generate.
1462 Can be one of @code{'Makefile}, 'Makefile.in, or 'Makefile.am.
1463 If this value is NOT @code{'Makefile}, then that overrides the @code{:makefile} slot
1468 Type: @code{list} @*
1469 Default Value: @code{nil}
1471 Variables to set in this Makefile.
1474 @item :configuration-variables
1475 Type: @code{list} @*
1476 Default Value: @code{("debug" (("DEBUG" . "1")))}
1478 Makefile variables to use in different configurations.
1479 These variables are used in the makefile when a configuration becomes active.
1482 @item :inference-rules @*
1483 Default Value: @code{nil}
1485 Inference rules to add to the makefile.
1488 @item :include-file @*
1489 Default Value: @code{nil}
1491 Additional files to include.
1492 These files can contain additional rules, variables, and customizations.
1495 @item :automatic-dependencies
1496 Type: @code{boolean} @*
1497 Default Value: @code{t}
1499 Non-@code{nil} to do implement automatic dependencies in the Makefile.
1502 @item :metasubproject
1503 Type: @code{boolean} @*
1504 Default Value: @code{nil}
1506 Non-@code{nil} if this is a metasubproject.
1507 Usually, a subproject is determined by a parent project. If multiple top level
1508 projects are grouped into a large project not maintained by EDE, then you need
1509 to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
1516 @subsubsection Specialized Methods
1518 @deffn Method ede-proj-makefile-create :AFTER this mfilename
1519 Create a Makefile for all Makefile targets in @var{THIS}.
1520 @var{MFILENAME} is the makefile to generate.
1523 @deffn Method ede-proj-makefile-insert-rules :AFTER this
1524 Insert rules needed by @var{THIS} target.
1527 @deffn Method ede-proj-makefile-tags :AFTER this targets
1528 Insert into the current location rules to make recursive TAGS files.
1529 Argument @var{THIS} is the project to create tags for.
1530 Argument @var{TARGETS} are the targets we should depend on for TAGS.
1533 @deffn Method ede-proj-makefile-insert-variables :AFTER this
1534 Insert variables needed by target @var{THIS}.
1537 @deffn Method project-make-dist :AFTER this
1538 Build a distribution for the project based on @var{THIS} target.
1541 @deffn Method ede-proj-makefile-insert-dist-rules :AFTER this
1542 Insert distribution rules for @var{THIS} in a Makefile, such as CLEAN and DIST.
1545 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
1546 Insert any symbols that the DIST rule should depend on.
1547 Argument @var{THIS} is the project that should insert stuff.
1550 @deffn Method ede-proj-makefile-insert-subproj-rules :AFTER this
1551 Insert a rule for the project @var{THIS} which should be a subproject.
1554 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
1555 Create a Makefile for all Makefile targets in @var{THIS} if needed.
1556 @var{MFILENAME} is the makefile to generate.
1559 @deffn Method ede-proj-configure-test-required-file :AFTER this file
1560 For project @var{THIS}, test that the file @var{FILE} exists, or create it.
1563 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
1564 Setup the build environment for project @var{THIS}.
1565 Handles the Makefile, or a Makefile.am configure.in combination.
1566 Optional argument @var{FORCE} will force items to be regenerated.
1569 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
1570 Return a list of patterns that are considered garbage to @var{THIS}.
1571 These are removed with make clean.
1574 @deffn Method ede-proj-configure-synchronize :AFTER this
1575 Synchronize what we know about project @var{THIS} into configure.in.
1578 @deffn Method ede-proj-makefile-insert-variables-new :AFTER this
1579 Insert variables needed by target @var{THIS}.
1581 NOTE: Not yet in use! This is part of an SRecode conversion of
1582 EDE that is in progress.
1585 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
1586 Return a list of configuration variables from @var{THIS}.
1587 Use @var{CONFIGURATION} as the current configuration to query.
1590 @deffn Method eieio-done-customizing :AFTER proj
1591 Call this when a user finishes customizing this object.
1592 Argument @var{PROJ} is the project to save.
1595 @deffn Method ede-proj-configure-recreate :AFTER this
1596 Delete project @var{THIS}es configure script and start over.
1599 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
1600 Insert user specified rules needed by @var{THIS} target.
1601 This is different from @dfn{ede-proj-makefile-insert-rules} in that this
1602 function won't create the building rules which are auto created with
1606 @deffn Method ede-proj-dist-makefile :AFTER this
1607 Return the name of the Makefile with the DIST target in it for @var{THIS}.
1610 @deffn Method ede-proj-configure-file :AFTER this
1611 The configure.in script used by project @var{THIS}.
1614 @deffn Method ede-commit-project :AFTER proj
1615 Commit any change to @var{PROJ} to its file.
1618 @deffn Method project-dist-files :AFTER this
1619 Return a list of files that constitutes a distribution of @var{THIS} project.
1622 @deffn Method ede-commit-local-variables :AFTER proj
1623 Commit change to local variables in @var{PROJ}.
1626 @node project-am-makefile
1627 @subsection project-am-makefile
1628 @pjindex project-am-makefile
1631 @item Inheritance Tree:
1633 @item eieio-speedbar
1635 @item eieio-speedbar-directory-button
1637 @item @w{@xref{ede-project-placeholder}.}
1639 @item @w{@xref{ede-project}.}
1641 @item project-am-makefile
1650 @subsubsection Specialized Methods
1652 @deffn Method project-am-subtree :AFTER ampf subdir
1653 Return the sub project in @var{AMPF} specified by @var{SUBDIR}.
1656 @deffn Method project-targets-for-file :AFTER proj
1657 Return a list of targets the project @var{PROJ}.
1660 @deffn Method project-new-target :AFTER proj &optional name type
1661 Create a new target named @var{NAME}.
1662 Argument @var{TYPE} is the type of target to insert. This is a string
1663 matching something in @code{project-am-type-alist} or type class symbol.
1664 Despite the fact that this is a method, it depends on the current
1665 buffer being in order to provide a smart default target type.
1668 @node ede-step-project
1669 @subsection ede-step-project
1670 @pjindex ede-step-project
1673 @item Inheritance Tree:
1675 @item eieio-speedbar
1677 @item eieio-speedbar-directory-button
1679 @item @w{@xref{ede-project-placeholder}.}
1681 @item @w{@xref{ede-project}.}
1683 @item ede-step-project
1696 @item :init-variables
1697 Type: @code{list} @*
1698 Default Value: @code{nil}
1700 Variables to set in this Makefile, at top of file.
1703 @item :additional-variables
1704 Type: @code{(or null list)} @*
1705 Default Value: @code{nil}
1707 Arbitrary variables needed from this project.
1708 It is safe to leave this blank.
1711 @item :additional-rules
1712 Type: @code{(or null list)} @*
1713 Default Value: @code{nil}
1715 Arbitrary rules and dependencies needed to make this target.
1716 It is safe to leave this blank.
1719 @item :installation-domain
1720 Type: @code{symbol} @*
1721 Default Value: @code{user}
1723 Installation domain specification.
1724 The variable GNUSTEP_INSTALLATION_DOMAIN is set at this value.
1728 Type: @code{(or null list)} @*
1729 Default Value: @code{(quote ("GNUmakefile.preamble"))}
1731 The auxilliary makefile for additional variables.
1732 Included just before the specific target files.
1736 Type: @code{(or null list)} @*
1737 Default Value: @code{(quote ("GNUmakefile.postamble"))}
1739 The auxilliary makefile for additional rules.
1740 Included just after the specific target files.
1743 @item :metasubproject
1744 Type: @code{boolean} @*
1745 Default Value: @code{nil}
1747 Non-@code{nil} if this is a metasubproject.
1748 Usually, a subproject is determined by a parent project. If multiple top level
1749 projects are grouped into a large project not maintained by EDE, then you need
1750 to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
1757 @subsubsection Specialized Methods
1759 @deffn Method ede-proj-makefile-create :AFTER this mfilename
1760 Create a GNUmakefile for all Makefile targets in @var{THIS}.
1761 @var{MFILENAME} is the makefile to generate.
1764 @deffn Method project-make-dist :AFTER this
1765 Build a distribution for the project based on @var{THIS} target.
1768 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
1769 Create a Makefile for all Makefile targets in @var{THIS} if needed.
1770 @var{MFILENAME} is the makefile to generate.
1773 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
1774 Setup the build environment for project @var{THIS}.
1775 Handles the Makefile, or a Makefile.am configure.in combination.
1776 Optional argument @var{FORCE} will force items to be regenerated.
1779 @deffn Method eieio-done-customizing :AFTER proj
1780 Call this when a user finishes customizing this object.
1781 Argument @var{PROJ} is the project to save.
1784 @deffn Method ede-proj-dist-makefile :AFTER this
1785 Return the name of the Makefile with the DIST target in it for @var{THIS}.
1788 @deffn Method ede-commit-project :AFTER proj
1789 Commit any change to @var{PROJ} to its file.
1792 @deffn Method project-dist-files :AFTER this
1793 Return a list of files that constitutes a distribution of @var{THIS} project.
1796 @deffn Method ede-commit-local-variables :AFTER proj
1797 Commit change to local variables in @var{PROJ}.
1805 * ede-proj-target ::
1806 * ede-proj-target-makefile ::
1807 * semantic-ede-proj-target-grammar ::
1808 * ede-proj-target-makefile-objectcode ::
1809 * ede-proj-target-makefile-archive ::
1810 * ede-proj-target-makefile-program ::
1811 * ede-proj-target-makefile-shared-object ::
1812 * ede-proj-target-elisp ::
1813 * ede-proj-target-elisp-autoloads ::
1814 * ede-proj-target-makefile-miscelaneous ::
1815 * ede-proj-target-makefile-info ::
1816 * ede-proj-target-scheme ::
1817 * project-am-target ::
1818 * project-am-objectcode ::
1819 * project-am-program ::
1820 * project-am-header-noinst ::
1821 * project-am-header-inst ::
1822 * project-am-lisp ::
1823 * project-am-texinfo ::
1829 @subsection ede-target
1833 @item Inheritance Tree:
1835 @item eieio-speedbar
1837 @item eieio-speedbar-directory-button
1842 @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}.}
1856 Name of this target.
1862 The path to the sources of this target.
1863 Relative to the path of the project it belongs to.
1867 Type: @code{list} @*
1868 Default Value: @code{nil}
1870 Source files in this target.
1873 @item :versionsource
1874 Type: @code{list} @*
1875 Default Value: @code{nil}
1877 Source files with a version string in them.
1878 These files are checked for a version string whenever the EDE version
1879 of the master project is changed. When strings are found, the version
1880 previously there is updated.
1886 @subsubsection Specialized Methods
1888 @deffn Method ede-preprocessor-map :AFTER this
1889 Get the pre-processor map for project @var{THIS}.
1892 @deffn Method eieio-speedbar-description :AFTER obj
1893 Provide a speedbar description for @var{OBJ}.
1896 @deffn Method project-compile-target :AFTER obj &optional command
1897 Compile the current target @var{OBJ}.
1898 Argument @var{COMMAND} is the command to use for compiling the target.
1901 @deffn Method project-debug-target :AFTER obj
1902 Run the current project target @var{OBJ} in a debugger.
1905 @deffn Method ede-convert-path :AFTER this path
1906 Convert path in a standard way for a given project.
1907 Default to making it project relative.
1908 Argument @var{THIS} is the project to convert @var{PATH} to.
1911 @deffn Method ede-name :AFTER this
1912 Return the name of @var{THIS} targt.
1915 @deffn Method ede-target-buffer-in-sourcelist :AFTER this buffer source
1916 Return non-@code{nil} if object @var{THIS} is in @var{BUFFER} to a @var{SOURCE} list.
1917 Handles complex path issues.
1920 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1921 Return the path to @var{OBJ}.
1922 Optional @var{DEPTH} is the depth we start at.
1925 @deffn Method ede-buffer-header-file :AFTER this buffer
1926 There are no default header files in EDE.
1927 Do a quick check to see if there is a Header tag in this buffer.
1930 @deffn Method project-remove-file :AFTER ot fnnd
1931 Remove the current buffer from project target @var{OT}.
1932 Argument @var{FNND} is an argument.
1935 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1936 Check for some documentation files for @var{THIS}.
1937 Also do a quick check to see if there is a Documentation tag in this @var{BUFFER}.
1940 @deffn Method ede-map-target-buffers :AFTER this proc
1941 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1944 @deffn Method eieio-speedbar-child-description :AFTER obj
1945 Provide a speedbar description for a plain-child of @var{OBJ}.
1946 A plain child is a child element which is not an EIEIO object.
1949 @deffn Method ede-object-keybindings :BEFORE this
1950 Retrieves the slot @code{keybindings} from an object of class @code{ede-target}
1953 @deffn Method ede-description :AFTER this
1954 Return a description suitable for the minibuffer about @var{THIS}.
1957 @deffn Method eieio-speedbar-object-children :AFTER this
1958 Return the list of speedbar display children for @var{THIS}.
1961 @deffn Method ede-system-include-path :AFTER this
1962 Get the system include path used by project @var{THIS}.
1965 @deffn Method ede-object-sourcecode :BEFORE this
1966 Retrieves the slot @code{sourcetype} from an object of class @code{ede-target}
1969 @deffn Method ede-expand-filename :AFTER this filename &optional force
1970 Return a fully qualified file name based on target @var{THIS}.
1971 @var{FILENAME} should a a filename which occurs in a directory in which @var{THIS} works.
1972 Optional argument @var{FORCE} forces the default filename to be provided even if it
1976 @deffn Method ede-menu-items-build :AFTER obj &optional current
1977 Return a list of menu items for building target @var{OBJ}.
1978 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1981 @deffn Method ede-want-file-p :AFTER this file
1982 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
1985 @deffn Method ede-update-version-in-source :AFTER this version
1986 In sources for @var{THIS}, change version numbers to @var{VERSION}.
1989 @deffn Method project-delete-target :AFTER ot
1990 Delete the current target @var{OT} from it's parent project.
1993 @deffn Method ede-target-sourcecode :AFTER this
1994 Return the sourcecode objects which @var{THIS} permits.
1997 @deffn Method eieio-speedbar-child-make-tag-lines :AFTER this depth
1998 Create a speedbar tag line for a child of @var{THIS}.
1999 It has depth @var{DEPTH}.
2002 @deffn Method eieio-speedbar-object-buttonname :AFTER object
2003 Return a string to use as a speedbar button for @var{OBJECT}.
2006 @deffn Method eieio-done-customizing :AFTER target
2007 Call this when a user finishes customizing @var{TARGET}.
2010 @deffn Method project-edit-file-target :AFTER ot
2011 Edit the target @var{OT} associated w/ this file.
2014 @deffn Method ede-documentation :AFTER this
2015 Return a list of files that provides documentation.
2016 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2017 files in the project.
2020 @deffn Method ede-want-file-source-p :AFTER this file
2021 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2024 @deffn Method ede-want-file-auxiliary-p :AFTER this file
2025 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2028 @deffn Method project-add-file :AFTER ot file
2029 Add the current buffer into project project target @var{OT}.
2030 Argument @var{FILE} is the file to add.
2033 @deffn Method ede-target-name :AFTER this
2034 Return the name of @var{THIS} target, suitable for make or debug style commands.
2037 @deffn Method ede-object-menu :BEFORE this
2038 Retrieves the slot @code{menu} from an object of class @code{ede-target}
2041 @node ede-proj-target
2042 @subsection ede-proj-target
2043 @tgindex ede-proj-target
2046 @item Inheritance Tree:
2048 @item eieio-speedbar
2050 @item eieio-speedbar-directory-button
2052 @item @w{@xref{ede-target}.}
2054 @item ede-proj-target
2057 @w{@xref{ede-proj-target-makefile},} @w{ede-proj-target-aux,} @w{@xref{ede-proj-target-scheme}.}
2072 Name of this target.
2078 The path to the sources of this target.
2079 Relative to the path of the project it belongs to.
2083 Type: @code{list} @*
2084 Default Value: @code{nil}
2086 Auxilliary source files included in this target.
2087 Each of these is considered equivalent to a source file, but it is not
2088 distributed, and each should have a corresponding rule to build it.
2092 Type: @code{(or null symbol)} @*
2093 Default Value: @code{nil}
2095 The compiler to be used to compile this object.
2096 This should be a symbol, which contains the object defining the compiler.
2097 This enables save/restore to do so by name, permitting the sharing
2098 of these compiler resources, and global customization thereof.
2102 Type: @code{(or null symbol)} @*
2103 Default Value: @code{nil}
2105 The linker to be used to link compiled sources for this object.
2106 This should be a symbol, which contains the object defining the linker.
2107 This enables save/restore to do so by name, permitting the sharing
2108 of these linker resources, and global customization thereof.
2114 @subsubsection Specialized Methods
2116 @deffn Method project-compile-target :AFTER obj &optional command
2117 Compile the current target @var{OBJ}.
2118 Argument @var{COMMAND} is the command to use for compiling the target.
2121 @deffn Method project-debug-target :AFTER obj
2122 Run the current project target @var{OBJ} in a debugger.
2125 @deffn Method ede-proj-configure-add-missing :AFTER this
2126 Query if any files needed by @var{THIS} provided by automake are missing.
2127 Results in --add-missing being passed to automake.
2130 @deffn Method ede-proj-flush-autoconf :AFTER this
2131 Flush the configure file (current buffer) to accomodate @var{THIS}.
2132 By flushing, remove any cruft that may be in the file. Subsequent
2133 calls to @dfn{ede-proj-tweak-autoconf} can restore items removed by flush.
2136 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2137 Insert rules needed by @var{THIS} target.
2140 @deffn Method project-remove-file :AFTER target file
2141 For @var{TARGET}, remove @var{FILE}.
2142 @var{FILE} must be massaged by @dfn{ede-convert-path}.
2145 @deffn Method ede-proj-configure-create-missing :AFTER this
2146 Add any missing files for @var{THIS} by creating them.
2149 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2150 Return the variable name for @var{THIS}'s sources.
2153 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2154 Insert variables needed by target @var{THIS}.
2155 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2159 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2160 Insert variables needed by target @var{THIS} in Makefile.am after SOURCES.
2163 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2164 Insert any symbols that the DIST rule should depend on.
2165 Argument @var{THIS} is the target that should insert stuff.
2168 @deffn Method ede-proj-linkers :AFTER obj
2169 List of linkers being used by @var{OBJ}.
2170 If the @code{linker} slot is empty, concoct one on a first match found
2171 basis for any given type from the @code{availablelinkers} slot.
2172 Otherwise, return the @code{linker} slot.
2173 Converts all symbols into the objects to be used.
2176 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
2177 Return a list of patterns that are considered garbage to @var{THIS}.
2178 These are removed with make clean.
2181 @deffn Method ede-proj-tweak-autoconf :AFTER this
2182 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2185 @deffn Method ede-proj-compilers :AFTER obj
2186 List of compilers being used by @var{OBJ}.
2187 If the @code{compiler} slot is empty, concoct one on a first match found
2188 basis for any given type from the @code{availablecompilers} slot.
2189 Otherwise, return the @code{compiler} slot.
2190 Converts all symbols into the objects to be used.
2193 @deffn Method project-delete-target :AFTER this
2194 Delete the current target @var{THIS} from it's parent project.
2197 @deffn Method ede-proj-makefile-target-name :AFTER this
2198 Return the name of the main target for @var{THIS} target.
2201 @deffn Method eieio-done-customizing :AFTER target
2202 Call this when a user finishes customizing this object.
2203 Argument @var{TARGET} is the project we are completing customization on.
2206 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
2207 Insert user specified rules needed by @var{THIS} target.
2210 @deffn Method project-add-file :AFTER this file
2211 Add to target @var{THIS} the current buffer represented as @var{FILE}.
2214 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2215 Insert variables needed by target @var{THIS} in Makefile.am before SOURCES.
2218 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2219 Insert any symbols that the DIST rule should depend on.
2220 Argument @var{THIS} is the target that should insert stuff.
2223 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2224 Return a list of source files to convert to dependencies.
2225 Argument @var{THIS} is the target to get sources from.
2228 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2229 Insert the source variables needed by @var{THIS}.
2230 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2235 @node ede-proj-target-makefile
2236 @subsection ede-proj-target-makefile
2237 @tgindex ede-proj-target-makefile
2240 @item Inheritance Tree:
2242 @item eieio-speedbar
2244 @item eieio-speedbar-directory-button
2246 @item @w{@xref{ede-target}.}
2248 @item @w{@xref{ede-proj-target}.}
2250 @item ede-proj-target-makefile
2253 @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}.}
2267 Type: @code{string} @*
2268 Default Value: @code{"Makefile"}
2270 File name of generated Makefile.
2274 Type: @code{boolean} @*
2275 Default Value: @code{t}
2277 Non @code{nil} means the rule created is part of the all target.
2278 Setting this to @code{nil} creates the rule to build this item, but does not
2279 include it in the ALL`all:' rule.
2282 @item :configuration-variables
2283 Type: @code{list} @*
2284 Default Value: @code{nil}
2286 Makefile variables appended to use in different configurations.
2287 These variables are used in the makefile when a configuration becomes active.
2288 Target variables are always renamed such as foo_CFLAGS, then included into
2289 commands where the variable would usually appear.
2293 Type: @code{list} @*
2294 Default Value: @code{nil}
2296 Arbitrary rules and dependencies needed to make this target.
2297 It is safe to leave this blank.
2303 @subsubsection Specialized Methods
2305 @deffn Method ede-proj-makefile-dependencies :AFTER this
2306 Return a string representing the dependencies for @var{THIS}.
2307 Some compilers only use the first element in the dependencies, others
2308 have a list of intermediates (object files), and others don't care.
2309 This allows customization of how these elements appear.
2312 @deffn Method project-compile-target :AFTER obj &optional command
2313 Compile the current target program @var{OBJ}.
2314 Optional argument @var{COMMAND} is the s the alternate command to use.
2317 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2318 Insert rules needed by @var{THIS} target.
2321 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2322 Insert variables needed by target @var{THIS}.
2323 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2327 @deffn Method ede-proj-makefile-insert-commands :AFTER this
2328 Insert the commands needed by target @var{THIS}.
2329 For targets, insert the commands needed by the chosen compiler.
2332 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
2333 Return a list of configuration variables from @var{THIS}.
2334 Use @var{CONFIGURATION} as the current configuration to query.
2337 @node semantic-ede-proj-target-grammar
2338 @subsection semantic-ede-proj-target-grammar
2339 @tgindex semantic-ede-proj-target-grammar
2342 @item Inheritance Tree:
2344 @item eieio-speedbar
2346 @item eieio-speedbar-directory-button
2348 @item @w{@xref{ede-target}.}
2350 @item @w{@xref{ede-proj-target}.}
2352 @item @w{@xref{ede-proj-target-makefile}.}
2354 @item semantic-ede-proj-target-grammar
2364 @subsubsection Specialized Methods
2366 @deffn Method project-compile-target :AFTER obj
2367 Compile all sources in a Lisp target @var{OBJ}.
2370 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2371 Insert rules needed by @var{THIS} target.
2374 @deffn Method ede-buffer-mine :AFTER this buffer
2375 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2376 Lays claim to all -by.el, and -wy.el files.
2379 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2380 Return the variable name for @var{THIS}'s sources.
2383 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2384 Insert dist dependencies, or intermediate targets.
2385 This makes sure that all grammar lisp files are created before the dist
2386 runs, so they are always up to date.
2387 Argument @var{THIS} is the target that should insert stuff.
2391 @node ede-proj-target-makefile-objectcode
2392 @subsection ede-proj-target-makefile-objectcode
2393 @tgindex ede-proj-target-makefile-objectcode
2396 @item Inheritance Tree:
2398 @item eieio-speedbar
2400 @item eieio-speedbar-directory-button
2402 @item @w{@xref{ede-target}.}
2404 @item @w{@xref{ede-proj-target}.}
2406 @item @w{@xref{ede-proj-target-makefile}.}
2408 @item ede-proj-target-makefile-objectcode
2411 @w{@xref{ede-proj-target-makefile-archive},} @w{@xref{ede-proj-target-makefile-program}.}
2425 @item :configuration-variables
2426 Type: @code{list} @*
2427 Default Value: @code{("debug" ("CFLAGS" . "-g") ("LDFLAGS" . "-g"))}
2429 @xref{ede-proj-target-makefile}.
2432 @subsubsection Specialized Methods
2434 @deffn Method ede-buffer-header-file :AFTER this buffer
2435 There are no default header files.
2438 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2439 Return the variable name for @var{THIS}'s sources.
2442 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2443 Insert variables needed by target @var{THIS}.
2444 Optional argument @var{MORESOURCE} is not used.
2447 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2448 Return a list of source files to convert to dependencies.
2449 Argument @var{THIS} is the target to get sources from.
2453 @node ede-proj-target-makefile-archive
2454 @subsection ede-proj-target-makefile-archive
2455 @tgindex ede-proj-target-makefile-archive
2458 @item Inheritance Tree:
2460 @item eieio-speedbar
2462 @item eieio-speedbar-directory-button
2464 @item @w{@xref{ede-target}.}
2466 @item @w{@xref{ede-proj-target}.}
2468 @item @w{@xref{ede-proj-target-makefile}.}
2470 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2472 @item ede-proj-target-makefile-archive
2483 @subsubsection Specialized Methods
2485 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2486 Create the make rule needed to create an archive for @var{THIS}.
2489 @deffn Method ede-proj-makefile-insert-source-variables :PRIMARY this
2490 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2491 We aren't acutally inserting SOURCE details, but this is used by the
2492 Makefile.am generator, so use it to add this important bin program.
2496 @node ede-proj-target-makefile-program
2497 @subsection ede-proj-target-makefile-program
2498 @tgindex ede-proj-target-makefile-program
2501 @item Inheritance Tree:
2503 @item eieio-speedbar
2505 @item eieio-speedbar-directory-button
2507 @item @w{@xref{ede-target}.}
2509 @item @w{@xref{ede-proj-target}.}
2511 @item @w{@xref{ede-proj-target-makefile}.}
2513 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2515 @item ede-proj-target-makefile-program
2518 @w{@xref{ede-proj-target-makefile-shared-object}.}
2534 Type: @code{list} @*
2535 Default Value: @code{nil}
2537 Libraries, such as "m" or "Xt" which this program depends on.
2538 The linker flag "-l" is automatically prepended. Do not include a "lib"
2539 prefix, or a ".so" suffix.
2541 Note: Currently only used for Automake projects.
2545 Type: @code{list} @*
2546 Default Value: @code{nil}
2548 Additional flags to add when linking this target.
2549 Use ldlibs to add addition libraries. Use this to specify specific
2550 options to the linker.
2552 Note: Not currently used. This bug needs to be fixed.
2558 @subsubsection Specialized Methods
2560 @deffn Method project-debug-target :AFTER obj
2561 Debug a program target @var{OBJ}.
2564 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2565 Insert rules needed by @var{THIS} target.
2568 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2569 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2572 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2573 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2577 @node ede-proj-target-makefile-shared-object
2578 @subsection ede-proj-target-makefile-shared-object
2579 @tgindex ede-proj-target-makefile-shared-object
2582 @item Inheritance Tree:
2584 @item eieio-speedbar
2586 @item eieio-speedbar-directory-button
2588 @item @w{@xref{ede-target}.}
2590 @item @w{@xref{ede-proj-target}.}
2592 @item @w{@xref{ede-proj-target-makefile}.}
2594 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2596 @item @w{@xref{ede-proj-target-makefile-program}.}
2598 @item ede-proj-target-makefile-shared-object
2610 @subsubsection Specialized Methods
2612 @deffn Method ede-proj-configure-add-missing :AFTER this
2613 Query if any files needed by @var{THIS} provided by automake are missing.
2614 Results in --add-missing being passed to automake.
2617 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2618 Return the variable name for @var{THIS}'s sources.
2621 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2622 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2623 We need to override -program which has an LDADD element.
2626 @deffn Method ede-proj-makefile-target-name :AFTER this
2627 Return the name of the main target for @var{THIS} target.
2630 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2631 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2632 We aren't acutally inserting SOURCE details, but this is used by the
2633 Makefile.am generator, so use it to add this important bin program.
2637 @node ede-proj-target-elisp
2638 @subsection ede-proj-target-elisp
2639 @tgindex ede-proj-target-elisp
2642 @item Inheritance Tree:
2644 @item eieio-speedbar
2646 @item eieio-speedbar-directory-button
2648 @item @w{@xref{ede-target}.}
2650 @item @w{@xref{ede-proj-target}.}
2652 @item @w{@xref{ede-proj-target-makefile}.}
2654 @item ede-proj-target-elisp
2657 @w{@xref{ede-proj-target-elisp-autoloads}.}
2672 Type: @code{list} @*
2673 Default Value: @code{nil}
2675 Additional packages needed.
2676 There should only be one toplevel package per auxiliary tool needed.
2677 These packages location is found, and added to the compile time
2684 @subsubsection Specialized Methods
2686 @deffn Method project-compile-target :AFTER obj
2687 Compile all sources in a Lisp target @var{OBJ}.
2688 Bonus: Return a cons cell: (COMPILED . UPTODATE).
2691 @deffn Method ede-proj-flush-autoconf :AFTER this
2692 Flush the configure file (current buffer) to accomodate @var{THIS}.
2695 @deffn Method ede-buffer-mine :AFTER this buffer
2696 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2697 Lays claim to all .elc files that match .el files in this target.
2700 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2701 Return the variable name for @var{THIS}'s sources.
2704 @deffn Method ede-proj-tweak-autoconf :AFTER this
2705 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2708 @deffn Method ede-update-version-in-source :AFTER this version
2709 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
2710 There are standards in Elisp files specifying how the version string
2711 is found, such as a @code{-version} variable, or the standard header.
2714 @node ede-proj-target-elisp-autoloads
2715 @subsection ede-proj-target-elisp-autoloads
2716 @tgindex ede-proj-target-elisp-autoloads
2719 @item Inheritance Tree:
2721 @item eieio-speedbar
2723 @item eieio-speedbar-directory-button
2725 @item @w{@xref{ede-target}.}
2727 @item @w{@xref{ede-proj-target}.}
2729 @item @w{@xref{ede-proj-target-makefile}.}
2731 @item @w{@xref{ede-proj-target-elisp}.}
2733 @item ede-proj-target-elisp-autoloads
2749 Type: @code{list} @*
2750 Default Value: @code{("cedet-autogen")}
2752 @xref{ede-proj-target-elisp}.
2753 @item :autoload-file
2754 Type: @code{string} @*
2755 Default Value: @code{"loaddefs.el"}
2757 The file that autoload definitions are placed in.
2758 There should be one load defs file for a given package. The load defs are created
2759 for all Emacs Lisp sources that exist in the directory of the created target.
2762 @item :autoload-dirs
2763 Type: @code{list} @*
2764 Default Value: @code{nil}
2766 The directories to scan for autoload definitions.
2767 If @code{nil} defaults to the current directory.
2773 @subsubsection Specialized Methods
2775 @deffn Method ede-proj-makefile-dependencies :AFTER this
2776 Return a string representing the dependencies for @var{THIS}.
2777 Always return an empty string for an autoloads generator.
2780 @deffn Method project-compile-target :AFTER obj
2781 Create or update the autoload target.
2784 @deffn Method ede-proj-flush-autoconf :AFTER this
2785 Flush the configure file (current buffer) to accomodate @var{THIS}.
2788 @deffn Method ede-buffer-mine :AFTER this buffer
2789 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2790 Lays claim to all .elc files that match .el files in this target.
2793 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2794 Return the variable name for @var{THIS}'s sources.
2797 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2798 Insert any symbols that the DIST rule should depend on.
2799 Emacs Lisp autoload files ship the generated .el files.
2800 Argument @var{THIS} is the target which needs to insert an info file.
2803 @deffn Method ede-proj-tweak-autoconf :AFTER this
2804 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2807 @deffn Method ede-update-version-in-source :AFTER this version
2808 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
2809 There are standards in Elisp files specifying how the version string
2810 is found, such as a @code{-version} variable, or the standard header.
2813 @deffn Method ede-proj-compilers :AFTER obj
2814 List of compilers being used by @var{OBJ}.
2815 If the @code{compiler} slot is empty, get the car of the compilers list.
2818 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2819 Insert any symbols that the DIST rule should distribute.
2820 Emacs Lisp autoload files ship the generated .el files.
2821 Argument @var{THIS} is the target which needs to insert an info file.
2824 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2825 Insert the source variables needed by @var{THIS}.
2826 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2831 @node ede-proj-target-makefile-miscelaneous
2832 @subsection ede-proj-target-makefile-miscelaneous
2833 @tgindex ede-proj-target-makefile-miscelaneous
2836 @item Inheritance Tree:
2838 @item eieio-speedbar
2840 @item eieio-speedbar-directory-button
2842 @item @w{@xref{ede-target}.}
2844 @item @w{@xref{ede-proj-target}.}
2846 @item @w{@xref{ede-proj-target-makefile}.}
2848 @item ede-proj-target-makefile-miscelaneous
2863 Type: @code{string} @*
2864 Default Value: @code{""}
2866 Miscellaneous sources which have a specialized makefile.
2867 The sub-makefile is used to build this target.
2873 @subsubsection Specialized Methods
2875 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2876 Create the make rule needed to create an archive for @var{THIS}.
2879 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2880 Return the variable name for @var{THIS}'s sources.
2883 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2884 Return a list of files which @var{THIS} target depends on.
2888 @node ede-proj-target-makefile-info
2889 @subsection ede-proj-target-makefile-info
2890 @tgindex ede-proj-target-makefile-info
2893 @item Inheritance Tree:
2895 @item eieio-speedbar
2897 @item eieio-speedbar-directory-button
2899 @item @w{@xref{ede-target}.}
2901 @item @w{@xref{ede-proj-target}.}
2903 @item @w{@xref{ede-proj-target-makefile}.}
2905 @item ede-proj-target-makefile-info
2920 Type: @code{string} @*
2921 Default Value: @code{""}
2923 The main menu resides in this file.
2924 All other sources should be included independently.
2930 @subsubsection Specialized Methods
2932 @deffn Method ede-proj-configure-add-missing :AFTER this
2933 Query if any files needed by @var{THIS} provided by automake are missing.
2934 Results in --add-missing being passed to automake.
2937 @deffn Method object-write :AFTER this
2938 Before committing any change to @var{THIS}, make sure the mainmenu is first.
2941 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2942 Return the variable name for @var{THIS}'s sources.
2945 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2946 Insert any symbols that the DIST rule should depend on.
2947 Texinfo files want to insert generated `.info' files.
2948 Argument @var{THIS} is the target which needs to insert an info file.
2951 @deffn Method ede-proj-makefile-target-name :AFTER this
2952 Return the name of the main target for @var{THIS} target.
2955 @deffn Method ede-documentation :AFTER this
2956 Return a list of files that provides documentation.
2957 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2958 files in the project.
2961 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2962 Insert any symbols that the DIST rule should depend on.
2963 Texinfo files want to insert generated `.info' files.
2964 Argument @var{THIS} is the target which needs to insert an info file.
2967 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2968 Insert the source variables needed by @var{THIS} info target.
2969 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2971 Does the usual for Makefile mode, but splits source into two variables
2972 when working in Automake mode.
2975 @node ede-proj-target-scheme
2976 @subsection ede-proj-target-scheme
2977 @tgindex ede-proj-target-scheme
2980 @item Inheritance Tree:
2982 @item eieio-speedbar
2984 @item eieio-speedbar-directory-button
2986 @item @w{@xref{ede-target}.}
2988 @item @w{@xref{ede-proj-target}.}
2990 @item ede-proj-target-scheme
3004 Type: @code{string} @*
3005 Default Value: @code{"guile"}
3007 The preferred interpreter for this code.
3013 @subsubsection Specialized Methods
3015 @deffn Method ede-proj-tweak-autoconf :AFTER this
3016 Tweak the configure file (current buffer) to accomodate @var{THIS}.
3020 @node project-am-target
3021 @subsection project-am-target
3022 @tgindex project-am-target
3025 @item Inheritance Tree:
3027 @item eieio-speedbar
3029 @item eieio-speedbar-directory-button
3031 @item @w{@xref{ede-target}.}
3033 @item project-am-target
3036 @w{@xref{project-am-objectcode},} @w{project-am-header,} @w{@xref{project-am-lisp},} @w{@xref{project-am-texinfo},} @w{@xref{project-am-man}.}
3044 @subsubsection Specialized Methods
3046 @deffn Method project-compile-target-command :AFTER this
3047 Default target to use when compiling a given target.
3050 @deffn Method project-make-dist :AFTER this
3051 Run the current project in the debugger.
3054 @deffn Method project-edit-file-target :AFTER obj
3055 Edit the target associated w/ this file.
3058 @node project-am-objectcode
3059 @subsection project-am-objectcode
3060 @tgindex project-am-objectcode
3063 @item Inheritance Tree:
3065 @item eieio-speedbar
3067 @item eieio-speedbar-directory-button
3069 @item @w{@xref{ede-target}.}
3071 @item @w{@xref{project-am-target}.}
3073 @item project-am-objectcode
3076 @w{@xref{project-am-program},} @w{project-am-lib.}
3085 @subsubsection Specialized Methods
3087 @deffn Method project-am-macro :AFTER this
3088 Return the default macro to 'edit' for this object type.
3091 @deffn Method project-debug-target :AFTER obj
3092 Run the current project target in a debugger.
3095 @deffn Method project-compile-target-command :AFTER this
3096 Default target to use when compiling an object code target.
3099 @deffn Method ede-buffer-header-file :AFTER this buffer
3100 There are no default header files.
3103 @node project-am-program
3104 @subsection project-am-program
3105 @tgindex project-am-program
3108 @item Inheritance Tree:
3110 @item eieio-speedbar
3112 @item eieio-speedbar-directory-button
3114 @item @w{@xref{ede-target}.}
3116 @item @w{@xref{project-am-target}.}
3118 @item @w{@xref{project-am-objectcode}.}
3120 @item project-am-program
3135 Default Value: @code{nil}
3142 @node project-am-header-noinst
3143 @subsection project-am-header-noinst
3144 @tgindex project-am-header-noinst
3147 @item Inheritance Tree:
3149 @item eieio-speedbar
3151 @item eieio-speedbar-directory-button
3153 @item @w{@xref{ede-target}.}
3155 @item @w{@xref{project-am-target}.}
3157 @item @w{project-am-header.}
3159 @item project-am-header-noinst
3169 @subsubsection Specialized Methods
3171 @deffn Method project-am-macro :AFTER this
3172 Return the default macro to 'edit' for this object.
3175 @node project-am-header-inst
3176 @subsection project-am-header-inst
3177 @tgindex project-am-header-inst
3180 @item Inheritance Tree:
3182 @item eieio-speedbar
3184 @item eieio-speedbar-directory-button
3186 @item @w{@xref{ede-target}.}
3188 @item @w{@xref{project-am-target}.}
3190 @item @w{project-am-header.}
3192 @item project-am-header-inst
3202 @subsubsection Specialized Methods
3204 @deffn Method project-am-macro :AFTER this
3205 Return the default macro to 'edit' for this object.
3208 @node project-am-lisp
3209 @subsection project-am-lisp
3210 @tgindex project-am-lisp
3213 @item Inheritance Tree:
3215 @item eieio-speedbar
3217 @item eieio-speedbar-directory-button
3219 @item @w{@xref{ede-target}.}
3221 @item @w{@xref{project-am-target}.}
3223 @item project-am-lisp
3232 @subsubsection Specialized Methods
3234 @deffn Method project-am-macro :AFTER this
3235 Return the default macro to 'edit' for this object.
3238 @node project-am-texinfo
3239 @subsection project-am-texinfo
3240 @tgindex project-am-texinfo
3243 @item Inheritance Tree:
3245 @item eieio-speedbar
3247 @item eieio-speedbar-directory-button
3249 @item @w{@xref{ede-target}.}
3251 @item @w{@xref{project-am-target}.}
3253 @item project-am-texinfo
3267 Default Value: @code{nil}
3269 Additional texinfo included in this one.
3274 @subsubsection Specialized Methods
3276 @deffn Method project-am-macro :AFTER this
3277 Return the default macro to 'edit' for this object type.
3280 @deffn Method project-compile-target-command :AFTER this
3281 Default target t- use when compling a texinfo file.
3284 @deffn Method ede-documentation :AFTER this
3285 Return a list of files that provides documentation.
3286 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
3287 files in the project.
3290 @node project-am-man
3291 @comment node-name, next, previous, up
3292 @subsection project-am-man
3293 @tgindex project-am-man
3296 @item Inheritance Tree:
3298 @item eieio-speedbar
3300 @item eieio-speedbar-directory-button
3302 @item @w{@xref{ede-target}.}
3304 @item @w{@xref{project-am-target}.}
3306 @item project-am-man
3315 @subsubsection Specialized Methods
3317 @deffn Method project-am-macro :AFTER this
3318 Return the default macro to 'edit' for this object type.
3324 The source code type is an object designed to associated files with
3332 @node ede-sourcecode
3333 @subsection ede-sourcecode
3334 @scindex ede-sourcecode
3337 @item Inheritance Tree:
3339 @item eieio-instance-inheritor
3341 @item ede-sourcecode
3351 @item :parent-instance
3352 Type: @code{eieio-instance-inheritor-child}
3354 The parent of this instance.
3355 If a slot of this class is reference, and is unbound, then the parent
3356 is checked for a value.
3362 The name of this type of source code.
3363 Such as "C" or "Emacs Lisp"
3366 @item :sourcepattern
3367 Type: @code{string} @*
3368 Default Value: @code{".*"}
3370 Emacs regex matching sourcecode this target accepts.
3373 @item :auxsourcepattern
3374 Type: @code{(or null string)} @*
3375 Default Value: @code{nil}
3377 Emacs regex matching auxiliary source code this target accepts.
3378 Aux source are source code files needed for compilation, which are not comiled
3382 @item :enable-subdirectories
3383 Type: @code{boolean} @*
3384 Default Value: @code{nil}
3386 Non @code{nil} if this sourcecode type uses subdirectores.
3387 If sourcecode always lives near the target creating it, this should be nil.
3388 If sourcecode can, or typically lives in a subdirectory of the owning
3389 target, set this to t.
3392 @item :garbagepattern
3393 Type: @code{list} @*
3394 Default Value: @code{nil}
3396 Shell file regex matching files considered as garbage.
3397 This is a list of items added to an @code{rm} command when executing a @code{clean}
3404 @subsubsection Specialized Methods
3406 @deffn Method ede-want-any-files-p :AFTER this filenames
3407 Return non-@code{nil} if @var{THIS} will accept any files in @var{FILENAMES}.
3410 @deffn Method ede-want-any-source-files-p :AFTER this filenames
3411 Return non-@code{nil} if @var{THIS} will accept any source files in @var{FILENAMES}.
3414 @deffn Method ede-want-any-auxiliary-files-p :AFTER this filenames
3415 Return non-@code{nil} if @var{THIS} will accept any aux files in @var{FILENAMES}.
3418 @deffn Method ede-buffer-header-file :AFTER this filename
3419 Return a list of file names of header files for @var{THIS} with @var{FILENAME}.
3420 Used to guess header files, but uses the auxsource regular expression.
3423 @deffn Method ede-want-file-p :AFTER this filename
3424 Return non-@code{nil} if sourcecode definition @var{THIS} will take @var{FILENAME}.
3427 @deffn Method ede-want-file-source-p :AFTER this filename
3428 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3431 @deffn Method ede-want-file-auxiliary-p :AFTER this filename
3432 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3438 The compiler object is designed to associate source code with
3439 compilers. The target then references the compilers it can use.
3440 When the makefile is created, this object type knows how to create
3444 * ede-compilation-program ::
3446 * ede-object-compiler ::
3451 @node ede-compilation-program
3452 @subsection ede-compilation-program
3453 @cmindex ede-compilation-program
3456 @item Inheritance Tree:
3458 @item eieio-instance-inheritor
3460 @item ede-compilation-program
3463 @w{@xref{ede-compiler},} @w{@xref{ede-linker}.}
3473 @item :parent-instance
3474 Type: @code{eieio-instance-inheritor-child}
3476 The parent of this instance.
3477 If a slot of this class is reference, and is unbound, then the parent
3478 is checked for a value.
3484 Name of this type of compiler.
3490 Variables needed in the Makefile for this compiler.
3491 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3492 is a string, and VALUE is either a string, or a list of strings.
3493 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3499 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3500 This is used to match target objects with the compilers and linkers
3501 they can use, and which files this object is interested in.
3505 Type: @code{list} @*
3506 Default Value: @code{nil}
3508 Auxiliary rules needed for this compiler to run.
3509 For example, yacc/lex files need additional chain rules, or inferences.
3515 The commands used to execute this compiler.
3516 The object which uses this compiler will place these commands after
3517 it's rule definition.
3521 Type: @code{list} @*
3522 Default Value: @code{nil}
3524 Autoconf function to call if this type of compiler is used.
3525 When a project is in Automake mode, this defines the autoconf function to
3526 call to initialize automake to use this compiler.
3527 For example, there may be multiple C compilers, but they all probably
3528 use the same autoconf form.
3531 @item :objectextention
3534 A string which is the extention used for object files.
3535 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3541 @subsubsection Specialized Methods
3543 @deffn Method ede-proj-flush-autoconf :AFTER this
3544 Flush the configure file (current buffer) to accomodate @var{THIS}.
3547 @deffn Method ede-proj-makefile-insert-rules :AFTER this
3548 Insert rules needed for @var{THIS} compiler object.
3551 @deffn Method ede-proj-makefile-insert-variables :AFTER this
3552 Insert variables needed by the compiler @var{THIS}.
3555 @deffn Method ede-proj-makefile-insert-commands :AFTER this
3556 Insert the commands needed to use compiler @var{THIS}.
3557 The object creating makefile rules must call this method for the
3558 compiler it decides to use after inserting in the rule.
3561 @deffn Method ede-object-sourcecode :AFTER this
3562 Retrieves the slot @code{sourcetype} from an object of class @code{ede-compilation-program}
3565 @deffn Method ede-proj-tweak-autoconf :AFTER this
3566 Tweak the configure file (current buffer) to accomodate @var{THIS}.
3571 @subsection ede-compiler
3572 @cmindex ede-compiler
3575 @item Inheritance Tree:
3577 @item eieio-instance-inheritor
3579 @item @w{@xref{ede-compilation-program}.}
3584 @w{@xref{ede-object-compiler},} @w{semantic-ede-grammar-compiler-class.}
3594 Create a new object with name NAME of class type ede-compiler
3600 @item :parent-instance
3601 Type: @code{eieio-instance-inheritor-child}
3603 The parent of this instance.
3604 If a slot of this class is reference, and is unbound, then the parent
3605 is checked for a value.
3611 Name of this type of compiler.
3617 Variables needed in the Makefile for this compiler.
3618 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3619 is a string, and VALUE is either a string, or a list of strings.
3620 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3626 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3627 This is used to match target objects with the compilers and linkers
3628 they can use, and which files this object is interested in.
3634 The commands used to execute this compiler.
3635 The object which uses this compiler will place these commands after
3636 it's rule definition.
3639 @item :objectextention
3642 A string which is the extention used for object files.
3643 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3647 Type: @code{boolean} @*
3648 Default Value: @code{nil}
3650 Non-@code{nil} if this compiler can make dependencies.
3654 Type: @code{boolean} @*
3655 Default Value: @code{nil}
3657 Non-@code{nil} if this compiler creates code that can be linked.
3658 This requires that the containing target also define a list of available
3659 linkers that can be used.
3665 @subsubsection Specialized Methods
3667 @deffn Method ede-proj-makefile-insert-object-variables :AFTER this targetname sourcefiles
3668 Insert an OBJ variable to specify object code to be generated for @var{THIS}.
3669 The name of the target is @var{TARGETNAME} as a string. @var{SOURCEFILES} is the list of
3670 files to be objectified.
3671 Not all compilers do this.
3674 @deffn Method ede-compiler-intermediate-objects-p :AFTER this
3675 Return non-@code{nil} if @var{THIS} has intermediate object files.
3676 If this compiler creates code that can be linked together,
3677 then the object files created by the compiler are considered intermediate.
3680 @deffn Method ede-compiler-intermediate-object-variable :AFTER this targetname
3681 Return a string based on @var{THIS} representing a make object variable.
3682 @var{TARGETNAME} is the name of the target that these objects belong to.
3686 @node ede-object-compiler
3687 @subsection ede-object-compiler
3688 @cmindex ede-object-compiler
3691 @item Inheritance Tree:
3693 @item eieio-instance-inheritor
3695 @item @w{@xref{ede-compilation-program}.}
3697 @item @w{@xref{ede-compiler}.}
3699 @item ede-object-compiler
3712 Type: @code{boolean} @*
3713 Default Value: @code{t}
3715 @xref{ede-compiler}.
3716 @item :dependencyvar
3719 A variable dedicated to dependency generation.
3724 @subsubsection Specialized Methods
3726 @deffn Method ede-proj-makefile-insert-variables :AFTER this
3727 Insert variables needed by the compiler @var{THIS}.
3731 @subsection ede-linker
3735 @item Inheritance Tree:
3737 @item eieio-instance-inheritor
3739 @item @w{@xref{ede-compilation-program}.}
3750 Create a new object with name NAME of class type ede-linker
3759 Name of this type of compiler.
3765 Variables needed in the Makefile for this compiler.
3766 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3767 is a string, and VALUE is either a string, or a list of strings.
3768 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3774 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3775 This is used to match target objects with the compilers and linkers
3776 they can use, and which files this object is interested in.
3782 The commands used to execute this compiler.
3783 The object which uses this compiler will place these commands after
3784 it's rule definition.
3787 @item :objectextention
3790 A string which is the extention used for object files.
3791 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3800 arch-tag: c9bfdc6e-e6e9-4e87-97f7-d8348342fbf4