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 2010 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.''
27 * ede: (ede). Project management for Emacs.
31 @center @titlefont{EDE (The Emacs Development Environment)}
33 @center by Eric Ludlam
67 @node top, EDE Project Concepts, (dir), (dir)
69 @comment node-name, next, previous, up
71 @ede{} is the Emacs Development Environment: an Emacs extension that
72 simplifies building and debugging programs in Emacs. It attempts to
73 emulate a typical IDE (Integrated Development Environment). @ede{}
74 can manage or create your makefiles and other building environment
75 duties, allowing you to concentrate on writing code rather than
76 support files. It aims to make it much easier for new programmers to
77 learn and adopt GNU ways of doing things.
84 * EDE Project Concepts:: @ede{} Project Concepts
85 * EDE Mode:: Turning on @ede{} mode.
86 * Creating a project:: Creating a project.
87 * Modifying your project:: Adding and removing files and targets.
88 * Building and Debugging:: Initiating a build or debug session.
89 * Miscellaneous commands:: Other project related commands.
90 * Simple projects:: Projects not managed by @ede{}.
91 * Extending EDE:: Programming and extending @ede{}.
94 @node EDE Project Concepts, EDE Mode, top, top
95 @chapter @ede{} Project Concepts
97 @ede{} is a generic interface for managing projects. It specifies a
98 single set of menus and keybindings, while supporting multiple ways to
99 express a project via a build system.
101 In the subsequent chapters, we will describe the different project
102 types (@pxref{Creating a project}), as well as the commands to build
103 and debug projects (@pxref{Building and Debugging}).
105 In @ede{}, a project hierarchy matches a directory hierarchy. The
106 project's topmost directory is called the @dfn{project root}, and its
107 subdirectories are @dfn{subprojects}.
109 Each project can contain multiple @dfn{targets}. A target, at the
110 simplest level, is a named collection of files within a project. A
111 target can specify two different types of information:
115 A collection of files to be added to a distribution (e.g., a tarball
116 that you intend to distribute to others).
119 A collection of files that can be built into something else (e.g., a
120 program or compiled documentation).
123 Lastly, @ede{} provides a way for other tools to easily learn file
124 associations. For example, a program might need to restrict some sort
125 of search to files in a single target, or to discover the location of
126 documentation or interface files. @ede{} can provide this
129 @node EDE Mode, Creating a project, EDE Project Concepts, top
132 @ede{} is implemented as a minor mode, which augments other modes such
133 as C mode, and Texinfo mode. You can enable @ede{} for all buffers by
134 running the command @code{global-ede-mode}, or by putting this in your
141 Activating @ede{} adds a menu named @samp{Development} to the menu
142 bar. This menu provides several menu items for high-level @ede{}
143 commands. These menu items, and their corresponding keybindings, are
144 independent of the type of project you are actually working on.
146 @node Creating a project, Modifying your project, EDE Mode, top
147 @chapter Creating a project
149 To create a new project, first visit a file that you want to include
150 in that project. If you have a hierarchy of directories, first visit
151 a file in the topmost directory. From this buffer, type @kbd{M-x
152 ede-new}, or click on the @samp{Create Project} item in the
153 @samp{Development} menu.
155 The @command{ede-new} command prompts for the type of project you
156 would like to create. Each project type has its own benefits or
157 language specific enhancements. @ede{} supports four different
158 project types: @samp{Make}, @samp{Automake}, @samp{direct Automake},
163 For the @samp{Make} project type, @ede{} creates a @dfn{project file},
164 called @file{Project.ede}, in each project directory. Information
165 about the project is stored in this file. This project autogenerates
169 For the @samp{Automake} project type, @ede{} creates a
170 @file{Project.ede} project file similar to a @samp{Make} project.
171 Unlike a @samp{Make} project, this project autogenerates a
172 @file{Makefile.am} file. @ede{} handles the Automake bootstrapping
173 routines, which import and maintain a @file{configure.am} script and
174 other required files.
177 For the @samp{direct Automake} project type, @ede{} reads directly
178 from the Automake files.
180 You cannot create direct Automake projects with the @command{ede-new}
181 command. Instead, when you visit a project with existing Automake
182 files, @ede{} automatically detects them.
185 The @samp{Simple} project type provides light-weight constructs for
186 identifying a project root and looking up files. If you already have
187 a non-@ede{} project infrastructure, you can use a @samp{Simple}
188 project to provide other Emacs packages, such as Semantic, with some
189 information about the project. @xref{Simple projects}.
192 A subproject is merely a project in a subdirectory of another project.
193 You can create a subproject by using the @command{ede-new} command (or
194 the @samp{Create Project} menu item), while visiting a buffer in a
195 subdirectory of the project root. This new project is automatically
196 added to the parent project, and will be automatically loaded when
197 @ede{} reads the parent project.
199 When using a project command that involves a makefile, @ede{} uses
200 the top-most project's makefile as a starting place for the build. How
201 the toplevel project handles subprojects in the build process is
202 dependent on that project's type.
204 @node Modifying your project, Building and Debugging, Creating a project, top
205 @chapter Modifying your project
207 In this chapter, we describe the generic features for manipulating
208 projects, including the targets and files within them. Subsequent
209 chapters, which describe specific project types, will provide more
210 detailed information about exactly what these features do.
213 * Add/Remove target::
215 * Customize Features::
216 * EDE Project Features::
219 @node Add/Remove target, Add/Remove files, Modifying your project, Modifying your project
220 @section Add/Remove target
222 To create a new target, type @kbd{C-c . t} (@code{ede-new-target}) or
223 use the @samp{Add Target} menu item in the @samp{Project Options}
224 submenu. This prompts for a target name, and adds the current buffer
227 The @command{ede-new-target} command also prompts for a @dfn{target
228 type}. Each target type has its own build process and class of files
231 To remove a target from the project, type @kbd{M-x ede-delete-target},
232 or use the @samp{Remove Target} menu item in the @samp{Project
235 @node Add/Remove files, Customize Features, Add/Remove target, Modifying your project
236 @section Add/Remove files
238 To add the current file to an existing target, type @kbd{C-c . a}
239 (@code{ede-add-file}), or use the @samp{Add File} menu item in the
240 @samp{Target Options} submenu.
242 You can add a file to more than one target; this is OK.
244 To remove the current file from a target, type @kbd{C-c . d}
245 (@code{ede-remove-file}), or or use the @samp{Remove File} menu item
246 in the @samp{Target Options} submenu. If the file belongs to multiple
247 targets, this command prompts for each target it could be removed
250 While working in a project, if you visit a file that is not part of an
251 existing target, @ede{} automatically prompts for a target. If you do
252 not wish to add the file to any target, you can choose @samp{none}.
253 You can customize this behavior with the variable
254 @command{ede-auto-add-method}.
256 @node Customize Features, EDE Project Features, Add/Remove files, Modifying your project
257 @section Customize Features
259 A project, and its targets, are objects using the @samp{EIEIO} object
260 system. @xref{Top,,,eieio,EIEIO manual}. These objects have data
261 fields containing important information related to your work.
263 If the high-level functions aren't enough, you can tweak all
264 user-customizable fields at any time by running the command
265 @command{customize-project} or @command{customize-target}. This loads
266 the current project or target into a customization buffer, where you
267 can tweak individual slots. This is usually necessary for complex
270 Some project modes do not have a project file, but directly read a
271 Makefile or other existing file. Instead of directly editing the
272 object, you can edit the file by typine @kbd{C-c . e}
273 (@code{ede-edit-file-target}). You should ``rescan'' the project
274 afterwards (@pxref{Miscellaneous commands}).
276 @node EDE Project Features, , Customize Features, Modifying your project
277 @section EDE Project Features
279 This section details user facing features of an @ede{} @samp{Make}
280 style project. An @samp{Automake} project has similar options (but a
281 direct Automake project does not).
283 To modify any of the specific features mentioned here, you need to
284 customize the project or target with @command{customize-project} or
285 @command{customize-target}.
287 When you are customizing, you are directly manipulating slot values in
288 @eieio{} objects. @xref{Extending EDE}, if you are interested in
292 * Changing Compilers and Flags::
296 @node Changing Compilers and Flags, Configurations, EDE Project Features, EDE Project Features
297 @subsection Changing Compilers and Flags
299 Targets that build stuff need compilers. To change compilers, you
300 need to customize the desired target.
302 In the @samp{[Make]} section, you can choose a new compiler or linker
303 from the list. If a linker you need is not available, you will need
304 to create a new one. @xref{Compiler and Linker objects}.
306 If an existing compiler or linker is close, but you need to modify
307 some flag set such as adding an include path you will need to add a
308 configuration variable.
310 To start, you should create the basic setup, and construct a makefile
311 with @command{ede-proj-regenerate}. Look in the @file{Makefile} to
312 see what commands are inserted. Once you have determined the variable
313 you need to modify, you can add a configuration for it.
314 @xref{Configurations}.
316 @node Configurations, , Changing Compilers and Flags, EDE Project Features
317 @subsection Configurations
319 Configurations specify different ways to build a project. For
320 example, you may configure a project to be in ``debug'' mode, or
321 perhaps in ``release'' mode.
323 The project, and each target type all have a slot named
324 @code{configuration-variables}. To add new variables to a
325 configuration find this slot in the custom buffer, and insert a new
326 configuration. Name it either ``debug'' or ``release'', then insert
327 some number of name/value pairs to it.
329 You can have any number of valid configurations too. To add a new
330 configuration, customize your project. Work in the @samp{[Settings]}
331 block for ``configurations''. Add a new named configuration here.
333 To switch between different active configurations, modify the
334 ``configuration default'' slot.
336 @node Building and Debugging, Miscellaneous commands, Modifying your project, top
337 @chapter Building and Debugging
339 @ede{} provides the following ``project-aware'' compilation and
344 Compile the current target (@code{ede-compile-target}).
346 Compile the entire project (@code{ede-compile-project}).
348 Debug the current target (@code{ede-debug-target}).
349 @item M-x ede-make-dist
350 Build a distribution file for your project.
353 These commands are also available from the @samp{Development} menu.
355 @node Miscellaneous commands, Simple projects, Building and Debugging, top
356 @chapter Miscellaneous commands
358 If you opt to go in and edit @ede{} project files directly---for
359 instance, by using @kbd{C-c . e} (@pxref{Customize Features})---you
360 must then ``rescan'' the project files to update the internal data
361 structures. To rescan the current project, type @kbd{C-c . g}
362 (@code{ede-rescan-toplevel}).
364 @ede{} can help you find files in your project, via the command
365 @kbd{C-c . f} (@code{ede-find-file}). This prompts for a file name;
366 you need not specify the directory. EDE then tries to visit a file
367 with that name somewhere in your project.
369 @ede{} can use external tools to help with file finding. To do this,
370 customize @code{ede-locate-setup-options}.
372 @defvar ede-locate-setup-options
373 @anchor{ede-locate-setup-options}
374 List of locate objects to try out by default.
375 Listed in order of preference. If the first item cannot be used in
376 a particular project, then the next one is tried.
377 It is always assumed that @dfn{ede-locate-base} is at end of the list.
380 @ede{} also provides a project display mode for the speedbar
381 (@pxref{Speedbar,,,emacs,GNU Emacs Manual}). This allows you to view
382 your source files as they are structured in your project: as a
383 hierarchical tree, grouped according to target.
385 To activate the speedbar in this mode, type @kbd{C-c . s}
386 (@code{ede-speedbar}).
388 @node Simple projects, Extending EDE, Miscellaneous commands, top
389 @section Simple Projects
391 There is a wide array of Simple projects. The root for simple
392 projects is the class @code{ede-simple-project}. This handles the
393 infrastructure of storing a .ede file if needed.
395 The class @code{ede-simple-project} is designed to be subclassed.
396 Then key @ede{} methods can be overridden to provide a quick wrapper
399 A second project type is @code{ede-cpp-root}. This project type is
400 designed to be created for a directory hierarchy full of C/C++ code.
401 It can be configured with minimal lisp knowledge to do header file
402 lookup for @semantic{}, improving code completion performance.
405 * ede-cpp-root:: This project marks the root of a C/C++ code project.
406 * ede-simple subclassing:: Create your own simple project.
407 * ede-emacs:: A project for working with Emacs.
408 * ede-linux:: A project for working with Linux kernels.
409 * Custom Locate:: Customizing how to locate files in a simple project
413 @subsection ede-cpp-root
415 The @code{ede-cpp-root} project type allows you to create a single
416 object with no save-file in your @file{.emacs} file. It allows @ede{}
417 to provide the @semantic{} package with the ability to find header
420 The @code{ede-cpp-root} class knows a few things about C++ projects,
421 such as the prevalence of "include" directories, and typical
422 file-layout stuff. If this isn't sufficient, you can subclass
423 @code{ede-cpp-root-project} and add your own tweaks in just a few
424 lines. See the end of this file for an example.
426 In the most basic case, add this to your @file{.emacs} file, modifying
427 appropriate bits as needed.
430 (ede-cpp-root-project "SOMENAME" :file "/dir/to/some/file")
433 Replace @var{SOMENAME} with whatever name you want, and the filename
434 to an actual file at the root of your project. It might be a
435 Makefile, a README file. Whatever. It doesn't matter. It's just a
436 key to hang the rest of @ede{} off of.
438 The most likely reason to create this project, is to speed up
439 searching for includes files, or to simplify bootstrapping @semantic{}'s
440 ability to find files without much user interaction. In conjunction
441 with @semantic{} completion, having a short include path is key. You can
442 override the default include path and system include path like this:
445 (ede-cpp-root-project "NAME" :file "FILENAME"
446 :include-path '( "/include" "../include" "/c/include" )
447 :system-include-path '( "/usr/include/c++/3.2.2/" )
448 :spp-table '( ("MOOSE" . "")
449 ("CONST" . "const") ) )
452 In this case each item in the include path list is searched. If the
453 directory starts with "/", then that expands to the project root
454 directory. If a directory does not start with "/", then it is
455 relative to the default-directory of the current buffer when the file
458 The include path only affects C/C++ header files. Use the slot
459 @code{:header-match-regexp} to change it.
461 The @code{:system-include-path} allows you to specify full directory
462 names to include directories where system header files can be found.
463 These will be applied to files in this project only.
465 The @code{:spp-table} provides a list of project specific #define
466 style macros that are unique to this project, passed in to the
467 compiler on the command line, or are in special headers.
468 See the @code{semantic-lex-c-preprocessor-symbol-map} for more
469 on how to format this entry.
471 If there is a single file in your project, you can instead set the
472 @code{:spp-files} to a list of file names relative to the root of your
473 project. Specifying this is like setting the variable
474 @code{semantic-lex-c-preprocessor-symbol-file} in semantic.
476 If you want to override the file-finding tool with your own
477 function you can do this:
480 (ede-cpp-root-project "NAME" :file "FILENAME" :locate-fcn 'MYFCN)
483 Where @var{MYFCN} is a symbol for a function. The locate function can
484 be used in place of @code{ede-expand-filename} so you can quickly
485 customize your custom target to use specialized local routines instead
486 of the default @ede{} routines. The function symbol must take two
491 The name of the file to find.
493 The directory root for this cpp-root project.
497 If the cpp-root project style is right for you, but you want a dynamic
498 loader, instead of hard-coding path name values in your @file{.emacs}, you
499 can do that too, but you will need to write some lisp code.
501 To do that, you need to add an entry to the
502 @code{ede-project-class-files} list, and also provide two functions to
503 teach @ede{} how to load your project pattern
505 It would look like this:
508 (defun MY-FILE-FOR-DIR (&optional dir)
509 "Return a full file name to the project file stored in DIR."
510 <write your code here, or return nil>
513 (defun MY-ROOT-FCN ()
514 "Return the root fcn for `default-directory'"
515 ;; You might be able to use `ede-cpp-root-project-root'
516 ;; and not write this at all.
520 "Load a project of type `cpp-root' for the directory DIR.
521 Return nil if there isn't one."
522 ;; Use your preferred constructin method here.
523 (ede-cpp-root-project "NAME" :file (expand-file-name "FILE" dir)
527 (add-to-list 'ede-project-class-files
528 (ede-project-autoload "cpp-root"
531 :proj-file 'MY-FILE-FOR-DIR
532 :proj-root 'MY-ROOT-FCN
534 :class-sym 'ede-cpp-root)
538 This example only creates an auto-loader, and does not create a new kind
541 @xref{ede-cpp-root-project}, for details about the class that defines
542 the @code{ede-cpp-root} project type.
544 @node ede-simple subclassing
545 @subsection ede-simple Subclassing
547 todo - Write some doc.
549 In the meantime look in the commentary of ede-simple.el
552 @subsection ede-emacs
554 The @code{ede-emacs} project automatically identifies an Emacs source
555 tree, and enables EDE project mode for it.
557 It pre-populates the C Preprocessor symbol map for correct parsing,
558 and has an optimized include file identification function.
561 @subsection ede-linux
563 The @code{ede-linux} project will automatically identify a Linux
564 Kernel source tree, and enable EDE project mode for it.
566 It pre-populates the C Preprocessor symbol map for reasonable parsing,
567 and has an optimized include file identification function.
570 @subsection Custom Locate
572 The various simple project styles all have one major drawback, which
573 is that the files in the project are not completely known to EDE.
574 When the EDE API is used to try and file files by some reference name
575 in the project, then that could fail.
577 @@TODO - Add ID Utils and CScope examples
579 @ede{} can therefore use some external locate commands, such as the unix
580 ``locate'' command, or ``GNU Global''.
582 Configuration of the tool you want to use such as @code{locate}, or
583 @code{global} will need to be done without the aid of @ede{}. Once
584 configured, however, @ede{} can use it.
586 To enable one of these tools, set the variable
587 @code{ede-locate-setup-options} with the names of different locate
588 objects. @ref{Miscellaneous commands}.
590 Configure this in your @file{.emacs} before loading in CEDET or EDE.
591 If you want to add support for GNU Global, your configuration would
595 (setq ede-locate-setup-options '(ede-locate-global ede-locate-base))
598 That way, when a search needs to be done, it will first try using
599 GLOBAL. If global is not available for that directory, then it will
600 revert to the base locate object. The base object always fails to
603 You can add your own locate tool but subclassing from
604 @code{ede-locate-base}. The subclass should also implement two
605 methods. See the code in @file{ede-locate.el} for GNU Global as a
608 @node Extending EDE, , Simple projects, top
609 @chapter Extending @ede{}
611 This chapter is intended for users who want to write new parts or fix
612 bugs in @ede{}. A knowledge of Emacs Lisp, and some @eieio{}(CLOS) is
615 @ede{} uses @eieio{}, the CLOS package for Emacs, to define two object
616 superclasses, specifically the PROJECT and TARGET. All commands in
617 @ede{} are usually meant to address the current project, or current
620 All specific projects in @ede{} derive subclasses of the @ede{}
621 superclasses. In this way, specific behaviors such as how a project
622 is saved, or how a target is compiled can be customized by a project
623 author in detail. @ede{} communicates to these project objects via an
624 API using methods. The commands you use in @ede{} mode are high-level
625 functional wrappers over these methods. @xref{(eieio)Top}. For
626 details on using @eieio{} to extending classes, and writing methods.
628 If you intend to extend @ede{}, it is most likely that a new target type is
629 needed in one of the existing project types. The rest of this chapter
630 will discuss extending the @code{ede-project} class, and it's targets.
631 See @file{project-am.el} for basic details on adding targets to it.
633 For the @code{ede-project} type, the core target class is called
634 @code{ede-proj-target}. Inheriting from this will give you everything
635 you need to start, including adding your sources into the makefile. If
636 you also need additional rules in the makefile, you will want to inherit
637 from @code{ede-proj-target-makefile} instead. You may want to also add
638 new fields to track important information.
640 If you are building currently unsupported code into a program or shared
641 library, it is unlikely you need a new target at all. Instead you
642 would need to create a new compiler or linker object that compiles
643 source code of the desired type. @ref{Compiler and Linker objects}.
645 Once your new class exists, you will want to fill in some basic methods.
646 See the @file{ede-skel.el} file for examples of these. The files
647 @file{ede-proj-info.el} and @file{ede-proj-elisp.el} are two interesting
651 * User interface methods:: Methods associated with keybindings
652 * Base project methods:: The most basic methods on @ede{} objects.
653 * Sourcecode objects:: Defining new sourcecode classes.
654 * Compiler and Linker objects:: Defining new compilers and linkers.
655 * Project:: Details of project classes.
656 * Targets:: Details of target classes.
657 * Sourcecode:: Details of source code classes.
658 * Compilers:: Details of compiler classes.
661 @node User interface methods
662 @section User interface methods
664 These methods are core behaviors associated with user commands.
665 If you do not implement a method, there is a reasonable default that
666 may do what you need.
669 @item project-add-file
670 Add a file to your project. Override this if you want to put new
671 sources into different fields depending on extension, or other details.
672 @item project-remove-file
673 Reverse of project-add-file.
674 @item project-compile-target
675 Override this if you want to do something special when the user
676 "compiles" this target.
677 @item project-debug-target
678 What to do when a user wants to debug your target.
679 @item project-update-version
680 Easily update the version number of your project.
681 @item project-edit-file-target
682 Edit the file the project's information is stored in.
683 @item project-new-target
684 Create a new target in a project.
685 @item project-delete-target
686 Delete a target from a project.
687 @item project-make-dist
688 Make a distribution (tar archive) of the project.
690 Rescan a project file, changing the data in the existing objects.
693 @node Base project methods
694 @section Base project methods
696 These methods are important for querying base information from project
701 Return a string that is the name of this target.
702 @item ede-target-name
703 Return a string that is the name of the target used by a Make system.
704 @item ede-description
705 A brief description of the project or target. This is currently used
706 by the @samp{ede-speedbar} interface.
707 @item ede-want-file-p
708 Return non-nil if a target will accept a given file.
709 It is generally unecessary to override this. See the section on source
711 @item ede-buffer-mine
712 Return non-nil if a buffer belongs to this target. Used during
713 association when a file is loaded. It is generally unecessary to
714 override this unless you keep auxiliary files.
717 These methods are used by the semantic package extensions @xref{(semantic)Top}.
720 @item ede-buffer-header-file
721 Return a header file belonging to a given buffer. Prototypes are place
722 there when appropriate
723 @item ede-buffer-documentation-files
724 Return the documentation file information about this file would be
726 @item ede-documentation
727 List all documentation a project or target is responsible for.
730 @node Sourcecode objects
731 @section Sourcecode objects
733 @ede{} projects track source file / target associates via source code
734 objects. The definitions for this is in @file{ede-source.el}. A source
735 code object contains methods that know how to identify a file as being
736 of that class, (ie, a C file ends with @file{.c}). Some targets can
737 handle many different types of sources which must all be compiled
738 together. For example, a mixed C and C++ program would have
739 instantiations of both sourcecode types.
741 When a target needs to know if it will accept a source file, it
742 references its list of source code objects. These objects then make
745 Source code objects are stored in the target objects as a list of
746 symbols, where the symbol's value is the object. This enables the
747 project save file mechanism to work.
749 Here is an example for an instantiation of an Emacs Lisp source code object:
752 (defvar ede-source-emacs
753 (ede-sourcecode "ede-emacs-source"
755 :sourcepattern "\\.el$"
756 :garbagepattern '("*.elc"))
757 "Emacs Lisp source code definition.")
760 If you want to recycle parts of an existing sourcecode object, you can
761 clone the original, and then just tweak the parts that are different.
765 (defvar ede-source-emacs-autoload
766 (clone ede-source-emacs "ede-source-emacs-autoload"
767 :name "Emacs Lisp Autoload"
768 :sourcepattern "-loaddefs\\.el")
769 "Emacs Lisp autoload source code.")
772 In this case, the garbage pattern is the same.
776 @node Compiler and Linker objects
777 @section Compiler and Linker objects
779 In order for a target to create a @file{Makefile}, it must know how to
780 compile the sources into the program or desired data file, and
781 possibly link them together.
783 A compiler object instantiation is used to associate a given target
784 with a given source code type. Some targets can handle many types of
785 sources, and thus has many compilers available to it. Some targets
786 may have multiple compilers for a given type of source code.
788 @ede{} will examine the actual source files in a target, cross reference
789 that against the compiler list to come up with the final set of
790 compilers that will be inserted into the Makefile.
792 Compiler instantiations must also insert variables specifying the
793 compiler it plans to use, in addition to creating Automake settings for
794 @file{configure.in} when appropriate.
796 Compiler objects are stored in the target objects as a list of
797 symbols, where the symbols value is the object. This enables the
798 project output mechanism to work more efficiently.
800 Targets will also have a special "compiler" slot which lets a user
801 explicitly choose the compiler they want to use.
803 Here is an example for texinfo:
806 (defvar ede-makeinfo-compiler
808 "ede-makeinfo-compiler"
810 :variables '(("MAKEINFO" . "makeinfo"))
811 :commands '("makeinfo -o $@ $<")
812 :autoconf '(("AC_CHECK_PROG" . "MAKEINFO, makeinfo"))
813 :sourcetype '(ede-makeinfo-source)
815 "Compile texinfo files into info files.")
820 When creating compiler instantiations, it may be useful to @code{clone}
821 an existing compiler variable. Cloning allows you to only modify
822 parts of the original, while keeping the rest of the same.
823 Modification of the original will result in the clone also being
824 changed for shared value slots.
826 The second important object is the linker class. The linker is similar
827 to the compiler, except several compilers might be used to create some
828 object files, and only one linker is used to link those objects together.
830 See @file{ede-proj-obj.el} for examples of the combination.
841 * ede-project-placeholder ::
843 * ede-cpp-root-project ::
844 * ede-simple-project ::
845 * ede-simple-base-project ::
846 * ede-proj-project ::
847 * project-am-makefile ::
848 * ede-step-project ::
851 @node ede-project-placeholder
852 @subsection ede-project-placeholder
853 @pjindex ede-project-placeholder
856 @item Inheritance Tree:
860 @item eieio-speedbar-directory-button
862 @item ede-project-placeholder
865 @w{@xref{ede-project}.}
877 Type: @code{string} @*
878 Default Value: @code{"Untitled"}
880 The name used when generating distribution files.
884 Type: @code{string} @*
885 Default Value: @code{"1.0"}
887 The version number used when distributing files.
893 Directory this project is associated with.
899 File name where this project is stored.
906 @subsubsection Specialized Methods
908 @deffn Method ede--project-inode :AFTER proj
909 Get the inode of the directory project @var{PROJ} is in.
912 @deffn Method ede-project-root :AFTER this
913 If a project knows it's root, return it here.
914 Allows for one-project-object-for-a-tree type systems.
917 @deffn Method ede-find-subproject-for-directory :AFTER proj dir
918 Find a subproject of @var{PROJ} that corresponds to @var{DIR}.
921 @deffn Method ede-project-root-directory :AFTER this &optional file
922 If a project knows it's root, return it here.
923 Allows for one-project-object-for-a-tree type systems.
924 Optional @var{FILE} is the file to test. It is ignored in preference
925 of the anchor file for the project.
928 @deffn Method ede-project-force-load :AFTER this
929 Make sure the placeholder @var{THIS} is replaced with the real thing.
930 Return the new object created in its place.
933 @deffn Method project-interactive-select-target :AFTER this prompt
934 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
937 @deffn Method project-add-file :AFTER this file
938 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
942 @subsection ede-project
946 @item Inheritance Tree:
950 @item eieio-speedbar-directory-button
952 @item @w{@xref{ede-project-placeholder}.}
957 @w{@xref{ede-cpp-root-project},} @w{ede-emacs-project,} @w{ede-linux-project,} @w{ede-maven-project,} @w{@xref{ede-simple-project},} @w{@xref{ede-simple-base-project},} @w{@xref{ede-proj-project},} @w{@xref{project-am-makefile},} @w{@xref{ede-step-project}.}
972 List of top level targets in this project.
978 List of tool cache configurations in this project.
979 This allows any tool to create, manage, and persist project-specific settings.
983 Type: @code{string} @*
985 URL to this projects web site.
986 This is a URL to be sent to a web site for documentation.
989 @item :web-site-directory @*
991 A directory where web pages can be found by Emacs.
992 For remote locations use a path compatible with ange-ftp or EFS.
993 You can also use TRAMP for use with rcp & scp.
996 @item :web-site-file @*
998 A file which contains the home page for this project.
999 This file can be relative to slot @code{web-site-directory}.
1000 This can be a local file, use ange-ftp, EFS, or TRAMP.
1004 Type: @code{string} @*
1006 FTP site where this project's distribution can be found.
1007 This FTP site should be in Emacs form, as needed by @code{ange-ftp}, but can
1008 also be of a form used by TRAMP for use with scp, or rcp.
1011 @item :ftp-upload-site
1012 Type: @code{string} @*
1014 FTP Site to upload new distributions to.
1015 This FTP site should be in Emacs form as needed by @code{ange-ftp}.
1016 If this slot is @code{nil}, then use @code{ftp-site} instead.
1019 @item :configurations
1020 Type: @code{list} @*
1021 Default Value: @code{("debug" "release")}
1023 List of available configuration types.
1024 Individual target/project types can form associations between a configuration,
1025 and target specific elements such as build variables.
1028 @item :configuration-default @*
1029 Default Value: @code{"debug"}
1031 The default configuration.
1034 @item :local-variables @*
1035 Default Value: @code{nil}
1037 Project local variables
1043 @subsubsection Specialized Methods
1045 @deffn Method ede-preprocessor-map :AFTER this
1046 Get the pre-processor map for project @var{THIS}.
1049 @deffn Method ede-subproject-relative-path :AFTER proj &optional parent-in
1050 Get a path name for @var{PROJ} which is relative to the parent project.
1051 If PARENT is specified, then be relative to the PARENT project.
1052 Specifying PARENT is useful for sub-sub projects relative to the root project.
1055 @deffn Method eieio-speedbar-description :AFTER obj
1056 Provide a speedbar description for @var{OBJ}.
1059 @deffn Method ede-map-any-target-p :AFTER this proc
1060 For project @var{THIS}, map @var{PROC} to all targets and return if any non-nil.
1061 Return the first non-@code{nil} value returned by @var{PROC}.
1064 @deffn Method ede-map-subprojects :AFTER this proc
1065 For object @var{THIS}, execute @var{PROC} on all direct subprojects.
1066 This function does not apply @var{PROC} to sub-sub projects.
1067 See also @dfn{ede-map-all-subprojects}.
1070 @deffn Method ede-convert-path :AFTER this path
1071 Convert path in a standard way for a given project.
1072 Default to making it project relative.
1073 Argument @var{THIS} is the project to convert @var{PATH} to.
1076 @deffn Method ede-name :AFTER this
1077 Return a short-name for @var{THIS} project file.
1078 Do this by extracting the lowest directory name.
1081 @deffn Method ede-set-project-variables :AFTER project &optional buffer
1082 Set variables local to @var{PROJECT} in @var{BUFFER}.
1085 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1086 Return the path to @var{OBJ}.
1087 Optional @var{DEPTH} is the depth we start at.
1090 @deffn Method ede-map-all-subprojects :AFTER this allproc
1091 For object @var{THIS}, execute PROC on @var{THIS} and all subprojects.
1092 This function also applies PROC to sub-sub projects.
1093 See also @dfn{ede-map-subprojects}.
1096 @deffn Method project-update-version :AFTER ot
1097 The @code{:version} of the project @var{OT} has been updated.
1098 Handle saving, or other detail.
1101 @deffn Method ede-buffer-header-file :AFTER this buffer
1102 Return @code{nil}, projects don't have header files.
1105 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1106 Return all documentation in project @var{THIS} based on @var{BUFFER}.
1109 @deffn Method ede-map-targets :AFTER this proc
1110 For object @var{THIS}, execute @var{PROC} on all targets.
1113 @deffn Method ede-buffer-mine :AFTER this buffer
1114 Return non-@code{nil} if object @var{THIS} lays claim to the file in @var{BUFFER}.
1117 @deffn Method ede-object-keybindings :BEFORE this
1118 Retrieves the slot @code{keybindings} from an object of class @code{ede-project}
1121 @deffn Method ede-description :AFTER this
1122 Return a description suitable for the minibuffer about @var{THIS}.
1125 @deffn Method eieio-speedbar-object-children :AFTER this
1126 Return the list of speedbar display children for @var{THIS}.
1129 @deffn Method project-make-dist :AFTER this
1130 Build a distribution for the project based on @var{THIS} project.
1133 @deffn Method ede-system-include-path :AFTER this
1134 Get the system include path used by project @var{THIS}.
1137 @deffn Method project-new-target-custom :AFTER proj
1138 Create a new target. It is up to the project @var{PROJ} to get the name.
1141 @deffn Method ede-subproject-p :AFTER proj
1142 Return non-@code{nil} if @var{PROJ} is a sub project.
1145 @deffn Method ede-expand-filename :AFTER this filename &optional force
1146 Return a fully qualified file name based on project @var{THIS}.
1147 @var{FILENAME} should be just a filename which occurs in a directory controlled
1149 Optional argument @var{FORCE} forces the default filename to be provided even if it
1153 @deffn Method ede-menu-items-build :AFTER obj &optional current
1154 Return a list of menu items for building project @var{OBJ}.
1155 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1158 @deffn Method ede-update-version-in-source :AFTER this version
1159 Change occurrences of a version string in sources.
1160 In project @var{THIS}, cycle over all targets to give them a chance to set
1161 their sources to @var{VERSION}.
1164 @deffn Method project-new-target :AFTER proj &rest args
1165 Create a new target. It is up to the project @var{PROJ} to get the name.
1168 @deffn Method project-compile-project :AFTER obj &optional command
1169 Compile the entire current project @var{OBJ}.
1170 Argument @var{COMMAND} is the command to use when compiling.
1173 @deffn Method eieio-speedbar-object-buttonname :AFTER object
1174 Return a string to use as a speedbar button for @var{OBJECT}.
1177 @deffn Method ede-map-project-buffers :AFTER this proc
1178 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1181 @deffn Method ede-expand-filename-impl :AFTER this filename &optional force
1182 Return a fully qualified file name based on project @var{THIS}.
1183 @var{FILENAME} should be just a filename which occurs in a directory controlled
1185 Optional argument @var{FORCE} forces the default filename to be provided even if it
1189 @deffn Method eieio-done-customizing :AFTER proj
1190 Call this when a user finishes customizing @var{PROJ}.
1193 @deffn Method ede-html-documentation :AFTER this
1194 Return a list of HTML files provided by project @var{THIS}.
1197 @deffn Method ede-documentation :AFTER this
1198 Return a list of files that provides documentation.
1199 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
1200 files in the project.
1203 @deffn Method project-interactive-select-target :AFTER this prompt
1204 Interactively query for a target that exists in project @var{THIS}.
1205 Argument @var{PROMPT} is the prompt to use when querying the user for a target.
1208 @deffn Method ede-target-in-project-p :AFTER proj target
1209 Is @var{PROJ} the parent of @var{TARGET}?
1210 If @var{TARGET} belongs to a subproject, return that project file.
1213 @deffn Method ede-find-target :AFTER proj buffer
1214 Fetch the target in @var{PROJ} belonging to @var{BUFFER} or nil.
1217 @deffn Method ede-add-subproject :AFTER proj-a proj-b
1218 Add into @var{PROJ-A}, the subproject @var{PROJ-B}.
1221 @deffn Method ede-commit-project :AFTER proj
1222 Commit any change to @var{PROJ} to its file.
1225 @deffn Method project-dist-files :AFTER this
1226 Return a list of files that constitutes a distribution of @var{THIS} project.
1229 @deffn Method ede-object-menu :BEFORE this
1230 Retrieves the slot @code{menu} from an object of class @code{ede-project}
1233 @deffn Method ede-commit-local-variables :AFTER proj
1234 Commit change to local variables in @var{PROJ}.
1237 @node ede-cpp-root-project
1238 @subsection ede-cpp-root-project
1239 @pjindex ede-cpp-root-project
1242 @item Inheritance Tree:
1244 @item eieio-speedbar
1246 @item eieio-speedbar-directory-button
1248 @item @w{@xref{ede-project-placeholder}.}
1250 @item @w{@xref{ede-project}.}
1252 @item ede-cpp-root-project
1261 This class implements the @code{ede-cpp-root} project type.
1262 @xref{ede-cpp-root}, for information about using this project type.
1269 Type: @code{list} @*
1270 Default Value: @code{(quote ("/include" "../include/"))}
1272 The default locate function expands filenames within a project.
1273 If a header file (.h, .hh, etc) name is expanded, and
1274 the @code{:locate-fcn} slot is @code{nil}, then the include path is checked
1275 first, and other directories are ignored. For very large
1276 projects, this optimization can save a lot of time.
1278 Directory names in the path can be relative to the current
1279 buffer's @code{default-directory} (not starting with a /). Directories
1280 that are relative to the project's root should start with a /, such
1281 as "/include", meaning the directory @code{include} off the project root
1285 @item :system-include-path
1286 Type: @code{list} @*
1287 Default Value: @code{nil}
1289 The system include path for files in this project.
1290 C files initialized in an ede-cpp-root-project have their semantic
1291 system include path set to this value. If this is @code{nil}, then the
1292 semantic path is not modified.
1296 Type: @code{list} @*
1297 Default Value: @code{nil}
1299 C Preprocessor macros for your files.
1300 Preprocessor symbols will be used while parsing your files.
1301 These macros might be passed in through the command line compiler, or
1302 are critical symbols derived from header files. Providing header files
1303 macro values through this slot improves accuracy and performance.
1304 Use `:spp-files' to use these files directly.
1308 Type: @code{list} @*
1309 Default Value: @code{nil}
1311 C header file with Preprocessor macros for your files.
1312 The PreProcessor symbols appearing in these files will be used while
1313 parsing files in this project.
1314 See @code{semantic-lex-c-preprocessor-symbol-map} for more on how this works.
1317 @item :header-match-regexp
1318 Type: @code{string} @*
1319 Default Value: @code{"\\.\\(h\\(h\\|xx\\|pp\\|\\+\\+\\)?\\|H\\)$\\|\\<\\w+$"}
1321 Regexp used to identify C/C++ header files.
1325 Type: @code{(or null function)} @*
1326 Default Value: @code{nil}
1328 The locate function can be used in place of
1329 @dfn{ede-expand-filename} so you can quickly customize your custom target
1330 to use specialized local routines instead of the EDE routines.
1331 The function symbol must take two arguments:
1332 NAME - The name of the file to find.
1333 DIR - The directory root for this cpp-root project.
1335 It should return the fully qualified file name passed in from NAME. If that file does not
1336 exist, it should return nil.
1342 @subsubsection Specialized Methods
1344 @deffn Method initialize-instance :AFTER this &rest fields
1345 Make sure the @code{:file} is fully expanded.
1348 @deffn Method ede-preprocessor-map :AFTER this
1349 Get the pre-processor map for project @var{THIS}.
1352 @deffn Method ede-cpp-root-header-file-p :AFTER proj name
1353 Non @code{nil} if in @var{PROJ} the filename @var{NAME} is a header.
1356 @deffn Method ede-system-include-path :AFTER this
1357 Get the system include path used by project @var{THIS}.
1360 @deffn Method ede-expand-filename-impl :AFTER proj name
1361 Within this project @var{PROJ}, find the file @var{NAME}.
1362 This knows details about or source tree.
1365 @node ede-simple-project
1366 @subsection ede-simple-project
1367 @pjindex ede-simple-project
1370 @item Inheritance Tree:
1372 @item eieio-speedbar
1374 @item eieio-speedbar-directory-button
1376 @item @w{@xref{ede-project-placeholder}.}
1378 @item @w{@xref{ede-project}.}
1380 @item ede-simple-project
1389 @subsubsection Specialized Methods
1391 @deffn Method ede-commit-project :AFTER proj
1392 Commit any change to @var{PROJ} to its file.
1395 @node ede-simple-base-project
1396 @subsection ede-simple-base-project
1397 @pjindex ede-simple-base-project
1400 @item Inheritance Tree:
1402 @item eieio-speedbar
1404 @item eieio-speedbar-directory-button
1406 @item @w{@xref{ede-project-placeholder}.}
1408 @item @w{@xref{ede-project}.}
1410 @item ede-simple-base-project
1419 EDE Simple project base class.
1420 This one project could control a tree of subdirectories.
1425 @node ede-proj-project
1426 @subsection ede-proj-project
1427 @pjindex ede-proj-project
1430 @item Inheritance Tree:
1432 @item eieio-speedbar
1434 @item eieio-speedbar-directory-button
1436 @item @w{@xref{ede-project-placeholder}.}
1438 @item @w{@xref{ede-project}.}
1440 @item ede-proj-project
1453 @item :makefile-type
1454 Type: @code{symbol} @*
1455 Default Value: @code{Makefile}
1457 The type of Makefile to generate.
1458 Can be one of @code{'Makefile}, 'Makefile.in, or 'Makefile.am.
1459 If this value is NOT @code{'Makefile}, then that overrides the @code{:makefile} slot
1464 Type: @code{list} @*
1465 Default Value: @code{nil}
1467 Variables to set in this Makefile.
1470 @item :configuration-variables
1471 Type: @code{list} @*
1472 Default Value: @code{("debug" (("DEBUG" . "1")))}
1474 Makefile variables to use in different configurations.
1475 These variables are used in the makefile when a configuration becomes active.
1478 @item :inference-rules @*
1479 Default Value: @code{nil}
1481 Inference rules to add to the makefile.
1484 @item :include-file @*
1485 Default Value: @code{nil}
1487 Additional files to include.
1488 These files can contain additional rules, variables, and customizations.
1491 @item :automatic-dependencies
1492 Type: @code{boolean} @*
1493 Default Value: @code{t}
1495 Non-@code{nil} to do implement automatic dependencies in the Makefile.
1498 @item :metasubproject
1499 Type: @code{boolean} @*
1500 Default Value: @code{nil}
1502 Non-@code{nil} if this is a metasubproject.
1503 Usually, a subproject is determined by a parent project. If multiple top level
1504 projects are grouped into a large project not maintained by EDE, then you need
1505 to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
1512 @subsubsection Specialized Methods
1514 @deffn Method ede-proj-makefile-create :AFTER this mfilename
1515 Create a Makefile for all Makefile targets in @var{THIS}.
1516 @var{MFILENAME} is the makefile to generate.
1519 @deffn Method ede-proj-makefile-insert-rules :AFTER this
1520 Insert rules needed by @var{THIS} target.
1523 @deffn Method ede-proj-makefile-tags :AFTER this targets
1524 Insert into the current location rules to make recursive TAGS files.
1525 Argument @var{THIS} is the project to create tags for.
1526 Argument @var{TARGETS} are the targets we should depend on for TAGS.
1529 @deffn Method ede-proj-makefile-insert-variables :AFTER this
1530 Insert variables needed by target @var{THIS}.
1533 @deffn Method project-make-dist :AFTER this
1534 Build a distribution for the project based on @var{THIS} target.
1537 @deffn Method ede-proj-makefile-insert-dist-rules :AFTER this
1538 Insert distribution rules for @var{THIS} in a Makefile, such as CLEAN and DIST.
1541 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
1542 Insert any symbols that the DIST rule should depend on.
1543 Argument @var{THIS} is the project that should insert stuff.
1546 @deffn Method ede-proj-makefile-insert-subproj-rules :AFTER this
1547 Insert a rule for the project @var{THIS} which should be a subproject.
1550 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
1551 Create a Makefile for all Makefile targets in @var{THIS} if needed.
1552 @var{MFILENAME} is the makefile to generate.
1555 @deffn Method ede-proj-configure-test-required-file :AFTER this file
1556 For project @var{THIS}, test that the file @var{FILE} exists, or create it.
1559 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
1560 Setup the build environment for project @var{THIS}.
1561 Handles the Makefile, or a Makefile.am configure.in combination.
1562 Optional argument @var{FORCE} will force items to be regenerated.
1565 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
1566 Return a list of patterns that are considered garbage to @var{THIS}.
1567 These are removed with make clean.
1570 @deffn Method ede-proj-configure-synchronize :AFTER this
1571 Synchronize what we know about project @var{THIS} into configure.in.
1574 @deffn Method ede-proj-makefile-insert-variables-new :AFTER this
1575 Insert variables needed by target @var{THIS}.
1577 NOTE: Not yet in use! This is part of an SRecode conversion of
1578 EDE that is in progress.
1581 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
1582 Return a list of configuration variables from @var{THIS}.
1583 Use @var{CONFIGURATION} as the current configuration to query.
1586 @deffn Method eieio-done-customizing :AFTER proj
1587 Call this when a user finishes customizing this object.
1588 Argument @var{PROJ} is the project to save.
1591 @deffn Method ede-proj-configure-recreate :AFTER this
1592 Delete project @var{THIS}es configure script and start over.
1595 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
1596 Insert user specified rules needed by @var{THIS} target.
1597 This is different from @dfn{ede-proj-makefile-insert-rules} in that this
1598 function won't create the building rules which are auto created with
1602 @deffn Method ede-proj-dist-makefile :AFTER this
1603 Return the name of the Makefile with the DIST target in it for @var{THIS}.
1606 @deffn Method ede-proj-configure-file :AFTER this
1607 The configure.in script used by project @var{THIS}.
1610 @deffn Method ede-commit-project :AFTER proj
1611 Commit any change to @var{PROJ} to its file.
1614 @deffn Method project-dist-files :AFTER this
1615 Return a list of files that constitutes a distribution of @var{THIS} project.
1618 @deffn Method ede-commit-local-variables :AFTER proj
1619 Commit change to local variables in @var{PROJ}.
1622 @node project-am-makefile
1623 @subsection project-am-makefile
1624 @pjindex project-am-makefile
1627 @item Inheritance Tree:
1629 @item eieio-speedbar
1631 @item eieio-speedbar-directory-button
1633 @item @w{@xref{ede-project-placeholder}.}
1635 @item @w{@xref{ede-project}.}
1637 @item project-am-makefile
1646 @subsubsection Specialized Methods
1648 @deffn Method project-am-subtree :AFTER ampf subdir
1649 Return the sub project in @var{AMPF} specified by @var{SUBDIR}.
1652 @deffn Method project-targets-for-file :AFTER proj
1653 Return a list of targets the project @var{PROJ}.
1656 @deffn Method project-new-target :AFTER proj &optional name type
1657 Create a new target named @var{NAME}.
1658 Argument @var{TYPE} is the type of target to insert. This is a string
1659 matching something in @code{project-am-type-alist} or type class symbol.
1660 Despite the fact that this is a method, it depends on the current
1661 buffer being in order to provide a smart default target type.
1664 @node ede-step-project
1665 @subsection ede-step-project
1666 @pjindex ede-step-project
1669 @item Inheritance Tree:
1671 @item eieio-speedbar
1673 @item eieio-speedbar-directory-button
1675 @item @w{@xref{ede-project-placeholder}.}
1677 @item @w{@xref{ede-project}.}
1679 @item ede-step-project
1692 @item :init-variables
1693 Type: @code{list} @*
1694 Default Value: @code{nil}
1696 Variables to set in this Makefile, at top of file.
1699 @item :additional-variables
1700 Type: @code{(or null list)} @*
1701 Default Value: @code{nil}
1703 Arbitrary variables needed from this project.
1704 It is safe to leave this blank.
1707 @item :additional-rules
1708 Type: @code{(or null list)} @*
1709 Default Value: @code{nil}
1711 Arbitrary rules and dependencies needed to make this target.
1712 It is safe to leave this blank.
1715 @item :installation-domain
1716 Type: @code{symbol} @*
1717 Default Value: @code{user}
1719 Installation domain specification.
1720 The variable GNUSTEP_INSTALLATION_DOMAIN is set at this value.
1724 Type: @code{(or null list)} @*
1725 Default Value: @code{(quote ("GNUmakefile.preamble"))}
1727 The auxiliary makefile for additional variables.
1728 Included just before the specific target files.
1732 Type: @code{(or null list)} @*
1733 Default Value: @code{(quote ("GNUmakefile.postamble"))}
1735 The auxiliary makefile for additional rules.
1736 Included just after the specific target files.
1739 @item :metasubproject
1740 Type: @code{boolean} @*
1741 Default Value: @code{nil}
1743 Non-@code{nil} if this is a metasubproject.
1744 Usually, a subproject is determined by a parent project. If multiple top level
1745 projects are grouped into a large project not maintained by EDE, then you need
1746 to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
1753 @subsubsection Specialized Methods
1755 @deffn Method ede-proj-makefile-create :AFTER this mfilename
1756 Create a GNUmakefile for all Makefile targets in @var{THIS}.
1757 @var{MFILENAME} is the makefile to generate.
1760 @deffn Method project-make-dist :AFTER this
1761 Build a distribution for the project based on @var{THIS} target.
1764 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
1765 Create a Makefile for all Makefile targets in @var{THIS} if needed.
1766 @var{MFILENAME} is the makefile to generate.
1769 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
1770 Setup the build environment for project @var{THIS}.
1771 Handles the Makefile, or a Makefile.am configure.in combination.
1772 Optional argument @var{FORCE} will force items to be regenerated.
1775 @deffn Method eieio-done-customizing :AFTER proj
1776 Call this when a user finishes customizing this object.
1777 Argument @var{PROJ} is the project to save.
1780 @deffn Method ede-proj-dist-makefile :AFTER this
1781 Return the name of the Makefile with the DIST target in it for @var{THIS}.
1784 @deffn Method ede-commit-project :AFTER proj
1785 Commit any change to @var{PROJ} to its file.
1788 @deffn Method project-dist-files :AFTER this
1789 Return a list of files that constitutes a distribution of @var{THIS} project.
1792 @deffn Method ede-commit-local-variables :AFTER proj
1793 Commit change to local variables in @var{PROJ}.
1801 * ede-proj-target ::
1802 * ede-proj-target-makefile ::
1803 * semantic-ede-proj-target-grammar ::
1804 * ede-proj-target-makefile-objectcode ::
1805 * ede-proj-target-makefile-archive ::
1806 * ede-proj-target-makefile-program ::
1807 * ede-proj-target-makefile-shared-object ::
1808 * ede-proj-target-elisp ::
1809 * ede-proj-target-elisp-autoloads ::
1810 * ede-proj-target-makefile-miscelaneous ::
1811 * ede-proj-target-makefile-info ::
1812 * ede-proj-target-scheme ::
1813 * project-am-target ::
1814 * project-am-objectcode ::
1815 * project-am-program ::
1816 * project-am-header-noinst ::
1817 * project-am-header-inst ::
1818 * project-am-lisp ::
1819 * project-am-texinfo ::
1825 @subsection ede-target
1829 @item Inheritance Tree:
1831 @item eieio-speedbar
1833 @item eieio-speedbar-directory-button
1838 @w{ede-cpp-root-target,} @w{ede-emacs-target-c,} @w{ede-emacs-target-el,} @w{ede-emacs-target-misc,} @w{ede-linux-target-c,} @w{ede-linux-target-misc,} @w{ede-maven-target-java,} @w{ede-maven-target-c,} @w{ede-maven-target-misc,} @w{ede-simple-target,} @w{@xref{ede-proj-target},} @w{@xref{project-am-target}.}
1852 Name of this target.
1858 The path to the sources of this target.
1859 Relative to the path of the project it belongs to.
1863 Type: @code{list} @*
1864 Default Value: @code{nil}
1866 Source files in this target.
1869 @item :versionsource
1870 Type: @code{list} @*
1871 Default Value: @code{nil}
1873 Source files with a version string in them.
1874 These files are checked for a version string whenever the EDE version
1875 of the master project is changed. When strings are found, the version
1876 previously there is updated.
1882 @subsubsection Specialized Methods
1884 @deffn Method ede-preprocessor-map :AFTER this
1885 Get the pre-processor map for project @var{THIS}.
1888 @deffn Method eieio-speedbar-description :AFTER obj
1889 Provide a speedbar description for @var{OBJ}.
1892 @deffn Method project-compile-target :AFTER obj &optional command
1893 Compile the current target @var{OBJ}.
1894 Argument @var{COMMAND} is the command to use for compiling the target.
1897 @deffn Method project-debug-target :AFTER obj
1898 Run the current project target @var{OBJ} in a debugger.
1901 @deffn Method ede-convert-path :AFTER this path
1902 Convert path in a standard way for a given project.
1903 Default to making it project relative.
1904 Argument @var{THIS} is the project to convert @var{PATH} to.
1907 @deffn Method ede-name :AFTER this
1908 Return the name of @var{THIS} targt.
1911 @deffn Method ede-target-buffer-in-sourcelist :AFTER this buffer source
1912 Return non-@code{nil} if object @var{THIS} is in @var{BUFFER} to a @var{SOURCE} list.
1913 Handles complex path issues.
1916 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1917 Return the path to @var{OBJ}.
1918 Optional @var{DEPTH} is the depth we start at.
1921 @deffn Method ede-buffer-header-file :AFTER this buffer
1922 There are no default header files in EDE.
1923 Do a quick check to see if there is a Header tag in this buffer.
1926 @deffn Method project-remove-file :AFTER ot fnnd
1927 Remove the current buffer from project target @var{OT}.
1928 Argument @var{FNND} is an argument.
1931 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1932 Check for some documentation files for @var{THIS}.
1933 Also do a quick check to see if there is a Documentation tag in this @var{BUFFER}.
1936 @deffn Method ede-map-target-buffers :AFTER this proc
1937 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1940 @deffn Method eieio-speedbar-child-description :AFTER obj
1941 Provide a speedbar description for a plain-child of @var{OBJ}.
1942 A plain child is a child element which is not an EIEIO object.
1945 @deffn Method ede-object-keybindings :BEFORE this
1946 Retrieves the slot @code{keybindings} from an object of class @code{ede-target}
1949 @deffn Method ede-description :AFTER this
1950 Return a description suitable for the minibuffer about @var{THIS}.
1953 @deffn Method eieio-speedbar-object-children :AFTER this
1954 Return the list of speedbar display children for @var{THIS}.
1957 @deffn Method ede-system-include-path :AFTER this
1958 Get the system include path used by project @var{THIS}.
1961 @deffn Method ede-object-sourcecode :BEFORE this
1962 Retrieves the slot @code{sourcetype} from an object of class @code{ede-target}
1965 @deffn Method ede-expand-filename :AFTER this filename &optional force
1966 Return a fully qualified file name based on target @var{THIS}.
1967 @var{FILENAME} should be a filename which occurs in a directory in which @var{THIS} works.
1968 Optional argument @var{FORCE} forces the default filename to be provided even if it
1972 @deffn Method ede-menu-items-build :AFTER obj &optional current
1973 Return a list of menu items for building target @var{OBJ}.
1974 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1977 @deffn Method ede-want-file-p :AFTER this file
1978 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
1981 @deffn Method ede-update-version-in-source :AFTER this version
1982 In sources for @var{THIS}, change version numbers to @var{VERSION}.
1985 @deffn Method project-delete-target :AFTER ot
1986 Delete the current target @var{OT} from it's parent project.
1989 @deffn Method ede-target-sourcecode :AFTER this
1990 Return the sourcecode objects which @var{THIS} permits.
1993 @deffn Method eieio-speedbar-child-make-tag-lines :AFTER this depth
1994 Create a speedbar tag line for a child of @var{THIS}.
1995 It has depth @var{DEPTH}.
1998 @deffn Method eieio-speedbar-object-buttonname :AFTER object
1999 Return a string to use as a speedbar button for @var{OBJECT}.
2002 @deffn Method eieio-done-customizing :AFTER target
2003 Call this when a user finishes customizing @var{TARGET}.
2006 @deffn Method project-edit-file-target :AFTER ot
2007 Edit the target @var{OT} associated w/ this file.
2010 @deffn Method ede-documentation :AFTER this
2011 Return a list of files that provides documentation.
2012 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2013 files in the project.
2016 @deffn Method ede-want-file-source-p :AFTER this file
2017 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2020 @deffn Method ede-want-file-auxiliary-p :AFTER this file
2021 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2024 @deffn Method project-add-file :AFTER ot file
2025 Add the current buffer into project project target @var{OT}.
2026 Argument @var{FILE} is the file to add.
2029 @deffn Method ede-target-name :AFTER this
2030 Return the name of @var{THIS} target, suitable for make or debug style commands.
2033 @deffn Method ede-object-menu :BEFORE this
2034 Retrieves the slot @code{menu} from an object of class @code{ede-target}
2037 @node ede-proj-target
2038 @subsection ede-proj-target
2039 @tgindex ede-proj-target
2042 @item Inheritance Tree:
2044 @item eieio-speedbar
2046 @item eieio-speedbar-directory-button
2048 @item @w{@xref{ede-target}.}
2050 @item ede-proj-target
2053 @w{@xref{ede-proj-target-makefile},} @w{ede-proj-target-aux,} @w{@xref{ede-proj-target-scheme}.}
2068 Name of this target.
2074 The path to the sources of this target.
2075 Relative to the path of the project it belongs to.
2079 Type: @code{list} @*
2080 Default Value: @code{nil}
2082 Auxiliary source files included in this target.
2083 Each of these is considered equivalent to a source file, but it is not
2084 distributed, and each should have a corresponding rule to build it.
2088 Type: @code{(or null symbol)} @*
2089 Default Value: @code{nil}
2091 The compiler to be used to compile this object.
2092 This should be a symbol, which contains the object defining the compiler.
2093 This enables save/restore to do so by name, permitting the sharing
2094 of these compiler resources, and global customization thereof.
2098 Type: @code{(or null symbol)} @*
2099 Default Value: @code{nil}
2101 The linker to be used to link compiled sources for this object.
2102 This should be a symbol, which contains the object defining the linker.
2103 This enables save/restore to do so by name, permitting the sharing
2104 of these linker resources, and global customization thereof.
2110 @subsubsection Specialized Methods
2112 @deffn Method project-compile-target :AFTER obj &optional command
2113 Compile the current target @var{OBJ}.
2114 Argument @var{COMMAND} is the command to use for compiling the target.
2117 @deffn Method project-debug-target :AFTER obj
2118 Run the current project target @var{OBJ} in a debugger.
2121 @deffn Method ede-proj-configure-add-missing :AFTER this
2122 Query if any files needed by @var{THIS} provided by automake are missing.
2123 Results in --add-missing being passed to automake.
2126 @deffn Method ede-proj-flush-autoconf :AFTER this
2127 Flush the configure file (current buffer) to accomodate @var{THIS}.
2128 By flushing, remove any cruft that may be in the file. Subsequent
2129 calls to @dfn{ede-proj-tweak-autoconf} can restore items removed by flush.
2132 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2133 Insert rules needed by @var{THIS} target.
2136 @deffn Method project-remove-file :AFTER target file
2137 For @var{TARGET}, remove @var{FILE}.
2138 @var{FILE} must be massaged by @dfn{ede-convert-path}.
2141 @deffn Method ede-proj-configure-create-missing :AFTER this
2142 Add any missing files for @var{THIS} by creating them.
2145 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2146 Return the variable name for @var{THIS}'s sources.
2149 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2150 Insert variables needed by target @var{THIS}.
2151 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2155 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2156 Insert variables needed by target @var{THIS} in Makefile.am after SOURCES.
2159 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2160 Insert any symbols that the DIST rule should depend on.
2161 Argument @var{THIS} is the target that should insert stuff.
2164 @deffn Method ede-proj-linkers :AFTER obj
2165 List of linkers being used by @var{OBJ}.
2166 If the @code{linker} slot is empty, concoct one on a first match found
2167 basis for any given type from the @code{availablelinkers} slot.
2168 Otherwise, return the @code{linker} slot.
2169 Converts all symbols into the objects to be used.
2172 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
2173 Return a list of patterns that are considered garbage to @var{THIS}.
2174 These are removed with make clean.
2177 @deffn Method ede-proj-tweak-autoconf :AFTER this
2178 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2181 @deffn Method ede-proj-compilers :AFTER obj
2182 List of compilers being used by @var{OBJ}.
2183 If the @code{compiler} slot is empty, concoct one on a first match found
2184 basis for any given type from the @code{availablecompilers} slot.
2185 Otherwise, return the @code{compiler} slot.
2186 Converts all symbols into the objects to be used.
2189 @deffn Method project-delete-target :AFTER this
2190 Delete the current target @var{THIS} from it's parent project.
2193 @deffn Method ede-proj-makefile-target-name :AFTER this
2194 Return the name of the main target for @var{THIS} target.
2197 @deffn Method eieio-done-customizing :AFTER target
2198 Call this when a user finishes customizing this object.
2199 Argument @var{TARGET} is the project we are completing customization on.
2202 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
2203 Insert user specified rules needed by @var{THIS} target.
2206 @deffn Method project-add-file :AFTER this file
2207 Add to target @var{THIS} the current buffer represented as @var{FILE}.
2210 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2211 Insert variables needed by target @var{THIS} in Makefile.am before SOURCES.
2214 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2215 Insert any symbols that the DIST rule should depend on.
2216 Argument @var{THIS} is the target that should insert stuff.
2219 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2220 Return a list of source files to convert to dependencies.
2221 Argument @var{THIS} is the target to get sources from.
2224 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2225 Insert the source variables needed by @var{THIS}.
2226 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2231 @node ede-proj-target-makefile
2232 @subsection ede-proj-target-makefile
2233 @tgindex ede-proj-target-makefile
2236 @item Inheritance Tree:
2238 @item eieio-speedbar
2240 @item eieio-speedbar-directory-button
2242 @item @w{@xref{ede-target}.}
2244 @item @w{@xref{ede-proj-target}.}
2246 @item ede-proj-target-makefile
2249 @w{@xref{semantic-ede-proj-target-grammar},} @w{@xref{ede-proj-target-makefile-objectcode},} @w{@xref{ede-proj-target-elisp},} @w{@xref{ede-proj-target-makefile-miscelaneous},} @w{@xref{ede-proj-target-makefile-info}.}
2263 Type: @code{string} @*
2264 Default Value: @code{"Makefile"}
2266 File name of generated Makefile.
2270 Type: @code{boolean} @*
2271 Default Value: @code{t}
2273 Non @code{nil} means the rule created is part of the all target.
2274 Setting this to @code{nil} creates the rule to build this item, but does not
2275 include it in the ALL`all:' rule.
2278 @item :configuration-variables
2279 Type: @code{list} @*
2280 Default Value: @code{nil}
2282 Makefile variables appended to use in different configurations.
2283 These variables are used in the makefile when a configuration becomes active.
2284 Target variables are always renamed such as foo_CFLAGS, then included into
2285 commands where the variable would usually appear.
2289 Type: @code{list} @*
2290 Default Value: @code{nil}
2292 Arbitrary rules and dependencies needed to make this target.
2293 It is safe to leave this blank.
2299 @subsubsection Specialized Methods
2301 @deffn Method ede-proj-makefile-dependencies :AFTER this
2302 Return a string representing the dependencies for @var{THIS}.
2303 Some compilers only use the first element in the dependencies, others
2304 have a list of intermediates (object files), and others don't care.
2305 This allows customization of how these elements appear.
2308 @deffn Method project-compile-target :AFTER obj &optional command
2309 Compile the current target program @var{OBJ}.
2310 Optional argument @var{COMMAND} is the s the alternate command to use.
2313 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2314 Insert rules needed by @var{THIS} target.
2317 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2318 Insert variables needed by target @var{THIS}.
2319 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2323 @deffn Method ede-proj-makefile-insert-commands :AFTER this
2324 Insert the commands needed by target @var{THIS}.
2325 For targets, insert the commands needed by the chosen compiler.
2328 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
2329 Return a list of configuration variables from @var{THIS}.
2330 Use @var{CONFIGURATION} as the current configuration to query.
2333 @node semantic-ede-proj-target-grammar
2334 @subsection semantic-ede-proj-target-grammar
2335 @tgindex semantic-ede-proj-target-grammar
2338 @item Inheritance Tree:
2340 @item eieio-speedbar
2342 @item eieio-speedbar-directory-button
2344 @item @w{@xref{ede-target}.}
2346 @item @w{@xref{ede-proj-target}.}
2348 @item @w{@xref{ede-proj-target-makefile}.}
2350 @item semantic-ede-proj-target-grammar
2360 @subsubsection Specialized Methods
2362 @deffn Method project-compile-target :AFTER obj
2363 Compile all sources in a Lisp target @var{OBJ}.
2366 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2367 Insert rules needed by @var{THIS} target.
2370 @deffn Method ede-buffer-mine :AFTER this buffer
2371 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2372 Lays claim to all -by.el, and -wy.el files.
2375 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2376 Return the variable name for @var{THIS}'s sources.
2379 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2380 Insert dist dependencies, or intermediate targets.
2381 This makes sure that all grammar lisp files are created before the dist
2382 runs, so they are always up to date.
2383 Argument @var{THIS} is the target that should insert stuff.
2387 @node ede-proj-target-makefile-objectcode
2388 @subsection ede-proj-target-makefile-objectcode
2389 @tgindex ede-proj-target-makefile-objectcode
2392 @item Inheritance Tree:
2394 @item eieio-speedbar
2396 @item eieio-speedbar-directory-button
2398 @item @w{@xref{ede-target}.}
2400 @item @w{@xref{ede-proj-target}.}
2402 @item @w{@xref{ede-proj-target-makefile}.}
2404 @item ede-proj-target-makefile-objectcode
2407 @w{@xref{ede-proj-target-makefile-archive},} @w{@xref{ede-proj-target-makefile-program}.}
2421 @item :configuration-variables
2422 Type: @code{list} @*
2423 Default Value: @code{("debug" ("CFLAGS" . "-g") ("LDFLAGS" . "-g"))}
2425 @xref{ede-proj-target-makefile}.
2428 @subsubsection Specialized Methods
2430 @deffn Method ede-buffer-header-file :AFTER this buffer
2431 There are no default header files.
2434 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2435 Return the variable name for @var{THIS}'s sources.
2438 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2439 Insert variables needed by target @var{THIS}.
2440 Optional argument @var{MORESOURCE} is not used.
2443 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2444 Return a list of source files to convert to dependencies.
2445 Argument @var{THIS} is the target to get sources from.
2449 @node ede-proj-target-makefile-archive
2450 @subsection ede-proj-target-makefile-archive
2451 @tgindex ede-proj-target-makefile-archive
2454 @item Inheritance Tree:
2456 @item eieio-speedbar
2458 @item eieio-speedbar-directory-button
2460 @item @w{@xref{ede-target}.}
2462 @item @w{@xref{ede-proj-target}.}
2464 @item @w{@xref{ede-proj-target-makefile}.}
2466 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2468 @item ede-proj-target-makefile-archive
2479 @subsubsection Specialized Methods
2481 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2482 Create the make rule needed to create an archive for @var{THIS}.
2485 @deffn Method ede-proj-makefile-insert-source-variables :PRIMARY this
2486 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2487 We aren't acutally inserting SOURCE details, but this is used by the
2488 Makefile.am generator, so use it to add this important bin program.
2492 @node ede-proj-target-makefile-program
2493 @subsection ede-proj-target-makefile-program
2494 @tgindex ede-proj-target-makefile-program
2497 @item Inheritance Tree:
2499 @item eieio-speedbar
2501 @item eieio-speedbar-directory-button
2503 @item @w{@xref{ede-target}.}
2505 @item @w{@xref{ede-proj-target}.}
2507 @item @w{@xref{ede-proj-target-makefile}.}
2509 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2511 @item ede-proj-target-makefile-program
2514 @w{@xref{ede-proj-target-makefile-shared-object}.}
2530 Type: @code{list} @*
2531 Default Value: @code{nil}
2533 Libraries, such as "m" or "Xt" which this program depends on.
2534 The linker flag "-l" is automatically prepended. Do not include a "lib"
2535 prefix, or a ".so" suffix.
2537 Note: Currently only used for Automake projects.
2541 Type: @code{list} @*
2542 Default Value: @code{nil}
2544 Additional flags to add when linking this target.
2545 Use ldlibs to add addition libraries. Use this to specify specific
2546 options to the linker.
2548 Note: Not currently used. This bug needs to be fixed.
2554 @subsubsection Specialized Methods
2556 @deffn Method project-debug-target :AFTER obj
2557 Debug a program target @var{OBJ}.
2560 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2561 Insert rules needed by @var{THIS} target.
2564 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2565 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2568 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2569 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2573 @node ede-proj-target-makefile-shared-object
2574 @subsection ede-proj-target-makefile-shared-object
2575 @tgindex ede-proj-target-makefile-shared-object
2578 @item Inheritance Tree:
2580 @item eieio-speedbar
2582 @item eieio-speedbar-directory-button
2584 @item @w{@xref{ede-target}.}
2586 @item @w{@xref{ede-proj-target}.}
2588 @item @w{@xref{ede-proj-target-makefile}.}
2590 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2592 @item @w{@xref{ede-proj-target-makefile-program}.}
2594 @item ede-proj-target-makefile-shared-object
2606 @subsubsection Specialized Methods
2608 @deffn Method ede-proj-configure-add-missing :AFTER this
2609 Query if any files needed by @var{THIS} provided by automake are missing.
2610 Results in --add-missing being passed to automake.
2613 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2614 Return the variable name for @var{THIS}'s sources.
2617 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2618 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2619 We need to override -program which has an LDADD element.
2622 @deffn Method ede-proj-makefile-target-name :AFTER this
2623 Return the name of the main target for @var{THIS} target.
2626 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2627 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2628 We aren't acutally inserting SOURCE details, but this is used by the
2629 Makefile.am generator, so use it to add this important bin program.
2633 @node ede-proj-target-elisp
2634 @subsection ede-proj-target-elisp
2635 @tgindex ede-proj-target-elisp
2638 @item Inheritance Tree:
2640 @item eieio-speedbar
2642 @item eieio-speedbar-directory-button
2644 @item @w{@xref{ede-target}.}
2646 @item @w{@xref{ede-proj-target}.}
2648 @item @w{@xref{ede-proj-target-makefile}.}
2650 @item ede-proj-target-elisp
2653 @w{@xref{ede-proj-target-elisp-autoloads}.}
2668 Type: @code{list} @*
2669 Default Value: @code{nil}
2671 Additional packages needed.
2672 There should only be one toplevel package per auxiliary tool needed.
2673 These packages location is found, and added to the compile time
2680 @subsubsection Specialized Methods
2682 @deffn Method project-compile-target :AFTER obj
2683 Compile all sources in a Lisp target @var{OBJ}.
2684 Bonus: Return a cons cell: (COMPILED . UPTODATE).
2687 @deffn Method ede-proj-flush-autoconf :AFTER this
2688 Flush the configure file (current buffer) to accomodate @var{THIS}.
2691 @deffn Method ede-buffer-mine :AFTER this buffer
2692 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2693 Lays claim to all .elc files that match .el files in this target.
2696 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2697 Return the variable name for @var{THIS}'s sources.
2700 @deffn Method ede-proj-tweak-autoconf :AFTER this
2701 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2704 @deffn Method ede-update-version-in-source :AFTER this version
2705 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
2706 There are standards in Elisp files specifying how the version string
2707 is found, such as a @code{-version} variable, or the standard header.
2710 @node ede-proj-target-elisp-autoloads
2711 @subsection ede-proj-target-elisp-autoloads
2712 @tgindex ede-proj-target-elisp-autoloads
2715 @item Inheritance Tree:
2717 @item eieio-speedbar
2719 @item eieio-speedbar-directory-button
2721 @item @w{@xref{ede-target}.}
2723 @item @w{@xref{ede-proj-target}.}
2725 @item @w{@xref{ede-proj-target-makefile}.}
2727 @item @w{@xref{ede-proj-target-elisp}.}
2729 @item ede-proj-target-elisp-autoloads
2745 Type: @code{list} @*
2746 Default Value: @code{("cedet-autogen")}
2748 @xref{ede-proj-target-elisp}.
2749 @item :autoload-file
2750 Type: @code{string} @*
2751 Default Value: @code{"loaddefs.el"}
2753 The file that autoload definitions are placed in.
2754 There should be one load defs file for a given package. The load defs are created
2755 for all Emacs Lisp sources that exist in the directory of the created target.
2758 @item :autoload-dirs
2759 Type: @code{list} @*
2760 Default Value: @code{nil}
2762 The directories to scan for autoload definitions.
2763 If @code{nil} defaults to the current directory.
2769 @subsubsection Specialized Methods
2771 @deffn Method ede-proj-makefile-dependencies :AFTER this
2772 Return a string representing the dependencies for @var{THIS}.
2773 Always return an empty string for an autoloads generator.
2776 @deffn Method project-compile-target :AFTER obj
2777 Create or update the autoload target.
2780 @deffn Method ede-proj-flush-autoconf :AFTER this
2781 Flush the configure file (current buffer) to accomodate @var{THIS}.
2784 @deffn Method ede-buffer-mine :AFTER this buffer
2785 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2786 Lays claim to all .elc files that match .el files in this target.
2789 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2790 Return the variable name for @var{THIS}'s sources.
2793 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2794 Insert any symbols that the DIST rule should depend on.
2795 Emacs Lisp autoload files ship the generated .el files.
2796 Argument @var{THIS} is the target which needs to insert an info file.
2799 @deffn Method ede-proj-tweak-autoconf :AFTER this
2800 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2803 @deffn Method ede-update-version-in-source :AFTER this version
2804 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
2805 There are standards in Elisp files specifying how the version string
2806 is found, such as a @code{-version} variable, or the standard header.
2809 @deffn Method ede-proj-compilers :AFTER obj
2810 List of compilers being used by @var{OBJ}.
2811 If the @code{compiler} slot is empty, get the car of the compilers list.
2814 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2815 Insert any symbols that the DIST rule should distribute.
2816 Emacs Lisp autoload files ship the generated .el files.
2817 Argument @var{THIS} is the target which needs to insert an info file.
2820 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2821 Insert the source variables needed by @var{THIS}.
2822 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2827 @node ede-proj-target-makefile-miscelaneous
2828 @subsection ede-proj-target-makefile-miscelaneous
2829 @tgindex ede-proj-target-makefile-miscelaneous
2832 @item Inheritance Tree:
2834 @item eieio-speedbar
2836 @item eieio-speedbar-directory-button
2838 @item @w{@xref{ede-target}.}
2840 @item @w{@xref{ede-proj-target}.}
2842 @item @w{@xref{ede-proj-target-makefile}.}
2844 @item ede-proj-target-makefile-miscelaneous
2859 Type: @code{string} @*
2860 Default Value: @code{""}
2862 Miscellaneous sources which have a specialized makefile.
2863 The sub-makefile is used to build this target.
2869 @subsubsection Specialized Methods
2871 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2872 Create the make rule needed to create an archive for @var{THIS}.
2875 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2876 Return the variable name for @var{THIS}'s sources.
2879 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2880 Return a list of files which @var{THIS} target depends on.
2884 @node ede-proj-target-makefile-info
2885 @subsection ede-proj-target-makefile-info
2886 @tgindex ede-proj-target-makefile-info
2889 @item Inheritance Tree:
2891 @item eieio-speedbar
2893 @item eieio-speedbar-directory-button
2895 @item @w{@xref{ede-target}.}
2897 @item @w{@xref{ede-proj-target}.}
2899 @item @w{@xref{ede-proj-target-makefile}.}
2901 @item ede-proj-target-makefile-info
2916 Type: @code{string} @*
2917 Default Value: @code{""}
2919 The main menu resides in this file.
2920 All other sources should be included independently.
2926 @subsubsection Specialized Methods
2928 @deffn Method ede-proj-configure-add-missing :AFTER this
2929 Query if any files needed by @var{THIS} provided by automake are missing.
2930 Results in --add-missing being passed to automake.
2933 @deffn Method object-write :AFTER this
2934 Before committing any change to @var{THIS}, make sure the mainmenu is first.
2937 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2938 Return the variable name for @var{THIS}'s sources.
2941 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2942 Insert any symbols that the DIST rule should depend on.
2943 Texinfo files want to insert generated `.info' files.
2944 Argument @var{THIS} is the target which needs to insert an info file.
2947 @deffn Method ede-proj-makefile-target-name :AFTER this
2948 Return the name of the main target for @var{THIS} target.
2951 @deffn Method ede-documentation :AFTER this
2952 Return a list of files that provides documentation.
2953 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2954 files in the project.
2957 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2958 Insert any symbols that the DIST rule should depend on.
2959 Texinfo files want to insert generated `.info' files.
2960 Argument @var{THIS} is the target which needs to insert an info file.
2963 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2964 Insert the source variables needed by @var{THIS} info target.
2965 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2967 Does the usual for Makefile mode, but splits source into two variables
2968 when working in Automake mode.
2971 @node ede-proj-target-scheme
2972 @subsection ede-proj-target-scheme
2973 @tgindex ede-proj-target-scheme
2976 @item Inheritance Tree:
2978 @item eieio-speedbar
2980 @item eieio-speedbar-directory-button
2982 @item @w{@xref{ede-target}.}
2984 @item @w{@xref{ede-proj-target}.}
2986 @item ede-proj-target-scheme
3000 Type: @code{string} @*
3001 Default Value: @code{"guile"}
3003 The preferred interpreter for this code.
3009 @subsubsection Specialized Methods
3011 @deffn Method ede-proj-tweak-autoconf :AFTER this
3012 Tweak the configure file (current buffer) to accomodate @var{THIS}.
3016 @node project-am-target
3017 @subsection project-am-target
3018 @tgindex project-am-target
3021 @item Inheritance Tree:
3023 @item eieio-speedbar
3025 @item eieio-speedbar-directory-button
3027 @item @w{@xref{ede-target}.}
3029 @item project-am-target
3032 @w{@xref{project-am-objectcode},} @w{project-am-header,} @w{@xref{project-am-lisp},} @w{@xref{project-am-texinfo},} @w{@xref{project-am-man}.}
3040 @subsubsection Specialized Methods
3042 @deffn Method project-compile-target-command :AFTER this
3043 Default target to use when compiling a given target.
3046 @deffn Method project-make-dist :AFTER this
3047 Run the current project in the debugger.
3050 @deffn Method project-edit-file-target :AFTER obj
3051 Edit the target associated w/ this file.
3054 @node project-am-objectcode
3055 @subsection project-am-objectcode
3056 @tgindex project-am-objectcode
3059 @item Inheritance Tree:
3061 @item eieio-speedbar
3063 @item eieio-speedbar-directory-button
3065 @item @w{@xref{ede-target}.}
3067 @item @w{@xref{project-am-target}.}
3069 @item project-am-objectcode
3072 @w{@xref{project-am-program},} @w{project-am-lib.}
3081 @subsubsection Specialized Methods
3083 @deffn Method project-am-macro :AFTER this
3084 Return the default macro to 'edit' for this object type.
3087 @deffn Method project-debug-target :AFTER obj
3088 Run the current project target in a debugger.
3091 @deffn Method project-compile-target-command :AFTER this
3092 Default target to use when compiling an object code target.
3095 @deffn Method ede-buffer-header-file :AFTER this buffer
3096 There are no default header files.
3099 @node project-am-program
3100 @subsection project-am-program
3101 @tgindex project-am-program
3104 @item Inheritance Tree:
3106 @item eieio-speedbar
3108 @item eieio-speedbar-directory-button
3110 @item @w{@xref{ede-target}.}
3112 @item @w{@xref{project-am-target}.}
3114 @item @w{@xref{project-am-objectcode}.}
3116 @item project-am-program
3131 Default Value: @code{nil}
3138 @node project-am-header-noinst
3139 @subsection project-am-header-noinst
3140 @tgindex project-am-header-noinst
3143 @item Inheritance Tree:
3145 @item eieio-speedbar
3147 @item eieio-speedbar-directory-button
3149 @item @w{@xref{ede-target}.}
3151 @item @w{@xref{project-am-target}.}
3153 @item @w{project-am-header.}
3155 @item project-am-header-noinst
3165 @subsubsection Specialized Methods
3167 @deffn Method project-am-macro :AFTER this
3168 Return the default macro to 'edit' for this object.
3171 @node project-am-header-inst
3172 @subsection project-am-header-inst
3173 @tgindex project-am-header-inst
3176 @item Inheritance Tree:
3178 @item eieio-speedbar
3180 @item eieio-speedbar-directory-button
3182 @item @w{@xref{ede-target}.}
3184 @item @w{@xref{project-am-target}.}
3186 @item @w{project-am-header.}
3188 @item project-am-header-inst
3198 @subsubsection Specialized Methods
3200 @deffn Method project-am-macro :AFTER this
3201 Return the default macro to 'edit' for this object.
3204 @node project-am-lisp
3205 @subsection project-am-lisp
3206 @tgindex project-am-lisp
3209 @item Inheritance Tree:
3211 @item eieio-speedbar
3213 @item eieio-speedbar-directory-button
3215 @item @w{@xref{ede-target}.}
3217 @item @w{@xref{project-am-target}.}
3219 @item project-am-lisp
3228 @subsubsection Specialized Methods
3230 @deffn Method project-am-macro :AFTER this
3231 Return the default macro to 'edit' for this object.
3234 @node project-am-texinfo
3235 @subsection project-am-texinfo
3236 @tgindex project-am-texinfo
3239 @item Inheritance Tree:
3241 @item eieio-speedbar
3243 @item eieio-speedbar-directory-button
3245 @item @w{@xref{ede-target}.}
3247 @item @w{@xref{project-am-target}.}
3249 @item project-am-texinfo
3263 Default Value: @code{nil}
3265 Additional texinfo included in this one.
3270 @subsubsection Specialized Methods
3272 @deffn Method project-am-macro :AFTER this
3273 Return the default macro to 'edit' for this object type.
3276 @deffn Method project-compile-target-command :AFTER this
3277 Default target t- use when compling a texinfo file.
3280 @deffn Method ede-documentation :AFTER this
3281 Return a list of files that provides documentation.
3282 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
3283 files in the project.
3286 @node project-am-man
3287 @comment node-name, next, previous, up
3288 @subsection project-am-man
3289 @tgindex project-am-man
3292 @item Inheritance Tree:
3294 @item eieio-speedbar
3296 @item eieio-speedbar-directory-button
3298 @item @w{@xref{ede-target}.}
3300 @item @w{@xref{project-am-target}.}
3302 @item project-am-man
3311 @subsubsection Specialized Methods
3313 @deffn Method project-am-macro :AFTER this
3314 Return the default macro to 'edit' for this object type.
3320 The source code type is an object designed to associated files with
3328 @node ede-sourcecode
3329 @subsection ede-sourcecode
3330 @scindex ede-sourcecode
3333 @item Inheritance Tree:
3335 @item eieio-instance-inheritor
3337 @item ede-sourcecode
3347 @item :parent-instance
3348 Type: @code{eieio-instance-inheritor-child}
3350 The parent of this instance.
3351 If a slot of this class is reference, and is unbound, then the parent
3352 is checked for a value.
3358 The name of this type of source code.
3359 Such as "C" or "Emacs Lisp"
3362 @item :sourcepattern
3363 Type: @code{string} @*
3364 Default Value: @code{".*"}
3366 Emacs regex matching sourcecode this target accepts.
3369 @item :auxsourcepattern
3370 Type: @code{(or null string)} @*
3371 Default Value: @code{nil}
3373 Emacs regex matching auxiliary source code this target accepts.
3374 Aux source are source code files needed for compilation, which are not comiled
3378 @item :enable-subdirectories
3379 Type: @code{boolean} @*
3380 Default Value: @code{nil}
3382 Non @code{nil} if this sourcecode type uses subdirectores.
3383 If sourcecode always lives near the target creating it, this should be nil.
3384 If sourcecode can, or typically lives in a subdirectory of the owning
3385 target, set this to t.
3388 @item :garbagepattern
3389 Type: @code{list} @*
3390 Default Value: @code{nil}
3392 Shell file regex matching files considered as garbage.
3393 This is a list of items added to an @code{rm} command when executing a @code{clean}
3400 @subsubsection Specialized Methods
3402 @deffn Method ede-want-any-files-p :AFTER this filenames
3403 Return non-@code{nil} if @var{THIS} will accept any files in @var{FILENAMES}.
3406 @deffn Method ede-want-any-source-files-p :AFTER this filenames
3407 Return non-@code{nil} if @var{THIS} will accept any source files in @var{FILENAMES}.
3410 @deffn Method ede-want-any-auxiliary-files-p :AFTER this filenames
3411 Return non-@code{nil} if @var{THIS} will accept any aux files in @var{FILENAMES}.
3414 @deffn Method ede-buffer-header-file :AFTER this filename
3415 Return a list of file names of header files for @var{THIS} with @var{FILENAME}.
3416 Used to guess header files, but uses the auxsource regular expression.
3419 @deffn Method ede-want-file-p :AFTER this filename
3420 Return non-@code{nil} if sourcecode definition @var{THIS} will take @var{FILENAME}.
3423 @deffn Method ede-want-file-source-p :AFTER this filename
3424 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3427 @deffn Method ede-want-file-auxiliary-p :AFTER this filename
3428 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3434 The compiler object is designed to associate source code with
3435 compilers. The target then references the compilers it can use.
3436 When the makefile is created, this object type knows how to create
3440 * ede-compilation-program ::
3442 * ede-object-compiler ::
3447 @node ede-compilation-program
3448 @subsection ede-compilation-program
3449 @cmindex ede-compilation-program
3452 @item Inheritance Tree:
3454 @item eieio-instance-inheritor
3456 @item ede-compilation-program
3459 @w{@xref{ede-compiler},} @w{@xref{ede-linker}.}
3469 @item :parent-instance
3470 Type: @code{eieio-instance-inheritor-child}
3472 The parent of this instance.
3473 If a slot of this class is reference, and is unbound, then the parent
3474 is checked for a value.
3480 Name of this type of compiler.
3486 Variables needed in the Makefile for this compiler.
3487 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3488 is a string, and VALUE is either a string, or a list of strings.
3489 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3495 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3496 This is used to match target objects with the compilers and linkers
3497 they can use, and which files this object is interested in.
3501 Type: @code{list} @*
3502 Default Value: @code{nil}
3504 Auxiliary rules needed for this compiler to run.
3505 For example, yacc/lex files need additional chain rules, or inferences.
3511 The commands used to execute this compiler.
3512 The object which uses this compiler will place these commands after
3513 it's rule definition.
3517 Type: @code{list} @*
3518 Default Value: @code{nil}
3520 Autoconf function to call if this type of compiler is used.
3521 When a project is in Automake mode, this defines the autoconf function to
3522 call to initialize automake to use this compiler.
3523 For example, there may be multiple C compilers, but they all probably
3524 use the same autoconf form.
3527 @item :objectextention
3530 A string which is the extention used for object files.
3531 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3537 @subsubsection Specialized Methods
3539 @deffn Method ede-proj-flush-autoconf :AFTER this
3540 Flush the configure file (current buffer) to accomodate @var{THIS}.
3543 @deffn Method ede-proj-makefile-insert-rules :AFTER this
3544 Insert rules needed for @var{THIS} compiler object.
3547 @deffn Method ede-proj-makefile-insert-variables :AFTER this
3548 Insert variables needed by the compiler @var{THIS}.
3551 @deffn Method ede-proj-makefile-insert-commands :AFTER this
3552 Insert the commands needed to use compiler @var{THIS}.
3553 The object creating makefile rules must call this method for the
3554 compiler it decides to use after inserting in the rule.
3557 @deffn Method ede-object-sourcecode :AFTER this
3558 Retrieves the slot @code{sourcetype} from an object of class @code{ede-compilation-program}
3561 @deffn Method ede-proj-tweak-autoconf :AFTER this
3562 Tweak the configure file (current buffer) to accomodate @var{THIS}.
3567 @subsection ede-compiler
3568 @cmindex ede-compiler
3571 @item Inheritance Tree:
3573 @item eieio-instance-inheritor
3575 @item @w{@xref{ede-compilation-program}.}
3580 @w{@xref{ede-object-compiler},} @w{semantic-ede-grammar-compiler-class.}
3590 Create a new object with name NAME of class type ede-compiler
3596 @item :parent-instance
3597 Type: @code{eieio-instance-inheritor-child}
3599 The parent of this instance.
3600 If a slot of this class is reference, and is unbound, then the parent
3601 is checked for a value.
3607 Name of this type of compiler.
3613 Variables needed in the Makefile for this compiler.
3614 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3615 is a string, and VALUE is either a string, or a list of strings.
3616 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3622 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3623 This is used to match target objects with the compilers and linkers
3624 they can use, and which files this object is interested in.
3630 The commands used to execute this compiler.
3631 The object which uses this compiler will place these commands after
3632 it's rule definition.
3635 @item :objectextention
3638 A string which is the extention used for object files.
3639 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3643 Type: @code{boolean} @*
3644 Default Value: @code{nil}
3646 Non-@code{nil} if this compiler can make dependencies.
3650 Type: @code{boolean} @*
3651 Default Value: @code{nil}
3653 Non-@code{nil} if this compiler creates code that can be linked.
3654 This requires that the containing target also define a list of available
3655 linkers that can be used.
3661 @subsubsection Specialized Methods
3663 @deffn Method ede-proj-makefile-insert-object-variables :AFTER this targetname sourcefiles
3664 Insert an OBJ variable to specify object code to be generated for @var{THIS}.
3665 The name of the target is @var{TARGETNAME} as a string. @var{SOURCEFILES} is the list of
3666 files to be objectified.
3667 Not all compilers do this.
3670 @deffn Method ede-compiler-intermediate-objects-p :AFTER this
3671 Return non-@code{nil} if @var{THIS} has intermediate object files.
3672 If this compiler creates code that can be linked together,
3673 then the object files created by the compiler are considered intermediate.
3676 @deffn Method ede-compiler-intermediate-object-variable :AFTER this targetname
3677 Return a string based on @var{THIS} representing a make object variable.
3678 @var{TARGETNAME} is the name of the target that these objects belong to.
3682 @node ede-object-compiler
3683 @subsection ede-object-compiler
3684 @cmindex ede-object-compiler
3687 @item Inheritance Tree:
3689 @item eieio-instance-inheritor
3691 @item @w{@xref{ede-compilation-program}.}
3693 @item @w{@xref{ede-compiler}.}
3695 @item ede-object-compiler
3708 Type: @code{boolean} @*
3709 Default Value: @code{t}
3711 @xref{ede-compiler}.
3712 @item :dependencyvar
3715 A variable dedicated to dependency generation.
3720 @subsubsection Specialized Methods
3722 @deffn Method ede-proj-makefile-insert-variables :AFTER this
3723 Insert variables needed by the compiler @var{THIS}.
3727 @subsection ede-linker
3731 @item Inheritance Tree:
3733 @item eieio-instance-inheritor
3735 @item @w{@xref{ede-compilation-program}.}
3746 Create a new object with name NAME of class type ede-linker
3755 Name of this type of compiler.
3761 Variables needed in the Makefile for this compiler.
3762 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3763 is a string, and VALUE is either a string, or a list of strings.
3764 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3770 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3771 This is used to match target objects with the compilers and linkers
3772 they can use, and which files this object is interested in.
3778 The commands used to execute this compiler.
3779 The object which uses this compiler will place these commands after
3780 it's rule definition.
3783 @item :objectextention
3786 A string which is the extention used for object files.
3787 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3796 arch-tag: c9bfdc6e-e6e9-4e87-97f7-d8348342fbf4