2 @setfilename ../../info/ede
3 @settitle Emacs Development Environment
6 This file describes EDE, the Emacs Development Environment.
8 Copyright @copyright{} 1998-2001, 2004-2005, 2008-2011 Free Software Foundation, Inc.
11 Permission is granted to copy, distribute and/or modify this document
12 under the terms of the GNU Free Documentation License, Version 1.3 or
13 any later version published by the Free Software Foundation; with no
14 Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
15 and with the Back-Cover Texts as in (a) below. A copy of the license
16 is included in the section entitled ``GNU Free Documentation License.''
18 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
19 modify this GNU manual. Buying copies from the FSF supports it in
20 developing GNU and promoting software freedom.''
26 * ede: (ede). Project management for Emacs.
30 @center @titlefont{EDE (The Emacs Development Environment)}
32 @center by Eric Ludlam
66 @node top, EDE Project Concepts, (dir), (dir)
68 @comment node-name, next, previous, up
70 @ede{} is the Emacs Development Environment: an Emacs extension that
71 simplifies building and debugging programs in Emacs. It attempts to
72 emulate a typical IDE (Integrated Development Environment). @ede{}
73 can manage or create your makefiles and other building environment
74 duties, allowing you to concentrate on writing code rather than
75 support files. It aims to make it much easier for new programmers to
76 learn and adopt GNU ways of doing things.
83 * EDE Project Concepts:: @ede{} Project Concepts
84 * EDE Mode:: Turning on @ede{} mode.
85 * Creating a project:: Creating a project.
86 * Modifying your project:: Adding and removing files and targets.
87 * Building and Debugging:: Initiating a build or debug session.
88 * Miscellaneous commands:: Other project related commands.
89 * Simple projects:: Projects not managed by @ede{}.
90 * Extending EDE:: Programming and extending @ede{}.
93 @node EDE Project Concepts, EDE Mode, top, top
94 @chapter @ede{} Project Concepts
96 @ede{} is a generic interface for managing projects. It specifies a
97 single set of menus and keybindings, while supporting multiple ways to
98 express a project via a build system.
100 In the subsequent chapters, we will describe the different project
101 types (@pxref{Creating a project}), as well as the commands to build
102 and debug projects (@pxref{Building and Debugging}).
104 In @ede{}, a project hierarchy matches a directory hierarchy. The
105 project's topmost directory is called the @dfn{project root}, and its
106 subdirectories are @dfn{subprojects}.
108 Each project can contain multiple @dfn{targets}. A target, at the
109 simplest level, is a named collection of files within a project. A
110 target can specify two different types of information:
114 A collection of files to be added to a distribution (e.g., a tarball
115 that you intend to distribute to others).
118 A collection of files that can be built into something else (e.g., a
119 program or compiled documentation).
122 Lastly, @ede{} provides a way for other tools to easily learn file
123 associations. For example, a program might need to restrict some sort
124 of search to files in a single target, or to discover the location of
125 documentation or interface files. @ede{} can provide this
128 @node EDE Mode, Creating a project, EDE Project Concepts, top
131 @ede{} is implemented as a minor mode, which augments other modes such
132 as C mode, and Texinfo mode. You can enable @ede{} for all buffers by
133 running the command @code{global-ede-mode}, or by putting this in your
140 Activating @ede{} adds a menu named @samp{Development} to the menu
141 bar. This menu provides several menu items for high-level @ede{}
142 commands. These menu items, and their corresponding keybindings, are
143 independent of the type of project you are actually working on.
145 @node Creating a project, Modifying your project, EDE Mode, top
146 @chapter Creating a project
148 To create a new project, first visit a file that you want to include
149 in that project. If you have a hierarchy of directories, first visit
150 a file in the topmost directory. From this buffer, type @kbd{M-x
151 ede-new}, or click on the @samp{Create Project} item in the
152 @samp{Development} menu.
154 The @command{ede-new} command prompts for the type of project you
155 would like to create. Each project type has its own benefits or
156 language specific enhancements. @ede{} supports four different
157 project types: @samp{Make}, @samp{Automake}, @samp{direct Automake},
162 For the @samp{Make} project type, @ede{} creates a @dfn{project file},
163 called @file{Project.ede}, in each project directory. Information
164 about the project is stored in this file. This project autogenerates
168 For the @samp{Automake} project type, @ede{} creates a
169 @file{Project.ede} project file similar to a @samp{Make} project.
170 Unlike a @samp{Make} project, this project autogenerates a
171 @file{Makefile.am} file. @ede{} handles the Automake bootstrapping
172 routines, which import and maintain a @file{configure.am} script and
173 other required files.
176 For the @samp{direct Automake} project type, @ede{} reads directly
177 from the Automake files.
179 You cannot create direct Automake projects with the @command{ede-new}
180 command. Instead, when you visit a project with existing Automake
181 files, @ede{} automatically detects them.
184 The @samp{Simple} project type provides light-weight constructs for
185 identifying a project root and looking up files. If you already have
186 a non-@ede{} project infrastructure, you can use a @samp{Simple}
187 project to provide other Emacs packages, such as Semantic, with some
188 information about the project. @xref{Simple projects}.
191 A subproject is merely a project in a subdirectory of another project.
192 You can create a subproject by using the @command{ede-new} command (or
193 the @samp{Create Project} menu item), while visiting a buffer in a
194 subdirectory of the project root. This new project is automatically
195 added to the parent project, and will be automatically loaded when
196 @ede{} reads the parent project.
198 When using a project command that involves a makefile, @ede{} uses
199 the top-most project's makefile as a starting place for the build. How
200 the toplevel project handles subprojects in the build process is
201 dependent on that project's type.
203 @node Modifying your project, Building and Debugging, Creating a project, top
204 @chapter Modifying your project
206 In this chapter, we describe the generic features for manipulating
207 projects, including the targets and files within them. Subsequent
208 chapters, which describe specific project types, will provide more
209 detailed information about exactly what these features do.
212 * Add/Remove target::
214 * Customize Features::
215 * EDE Project Features::
218 @node Add/Remove target, Add/Remove files, Modifying your project, Modifying your project
219 @section Add/Remove target
221 To create a new target, type @kbd{C-c . t} (@code{ede-new-target}) or
222 use the @samp{Add Target} menu item in the @samp{Project Options}
223 submenu. This prompts for a target name, and adds the current buffer
226 The @command{ede-new-target} command also prompts for a @dfn{target
227 type}. Each target type has its own build process and class of files
230 To remove a target from the project, type @kbd{M-x ede-delete-target},
231 or use the @samp{Remove Target} menu item in the @samp{Project
234 @node Add/Remove files, Customize Features, Add/Remove target, Modifying your project
235 @section Add/Remove files
237 To add the current file to an existing target, type @kbd{C-c . a}
238 (@code{ede-add-file}), or use the @samp{Add File} menu item in the
239 @samp{Target Options} submenu.
241 You can add a file to more than one target; this is OK.
243 To remove the current file from a target, type @kbd{C-c . d}
244 (@code{ede-remove-file}), or or use the @samp{Remove File} menu item
245 in the @samp{Target Options} submenu. If the file belongs to multiple
246 targets, this command prompts for each target it could be removed
249 While working in a project, if you visit a file that is not part of an
250 existing target, @ede{} automatically prompts for a target. If you do
251 not wish to add the file to any target, you can choose @samp{none}.
252 You can customize this behavior with the variable
253 @command{ede-auto-add-method}.
255 @node Customize Features, EDE Project Features, Add/Remove files, Modifying your project
256 @section Customize Features
258 A project, and its targets, are objects using the @samp{EIEIO} object
259 system. @xref{Top,,,eieio,EIEIO manual}. These objects have data
260 fields containing important information related to your work.
262 If the high-level functions aren't enough, you can tweak all
263 user-customizable fields at any time by running the command
264 @command{customize-project} or @command{customize-target}. This loads
265 the current project or target into a customization buffer, where you
266 can tweak individual slots. This is usually necessary for complex
269 Some project modes do not have a project file, but directly read a
270 Makefile or other existing file. Instead of directly editing the
271 object, you can edit the file by typine @kbd{C-c . e}
272 (@code{ede-edit-file-target}). You should ``rescan'' the project
273 afterwards (@pxref{Miscellaneous commands}).
275 @node EDE Project Features, , Customize Features, Modifying your project
276 @section EDE Project Features
278 This section details user facing features of an @ede{} @samp{Make}
279 style project. An @samp{Automake} project has similar options (but a
280 direct Automake project does not).
282 To modify any of the specific features mentioned here, you need to
283 customize the project or target with @command{customize-project} or
284 @command{customize-target}.
286 When you are customizing, you are directly manipulating slot values in
287 @eieio{} objects. @xref{Extending EDE}, if you are interested in
291 * Changing Compilers and Flags::
295 @node Changing Compilers and Flags, Configurations, EDE Project Features, EDE Project Features
296 @subsection Changing Compilers and Flags
298 Targets that build stuff need compilers. To change compilers, you
299 need to customize the desired target.
301 In the @samp{[Make]} section, you can choose a new compiler or linker
302 from the list. If a linker you need is not available, you will need
303 to create a new one. @xref{Compiler and Linker objects}.
305 If an existing compiler or linker is close, but you need to modify
306 some flag set such as adding an include path you will need to add a
307 configuration variable.
309 To start, you should create the basic setup, and construct a makefile
310 with @command{ede-proj-regenerate}. Look in the @file{Makefile} to
311 see what commands are inserted. Once you have determined the variable
312 you need to modify, you can add a configuration for it.
313 @xref{Configurations}.
315 @node Configurations, , Changing Compilers and Flags, EDE Project Features
316 @subsection Configurations
318 Configurations specify different ways to build a project. For
319 example, you may configure a project to be in ``debug'' mode, or
320 perhaps in ``release'' mode.
322 The project, and each target type all have a slot named
323 @code{configuration-variables}. To add new variables to a
324 configuration find this slot in the custom buffer, and insert a new
325 configuration. Name it either ``debug'' or ``release'', then insert
326 some number of name/value pairs to it.
328 You can have any number of valid configurations too. To add a new
329 configuration, customize your project. Work in the @samp{[Settings]}
330 block for ``configurations''. Add a new named configuration here.
332 To switch between different active configurations, modify the
333 ``configuration default'' slot.
335 @node Building and Debugging, Miscellaneous commands, Modifying your project, top
336 @chapter Building and Debugging
338 @ede{} provides the following ``project-aware'' compilation and
343 Compile the current target (@code{ede-compile-target}).
345 Compile the entire project (@code{ede-compile-project}).
347 Debug the current target (@code{ede-debug-target}).
348 @item M-x ede-make-dist
349 Build a distribution file for your project.
352 These commands are also available from the @samp{Development} menu.
354 @node Miscellaneous commands, Simple projects, Building and Debugging, top
355 @chapter Miscellaneous commands
357 If you opt to go in and edit @ede{} project files directly---for
358 instance, by using @kbd{C-c . e} (@pxref{Customize Features})---you
359 must then ``rescan'' the project files to update the internal data
360 structures. To rescan the current project, type @kbd{C-c . g}
361 (@code{ede-rescan-toplevel}).
363 @ede{} can help you find files in your project, via the command
364 @kbd{C-c . f} (@code{ede-find-file}). This prompts for a file name;
365 you need not specify the directory. EDE then tries to visit a file
366 with that name somewhere in your project.
368 @ede{} can use external tools to help with file finding. To do this,
369 customize @code{ede-locate-setup-options}.
371 @defvar ede-locate-setup-options
372 @anchor{ede-locate-setup-options}
373 List of locate objects to try out by default.
374 Listed in order of preference. If the first item cannot be used in
375 a particular project, then the next one is tried.
376 It is always assumed that @dfn{ede-locate-base} is at end of the list.
379 @ede{} also provides a project display mode for the speedbar
380 (@pxref{Speedbar,,,emacs,GNU Emacs Manual}). This allows you to view
381 your source files as they are structured in your project: as a
382 hierarchical tree, grouped according to target.
384 To activate the speedbar in this mode, type @kbd{C-c . s}
385 (@code{ede-speedbar}).
387 @node Simple projects, Extending EDE, Miscellaneous commands, top
388 @section Simple Projects
390 There is a wide array of Simple projects. The root for simple
391 projects is the class @code{ede-simple-project}. This handles the
392 infrastructure of storing a .ede file if needed.
394 The class @code{ede-simple-project} is designed to be subclassed.
395 Then key @ede{} methods can be overridden to provide a quick wrapper
398 A second project type is @code{ede-cpp-root}. This project type is
399 designed to be created for a directory hierarchy full of C/C++ code.
400 It can be configured with minimal lisp knowledge to do header file
401 lookup for @semantic{}, improving code completion performance.
404 * ede-cpp-root:: This project marks the root of a C/C++ code project.
405 * ede-simple subclassing:: Create your own simple project.
406 * ede-emacs:: A project for working with Emacs.
407 * ede-linux:: A project for working with Linux kernels.
408 * Custom Locate:: Customizing how to locate files in a simple project
412 @subsection ede-cpp-root
414 The @code{ede-cpp-root} project type allows you to create a single
415 object with no save-file in your @file{.emacs} file. It allows @ede{}
416 to provide the @semantic{} package with the ability to find header
419 The @code{ede-cpp-root} class knows a few things about C++ projects,
420 such as the prevalence of "include" directories, and typical
421 file-layout stuff. If this isn't sufficient, you can subclass
422 @code{ede-cpp-root-project} and add your own tweaks in just a few
423 lines. See the end of this file for an example.
425 In the most basic case, add this to your @file{.emacs} file, modifying
426 appropriate bits as needed.
429 (ede-cpp-root-project "SOMENAME" :file "/dir/to/some/file")
432 Replace @var{SOMENAME} with whatever name you want, and the filename
433 to an actual file at the root of your project. It might be a
434 Makefile, a README file. Whatever. It doesn't matter. It's just a
435 key to hang the rest of @ede{} off of.
437 The most likely reason to create this project, is to speed up
438 searching for includes files, or to simplify bootstrapping @semantic{}'s
439 ability to find files without much user interaction. In conjunction
440 with @semantic{} completion, having a short include path is key. You can
441 override the default include path and system include path like this:
444 (ede-cpp-root-project "NAME" :file "FILENAME"
445 :include-path '( "/include" "../include" "/c/include" )
446 :system-include-path '( "/usr/include/c++/3.2.2/" )
447 :spp-table '( ("MOOSE" . "")
448 ("CONST" . "const") ) )
451 In this case each item in the include path list is searched. If the
452 directory starts with "/", then that expands to the project root
453 directory. If a directory does not start with "/", then it is
454 relative to the default-directory of the current buffer when the file
457 The include path only affects C/C++ header files. Use the slot
458 @code{:header-match-regexp} to change it.
460 The @code{:system-include-path} allows you to specify full directory
461 names to include directories where system header files can be found.
462 These will be applied to files in this project only.
464 The @code{:spp-table} provides a list of project specific #define
465 style macros that are unique to this project, passed in to the
466 compiler on the command line, or are in special headers.
467 See the @code{semantic-lex-c-preprocessor-symbol-map} for more
468 on how to format this entry.
470 If there is a single file in your project, you can instead set the
471 @code{:spp-files} to a list of file names relative to the root of your
472 project. Specifying this is like setting the variable
473 @code{semantic-lex-c-preprocessor-symbol-file} in semantic.
475 If you want to override the file-finding tool with your own
476 function you can do this:
479 (ede-cpp-root-project "NAME" :file "FILENAME" :locate-fcn 'MYFCN)
482 Where @var{MYFCN} is a symbol for a function. The locate function can
483 be used in place of @code{ede-expand-filename} so you can quickly
484 customize your custom target to use specialized local routines instead
485 of the default @ede{} routines. The function symbol must take two
490 The name of the file to find.
492 The directory root for this cpp-root project.
496 If the cpp-root project style is right for you, but you want a dynamic
497 loader, instead of hard-coding path name values in your @file{.emacs}, you
498 can do that too, but you will need to write some lisp code.
500 To do that, you need to add an entry to the
501 @code{ede-project-class-files} list, and also provide two functions to
502 teach @ede{} how to load your project pattern
504 It would look like this:
507 (defun MY-FILE-FOR-DIR (&optional dir)
508 "Return a full file name to the project file stored in DIR."
509 <write your code here, or return nil>
512 (defun MY-ROOT-FCN ()
513 "Return the root fcn for `default-directory'"
514 ;; You might be able to use `ede-cpp-root-project-root'
515 ;; and not write this at all.
519 "Load a project of type `cpp-root' for the directory DIR.
520 Return nil if there isn't one."
521 ;; Use your preferred constructin method here.
522 (ede-cpp-root-project "NAME" :file (expand-file-name "FILE" dir)
526 (add-to-list 'ede-project-class-files
527 (ede-project-autoload "cpp-root"
530 :proj-file 'MY-FILE-FOR-DIR
531 :proj-root 'MY-ROOT-FCN
533 :class-sym 'ede-cpp-root)
537 This example only creates an auto-loader, and does not create a new kind
540 @xref{ede-cpp-root-project}, for details about the class that defines
541 the @code{ede-cpp-root} project type.
543 @node ede-simple subclassing
544 @subsection ede-simple Subclassing
546 todo - Write some doc.
548 In the meantime look in the commentary of ede-simple.el
551 @subsection ede-emacs
553 The @code{ede-emacs} project automatically identifies an Emacs source
554 tree, and enables EDE project mode for it.
556 It pre-populates the C Preprocessor symbol map for correct parsing,
557 and has an optimized include file identification function.
560 @subsection ede-linux
562 The @code{ede-linux} project will automatically identify a Linux
563 Kernel source tree, and enable EDE project mode for it.
565 It pre-populates the C Preprocessor symbol map for reasonable parsing,
566 and has an optimized include file identification function.
569 @subsection Custom Locate
571 The various simple project styles all have one major drawback, which
572 is that the files in the project are not completely known to EDE.
573 When the EDE API is used to try and file files by some reference name
574 in the project, then that could fail.
576 @@TODO - Add ID Utils and CScope examples
578 @ede{} can therefore use some external locate commands, such as the unix
579 ``locate'' command, or ``GNU Global''.
581 Configuration of the tool you want to use such as @code{locate}, or
582 @code{global} will need to be done without the aid of @ede{}. Once
583 configured, however, @ede{} can use it.
585 To enable one of these tools, set the variable
586 @code{ede-locate-setup-options} with the names of different locate
587 objects. @ref{Miscellaneous commands}.
589 Configure this in your @file{.emacs} before loading in CEDET or EDE.
590 If you want to add support for GNU Global, your configuration would
594 (setq ede-locate-setup-options '(ede-locate-global ede-locate-base))
597 That way, when a search needs to be done, it will first try using
598 GLOBAL. If global is not available for that directory, then it will
599 revert to the base locate object. The base object always fails to
602 You can add your own locate tool but subclassing from
603 @code{ede-locate-base}. The subclass should also implement two
604 methods. See the code in @file{ede-locate.el} for GNU Global as a
607 @node Extending EDE, , Simple projects, top
608 @chapter Extending @ede{}
610 This chapter is intended for users who want to write new parts or fix
611 bugs in @ede{}. A knowledge of Emacs Lisp, and some @eieio{}(CLOS) is
614 @ede{} uses @eieio{}, the CLOS package for Emacs, to define two object
615 superclasses, specifically the PROJECT and TARGET. All commands in
616 @ede{} are usually meant to address the current project, or current
619 All specific projects in @ede{} derive subclasses of the @ede{}
620 superclasses. In this way, specific behaviors such as how a project
621 is saved, or how a target is compiled can be customized by a project
622 author in detail. @ede{} communicates to these project objects via an
623 API using methods. The commands you use in @ede{} mode are high-level
624 functional wrappers over these methods. @xref{(eieio)Top}. For
625 details on using @eieio{} to extending classes, and writing methods.
627 If you intend to extend @ede{}, it is most likely that a new target type is
628 needed in one of the existing project types. The rest of this chapter
629 will discuss extending the @code{ede-project} class, and it's targets.
630 See @file{project-am.el} for basic details on adding targets to it.
632 For the @code{ede-project} type, the core target class is called
633 @code{ede-proj-target}. Inheriting from this will give you everything
634 you need to start, including adding your sources into the makefile. If
635 you also need additional rules in the makefile, you will want to inherit
636 from @code{ede-proj-target-makefile} instead. You may want to also add
637 new fields to track important information.
639 If you are building currently unsupported code into a program or shared
640 library, it is unlikely you need a new target at all. Instead you
641 would need to create a new compiler or linker object that compiles
642 source code of the desired type. @ref{Compiler and Linker objects}.
644 Once your new class exists, you will want to fill in some basic methods.
645 See the @file{ede-skel.el} file for examples of these. The files
646 @file{ede-proj-info.el} and @file{ede-proj-elisp.el} are two interesting
650 * User interface methods:: Methods associated with keybindings
651 * Base project methods:: The most basic methods on @ede{} objects.
652 * Sourcecode objects:: Defining new sourcecode classes.
653 * Compiler and Linker objects:: Defining new compilers and linkers.
654 * Project:: Details of project classes.
655 * Targets:: Details of target classes.
656 * Sourcecode:: Details of source code classes.
657 * Compilers:: Details of compiler classes.
660 @node User interface methods
661 @section User interface methods
663 These methods are core behaviors associated with user commands.
664 If you do not implement a method, there is a reasonable default that
665 may do what you need.
668 @item project-add-file
669 Add a file to your project. Override this if you want to put new
670 sources into different fields depending on extension, or other details.
671 @item project-remove-file
672 Reverse of project-add-file.
673 @item project-compile-target
674 Override this if you want to do something special when the user
675 "compiles" this target.
676 @item project-debug-target
677 What to do when a user wants to debug your target.
678 @item project-update-version
679 Easily update the version number of your project.
680 @item project-edit-file-target
681 Edit the file the project's information is stored in.
682 @item project-new-target
683 Create a new target in a project.
684 @item project-delete-target
685 Delete a target from a project.
686 @item project-make-dist
687 Make a distribution (tar archive) of the project.
689 Rescan a project file, changing the data in the existing objects.
692 @node Base project methods
693 @section Base project methods
695 These methods are important for querying base information from project
700 Return a string that is the name of this target.
701 @item ede-target-name
702 Return a string that is the name of the target used by a Make system.
703 @item ede-description
704 A brief description of the project or target. This is currently used
705 by the @samp{ede-speedbar} interface.
706 @item ede-want-file-p
707 Return non-nil if a target will accept a given file.
708 It is generally unecessary to override this. See the section on source
710 @item ede-buffer-mine
711 Return non-nil if a buffer belongs to this target. Used during
712 association when a file is loaded. It is generally unecessary to
713 override this unless you keep auxiliary files.
716 These methods are used by the semantic package extensions @xref{(semantic)Top}.
719 @item ede-buffer-header-file
720 Return a header file belonging to a given buffer. Prototypes are place
721 there when appropriate
722 @item ede-buffer-documentation-files
723 Return the documentation file information about this file would be
725 @item ede-documentation
726 List all documentation a project or target is responsible for.
729 @node Sourcecode objects
730 @section Sourcecode objects
732 @ede{} projects track source file / target associates via source code
733 objects. The definitions for this is in @file{ede-source.el}. A source
734 code object contains methods that know how to identify a file as being
735 of that class, (ie, a C file ends with @file{.c}). Some targets can
736 handle many different types of sources which must all be compiled
737 together. For example, a mixed C and C++ program would have
738 instantiations of both sourcecode types.
740 When a target needs to know if it will accept a source file, it
741 references its list of source code objects. These objects then make
744 Source code objects are stored in the target objects as a list of
745 symbols, where the symbol's value is the object. This enables the
746 project save file mechanism to work.
748 Here is an example for an instantiation of an Emacs Lisp source code object:
751 (defvar ede-source-emacs
752 (ede-sourcecode "ede-emacs-source"
754 :sourcepattern "\\.el$"
755 :garbagepattern '("*.elc"))
756 "Emacs Lisp source code definition.")
759 If you want to recycle parts of an existing sourcecode object, you can
760 clone the original, and then just tweak the parts that are different.
764 (defvar ede-source-emacs-autoload
765 (clone ede-source-emacs "ede-source-emacs-autoload"
766 :name "Emacs Lisp Autoload"
767 :sourcepattern "-loaddefs\\.el")
768 "Emacs Lisp autoload source code.")
771 In this case, the garbage pattern is the same.
775 @node Compiler and Linker objects
776 @section Compiler and Linker objects
778 In order for a target to create a @file{Makefile}, it must know how to
779 compile the sources into the program or desired data file, and
780 possibly link them together.
782 A compiler object instantiation is used to associate a given target
783 with a given source code type. Some targets can handle many types of
784 sources, and thus has many compilers available to it. Some targets
785 may have multiple compilers for a given type of source code.
787 @ede{} will examine the actual source files in a target, cross reference
788 that against the compiler list to come up with the final set of
789 compilers that will be inserted into the Makefile.
791 Compiler instantiations must also insert variables specifying the
792 compiler it plans to use, in addition to creating Automake settings for
793 @file{configure.in} when appropriate.
795 Compiler objects are stored in the target objects as a list of
796 symbols, where the symbols value is the object. This enables the
797 project output mechanism to work more efficiently.
799 Targets will also have a special "compiler" slot which lets a user
800 explicitly choose the compiler they want to use.
802 Here is an example for texinfo:
805 (defvar ede-makeinfo-compiler
807 "ede-makeinfo-compiler"
809 :variables '(("MAKEINFO" . "makeinfo"))
810 :commands '("makeinfo -o $@ $<")
811 :autoconf '(("AC_CHECK_PROG" . "MAKEINFO, makeinfo"))
812 :sourcetype '(ede-makeinfo-source)
814 "Compile texinfo files into info files.")
819 When creating compiler instantiations, it may be useful to @code{clone}
820 an existing compiler variable. Cloning allows you to only modify
821 parts of the original, while keeping the rest of the same.
822 Modification of the original will result in the clone also being
823 changed for shared value slots.
825 The second important object is the linker class. The linker is similar
826 to the compiler, except several compilers might be used to create some
827 object files, and only one linker is used to link those objects together.
829 See @file{ede-proj-obj.el} for examples of the combination.
840 * ede-project-placeholder ::
842 * ede-cpp-root-project ::
843 * ede-simple-project ::
844 * ede-simple-base-project ::
845 * ede-proj-project ::
846 * project-am-makefile ::
847 * ede-step-project ::
850 @node ede-project-placeholder
851 @subsection ede-project-placeholder
852 @pjindex ede-project-placeholder
855 @item Inheritance Tree:
859 @item eieio-speedbar-directory-button
861 @item ede-project-placeholder
864 @w{@xref{ede-project}.}
876 Type: @code{string} @*
877 Default Value: @code{"Untitled"}
879 The name used when generating distribution files.
883 Type: @code{string} @*
884 Default Value: @code{"1.0"}
886 The version number used when distributing files.
892 Directory this project is associated with.
898 File name where this project is stored.
905 @subsubsection Specialized Methods
907 @deffn Method ede--project-inode :AFTER proj
908 Get the inode of the directory project @var{PROJ} is in.
911 @deffn Method ede-project-root :AFTER this
912 If a project knows it's root, return it here.
913 Allows for one-project-object-for-a-tree type systems.
916 @deffn Method ede-find-subproject-for-directory :AFTER proj dir
917 Find a subproject of @var{PROJ} that corresponds to @var{DIR}.
920 @deffn Method ede-project-root-directory :AFTER this &optional file
921 If a project knows it's root, return it here.
922 Allows for one-project-object-for-a-tree type systems.
923 Optional @var{FILE} is the file to test. It is ignored in preference
924 of the anchor file for the project.
927 @deffn Method ede-project-force-load :AFTER this
928 Make sure the placeholder @var{THIS} is replaced with the real thing.
929 Return the new object created in its place.
932 @deffn Method project-interactive-select-target :AFTER this prompt
933 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
936 @deffn Method project-add-file :AFTER this file
937 Make sure placeholder @var{THIS} is replaced with the real thing, and pass through.
941 @subsection ede-project
945 @item Inheritance Tree:
949 @item eieio-speedbar-directory-button
951 @item @w{@xref{ede-project-placeholder}.}
956 @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}.}
971 List of top level targets in this project.
977 List of tool cache configurations in this project.
978 This allows any tool to create, manage, and persist project-specific settings.
982 Type: @code{string} @*
984 URL to this projects web site.
985 This is a URL to be sent to a web site for documentation.
988 @item :web-site-directory @*
990 A directory where web pages can be found by Emacs.
991 For remote locations use a path compatible with ange-ftp or EFS.
992 You can also use TRAMP for use with rcp & scp.
995 @item :web-site-file @*
997 A file which contains the home page for this project.
998 This file can be relative to slot @code{web-site-directory}.
999 This can be a local file, use ange-ftp, EFS, or TRAMP.
1003 Type: @code{string} @*
1005 FTP site where this project's distribution can be found.
1006 This FTP site should be in Emacs form, as needed by @code{ange-ftp}, but can
1007 also be of a form used by TRAMP for use with scp, or rcp.
1010 @item :ftp-upload-site
1011 Type: @code{string} @*
1013 FTP Site to upload new distributions to.
1014 This FTP site should be in Emacs form as needed by @code{ange-ftp}.
1015 If this slot is @code{nil}, then use @code{ftp-site} instead.
1018 @item :configurations
1019 Type: @code{list} @*
1020 Default Value: @code{("debug" "release")}
1022 List of available configuration types.
1023 Individual target/project types can form associations between a configuration,
1024 and target specific elements such as build variables.
1027 @item :configuration-default @*
1028 Default Value: @code{"debug"}
1030 The default configuration.
1033 @item :local-variables @*
1034 Default Value: @code{nil}
1036 Project local variables
1042 @subsubsection Specialized Methods
1044 @deffn Method ede-preprocessor-map :AFTER this
1045 Get the pre-processor map for project @var{THIS}.
1048 @deffn Method ede-subproject-relative-path :AFTER proj &optional parent-in
1049 Get a path name for @var{PROJ} which is relative to the parent project.
1050 If PARENT is specified, then be relative to the PARENT project.
1051 Specifying PARENT is useful for sub-sub projects relative to the root project.
1054 @deffn Method eieio-speedbar-description :AFTER obj
1055 Provide a speedbar description for @var{OBJ}.
1058 @deffn Method ede-map-any-target-p :AFTER this proc
1059 For project @var{THIS}, map @var{PROC} to all targets and return if any non-nil.
1060 Return the first non-@code{nil} value returned by @var{PROC}.
1063 @deffn Method ede-map-subprojects :AFTER this proc
1064 For object @var{THIS}, execute @var{PROC} on all direct subprojects.
1065 This function does not apply @var{PROC} to sub-sub projects.
1066 See also @dfn{ede-map-all-subprojects}.
1069 @deffn Method ede-convert-path :AFTER this path
1070 Convert path in a standard way for a given project.
1071 Default to making it project relative.
1072 Argument @var{THIS} is the project to convert @var{PATH} to.
1075 @deffn Method ede-name :AFTER this
1076 Return a short-name for @var{THIS} project file.
1077 Do this by extracting the lowest directory name.
1080 @deffn Method ede-set-project-variables :AFTER project &optional buffer
1081 Set variables local to @var{PROJECT} in @var{BUFFER}.
1084 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1085 Return the path to @var{OBJ}.
1086 Optional @var{DEPTH} is the depth we start at.
1089 @deffn Method ede-map-all-subprojects :AFTER this allproc
1090 For object @var{THIS}, execute PROC on @var{THIS} and all subprojects.
1091 This function also applies PROC to sub-sub projects.
1092 See also @dfn{ede-map-subprojects}.
1095 @deffn Method project-update-version :AFTER ot
1096 The @code{:version} of the project @var{OT} has been updated.
1097 Handle saving, or other detail.
1100 @deffn Method ede-buffer-header-file :AFTER this buffer
1101 Return @code{nil}, projects don't have header files.
1104 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1105 Return all documentation in project @var{THIS} based on @var{BUFFER}.
1108 @deffn Method ede-map-targets :AFTER this proc
1109 For object @var{THIS}, execute @var{PROC} on all targets.
1112 @deffn Method ede-buffer-mine :AFTER this buffer
1113 Return non-@code{nil} if object @var{THIS} lays claim to the file in @var{BUFFER}.
1116 @deffn Method ede-object-keybindings :BEFORE this
1117 Retrieves the slot @code{keybindings} from an object of class @code{ede-project}
1120 @deffn Method ede-description :AFTER this
1121 Return a description suitable for the minibuffer about @var{THIS}.
1124 @deffn Method eieio-speedbar-object-children :AFTER this
1125 Return the list of speedbar display children for @var{THIS}.
1128 @deffn Method project-make-dist :AFTER this
1129 Build a distribution for the project based on @var{THIS} project.
1132 @deffn Method ede-system-include-path :AFTER this
1133 Get the system include path used by project @var{THIS}.
1136 @deffn Method project-new-target-custom :AFTER proj
1137 Create a new target. It is up to the project @var{PROJ} to get the name.
1140 @deffn Method ede-subproject-p :AFTER proj
1141 Return non-@code{nil} if @var{PROJ} is a sub project.
1144 @deffn Method ede-expand-filename :AFTER this filename &optional force
1145 Return a fully qualified file name based on project @var{THIS}.
1146 @var{FILENAME} should be just a filename which occurs in a directory controlled
1148 Optional argument @var{FORCE} forces the default filename to be provided even if it
1152 @deffn Method ede-menu-items-build :AFTER obj &optional current
1153 Return a list of menu items for building project @var{OBJ}.
1154 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1157 @deffn Method ede-update-version-in-source :AFTER this version
1158 Change occurrences of a version string in sources.
1159 In project @var{THIS}, cycle over all targets to give them a chance to set
1160 their sources to @var{VERSION}.
1163 @deffn Method project-new-target :AFTER proj &rest args
1164 Create a new target. It is up to the project @var{PROJ} to get the name.
1167 @deffn Method project-compile-project :AFTER obj &optional command
1168 Compile the entire current project @var{OBJ}.
1169 Argument @var{COMMAND} is the command to use when compiling.
1172 @deffn Method eieio-speedbar-object-buttonname :AFTER object
1173 Return a string to use as a speedbar button for @var{OBJECT}.
1176 @deffn Method ede-map-project-buffers :AFTER this proc
1177 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1180 @deffn Method ede-expand-filename-impl :AFTER this filename &optional force
1181 Return a fully qualified file name based on project @var{THIS}.
1182 @var{FILENAME} should be just a filename which occurs in a directory controlled
1184 Optional argument @var{FORCE} forces the default filename to be provided even if it
1188 @deffn Method eieio-done-customizing :AFTER proj
1189 Call this when a user finishes customizing @var{PROJ}.
1192 @deffn Method ede-html-documentation :AFTER this
1193 Return a list of HTML files provided by project @var{THIS}.
1196 @deffn Method ede-documentation :AFTER this
1197 Return a list of files that provides documentation.
1198 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
1199 files in the project.
1202 @deffn Method project-interactive-select-target :AFTER this prompt
1203 Interactively query for a target that exists in project @var{THIS}.
1204 Argument @var{PROMPT} is the prompt to use when querying the user for a target.
1207 @deffn Method ede-target-in-project-p :AFTER proj target
1208 Is @var{PROJ} the parent of @var{TARGET}?
1209 If @var{TARGET} belongs to a subproject, return that project file.
1212 @deffn Method ede-find-target :AFTER proj buffer
1213 Fetch the target in @var{PROJ} belonging to @var{BUFFER} or nil.
1216 @deffn Method ede-add-subproject :AFTER proj-a proj-b
1217 Add into @var{PROJ-A}, the subproject @var{PROJ-B}.
1220 @deffn Method ede-commit-project :AFTER proj
1221 Commit any change to @var{PROJ} to its file.
1224 @deffn Method project-dist-files :AFTER this
1225 Return a list of files that constitutes a distribution of @var{THIS} project.
1228 @deffn Method ede-object-menu :BEFORE this
1229 Retrieves the slot @code{menu} from an object of class @code{ede-project}
1232 @deffn Method ede-commit-local-variables :AFTER proj
1233 Commit change to local variables in @var{PROJ}.
1236 @node ede-cpp-root-project
1237 @subsection ede-cpp-root-project
1238 @pjindex ede-cpp-root-project
1241 @item Inheritance Tree:
1243 @item eieio-speedbar
1245 @item eieio-speedbar-directory-button
1247 @item @w{@xref{ede-project-placeholder}.}
1249 @item @w{@xref{ede-project}.}
1251 @item ede-cpp-root-project
1260 This class implements the @code{ede-cpp-root} project type.
1261 @xref{ede-cpp-root}, for information about using this project type.
1268 Type: @code{list} @*
1269 Default Value: @code{(quote ("/include" "../include/"))}
1271 The default locate function expands filenames within a project.
1272 If a header file (.h, .hh, etc) name is expanded, and
1273 the @code{:locate-fcn} slot is @code{nil}, then the include path is checked
1274 first, and other directories are ignored. For very large
1275 projects, this optimization can save a lot of time.
1277 Directory names in the path can be relative to the current
1278 buffer's @code{default-directory} (not starting with a /). Directories
1279 that are relative to the project's root should start with a /, such
1280 as "/include", meaning the directory @code{include} off the project root
1284 @item :system-include-path
1285 Type: @code{list} @*
1286 Default Value: @code{nil}
1288 The system include path for files in this project.
1289 C files initialized in an ede-cpp-root-project have their semantic
1290 system include path set to this value. If this is @code{nil}, then the
1291 semantic path is not modified.
1295 Type: @code{list} @*
1296 Default Value: @code{nil}
1298 C Preprocessor macros for your files.
1299 Preprocessor symbols will be used while parsing your files.
1300 These macros might be passed in through the command line compiler, or
1301 are critical symbols derived from header files. Providing header files
1302 macro values through this slot improves accuracy and performance.
1303 Use `:spp-files' to use these files directly.
1307 Type: @code{list} @*
1308 Default Value: @code{nil}
1310 C header file with Preprocessor macros for your files.
1311 The PreProcessor symbols appearing in these files will be used while
1312 parsing files in this project.
1313 See @code{semantic-lex-c-preprocessor-symbol-map} for more on how this works.
1316 @item :header-match-regexp
1317 Type: @code{string} @*
1318 Default Value: @code{"\\.\\(h\\(h\\|xx\\|pp\\|\\+\\+\\)?\\|H\\)$\\|\\<\\w+$"}
1320 Regexp used to identify C/C++ header files.
1324 Type: @code{(or null function)} @*
1325 Default Value: @code{nil}
1327 The locate function can be used in place of
1328 @dfn{ede-expand-filename} so you can quickly customize your custom target
1329 to use specialized local routines instead of the EDE routines.
1330 The function symbol must take two arguments:
1331 NAME - The name of the file to find.
1332 DIR - The directory root for this cpp-root project.
1334 It should return the fully qualified file name passed in from NAME. If that file does not
1335 exist, it should return nil.
1341 @subsubsection Specialized Methods
1343 @deffn Method initialize-instance :AFTER this &rest fields
1344 Make sure the @code{:file} is fully expanded.
1347 @deffn Method ede-preprocessor-map :AFTER this
1348 Get the pre-processor map for project @var{THIS}.
1351 @deffn Method ede-cpp-root-header-file-p :AFTER proj name
1352 Non @code{nil} if in @var{PROJ} the filename @var{NAME} is a header.
1355 @deffn Method ede-system-include-path :AFTER this
1356 Get the system include path used by project @var{THIS}.
1359 @deffn Method ede-expand-filename-impl :AFTER proj name
1360 Within this project @var{PROJ}, find the file @var{NAME}.
1361 This knows details about or source tree.
1364 @node ede-simple-project
1365 @subsection ede-simple-project
1366 @pjindex ede-simple-project
1369 @item Inheritance Tree:
1371 @item eieio-speedbar
1373 @item eieio-speedbar-directory-button
1375 @item @w{@xref{ede-project-placeholder}.}
1377 @item @w{@xref{ede-project}.}
1379 @item ede-simple-project
1388 @subsubsection Specialized Methods
1390 @deffn Method ede-commit-project :AFTER proj
1391 Commit any change to @var{PROJ} to its file.
1394 @node ede-simple-base-project
1395 @subsection ede-simple-base-project
1396 @pjindex ede-simple-base-project
1399 @item Inheritance Tree:
1401 @item eieio-speedbar
1403 @item eieio-speedbar-directory-button
1405 @item @w{@xref{ede-project-placeholder}.}
1407 @item @w{@xref{ede-project}.}
1409 @item ede-simple-base-project
1418 EDE Simple project base class.
1419 This one project could control a tree of subdirectories.
1424 @node ede-proj-project
1425 @subsection ede-proj-project
1426 @pjindex ede-proj-project
1429 @item Inheritance Tree:
1431 @item eieio-speedbar
1433 @item eieio-speedbar-directory-button
1435 @item @w{@xref{ede-project-placeholder}.}
1437 @item @w{@xref{ede-project}.}
1439 @item ede-proj-project
1452 @item :makefile-type
1453 Type: @code{symbol} @*
1454 Default Value: @code{Makefile}
1456 The type of Makefile to generate.
1457 Can be one of @code{'Makefile}, 'Makefile.in, or 'Makefile.am.
1458 If this value is NOT @code{'Makefile}, then that overrides the @code{:makefile} slot
1463 Type: @code{list} @*
1464 Default Value: @code{nil}
1466 Variables to set in this Makefile.
1469 @item :configuration-variables
1470 Type: @code{list} @*
1471 Default Value: @code{("debug" (("DEBUG" . "1")))}
1473 Makefile variables to use in different configurations.
1474 These variables are used in the makefile when a configuration becomes active.
1477 @item :inference-rules @*
1478 Default Value: @code{nil}
1480 Inference rules to add to the makefile.
1483 @item :include-file @*
1484 Default Value: @code{nil}
1486 Additional files to include.
1487 These files can contain additional rules, variables, and customizations.
1490 @item :automatic-dependencies
1491 Type: @code{boolean} @*
1492 Default Value: @code{t}
1494 Non-@code{nil} to do implement automatic dependencies in the Makefile.
1497 @item :metasubproject
1498 Type: @code{boolean} @*
1499 Default Value: @code{nil}
1501 Non-@code{nil} if this is a metasubproject.
1502 Usually, a subproject is determined by a parent project. If multiple top level
1503 projects are grouped into a large project not maintained by EDE, then you need
1504 to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
1511 @subsubsection Specialized Methods
1513 @deffn Method ede-proj-makefile-create :AFTER this mfilename
1514 Create a Makefile for all Makefile targets in @var{THIS}.
1515 @var{MFILENAME} is the makefile to generate.
1518 @deffn Method ede-proj-makefile-insert-rules :AFTER this
1519 Insert rules needed by @var{THIS} target.
1522 @deffn Method ede-proj-makefile-tags :AFTER this targets
1523 Insert into the current location rules to make recursive TAGS files.
1524 Argument @var{THIS} is the project to create tags for.
1525 Argument @var{TARGETS} are the targets we should depend on for TAGS.
1528 @deffn Method ede-proj-makefile-insert-variables :AFTER this
1529 Insert variables needed by target @var{THIS}.
1532 @deffn Method project-make-dist :AFTER this
1533 Build a distribution for the project based on @var{THIS} target.
1536 @deffn Method ede-proj-makefile-insert-dist-rules :AFTER this
1537 Insert distribution rules for @var{THIS} in a Makefile, such as CLEAN and DIST.
1540 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
1541 Insert any symbols that the DIST rule should depend on.
1542 Argument @var{THIS} is the project that should insert stuff.
1545 @deffn Method ede-proj-makefile-insert-subproj-rules :AFTER this
1546 Insert a rule for the project @var{THIS} which should be a subproject.
1549 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
1550 Create a Makefile for all Makefile targets in @var{THIS} if needed.
1551 @var{MFILENAME} is the makefile to generate.
1554 @deffn Method ede-proj-configure-test-required-file :AFTER this file
1555 For project @var{THIS}, test that the file @var{FILE} exists, or create it.
1558 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
1559 Setup the build environment for project @var{THIS}.
1560 Handles the Makefile, or a Makefile.am configure.in combination.
1561 Optional argument @var{FORCE} will force items to be regenerated.
1564 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
1565 Return a list of patterns that are considered garbage to @var{THIS}.
1566 These are removed with make clean.
1569 @deffn Method ede-proj-configure-synchronize :AFTER this
1570 Synchronize what we know about project @var{THIS} into configure.in.
1573 @deffn Method ede-proj-makefile-insert-variables-new :AFTER this
1574 Insert variables needed by target @var{THIS}.
1576 NOTE: Not yet in use! This is part of an SRecode conversion of
1577 EDE that is in progress.
1580 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
1581 Return a list of configuration variables from @var{THIS}.
1582 Use @var{CONFIGURATION} as the current configuration to query.
1585 @deffn Method eieio-done-customizing :AFTER proj
1586 Call this when a user finishes customizing this object.
1587 Argument @var{PROJ} is the project to save.
1590 @deffn Method ede-proj-configure-recreate :AFTER this
1591 Delete project @var{THIS}es configure script and start over.
1594 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
1595 Insert user specified rules needed by @var{THIS} target.
1596 This is different from @dfn{ede-proj-makefile-insert-rules} in that this
1597 function won't create the building rules which are auto created with
1601 @deffn Method ede-proj-dist-makefile :AFTER this
1602 Return the name of the Makefile with the DIST target in it for @var{THIS}.
1605 @deffn Method ede-proj-configure-file :AFTER this
1606 The configure.in script used by project @var{THIS}.
1609 @deffn Method ede-commit-project :AFTER proj
1610 Commit any change to @var{PROJ} to its file.
1613 @deffn Method project-dist-files :AFTER this
1614 Return a list of files that constitutes a distribution of @var{THIS} project.
1617 @deffn Method ede-commit-local-variables :AFTER proj
1618 Commit change to local variables in @var{PROJ}.
1621 @node project-am-makefile
1622 @subsection project-am-makefile
1623 @pjindex project-am-makefile
1626 @item Inheritance Tree:
1628 @item eieio-speedbar
1630 @item eieio-speedbar-directory-button
1632 @item @w{@xref{ede-project-placeholder}.}
1634 @item @w{@xref{ede-project}.}
1636 @item project-am-makefile
1645 @subsubsection Specialized Methods
1647 @deffn Method project-am-subtree :AFTER ampf subdir
1648 Return the sub project in @var{AMPF} specified by @var{SUBDIR}.
1651 @deffn Method project-targets-for-file :AFTER proj
1652 Return a list of targets the project @var{PROJ}.
1655 @deffn Method project-new-target :AFTER proj &optional name type
1656 Create a new target named @var{NAME}.
1657 Argument @var{TYPE} is the type of target to insert. This is a string
1658 matching something in @code{project-am-type-alist} or type class symbol.
1659 Despite the fact that this is a method, it depends on the current
1660 buffer being in order to provide a smart default target type.
1663 @node ede-step-project
1664 @subsection ede-step-project
1665 @pjindex ede-step-project
1668 @item Inheritance Tree:
1670 @item eieio-speedbar
1672 @item eieio-speedbar-directory-button
1674 @item @w{@xref{ede-project-placeholder}.}
1676 @item @w{@xref{ede-project}.}
1678 @item ede-step-project
1691 @item :init-variables
1692 Type: @code{list} @*
1693 Default Value: @code{nil}
1695 Variables to set in this Makefile, at top of file.
1698 @item :additional-variables
1699 Type: @code{(or null list)} @*
1700 Default Value: @code{nil}
1702 Arbitrary variables needed from this project.
1703 It is safe to leave this blank.
1706 @item :additional-rules
1707 Type: @code{(or null list)} @*
1708 Default Value: @code{nil}
1710 Arbitrary rules and dependencies needed to make this target.
1711 It is safe to leave this blank.
1714 @item :installation-domain
1715 Type: @code{symbol} @*
1716 Default Value: @code{user}
1718 Installation domain specification.
1719 The variable GNUSTEP_INSTALLATION_DOMAIN is set at this value.
1723 Type: @code{(or null list)} @*
1724 Default Value: @code{(quote ("GNUmakefile.preamble"))}
1726 The auxiliary makefile for additional variables.
1727 Included just before the specific target files.
1731 Type: @code{(or null list)} @*
1732 Default Value: @code{(quote ("GNUmakefile.postamble"))}
1734 The auxiliary makefile for additional rules.
1735 Included just after the specific target files.
1738 @item :metasubproject
1739 Type: @code{boolean} @*
1740 Default Value: @code{nil}
1742 Non-@code{nil} if this is a metasubproject.
1743 Usually, a subproject is determined by a parent project. If multiple top level
1744 projects are grouped into a large project not maintained by EDE, then you need
1745 to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
1752 @subsubsection Specialized Methods
1754 @deffn Method ede-proj-makefile-create :AFTER this mfilename
1755 Create a GNUmakefile for all Makefile targets in @var{THIS}.
1756 @var{MFILENAME} is the makefile to generate.
1759 @deffn Method project-make-dist :AFTER this
1760 Build a distribution for the project based on @var{THIS} target.
1763 @deffn Method ede-proj-makefile-create-maybe :AFTER this mfilename
1764 Create a Makefile for all Makefile targets in @var{THIS} if needed.
1765 @var{MFILENAME} is the makefile to generate.
1768 @deffn Method ede-proj-setup-buildenvironment :AFTER this &optional force
1769 Setup the build environment for project @var{THIS}.
1770 Handles the Makefile, or a Makefile.am configure.in combination.
1771 Optional argument @var{FORCE} will force items to be regenerated.
1774 @deffn Method eieio-done-customizing :AFTER proj
1775 Call this when a user finishes customizing this object.
1776 Argument @var{PROJ} is the project to save.
1779 @deffn Method ede-proj-dist-makefile :AFTER this
1780 Return the name of the Makefile with the DIST target in it for @var{THIS}.
1783 @deffn Method ede-commit-project :AFTER proj
1784 Commit any change to @var{PROJ} to its file.
1787 @deffn Method project-dist-files :AFTER this
1788 Return a list of files that constitutes a distribution of @var{THIS} project.
1791 @deffn Method ede-commit-local-variables :AFTER proj
1792 Commit change to local variables in @var{PROJ}.
1800 * ede-proj-target ::
1801 * ede-proj-target-makefile ::
1802 * semantic-ede-proj-target-grammar ::
1803 * ede-proj-target-makefile-objectcode ::
1804 * ede-proj-target-makefile-archive ::
1805 * ede-proj-target-makefile-program ::
1806 * ede-proj-target-makefile-shared-object ::
1807 * ede-proj-target-elisp ::
1808 * ede-proj-target-elisp-autoloads ::
1809 * ede-proj-target-makefile-miscelaneous ::
1810 * ede-proj-target-makefile-info ::
1811 * ede-proj-target-scheme ::
1812 * project-am-target ::
1813 * project-am-objectcode ::
1814 * project-am-program ::
1815 * project-am-header-noinst ::
1816 * project-am-header-inst ::
1817 * project-am-lisp ::
1818 * project-am-texinfo ::
1824 @subsection ede-target
1828 @item Inheritance Tree:
1830 @item eieio-speedbar
1832 @item eieio-speedbar-directory-button
1837 @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}.}
1851 Name of this target.
1857 The path to the sources of this target.
1858 Relative to the path of the project it belongs to.
1862 Type: @code{list} @*
1863 Default Value: @code{nil}
1865 Source files in this target.
1868 @item :versionsource
1869 Type: @code{list} @*
1870 Default Value: @code{nil}
1872 Source files with a version string in them.
1873 These files are checked for a version string whenever the EDE version
1874 of the master project is changed. When strings are found, the version
1875 previously there is updated.
1881 @subsubsection Specialized Methods
1883 @deffn Method ede-preprocessor-map :AFTER this
1884 Get the pre-processor map for project @var{THIS}.
1887 @deffn Method eieio-speedbar-description :AFTER obj
1888 Provide a speedbar description for @var{OBJ}.
1891 @deffn Method project-compile-target :AFTER obj &optional command
1892 Compile the current target @var{OBJ}.
1893 Argument @var{COMMAND} is the command to use for compiling the target.
1896 @deffn Method project-debug-target :AFTER obj
1897 Run the current project target @var{OBJ} in a debugger.
1900 @deffn Method ede-convert-path :AFTER this path
1901 Convert path in a standard way for a given project.
1902 Default to making it project relative.
1903 Argument @var{THIS} is the project to convert @var{PATH} to.
1906 @deffn Method ede-name :AFTER this
1907 Return the name of @var{THIS} targt.
1910 @deffn Method ede-target-buffer-in-sourcelist :AFTER this buffer source
1911 Return non-@code{nil} if object @var{THIS} is in @var{BUFFER} to a @var{SOURCE} list.
1912 Handles complex path issues.
1915 @deffn Method eieio-speedbar-derive-line-path :AFTER obj &optional depth
1916 Return the path to @var{OBJ}.
1917 Optional @var{DEPTH} is the depth we start at.
1920 @deffn Method ede-buffer-header-file :AFTER this buffer
1921 There are no default header files in EDE.
1922 Do a quick check to see if there is a Header tag in this buffer.
1925 @deffn Method project-remove-file :AFTER ot fnnd
1926 Remove the current buffer from project target @var{OT}.
1927 Argument @var{FNND} is an argument.
1930 @deffn Method ede-buffer-documentation-files :AFTER this buffer
1931 Check for some documentation files for @var{THIS}.
1932 Also do a quick check to see if there is a Documentation tag in this @var{BUFFER}.
1935 @deffn Method ede-map-target-buffers :AFTER this proc
1936 For @var{THIS}, execute @var{PROC} on all buffers belonging to @var{THIS}.
1939 @deffn Method eieio-speedbar-child-description :AFTER obj
1940 Provide a speedbar description for a plain-child of @var{OBJ}.
1941 A plain child is a child element which is not an EIEIO object.
1944 @deffn Method ede-object-keybindings :BEFORE this
1945 Retrieves the slot @code{keybindings} from an object of class @code{ede-target}
1948 @deffn Method ede-description :AFTER this
1949 Return a description suitable for the minibuffer about @var{THIS}.
1952 @deffn Method eieio-speedbar-object-children :AFTER this
1953 Return the list of speedbar display children for @var{THIS}.
1956 @deffn Method ede-system-include-path :AFTER this
1957 Get the system include path used by project @var{THIS}.
1960 @deffn Method ede-object-sourcecode :BEFORE this
1961 Retrieves the slot @code{sourcetype} from an object of class @code{ede-target}
1964 @deffn Method ede-expand-filename :AFTER this filename &optional force
1965 Return a fully qualified file name based on target @var{THIS}.
1966 @var{FILENAME} should be a filename which occurs in a directory in which @var{THIS} works.
1967 Optional argument @var{FORCE} forces the default filename to be provided even if it
1971 @deffn Method ede-menu-items-build :AFTER obj &optional current
1972 Return a list of menu items for building target @var{OBJ}.
1973 If optional argument @var{CURRENT} is non-@code{nil}, return sub-menu code.
1976 @deffn Method ede-want-file-p :AFTER this file
1977 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
1980 @deffn Method ede-update-version-in-source :AFTER this version
1981 In sources for @var{THIS}, change version numbers to @var{VERSION}.
1984 @deffn Method project-delete-target :AFTER ot
1985 Delete the current target @var{OT} from it's parent project.
1988 @deffn Method ede-target-sourcecode :AFTER this
1989 Return the sourcecode objects which @var{THIS} permits.
1992 @deffn Method eieio-speedbar-child-make-tag-lines :AFTER this depth
1993 Create a speedbar tag line for a child of @var{THIS}.
1994 It has depth @var{DEPTH}.
1997 @deffn Method eieio-speedbar-object-buttonname :AFTER object
1998 Return a string to use as a speedbar button for @var{OBJECT}.
2001 @deffn Method eieio-done-customizing :AFTER target
2002 Call this when a user finishes customizing @var{TARGET}.
2005 @deffn Method project-edit-file-target :AFTER ot
2006 Edit the target @var{OT} associated w/ this file.
2009 @deffn Method ede-documentation :AFTER this
2010 Return a list of files that provides documentation.
2011 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2012 files in the project.
2015 @deffn Method ede-want-file-source-p :AFTER this file
2016 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2019 @deffn Method ede-want-file-auxiliary-p :AFTER this file
2020 Return non-@code{nil} if @var{THIS} target wants @var{FILE}.
2023 @deffn Method project-add-file :AFTER ot file
2024 Add the current buffer into project project target @var{OT}.
2025 Argument @var{FILE} is the file to add.
2028 @deffn Method ede-target-name :AFTER this
2029 Return the name of @var{THIS} target, suitable for make or debug style commands.
2032 @deffn Method ede-object-menu :BEFORE this
2033 Retrieves the slot @code{menu} from an object of class @code{ede-target}
2036 @node ede-proj-target
2037 @subsection ede-proj-target
2038 @tgindex ede-proj-target
2041 @item Inheritance Tree:
2043 @item eieio-speedbar
2045 @item eieio-speedbar-directory-button
2047 @item @w{@xref{ede-target}.}
2049 @item ede-proj-target
2052 @w{@xref{ede-proj-target-makefile},} @w{ede-proj-target-aux,} @w{@xref{ede-proj-target-scheme}.}
2067 Name of this target.
2073 The path to the sources of this target.
2074 Relative to the path of the project it belongs to.
2078 Type: @code{list} @*
2079 Default Value: @code{nil}
2081 Auxiliary source files included in this target.
2082 Each of these is considered equivalent to a source file, but it is not
2083 distributed, and each should have a corresponding rule to build it.
2087 Type: @code{(or null symbol)} @*
2088 Default Value: @code{nil}
2090 The compiler to be used to compile this object.
2091 This should be a symbol, which contains the object defining the compiler.
2092 This enables save/restore to do so by name, permitting the sharing
2093 of these compiler resources, and global customization thereof.
2097 Type: @code{(or null symbol)} @*
2098 Default Value: @code{nil}
2100 The linker to be used to link compiled sources for this object.
2101 This should be a symbol, which contains the object defining the linker.
2102 This enables save/restore to do so by name, permitting the sharing
2103 of these linker resources, and global customization thereof.
2109 @subsubsection Specialized Methods
2111 @deffn Method project-compile-target :AFTER obj &optional command
2112 Compile the current target @var{OBJ}.
2113 Argument @var{COMMAND} is the command to use for compiling the target.
2116 @deffn Method project-debug-target :AFTER obj
2117 Run the current project target @var{OBJ} in a debugger.
2120 @deffn Method ede-proj-configure-add-missing :AFTER this
2121 Query if any files needed by @var{THIS} provided by automake are missing.
2122 Results in --add-missing being passed to automake.
2125 @deffn Method ede-proj-flush-autoconf :AFTER this
2126 Flush the configure file (current buffer) to accomodate @var{THIS}.
2127 By flushing, remove any cruft that may be in the file. Subsequent
2128 calls to @dfn{ede-proj-tweak-autoconf} can restore items removed by flush.
2131 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2132 Insert rules needed by @var{THIS} target.
2135 @deffn Method project-remove-file :AFTER target file
2136 For @var{TARGET}, remove @var{FILE}.
2137 @var{FILE} must be massaged by @dfn{ede-convert-path}.
2140 @deffn Method ede-proj-configure-create-missing :AFTER this
2141 Add any missing files for @var{THIS} by creating them.
2144 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2145 Return the variable name for @var{THIS}'s sources.
2148 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2149 Insert variables needed by target @var{THIS}.
2150 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2154 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2155 Insert variables needed by target @var{THIS} in Makefile.am after SOURCES.
2158 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2159 Insert any symbols that the DIST rule should depend on.
2160 Argument @var{THIS} is the target that should insert stuff.
2163 @deffn Method ede-proj-linkers :AFTER obj
2164 List of linkers being used by @var{OBJ}.
2165 If the @code{linker} slot is empty, concoct one on a first match found
2166 basis for any given type from the @code{availablelinkers} slot.
2167 Otherwise, return the @code{linker} slot.
2168 Converts all symbols into the objects to be used.
2171 @deffn Method ede-proj-makefile-garbage-patterns :AFTER this
2172 Return a list of patterns that are considered garbage to @var{THIS}.
2173 These are removed with make clean.
2176 @deffn Method ede-proj-tweak-autoconf :AFTER this
2177 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2180 @deffn Method ede-proj-compilers :AFTER obj
2181 List of compilers being used by @var{OBJ}.
2182 If the @code{compiler} slot is empty, concoct one on a first match found
2183 basis for any given type from the @code{availablecompilers} slot.
2184 Otherwise, return the @code{compiler} slot.
2185 Converts all symbols into the objects to be used.
2188 @deffn Method project-delete-target :AFTER this
2189 Delete the current target @var{THIS} from it's parent project.
2192 @deffn Method ede-proj-makefile-target-name :AFTER this
2193 Return the name of the main target for @var{THIS} target.
2196 @deffn Method eieio-done-customizing :AFTER target
2197 Call this when a user finishes customizing this object.
2198 Argument @var{TARGET} is the project we are completing customization on.
2201 @deffn Method ede-proj-makefile-insert-user-rules :AFTER this
2202 Insert user specified rules needed by @var{THIS} target.
2205 @deffn Method project-add-file :AFTER this file
2206 Add to target @var{THIS} the current buffer represented as @var{FILE}.
2209 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2210 Insert variables needed by target @var{THIS} in Makefile.am before SOURCES.
2213 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2214 Insert any symbols that the DIST rule should depend on.
2215 Argument @var{THIS} is the target that should insert stuff.
2218 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2219 Return a list of source files to convert to dependencies.
2220 Argument @var{THIS} is the target to get sources from.
2223 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2224 Insert the source variables needed by @var{THIS}.
2225 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2230 @node ede-proj-target-makefile
2231 @subsection ede-proj-target-makefile
2232 @tgindex ede-proj-target-makefile
2235 @item Inheritance Tree:
2237 @item eieio-speedbar
2239 @item eieio-speedbar-directory-button
2241 @item @w{@xref{ede-target}.}
2243 @item @w{@xref{ede-proj-target}.}
2245 @item ede-proj-target-makefile
2248 @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}.}
2262 Type: @code{string} @*
2263 Default Value: @code{"Makefile"}
2265 File name of generated Makefile.
2269 Type: @code{boolean} @*
2270 Default Value: @code{t}
2272 Non @code{nil} means the rule created is part of the all target.
2273 Setting this to @code{nil} creates the rule to build this item, but does not
2274 include it in the ALL`all:' rule.
2277 @item :configuration-variables
2278 Type: @code{list} @*
2279 Default Value: @code{nil}
2281 Makefile variables appended to use in different configurations.
2282 These variables are used in the makefile when a configuration becomes active.
2283 Target variables are always renamed such as foo_CFLAGS, then included into
2284 commands where the variable would usually appear.
2288 Type: @code{list} @*
2289 Default Value: @code{nil}
2291 Arbitrary rules and dependencies needed to make this target.
2292 It is safe to leave this blank.
2298 @subsubsection Specialized Methods
2300 @deffn Method ede-proj-makefile-dependencies :AFTER this
2301 Return a string representing the dependencies for @var{THIS}.
2302 Some compilers only use the first element in the dependencies, others
2303 have a list of intermediates (object files), and others don't care.
2304 This allows customization of how these elements appear.
2307 @deffn Method project-compile-target :AFTER obj &optional command
2308 Compile the current target program @var{OBJ}.
2309 Optional argument @var{COMMAND} is the s the alternate command to use.
2312 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2313 Insert rules needed by @var{THIS} target.
2316 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2317 Insert variables needed by target @var{THIS}.
2318 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2322 @deffn Method ede-proj-makefile-insert-commands :AFTER this
2323 Insert the commands needed by target @var{THIS}.
2324 For targets, insert the commands needed by the chosen compiler.
2327 @deffn Method ede-proj-makefile-configuration-variables :AFTER this configuration
2328 Return a list of configuration variables from @var{THIS}.
2329 Use @var{CONFIGURATION} as the current configuration to query.
2332 @node semantic-ede-proj-target-grammar
2333 @subsection semantic-ede-proj-target-grammar
2334 @tgindex semantic-ede-proj-target-grammar
2337 @item Inheritance Tree:
2339 @item eieio-speedbar
2341 @item eieio-speedbar-directory-button
2343 @item @w{@xref{ede-target}.}
2345 @item @w{@xref{ede-proj-target}.}
2347 @item @w{@xref{ede-proj-target-makefile}.}
2349 @item semantic-ede-proj-target-grammar
2359 @subsubsection Specialized Methods
2361 @deffn Method project-compile-target :AFTER obj
2362 Compile all sources in a Lisp target @var{OBJ}.
2365 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2366 Insert rules needed by @var{THIS} target.
2369 @deffn Method ede-buffer-mine :AFTER this buffer
2370 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2371 Lays claim to all -by.el, and -wy.el files.
2374 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2375 Return the variable name for @var{THIS}'s sources.
2378 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2379 Insert dist dependencies, or intermediate targets.
2380 This makes sure that all grammar lisp files are created before the dist
2381 runs, so they are always up to date.
2382 Argument @var{THIS} is the target that should insert stuff.
2386 @node ede-proj-target-makefile-objectcode
2387 @subsection ede-proj-target-makefile-objectcode
2388 @tgindex ede-proj-target-makefile-objectcode
2391 @item Inheritance Tree:
2393 @item eieio-speedbar
2395 @item eieio-speedbar-directory-button
2397 @item @w{@xref{ede-target}.}
2399 @item @w{@xref{ede-proj-target}.}
2401 @item @w{@xref{ede-proj-target-makefile}.}
2403 @item ede-proj-target-makefile-objectcode
2406 @w{@xref{ede-proj-target-makefile-archive},} @w{@xref{ede-proj-target-makefile-program}.}
2420 @item :configuration-variables
2421 Type: @code{list} @*
2422 Default Value: @code{("debug" ("CFLAGS" . "-g") ("LDFLAGS" . "-g"))}
2424 @xref{ede-proj-target-makefile}.
2427 @subsubsection Specialized Methods
2429 @deffn Method ede-buffer-header-file :AFTER this buffer
2430 There are no default header files.
2433 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2434 Return the variable name for @var{THIS}'s sources.
2437 @deffn Method ede-proj-makefile-insert-variables :AFTER this &optional moresource
2438 Insert variables needed by target @var{THIS}.
2439 Optional argument @var{MORESOURCE} is not used.
2442 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2443 Return a list of source files to convert to dependencies.
2444 Argument @var{THIS} is the target to get sources from.
2448 @node ede-proj-target-makefile-archive
2449 @subsection ede-proj-target-makefile-archive
2450 @tgindex ede-proj-target-makefile-archive
2453 @item Inheritance Tree:
2455 @item eieio-speedbar
2457 @item eieio-speedbar-directory-button
2459 @item @w{@xref{ede-target}.}
2461 @item @w{@xref{ede-proj-target}.}
2463 @item @w{@xref{ede-proj-target-makefile}.}
2465 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2467 @item ede-proj-target-makefile-archive
2478 @subsubsection Specialized Methods
2480 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2481 Create the make rule needed to create an archive for @var{THIS}.
2484 @deffn Method ede-proj-makefile-insert-source-variables :PRIMARY this
2485 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2486 We aren't acutally inserting SOURCE details, but this is used by the
2487 Makefile.am generator, so use it to add this important bin program.
2491 @node ede-proj-target-makefile-program
2492 @subsection ede-proj-target-makefile-program
2493 @tgindex ede-proj-target-makefile-program
2496 @item Inheritance Tree:
2498 @item eieio-speedbar
2500 @item eieio-speedbar-directory-button
2502 @item @w{@xref{ede-target}.}
2504 @item @w{@xref{ede-proj-target}.}
2506 @item @w{@xref{ede-proj-target-makefile}.}
2508 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2510 @item ede-proj-target-makefile-program
2513 @w{@xref{ede-proj-target-makefile-shared-object}.}
2529 Type: @code{list} @*
2530 Default Value: @code{nil}
2532 Libraries, such as "m" or "Xt" which this program depends on.
2533 The linker flag "-l" is automatically prepended. Do not include a "lib"
2534 prefix, or a ".so" suffix.
2536 Note: Currently only used for Automake projects.
2540 Type: @code{list} @*
2541 Default Value: @code{nil}
2543 Additional flags to add when linking this target.
2544 Use ldlibs to add addition libraries. Use this to specify specific
2545 options to the linker.
2547 Note: Not currently used. This bug needs to be fixed.
2553 @subsubsection Specialized Methods
2555 @deffn Method project-debug-target :AFTER obj
2556 Debug a program target @var{OBJ}.
2559 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2560 Insert rules needed by @var{THIS} target.
2563 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2564 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2567 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2568 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2572 @node ede-proj-target-makefile-shared-object
2573 @subsection ede-proj-target-makefile-shared-object
2574 @tgindex ede-proj-target-makefile-shared-object
2577 @item Inheritance Tree:
2579 @item eieio-speedbar
2581 @item eieio-speedbar-directory-button
2583 @item @w{@xref{ede-target}.}
2585 @item @w{@xref{ede-proj-target}.}
2587 @item @w{@xref{ede-proj-target-makefile}.}
2589 @item @w{@xref{ede-proj-target-makefile-objectcode}.}
2591 @item @w{@xref{ede-proj-target-makefile-program}.}
2593 @item ede-proj-target-makefile-shared-object
2605 @subsubsection Specialized Methods
2607 @deffn Method ede-proj-configure-add-missing :AFTER this
2608 Query if any files needed by @var{THIS} provided by automake are missing.
2609 Results in --add-missing being passed to automake.
2612 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2613 Return the variable name for @var{THIS}'s sources.
2616 @deffn Method ede-proj-makefile-insert-automake-post-variables :AFTER this
2617 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2618 We need to override -program which has an LDADD element.
2621 @deffn Method ede-proj-makefile-target-name :AFTER this
2622 Return the name of the main target for @var{THIS} target.
2625 @deffn Method ede-proj-makefile-insert-automake-pre-variables :AFTER this
2626 Insert bin_PROGRAMS variables needed by target @var{THIS}.
2627 We aren't acutally inserting SOURCE details, but this is used by the
2628 Makefile.am generator, so use it to add this important bin program.
2632 @node ede-proj-target-elisp
2633 @subsection ede-proj-target-elisp
2634 @tgindex ede-proj-target-elisp
2637 @item Inheritance Tree:
2639 @item eieio-speedbar
2641 @item eieio-speedbar-directory-button
2643 @item @w{@xref{ede-target}.}
2645 @item @w{@xref{ede-proj-target}.}
2647 @item @w{@xref{ede-proj-target-makefile}.}
2649 @item ede-proj-target-elisp
2652 @w{@xref{ede-proj-target-elisp-autoloads}.}
2667 Type: @code{list} @*
2668 Default Value: @code{nil}
2670 Additional packages needed.
2671 There should only be one toplevel package per auxiliary tool needed.
2672 These packages location is found, and added to the compile time
2679 @subsubsection Specialized Methods
2681 @deffn Method project-compile-target :AFTER obj
2682 Compile all sources in a Lisp target @var{OBJ}.
2683 Bonus: Return a cons cell: (COMPILED . UPTODATE).
2686 @deffn Method ede-proj-flush-autoconf :AFTER this
2687 Flush the configure file (current buffer) to accomodate @var{THIS}.
2690 @deffn Method ede-buffer-mine :AFTER this buffer
2691 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2692 Lays claim to all .elc files that match .el files in this target.
2695 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2696 Return the variable name for @var{THIS}'s sources.
2699 @deffn Method ede-proj-tweak-autoconf :AFTER this
2700 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2703 @deffn Method ede-update-version-in-source :AFTER this version
2704 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
2705 There are standards in Elisp files specifying how the version string
2706 is found, such as a @code{-version} variable, or the standard header.
2709 @node ede-proj-target-elisp-autoloads
2710 @subsection ede-proj-target-elisp-autoloads
2711 @tgindex ede-proj-target-elisp-autoloads
2714 @item Inheritance Tree:
2716 @item eieio-speedbar
2718 @item eieio-speedbar-directory-button
2720 @item @w{@xref{ede-target}.}
2722 @item @w{@xref{ede-proj-target}.}
2724 @item @w{@xref{ede-proj-target-makefile}.}
2726 @item @w{@xref{ede-proj-target-elisp}.}
2728 @item ede-proj-target-elisp-autoloads
2744 Type: @code{list} @*
2745 Default Value: @code{("cedet-autogen")}
2747 @xref{ede-proj-target-elisp}.
2748 @item :autoload-file
2749 Type: @code{string} @*
2750 Default Value: @code{"loaddefs.el"}
2752 The file that autoload definitions are placed in.
2753 There should be one load defs file for a given package. The load defs are created
2754 for all Emacs Lisp sources that exist in the directory of the created target.
2757 @item :autoload-dirs
2758 Type: @code{list} @*
2759 Default Value: @code{nil}
2761 The directories to scan for autoload definitions.
2762 If @code{nil} defaults to the current directory.
2768 @subsubsection Specialized Methods
2770 @deffn Method ede-proj-makefile-dependencies :AFTER this
2771 Return a string representing the dependencies for @var{THIS}.
2772 Always return an empty string for an autoloads generator.
2775 @deffn Method project-compile-target :AFTER obj
2776 Create or update the autoload target.
2779 @deffn Method ede-proj-flush-autoconf :AFTER this
2780 Flush the configure file (current buffer) to accomodate @var{THIS}.
2783 @deffn Method ede-buffer-mine :AFTER this buffer
2784 Return @code{t} if object @var{THIS} lays claim to the file in @var{BUFFER}.
2785 Lays claim to all .elc files that match .el files in this target.
2788 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2789 Return the variable name for @var{THIS}'s sources.
2792 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2793 Insert any symbols that the DIST rule should depend on.
2794 Emacs Lisp autoload files ship the generated .el files.
2795 Argument @var{THIS} is the target which needs to insert an info file.
2798 @deffn Method ede-proj-tweak-autoconf :AFTER this
2799 Tweak the configure file (current buffer) to accomodate @var{THIS}.
2802 @deffn Method ede-update-version-in-source :AFTER this version
2803 In a Lisp file, updated a version string for @var{THIS} to @var{VERSION}.
2804 There are standards in Elisp files specifying how the version string
2805 is found, such as a @code{-version} variable, or the standard header.
2808 @deffn Method ede-proj-compilers :AFTER obj
2809 List of compilers being used by @var{OBJ}.
2810 If the @code{compiler} slot is empty, get the car of the compilers list.
2813 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2814 Insert any symbols that the DIST rule should distribute.
2815 Emacs Lisp autoload files ship the generated .el files.
2816 Argument @var{THIS} is the target which needs to insert an info file.
2819 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2820 Insert the source variables needed by @var{THIS}.
2821 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2826 @node ede-proj-target-makefile-miscelaneous
2827 @subsection ede-proj-target-makefile-miscelaneous
2828 @tgindex ede-proj-target-makefile-miscelaneous
2831 @item Inheritance Tree:
2833 @item eieio-speedbar
2835 @item eieio-speedbar-directory-button
2837 @item @w{@xref{ede-target}.}
2839 @item @w{@xref{ede-proj-target}.}
2841 @item @w{@xref{ede-proj-target-makefile}.}
2843 @item ede-proj-target-makefile-miscelaneous
2858 Type: @code{string} @*
2859 Default Value: @code{""}
2861 Miscellaneous sources which have a specialized makefile.
2862 The sub-makefile is used to build this target.
2868 @subsubsection Specialized Methods
2870 @deffn Method ede-proj-makefile-insert-rules :AFTER this
2871 Create the make rule needed to create an archive for @var{THIS}.
2874 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2875 Return the variable name for @var{THIS}'s sources.
2878 @deffn Method ede-proj-makefile-dependency-files :AFTER this
2879 Return a list of files which @var{THIS} target depends on.
2883 @node ede-proj-target-makefile-info
2884 @subsection ede-proj-target-makefile-info
2885 @tgindex ede-proj-target-makefile-info
2888 @item Inheritance Tree:
2890 @item eieio-speedbar
2892 @item eieio-speedbar-directory-button
2894 @item @w{@xref{ede-target}.}
2896 @item @w{@xref{ede-proj-target}.}
2898 @item @w{@xref{ede-proj-target-makefile}.}
2900 @item ede-proj-target-makefile-info
2915 Type: @code{string} @*
2916 Default Value: @code{""}
2918 The main menu resides in this file.
2919 All other sources should be included independently.
2925 @subsubsection Specialized Methods
2927 @deffn Method ede-proj-configure-add-missing :AFTER this
2928 Query if any files needed by @var{THIS} provided by automake are missing.
2929 Results in --add-missing being passed to automake.
2932 @deffn Method object-write :AFTER this
2933 Before committing any change to @var{THIS}, make sure the mainmenu is first.
2936 @deffn Method ede-proj-makefile-sourcevar :AFTER this
2937 Return the variable name for @var{THIS}'s sources.
2940 @deffn Method ede-proj-makefile-insert-dist-dependencies :AFTER this
2941 Insert any symbols that the DIST rule should depend on.
2942 Texinfo files want to insert generated `.info' files.
2943 Argument @var{THIS} is the target which needs to insert an info file.
2946 @deffn Method ede-proj-makefile-target-name :AFTER this
2947 Return the name of the main target for @var{THIS} target.
2950 @deffn Method ede-documentation :AFTER this
2951 Return a list of files that provides documentation.
2952 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
2953 files in the project.
2956 @deffn Method ede-proj-makefile-insert-dist-filepatterns :AFTER this
2957 Insert any symbols that the DIST rule should depend on.
2958 Texinfo files want to insert generated `.info' files.
2959 Argument @var{THIS} is the target which needs to insert an info file.
2962 @deffn Method ede-proj-makefile-insert-source-variables :AFTER this &optional moresource
2963 Insert the source variables needed by @var{THIS} info target.
2964 Optional argument @var{MORESOURCE} is a list of additional sources to add to the
2966 Does the usual for Makefile mode, but splits source into two variables
2967 when working in Automake mode.
2970 @node ede-proj-target-scheme
2971 @subsection ede-proj-target-scheme
2972 @tgindex ede-proj-target-scheme
2975 @item Inheritance Tree:
2977 @item eieio-speedbar
2979 @item eieio-speedbar-directory-button
2981 @item @w{@xref{ede-target}.}
2983 @item @w{@xref{ede-proj-target}.}
2985 @item ede-proj-target-scheme
2999 Type: @code{string} @*
3000 Default Value: @code{"guile"}
3002 The preferred interpreter for this code.
3008 @subsubsection Specialized Methods
3010 @deffn Method ede-proj-tweak-autoconf :AFTER this
3011 Tweak the configure file (current buffer) to accomodate @var{THIS}.
3015 @node project-am-target
3016 @subsection project-am-target
3017 @tgindex project-am-target
3020 @item Inheritance Tree:
3022 @item eieio-speedbar
3024 @item eieio-speedbar-directory-button
3026 @item @w{@xref{ede-target}.}
3028 @item project-am-target
3031 @w{@xref{project-am-objectcode},} @w{project-am-header,} @w{@xref{project-am-lisp},} @w{@xref{project-am-texinfo},} @w{@xref{project-am-man}.}
3039 @subsubsection Specialized Methods
3041 @deffn Method project-compile-target-command :AFTER this
3042 Default target to use when compiling a given target.
3045 @deffn Method project-make-dist :AFTER this
3046 Run the current project in the debugger.
3049 @deffn Method project-edit-file-target :AFTER obj
3050 Edit the target associated w/ this file.
3053 @node project-am-objectcode
3054 @subsection project-am-objectcode
3055 @tgindex project-am-objectcode
3058 @item Inheritance Tree:
3060 @item eieio-speedbar
3062 @item eieio-speedbar-directory-button
3064 @item @w{@xref{ede-target}.}
3066 @item @w{@xref{project-am-target}.}
3068 @item project-am-objectcode
3071 @w{@xref{project-am-program},} @w{project-am-lib.}
3080 @subsubsection Specialized Methods
3082 @deffn Method project-am-macro :AFTER this
3083 Return the default macro to 'edit' for this object type.
3086 @deffn Method project-debug-target :AFTER obj
3087 Run the current project target in a debugger.
3090 @deffn Method project-compile-target-command :AFTER this
3091 Default target to use when compiling an object code target.
3094 @deffn Method ede-buffer-header-file :AFTER this buffer
3095 There are no default header files.
3098 @node project-am-program
3099 @subsection project-am-program
3100 @tgindex project-am-program
3103 @item Inheritance Tree:
3105 @item eieio-speedbar
3107 @item eieio-speedbar-directory-button
3109 @item @w{@xref{ede-target}.}
3111 @item @w{@xref{project-am-target}.}
3113 @item @w{@xref{project-am-objectcode}.}
3115 @item project-am-program
3130 Default Value: @code{nil}
3137 @node project-am-header-noinst
3138 @subsection project-am-header-noinst
3139 @tgindex project-am-header-noinst
3142 @item Inheritance Tree:
3144 @item eieio-speedbar
3146 @item eieio-speedbar-directory-button
3148 @item @w{@xref{ede-target}.}
3150 @item @w{@xref{project-am-target}.}
3152 @item @w{project-am-header.}
3154 @item project-am-header-noinst
3164 @subsubsection Specialized Methods
3166 @deffn Method project-am-macro :AFTER this
3167 Return the default macro to 'edit' for this object.
3170 @node project-am-header-inst
3171 @subsection project-am-header-inst
3172 @tgindex project-am-header-inst
3175 @item Inheritance Tree:
3177 @item eieio-speedbar
3179 @item eieio-speedbar-directory-button
3181 @item @w{@xref{ede-target}.}
3183 @item @w{@xref{project-am-target}.}
3185 @item @w{project-am-header.}
3187 @item project-am-header-inst
3197 @subsubsection Specialized Methods
3199 @deffn Method project-am-macro :AFTER this
3200 Return the default macro to 'edit' for this object.
3203 @node project-am-lisp
3204 @subsection project-am-lisp
3205 @tgindex project-am-lisp
3208 @item Inheritance Tree:
3210 @item eieio-speedbar
3212 @item eieio-speedbar-directory-button
3214 @item @w{@xref{ede-target}.}
3216 @item @w{@xref{project-am-target}.}
3218 @item project-am-lisp
3227 @subsubsection Specialized Methods
3229 @deffn Method project-am-macro :AFTER this
3230 Return the default macro to 'edit' for this object.
3233 @node project-am-texinfo
3234 @subsection project-am-texinfo
3235 @tgindex project-am-texinfo
3238 @item Inheritance Tree:
3240 @item eieio-speedbar
3242 @item eieio-speedbar-directory-button
3244 @item @w{@xref{ede-target}.}
3246 @item @w{@xref{project-am-target}.}
3248 @item project-am-texinfo
3262 Default Value: @code{nil}
3264 Additional texinfo included in this one.
3269 @subsubsection Specialized Methods
3271 @deffn Method project-am-macro :AFTER this
3272 Return the default macro to 'edit' for this object type.
3275 @deffn Method project-compile-target-command :AFTER this
3276 Default target t- use when compling a texinfo file.
3279 @deffn Method ede-documentation :AFTER this
3280 Return a list of files that provides documentation.
3281 Documentation is not for object @var{THIS}, but is provided by @var{THIS} for other
3282 files in the project.
3285 @node project-am-man
3286 @comment node-name, next, previous, up
3287 @subsection project-am-man
3288 @tgindex project-am-man
3291 @item Inheritance Tree:
3293 @item eieio-speedbar
3295 @item eieio-speedbar-directory-button
3297 @item @w{@xref{ede-target}.}
3299 @item @w{@xref{project-am-target}.}
3301 @item project-am-man
3310 @subsubsection Specialized Methods
3312 @deffn Method project-am-macro :AFTER this
3313 Return the default macro to 'edit' for this object type.
3319 The source code type is an object designed to associated files with
3327 @node ede-sourcecode
3328 @subsection ede-sourcecode
3329 @scindex ede-sourcecode
3332 @item Inheritance Tree:
3334 @item eieio-instance-inheritor
3336 @item ede-sourcecode
3346 @item :parent-instance
3347 Type: @code{eieio-instance-inheritor-child}
3349 The parent of this instance.
3350 If a slot of this class is reference, and is unbound, then the parent
3351 is checked for a value.
3357 The name of this type of source code.
3358 Such as "C" or "Emacs Lisp"
3361 @item :sourcepattern
3362 Type: @code{string} @*
3363 Default Value: @code{".*"}
3365 Emacs regex matching sourcecode this target accepts.
3368 @item :auxsourcepattern
3369 Type: @code{(or null string)} @*
3370 Default Value: @code{nil}
3372 Emacs regex matching auxiliary source code this target accepts.
3373 Aux source are source code files needed for compilation, which are not comiled
3377 @item :enable-subdirectories
3378 Type: @code{boolean} @*
3379 Default Value: @code{nil}
3381 Non @code{nil} if this sourcecode type uses subdirectores.
3382 If sourcecode always lives near the target creating it, this should be nil.
3383 If sourcecode can, or typically lives in a subdirectory of the owning
3384 target, set this to t.
3387 @item :garbagepattern
3388 Type: @code{list} @*
3389 Default Value: @code{nil}
3391 Shell file regex matching files considered as garbage.
3392 This is a list of items added to an @code{rm} command when executing a @code{clean}
3399 @subsubsection Specialized Methods
3401 @deffn Method ede-want-any-files-p :AFTER this filenames
3402 Return non-@code{nil} if @var{THIS} will accept any files in @var{FILENAMES}.
3405 @deffn Method ede-want-any-source-files-p :AFTER this filenames
3406 Return non-@code{nil} if @var{THIS} will accept any source files in @var{FILENAMES}.
3409 @deffn Method ede-want-any-auxiliary-files-p :AFTER this filenames
3410 Return non-@code{nil} if @var{THIS} will accept any aux files in @var{FILENAMES}.
3413 @deffn Method ede-buffer-header-file :AFTER this filename
3414 Return a list of file names of header files for @var{THIS} with @var{FILENAME}.
3415 Used to guess header files, but uses the auxsource regular expression.
3418 @deffn Method ede-want-file-p :AFTER this filename
3419 Return non-@code{nil} if sourcecode definition @var{THIS} will take @var{FILENAME}.
3422 @deffn Method ede-want-file-source-p :AFTER this filename
3423 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3426 @deffn Method ede-want-file-auxiliary-p :AFTER this filename
3427 Return non-@code{nil} if @var{THIS} will take @var{FILENAME} as an auxiliary .
3433 The compiler object is designed to associate source code with
3434 compilers. The target then references the compilers it can use.
3435 When the makefile is created, this object type knows how to create
3439 * ede-compilation-program ::
3441 * ede-object-compiler ::
3446 @node ede-compilation-program
3447 @subsection ede-compilation-program
3448 @cmindex ede-compilation-program
3451 @item Inheritance Tree:
3453 @item eieio-instance-inheritor
3455 @item ede-compilation-program
3458 @w{@xref{ede-compiler},} @w{@xref{ede-linker}.}
3468 @item :parent-instance
3469 Type: @code{eieio-instance-inheritor-child}
3471 The parent of this instance.
3472 If a slot of this class is reference, and is unbound, then the parent
3473 is checked for a value.
3479 Name of this type of compiler.
3485 Variables needed in the Makefile for this compiler.
3486 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3487 is a string, and VALUE is either a string, or a list of strings.
3488 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3494 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3495 This is used to match target objects with the compilers and linkers
3496 they can use, and which files this object is interested in.
3500 Type: @code{list} @*
3501 Default Value: @code{nil}
3503 Auxiliary rules needed for this compiler to run.
3504 For example, yacc/lex files need additional chain rules, or inferences.
3510 The commands used to execute this compiler.
3511 The object which uses this compiler will place these commands after
3512 it's rule definition.
3516 Type: @code{list} @*
3517 Default Value: @code{nil}
3519 Autoconf function to call if this type of compiler is used.
3520 When a project is in Automake mode, this defines the autoconf function to
3521 call to initialize automake to use this compiler.
3522 For example, there may be multiple C compilers, but they all probably
3523 use the same autoconf form.
3526 @item :objectextention
3529 A string which is the extention used for object files.
3530 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3536 @subsubsection Specialized Methods
3538 @deffn Method ede-proj-flush-autoconf :AFTER this
3539 Flush the configure file (current buffer) to accomodate @var{THIS}.
3542 @deffn Method ede-proj-makefile-insert-rules :AFTER this
3543 Insert rules needed for @var{THIS} compiler object.
3546 @deffn Method ede-proj-makefile-insert-variables :AFTER this
3547 Insert variables needed by the compiler @var{THIS}.
3550 @deffn Method ede-proj-makefile-insert-commands :AFTER this
3551 Insert the commands needed to use compiler @var{THIS}.
3552 The object creating makefile rules must call this method for the
3553 compiler it decides to use after inserting in the rule.
3556 @deffn Method ede-object-sourcecode :AFTER this
3557 Retrieves the slot @code{sourcetype} from an object of class @code{ede-compilation-program}
3560 @deffn Method ede-proj-tweak-autoconf :AFTER this
3561 Tweak the configure file (current buffer) to accomodate @var{THIS}.
3566 @subsection ede-compiler
3567 @cmindex ede-compiler
3570 @item Inheritance Tree:
3572 @item eieio-instance-inheritor
3574 @item @w{@xref{ede-compilation-program}.}
3579 @w{@xref{ede-object-compiler},} @w{semantic-ede-grammar-compiler-class.}
3589 Create a new object with name NAME of class type ede-compiler
3595 @item :parent-instance
3596 Type: @code{eieio-instance-inheritor-child}
3598 The parent of this instance.
3599 If a slot of this class is reference, and is unbound, then the parent
3600 is checked for a value.
3606 Name of this type of compiler.
3612 Variables needed in the Makefile for this compiler.
3613 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3614 is a string, and VALUE is either a string, or a list of strings.
3615 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3621 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3622 This is used to match target objects with the compilers and linkers
3623 they can use, and which files this object is interested in.
3629 The commands used to execute this compiler.
3630 The object which uses this compiler will place these commands after
3631 it's rule definition.
3634 @item :objectextention
3637 A string which is the extention used for object files.
3638 For example, C code uses .o on unix, and Emacs Lisp uses .elc.
3642 Type: @code{boolean} @*
3643 Default Value: @code{nil}
3645 Non-@code{nil} if this compiler can make dependencies.
3649 Type: @code{boolean} @*
3650 Default Value: @code{nil}
3652 Non-@code{nil} if this compiler creates code that can be linked.
3653 This requires that the containing target also define a list of available
3654 linkers that can be used.
3660 @subsubsection Specialized Methods
3662 @deffn Method ede-proj-makefile-insert-object-variables :AFTER this targetname sourcefiles
3663 Insert an OBJ variable to specify object code to be generated for @var{THIS}.
3664 The name of the target is @var{TARGETNAME} as a string. @var{SOURCEFILES} is the list of
3665 files to be objectified.
3666 Not all compilers do this.
3669 @deffn Method ede-compiler-intermediate-objects-p :AFTER this
3670 Return non-@code{nil} if @var{THIS} has intermediate object files.
3671 If this compiler creates code that can be linked together,
3672 then the object files created by the compiler are considered intermediate.
3675 @deffn Method ede-compiler-intermediate-object-variable :AFTER this targetname
3676 Return a string based on @var{THIS} representing a make object variable.
3677 @var{TARGETNAME} is the name of the target that these objects belong to.
3681 @node ede-object-compiler
3682 @subsection ede-object-compiler
3683 @cmindex ede-object-compiler
3686 @item Inheritance Tree:
3688 @item eieio-instance-inheritor
3690 @item @w{@xref{ede-compilation-program}.}
3692 @item @w{@xref{ede-compiler}.}
3694 @item ede-object-compiler
3707 Type: @code{boolean} @*
3708 Default Value: @code{t}
3710 @xref{ede-compiler}.
3711 @item :dependencyvar
3714 A variable dedicated to dependency generation.
3719 @subsubsection Specialized Methods
3721 @deffn Method ede-proj-makefile-insert-variables :AFTER this
3722 Insert variables needed by the compiler @var{THIS}.
3726 @subsection ede-linker
3730 @item Inheritance Tree:
3732 @item eieio-instance-inheritor
3734 @item @w{@xref{ede-compilation-program}.}
3745 Create a new object with name NAME of class type ede-linker
3754 Name of this type of compiler.
3760 Variables needed in the Makefile for this compiler.
3761 An assoc list where each element is (VARNAME . VALUE) where VARNAME
3762 is a string, and VALUE is either a string, or a list of strings.
3763 For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
3769 A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
3770 This is used to match target objects with the compilers and linkers
3771 they can use, and which files this object is interested in.
3777 The commands used to execute this compiler.
3778 The object which uses this compiler will place these commands after
3779 it's rule definition.
3782 @item :objectextention
3785 A string which is the extention used for object files.
3786 For example, C code uses .o on unix, and Emacs Lisp uses .elc.