\input texinfo
-@setfilename ../../info/ede
+@setfilename ../../info/ede.info
@settitle Emacs Development Environment
+@documentencoding UTF-8
@copying
This file describes EDE, the Emacs Development Environment.
-Copyright @copyright{} 1998--2001, 2004--2005, 2008--2013
+Copyright @copyright{} 1998--2001, 2004--2005, 2008--2014
Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
-Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below. A copy of the license
is included in the section entitled ``GNU Free Documentation License.''
@center @titlefont{EDE (The Emacs Development Environment)}
@sp 4
@center by Eric Ludlam
+@page
+@vskip 0pt plus 1filll
+@insertcopying
@end titlepage
@page
(compile-command . "make -f MyCustomMakefile all")))
@end example
-The same is true when you use project-local variables with
-@ref{ede-java-root}. For example:
-
-@example
-(ede-java-root-project "SOMENAME"
- :file "/dir/to/some/file"
- :local-variables
- '((grep-command . "grep -nHi -e ")
- (compile-command . "ant")))
-@end example
-
@node EDE Project Features, , Project Local Variables, Modifying your project
@section EDE Project Features
@menu
* Make and Automake projects:: Project types of @samp{ede-project}
* Automake direct projects:: Project interface on hand-written automake files.
-* Android projects:: Projects for Android development
-* Arduino projects:: Projects for Arduino sketches
* Simple projects:: Projects @ede{} doesn't manage.
@end menu
-@node Make and Automake projects
+@node Make and Automake projects, Automake direct projects, Miscellaneous commands, Miscellaneous commands
@section Make and Automake projects
A project of @samp{ede-project} type creates a file called
routines will also import and maintain a configure.am script and a
host of other files required by Automake.
-@node Automake direct projects
+@node Automake direct projects, Simple projects, Make and Automake projects, Miscellaneous commands
@section Automake direct projects
The project type that reads @file{Makefile.am} directly is derived
not generate them automatically, or create new ones. As such, it is
useful as a browsing tool, or as maintenance in managing file lists.
-@node Android projects
-@section Android projects
-
-An Android project of type @samp{ede-android-project} will detect and
-support development of Android apps. Android projects use an
-@file{AndroidManifest.xml} file. Always load your Manifest first in a
-running Emacs to make sure the project is identified correctly.
-
-Android projects can be created with @code{ede-new} but depend on a
-correctly configured Android SDK via @cedet{} support.
-
-@defun cedet-android-sdk-root
-@anchor{cedet-android-sdk-root}
-The root to the android @var{SDK}.
-@end defun
-
-Android projects support different configurations including compile,
-and install, which will upload a program to your Android device. It
-also supports several debugging tools via @file{android.el}.
-
-@node Arduino projects
-@section Arduino projects
-
-An arduino project of type @samp{ede-arduino-project} will read your
-@file{~/.arduino/preferences.txt} file, and identify your sketches.
-You will still need the Arduino IDE to set up your preferences and
-locate your arduino. After quitting the IDE, Emacs will be able to
-find your sketches, compile them, and upload them to your arduino.
-
-If you have the @file{arduino} command on your path, @ede{} will be
-able to find your SDK and compile your programs.
-
-@node Simple projects
+@node Simple projects, , Automake direct projects, Miscellaneous commands
@section Simple Projects
There is a wide array of simple projects. In this case a simple
@menu
* ede-cpp-root:: This project marks the root of a C/C++ code project.
-* ede-java-root:: This project marks the root of a Java project.
* ede-emacs:: A project for working with Emacs.
* ede-linux:: A project for working with Linux kernels.
* ede-generic-project:: A project type for wrapping build systems with EDE.
* Custom Locate:: Customizing how to locate files in a simple project
@end menu
-@node ede-cpp-root, ede-java-root, Simple projects, Simple projects
+@node ede-cpp-root, ede-emacs, Simple projects, Simple projects
@subsection ede-cpp-root
The @code{ede-cpp-root} project type allows you to create a single
(ede-cpp-root-project "NAME" :file "FILENAME"
:include-path '( "/include" "../include" "/c/include" )
:system-include-path '( "/usr/include/c++/3.2.2/" )
+ :compile-command "make compile"
:spp-table '( ("MOOSE" . "")
("CONST" . "const") ) )
@end example
names to include directories where system header files can be found.
These will be applied to files in this project only.
+With @code{:compile-command} you can provide a command which should be
+run when calling @code{ede-compile-project}.
+
The @code{:spp-table} provides a list of project specific #define
style macros that are unique to this project, passed in to the
compiler on the command line, or are in special headers.
@xref{ede-cpp-root-project}, for details about the class that defines
the @code{ede-cpp-root} project type.
-@node ede-java-root, ede-emacs, ede-cpp-root, Simple projects
-@subsection ede-java-root
-
-Much like the project type @ref{ede-cpp-root}, the java variant is
-can be setup in your @file{.emacs} file and just marks a directory as
-the root of a java source tree.
-
-The @code{ede-java-root} project class knows a few things about Java
-projects. In particular, you can use it to control your classpath at
-both the system level, and for your project. If it is insufficient,
-you can subclass @code{ede-java-root-project} and add your own tweaks
-in just a few lines. See @ref{ede-cpp-root} for an example using the
-C++ variant.
-
-In the most basic case, add this to your @file{.emacs} file, modifying
-appropriate bits as needed.
-
-@example
-(ede-java-root-project "SOMENAME" :file "/dir/to/some/file" :srcroot '("src"))
-@end example
-
-Replace @var{SOMENAME} with whatever name you want, and the filename
-to an actual file at the root of your project. It might be a
-Makefile, a README file. Whatever. It doesn't matter. It's just a
-key to hang the rest of @ede{} off of.
-
-Replace the value of :srcroot with a list of directories under the
-project root which contains Java sources. For example, if you have:
-
-@example
-~/myprojects/P1/
-~/myprojects/P1/src/
-~/myprojects/P1/src/com/ericsoft/MyCode.java
-~/myprojects/P1/doc/
-@end example
-
-Then @file{src} represents the directory under which all your Java
-code is. It is important that @file{src} is one step above the
-directory that is the base of your package name, such as
-@file{com/ericsoft} in the example above so that new files can be
-discovered via fully qualified name. You can have multiple such
-directories in one project, and each will be accessible.
-
-You can specify your classpath like this:
-
-@example
-(ede-java-root-project "NAME" :file "FILENAME"
- :srcroot '("src")
- :classpath '("/absolute/path.jar")
- :localclasspath '( "/relative/path.jar" ))
-@end example
-
-In this example, @code{:classpath} specifies absolute paths somewhere
-on your system, and the explicit jar or source root directories
-@semantic{} will search when performing completions.
-
-The @code{:localclasspath} is like @code{:classpath}, but it will
-contain path names relative to the root of your project.
-
-If you want to override the file-finding tool with your own
-function you can do this:
-
-@example
-(ede-java-root-project "NAME" :file "FILENAME" :locate-fcn 'MYFCN)
-@end example
-
-Where @var{MYFCN} is a symbol for a function. The locate function can
-be used in place of @code{ede-expand-filename} so you can quickly
-customize your custom target to use specialized local routines instead
-of the default @ede{} routines. The function symbol must take two
-arguments:
-
-@table @var
-@item NAME
-The name of the file to find.
-@item DIR
-The directory root for this java-root project.
-@end table
-
-If you would like to create your Java projects dynamically, instead of
-putting them all in your @file{.emacs}, you can do that too. See
-@ref{ede-cpp-root} for details that can be applied to this project type.
-
-@node ede-emacs, ede-linux, ede-java-root, Simple projects
+@node ede-emacs, ede-linux, ede-cpp-root, Simple projects
@subsection ede-emacs
The @code{ede-emacs} project automatically identifies an Emacs source
It pre-populates the C Preprocessor symbol map for reasonable parsing,
and has an optimized include file identification function.
+Through the variables @code{project-linux-build-directory-default} and
+@code{project-linux-architecture-default}, you can set the build
+directory and its architecture, respectively. The default is to assume that
+the build happens in the source directory and to auto-detect the
+architecture; if the auto-detection fails, you will be asked.
+
@node ede-generic-project, Custom Locate, ede-linux, Simple projects
@subsection ede-generic-project
Generic projects are disabled by default because they have the
potential to interfere with other projects. To use the generic
-project sytem to start detecting projects, you need to enable it.
+project system to start detecting projects, you need to enable it.
@deffn Command ede-enable-generic-projects
Enable generic project loaders.
from the autoload. If it is a string (i.e., a project file name), it
checks to see if that exists in BUFFER's directory. If it is a
function, then it calls that function and expects it to return a file
-name or nil. If the file exists, then this directory is assumed to be
+name or @code{nil}. If the file exists, then this directory is assumed to be
part of a project, and @code{ede-directory-project-p} returns the
instance of @code{ede-project-autoload} that matched.
A brief description of the project or target. This is currently used
by the @samp{ede-speedbar} interface.
@item ede-want-file-p
-Return non-nil if a target will accept a given file.
+Return non-@code{nil} if a target will accept a given file.
It is generally unnecessary to override this. See the section on source
code.
@item ede-buffer-mine
-Return non-nil if a buffer belongs to this target. Used during
+Return non-@code{nil} if a buffer belongs to this target. Used during
association when a file is loaded. It is generally unnecessary to
override this unless you keep auxiliary files.
@end table
Default Value: @code{"Untitled"}
The name used when generating distribution files.
-@refill
@item :version
Type: @code{string} @*
Default Value: @code{"1.0"}
The version number used when distributing files.
-@refill
@item :directory
Type: @code{string}
Directory this project is associated with.
-@refill
@item :file
Type: @code{string}
File name where this project is stored.
-@refill
@end table
Type: @code{list}
List of top level targets in this project.
-@refill
@item :tool-cache
Type: @code{list}
List of tool cache configurations in this project.
This allows any tool to create, manage, and persist project-specific settings.
-@refill
@item :web-site-url
Type: @code{string} @*
URL to this projects web site.
This is a URL to be sent to a web site for documentation.
-@refill
@item :web-site-directory @*
A directory where web pages can be found by Emacs.
For remote locations use a path compatible with ange-ftp or EFS@.
You can also use TRAMP for use with rcp & scp.
-@refill
@item :web-site-file @*
A file which contains the home page for this project.
This file can be relative to slot @code{web-site-directory}.
This can be a local file, use ange-ftp, EFS, or TRAMP.
-@refill
@item :ftp-site
Type: @code{string} @*
FTP site where this project's distribution can be found.
This FTP site should be in Emacs form, as needed by @code{ange-ftp}, but can
also be of a form used by TRAMP for use with scp, or rcp.
-@refill
@item :ftp-upload-site
Type: @code{string} @*
FTP Site to upload new distributions to.
This FTP site should be in Emacs form as needed by @code{ange-ftp}.
If this slot is @code{nil}, then use @code{ftp-site} instead.
-@refill
@item :configurations
Type: @code{list} @*
List of available configuration types.
Individual target/project types can form associations between a configuration,
and target specific elements such as build variables.
-@refill
@item :configuration-default @*
Default Value: @code{"debug"}
The default configuration.
-@refill
@item :local-variables @*
Default Value: @code{nil}
Project local variables
-@refill
@end table
@end deffn
@deffn Method ede-map-any-target-p :AFTER this proc
-For project @var{THIS}, map @var{PROC} to all targets and return if any non-nil.
+For project @var{THIS}, map @var{PROC} to all targets and return if any non-@code{nil}.
Return the first non-@code{nil} value returned by @var{PROC}.
@end deffn
@end deffn
@deffn Method ede-find-target :AFTER proj buffer
-Fetch the target in @var{PROJ} belonging to @var{BUFFER} or nil.
+Fetch the target in @var{PROJ} belonging to @var{BUFFER} or @code{nil}.
@end deffn
@deffn Method ede-add-subproject :AFTER proj-a proj-b
Default Value: @code{(quote ("/include" "../include/"))}
The default locate function expands filenames within a project.
-If a header file (.h, .hh, etc) name is expanded, and
+If a header file (.h, .hh, etc.)@: name is expanded, and
the @code{:locate-fcn} slot is @code{nil}, then the include path is checked
first, and other directories are ignored. For very large
projects, this optimization can save a lot of time.
that are relative to the project's root should start with a /, such
as "/include", meaning the directory @code{include} off the project root
directory.
-@refill
@item :system-include-path
Type: @code{list} @*
C files initialized in an ede-cpp-root-project have their semantic
system include path set to this value. If this is @code{nil}, then the
semantic path is not modified.
-@refill
@item :spp-table
Type: @code{list} @*
are critical symbols derived from header files. Providing header files
macro values through this slot improves accuracy and performance.
Use `:spp-files' to use these files directly.
-@refill
@item :spp-files
Type: @code{list} @*
The PreProcessor symbols appearing in these files will be used while
parsing files in this project.
See @code{semantic-lex-c-preprocessor-symbol-map} for more on how this works.
-@refill
@item :header-match-regexp
Type: @code{string} @*
Default Value: @code{"\\.\\(h\\(h\\|xx\\|pp\\|\\+\\+\\)?\\|H\\)$\\|\\<\\w+$"}
Regexp used to identify C/C++ header files.
-@refill
@item :locate-fcn
Type: @code{(or null function)} @*
NAME - The name of the file to find.
DIR - The directory root for this cpp-root project.
-It should return the fully qualified file name passed in from NAME@. If that file does not
-exist, it should return nil.
-@refill
+It should return the fully qualified file name passed in from NAME@.
+If that file does not exist, it should return @code{nil}.
@end table
Can be one of @code{'Makefile}, 'Makefile.in, or 'Makefile.am.
If this value is NOT @code{'Makefile}, then that overrides the @code{:makefile} slot
in targets.
-@refill
@item :variables
Type: @code{list} @*
Default Value: @code{nil}
Variables to set in this Makefile.
-@refill
@item :configuration-variables
Type: @code{list} @*
Makefile variables to use in different configurations.
These variables are used in the makefile when a configuration becomes active.
-@refill
@item :inference-rules @*
Default Value: @code{nil}
Inference rules to add to the makefile.
-@refill
@item :include-file @*
Default Value: @code{nil}
Additional files to include.
These files can contain additional rules, variables, and customizations.
-@refill
@item :automatic-dependencies
Type: @code{boolean} @*
Default Value: @code{t}
Non-@code{nil} to do implement automatic dependencies in the Makefile.
-@refill
@item :metasubproject
Type: @code{boolean} @*
Non-@code{nil} if this is a metasubproject.
Usually, a subproject is determined by a parent project. If multiple top level
projects are grouped into a large project not maintained by EDE, then you need
-to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
+to set this to non-@code{nil}. The only effect is that the @code{dist} rule will then avoid
making a tar file.
-@refill
@end table
Default Value: @code{nil}
Variables to set in this Makefile, at top of file.
-@refill
@item :additional-variables
Type: @code{(or null list)} @*
Arbitrary variables needed from this project.
It is safe to leave this blank.
-@refill
@item :additional-rules
Type: @code{(or null list)} @*
Arbitrary rules and dependencies needed to make this target.
It is safe to leave this blank.
-@refill
@item :installation-domain
Type: @code{symbol} @*
Installation domain specification.
The variable GNUSTEP_INSTALLATION_DOMAIN is set at this value.
-@refill
@item :preamble
Type: @code{(or null list)} @*
The auxiliary makefile for additional variables.
Included just before the specific target files.
-@refill
@item :postamble
Type: @code{(or null list)} @*
The auxiliary makefile for additional rules.
Included just after the specific target files.
-@refill
@item :metasubproject
Type: @code{boolean} @*
Non-@code{nil} if this is a metasubproject.
Usually, a subproject is determined by a parent project. If multiple top level
projects are grouped into a large project not maintained by EDE, then you need
-to set this to non-nil. The only effect is that the @code{dist} rule will then avoid
+to set this to non-@code{nil}. The only effect is that the @code{dist} rule will then avoid
making a tar file.
-@refill
@end table
Type: @code{string}
Name of this target.
-@refill
@item :path
Type: @code{string}
The path to the sources of this target.
Relative to the path of the project it belongs to.
-@refill
@item :source
Type: @code{list} @*
Default Value: @code{nil}
Source files in this target.
-@refill
@item :versionsource
Type: @code{list} @*
These files are checked for a version string whenever the EDE version
of the master project is changed. When strings are found, the version
previously there is updated.
-@refill
@end table
Type: @code{string}
Name of this target.
-@refill
@item :path
Type: @code{string}
The path to the sources of this target.
Relative to the path of the project it belongs to.
-@refill
@item :auxsource
Type: @code{list} @*
Auxiliary source files included in this target.
Each of these is considered equivalent to a source file, but it is not
distributed, and each should have a corresponding rule to build it.
-@refill
@item :compiler
Type: @code{(or null symbol)} @*
This should be a symbol, which contains the object defining the compiler.
This enables save/restore to do so by name, permitting the sharing
of these compiler resources, and global customization thereof.
-@refill
@item :linker
Type: @code{(or null symbol)} @*
This should be a symbol, which contains the object defining the linker.
This enables save/restore to do so by name, permitting the sharing
of these linker resources, and global customization thereof.
-@refill
@end table
Default Value: @code{"Makefile"}
File name of generated Makefile.
-@refill
@item :partofall
Type: @code{boolean} @*
Non @code{nil} means the rule created is part of the all target.
Setting this to @code{nil} creates the rule to build this item, but does not
include it in the ALL`all:' rule.
-@refill
@item :configuration-variables
Type: @code{list} @*
These variables are used in the makefile when a configuration becomes active.
Target variables are always renamed such as foo_CFLAGS, then included into
commands where the variable would usually appear.
-@refill
@item :rules
Type: @code{list} @*
Arbitrary rules and dependencies needed to make this target.
It is safe to leave this blank.
-@refill
@end table
prefix, or a ".so" suffix.
Note: Currently only used for Automake projects.
-@refill
@item :ldflags
Type: @code{list} @*
options to the linker.
Note: Not currently used. This bug needs to be fixed.
-@refill
@end table
There should only be one toplevel package per auxiliary tool needed.
These packages location is found, and added to the compile time
load path.
-@refill
@end table
The file that autoload definitions are placed in.
There should be one load defs file for a given package. The load defs are created
for all Emacs Lisp sources that exist in the directory of the created target.
-@refill
@item :autoload-dirs
Type: @code{list} @*
The directories to scan for autoload definitions.
If @code{nil} defaults to the current directory.
-@refill
@end table
Miscellaneous sources which have a specialized makefile.
The sub-makefile is used to build this target.
-@refill
@end table
The main menu resides in this file.
All other sources should be included independently.
-@refill
@end table
Default Value: @code{"guile"}
The preferred interpreter for this code.
-@refill
@end table
Default Value: @code{nil}
Additional LD args.
-@refill
@end table
@end table
Default Value: @code{nil}
Additional texinfo included in this one.
-@refill
@end table
@end table
The parent of this instance.
If a slot of this class is reference, and is unbound, then the parent
is checked for a value.
-@refill
@item :name
Type: @code{string}
The name of this type of source code.
Such as "C" or "Emacs Lisp"
-@refill
@item :sourcepattern
Type: @code{string} @*
Default Value: @code{".*"}
Emacs regex matching sourcecode this target accepts.
-@refill
@item :auxsourcepattern
Type: @code{(or null string)} @*
Emacs regex matching auxiliary source code this target accepts.
Aux source are source code files needed for compilation, which are not compiled
themselves.
-@refill
@item :enable-subdirectories
Type: @code{boolean} @*
If sourcecode always lives near the target creating it, this should be nil.
If sourcecode can, or typically lives in a subdirectory of the owning
target, set this to t.
-@refill
@item :garbagepattern
Type: @code{list} @*
Shell file regex matching files considered as garbage.
This is a list of items added to an @code{rm} command when executing a @code{clean}
type directive.
-@refill
@end table
The parent of this instance.
If a slot of this class is reference, and is unbound, then the parent
is checked for a value.
-@refill
@item :name
Type: @code{string}
Name of this type of compiler.
-@refill
@item :variables
Type: @code{list}
An assoc list where each element is (VARNAME . VALUE) where VARNAME
is a string, and VALUE is either a string, or a list of strings.
For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
-@refill
@item :sourcetype
Type: @code{list}
A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
This is used to match target objects with the compilers and linkers
they can use, and which files this object is interested in.
-@refill
@item :rules
Type: @code{list} @*
Auxiliary rules needed for this compiler to run.
For example, yacc/lex files need additional chain rules, or inferences.
-@refill
@item :commands
Type: @code{list}
The commands used to execute this compiler.
The object which uses this compiler will place these commands after
it's rule definition.
-@refill
@item :autoconf
Type: @code{list} @*
call to initialize automake to use this compiler.
For example, there may be multiple C compilers, but they all probably
use the same autoconf form.
-@refill
@item :objectextention
Type: @code{string}
A string which is the extension used for object files.
For example, C code uses .o on unix, and Emacs Lisp uses .elc.
-@refill
@end table
The parent of this instance.
If a slot of this class is reference, and is unbound, then the parent
is checked for a value.
-@refill
@item :name
Type: @code{string}
Name of this type of compiler.
-@refill
@item :variables
Type: @code{list}
An assoc list where each element is (VARNAME . VALUE) where VARNAME
is a string, and VALUE is either a string, or a list of strings.
For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
-@refill
@item :sourcetype
Type: @code{list}
A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
This is used to match target objects with the compilers and linkers
they can use, and which files this object is interested in.
-@refill
@item :commands
Type: @code{list}
The commands used to execute this compiler.
The object which uses this compiler will place these commands after
it's rule definition.
-@refill
@item :objectextention
Type: @code{string}
A string which is the extension used for object files.
For example, C code uses .o on unix, and Emacs Lisp uses .elc.
-@refill
@item :makedepends
Type: @code{boolean} @*
Default Value: @code{nil}
Non-@code{nil} if this compiler can make dependencies.
-@refill
@item :uselinker
Type: @code{boolean} @*
Non-@code{nil} if this compiler creates code that can be linked.
This requires that the containing target also define a list of available
linkers that can be used.
-@refill
@end table
Type: @code{list}
A variable dedicated to dependency generation.
-@refill
@end table
@end table
Type: @code{string}
Name of this type of compiler.
-@refill
@item :variables
Type: @code{list}
An assoc list where each element is (VARNAME . VALUE) where VARNAME
is a string, and VALUE is either a string, or a list of strings.
For example, GCC would define CC=gcc, and emacs would define EMACS=emacs.
-@refill
@item :sourcetype
Type: @code{list}
A list of @code{ede-sourcecode} @xref{ede-sourcecode}. objects this class will handle.
This is used to match target objects with the compilers and linkers
they can use, and which files this object is interested in.
-@refill
@item :commands
Type: @code{list}
The commands used to execute this compiler.
The object which uses this compiler will place these commands after
it's rule definition.
-@refill
@item :objectextention
Type: @code{string}
A string which is the extension used for object files.
For example, C code uses .o on unix, and Emacs Lisp uses .elc.
-@refill
@end table
@end table
-@node GNU Free Documentation License, , Extending EDE, Top
+@node GNU Free Documentation License, , Extending EDE, Top
@appendix GNU Free Documentation License
@include doclicense.texi