This is ede-cedet.info, produced by makeinfo version 4.8 from ede.texi.

START-INFO-DIR-ENTRY
* ede-cedet: (ede-cedet).       Project management for Emacs (cedet version)
END-INFO-DIR-ENTRY


File: ede-cedet.info,  Node: Top,  Next: EDE Project Concepts,  Prev: (dir),  Up: (dir)

   EDE is a collection of definitions called the _Emacs Development
Extensions_.  EDE provides the gloss that simplifies the learning curve
for all the very useful functionality of building and debugging under
emacs.  In doing so it attempts to emulate a typical IDE (Integrated
Development Environment).  What this means is that EDE can manage or
create your makefiles and other building environment duties so the
developer can concentrate on code, and not support files.  In doing so,
it will be much easier for new programmers to learn and adopt the GNU
ways of doing things.

* Menu:

* EDE Project Concepts::        EDE Project Concepts
* EDE Mode::                    Turning on EDE mode.
* Quick Start::                 Quick start to building a project.
* Creating a project::          Creating a project.
* Modifying your project::      Adding and removing files and targets.
* Building and Debugging::      Initiating a build or debug session.
* Miscellaneous commands::      Other project related commands.
* Project types::               There are different types of projects.
* Extending EDE::               Programming tips when extending.
* Project::
* Targets::
* Sourcecode::
* Compilers::


File: ede-cedet.info,  Node: EDE Project Concepts,  Next: EDE Mode,  Prev: Top,  Up: Top

1 EDE Project Concepts
**********************

EDE is a generic interface for managing projects.  In other words,
there is one set of menus and keybindings specified by EDE, but there
are multiple ways a project can be expressed via a build system.

   You can learn about multiple *Note Project types::, or the specific
build or debug commands in other chapters.

   In EDE, a project hierarchy matches a directory hierarchy.  There
would be a project root, and subprojects in different subdirectories.

   Within each project, there can be multiple targets.  A target at the
simplest level is a named collection of files within a project.  There
are two important reasons for specifying a target.

  1. A collection of files to be added to a distribution.

  2. A collection of files that can be built into something else.

   If you intend to write code, and have it tarred up and distributed
under the GPL, all important files must be a part of some target so
that they will be added to the distribution file.

   Targets that are lists of files that can be built into something else
will also be distributed, but the build process will also convert those
files into some specified built thing, such as a program or compiled
documentation.

   Lastly, EDE provides a way for other tools to easily learn file
associations.  For example, a program might need to restrict some sort
of search to files in a single target, or need to discover the location
of documentation or interface files.  EDE can provide this information.


File: ede-cedet.info,  Node: EDE Mode,  Next: Quick Start,  Prev: EDE Project Concepts,  Up: Top

2 EDE Mode
**********

EDE is implemented as a minor-mode, which augments other modes such as C
mode, and Texinfo mode.  You can turn EDE on for all buffers by running
the command `global-ede-mode', or by putting this in your `~/.emacs'
file.

     (global-ede-mode t)

   When EDE is active for a given buffer, the menu item "Project"
appears.  This menu contains several high-level functions to make
working on a code set easier.  These items and keybindings never change
regardless of the type of project you are actually working on.

   The `ede.el' file is a minimal set of loading routines.  When
different types of projects are encountered, source code for those
projects are loaded at that time.


File: ede-cedet.info,  Node: Quick Start,  Next: Creating a project,  Prev: EDE Mode,  Up: Top

3 Quick Start
*************

Once you have EDE enabled, you can create a project.  This chapter
provides an example C++ project that will create Automake files for
compilation.

3.1 Step 1: Create root directory
=================================

First, lets create a directory for our project.  For this example,
we'll start with something in `/tmp'.

     C-x C-f /tmp/myproject/README RET
     M-x make-directory RET RET

   Now put some plain text in your README file to start.

   Now, lets create the project:

     M-x ede-new RET Automake RET myproject RET

   Nothing visible happened, but if you use `dired' to look at the
directory, you should see this:

       /tmp/myproject:
       total used in directory 32 available 166643476
       drwxr-xr-x  2 zappo users  4096 2012-02-23 22:10 .
       drwxrwxrwt 73 root  root  20480 2012-02-23 22:10 ..
       -rw-r--r--  1 zappo users   195 2012-02-23 22:10 Project.ede
       -rw-r--r--  1 zappo users    10 2012-02-23 22:09 README

3.2 Step 2: Create Subdirectories and Files
===========================================

We'll make a more complex project, so use dired to create some more
directories using the `+' key, and typing in new directories:

     + include RET
     + src RET

   Now I'll short-cut in this tutorial.  Create the following files:

   `include/myproj.hh'
     /** myproj.hh ---
      */

     #ifndef myproj_hh
     #define myproj_hh 1

     #define IMPORTANT_MACRO 1

     int my_lib_function();

     #endif // myproj_hh

   `src/main.cpp'
     /** main.cpp ---
      */

     #include <iostream>
     #include "myproj.hh"

     int main() {

     }

     #ifdef IMPORTANT_MACRO
     int my_fcn() {

     }
     #endif

   `src/mylib.cpp'
     /** mylib.cpp ---
      *
      * Shared Library to build
      */

     int my_lib_function() {

     }

3.3 Step 3: Create subprojects
==============================

EDE needs subdirectories to also have projects in them.  You can now
create those projects.

   With `main.cpp' as your current buffer, type:

     M-x ede-new RET Automake RET src RET

   and in `myproj.hh' as your current buffer, type:

     M-x ede-new RET Automake RET include RET

   These steps effectively only create the Project.ede file in which you
will start adding targets.

3.4 Step 4: Create targets
==========================

In order to build a program, you must have targets in your EDE
Projects.  You can create targets either from a buffer, or from a
`dired' directory buffer.

   Note: If for some reason a directory list buffer, or file does not
have the `Project' menu item, or if EDE keybindings don't work, just
use `M-x revert-buffer RET' to force a refresh.  Sometimes creating a
new project doesn't restart buffers correctly.

   Lets start with the header file.  In `include/myproj.hh', you could
use the menu, but we will now start using the EDE command prefix which
is `C-c .'.

     C-c . t includes RET miscellaneous RET y

   This creates a misc target for holding your includes, and then adds
myproj.hh to the target.  Automake (the tool) has better ways to do
this, but for this project, it is sufficient.

   Next, visit the `src' directory using dired.  There should be a
`Project' menu.   You can create a new target with

     . t myprogram RET program RET

   Note that `. t' is a command for creating a target.  This command is
also in the menu.  This will create a target that will build a program.
If you want, visit `Project.ede' to see the structure built so far.

   Next, place the cursor on `main.cpp', and use `. a' to add that file
to your target.

     . a myprogram RET

   Note that these promps often have completion, so you can just press
`TAB' to complete the name `myprogram'.

   If you had many files to add to the same target, you could mark them
all in your dired buffer, and add them all at the same time.

   Next, do the same for the library by placing the cursor on
`mylib.cpp'.

     . t mylib RET sharedobject RET
     . a mylib RET

3.5 Step 5: Compile, and fail
=============================

Next, we'll try to compile the project, but we aren't done yet, so it
won't work right away.

   Visit `/tmp/myproject/Project.ede'.  We're starting here because we
don't have any program files in this directory yet.  Now we can use the
compile command:

     C-c . C

   Because this is the very first time, it will create a bunch of files
for you that are required by Automake.  It will then use automake to
build the support infrastructure it needs.  This step is skipped if you
choose just a `Makefile' build system.

   After the Automake init, it runs compile.  You will immediately
discover the error in main.cpp can't find `myproj.hh'.  We need to go
fix this.

3.6 Step 6: Customizing your project
====================================

To fix the failed compile, we need to add `/tmp/myproject/include' to
the include path.

   Visit `main.cpp'.

     M-x customize-project RET

   Select the `[Settings]' subgroup of options.  Under `Variable :'
click `[INS]'.  At this point, you need to be somewhat savvy with
Automake.  Add a variable named `CPPFLAGS', and set the value to
`../include'.

   You should see something like this:

     Variables :
     [INS] [DEL] Cons-cell:
                 Name: AM_CPPFLAGS
                 Value: -I../include
     [INS]
     Variables to set in this Makefile.

   Click `[Apply]'.  Feel free to visit `Project.ede' to see how it
changed the config file.

   Compile the whole project again with `C-c . C' from `main.cpp'.  It
should now compile.

3.7 Step 7: Shared library dependency
=====================================

Note: Supporting shared libraries for Automake in this way is easy, but
doing so from a project of type Makefile is a bit tricky.  If you are
creating shared libraries too, stick to Automake projects.

   Next, lets add a dependency from `main.cpp' on our shared library.
To do that, update main like this:

     int main() {

       my_lib_function();

     }

   Now compile with:

     C-c . c

   where the lower case `c' compiles just that target.  You should see
an error.

   This time, we need to add a dependency from `main.cpp' on our shared
library.  To do that, we need to customize our target instead of the
project.  This is because variables such as the include path are
treated globally, whereas dependencies for a target are target specific.

     M-x customize-target RET

   On the first page, you will see an Ldlibs-local section.  Add mylib
to it by first clicking `[INS]', and they adding the library.  It
should look like this:

     Ldlibs-Local :
     [INS] [DEL] Local Library: libmylib.la
     [INS]
     Libraries that are part of this project. [Hide Rest]
     The full path to these libraries should be specified, such as:
     ../lib/libMylib.la  or ../ar/myArchive.a

   You will also see other variables for library related flags and
system libraries if you need them.  Click `[Accept]', and from
`main.cpp', again compile the whole project to force all dependent
elements to compile:

     C-c . C

3.8 Step 8: Run your program
============================

You can run your program directly from EDE.

     C-c . R RET RET

   If your program takes command line arguments, you can type them in
when it offers the command line you want to use to run your program.


File: ede-cedet.info,  Node: Creating a project,  Next: Modifying your project,  Prev: Quick Start,  Up: Top

4 Creating a project
********************

_Note:_ It is not necessary to Create a project as described below to
use EDE.  Some kinds of projects are autodetected, such as projects
that use Automake, Emacs, or Linux.  See *Note Simple projects::.

   To create a new project that will also create Makefiles for you,
first load a file you would want in that project into a buffer.  If you
have a hierarchy of directories, choose a file in the topmost directory
first.  From this buffer, run `ede-new'.

   EDE can support several types of projects.  When creating a new
project with the command `ede-new' you must choose the type of project
you would like to create.  *Note Project types::.

   Each type has its own benefits or language specific enhancements.
You will be prompted for the type of project you would like to create.
The simplest and most language agnostic project type is _Make_.  A
derivation of this is the `Automake' type.

   Not all project types can be created in this way.  For example, there
are two ways to handle Automake based projects.  One is by making an
_Automake_ project with `ede-new'.  The other is to just write some
automake files which EDE will automatically detect, and put you into a
different Automake mode.  Any GNU project using Automake will be
detected in this way, and you can use EDE to modify those Makefiles for
you.

   If you just want to use EDE to know about a project so that other
libraries, such as semantic, can take advantage of some core EDE APIs,
then you can use some simpler projects.  See  *Note Simple projects::.

4.1 Creating a subproject
=========================

A subproject is merely a project in a subdirectory of another project.
You can create a subproject by using the `ede-new' command (or `"Create
Project"' from the menu) while a in a subdirectory below an existing
project.  This new project will be automatically added to the parent
project, and will be automatically loaded when the parent is read.

   When using a project command that involves a makefile, EDE uses the
top-most project's makefile as a starting place for the build.  How the
toplevel project handles subprojects in the build process is dependent
on that project's type.


File: ede-cedet.info,  Node: Modifying your project,  Next: Building and Debugging,  Prev: Creating a project,  Up: Top

5 Modifying your project
************************

Your project and targets are systems with lots of options.  Generic
features are listed here.  You will need to read sections on specific
project types for detailed information on the project you might be
using.

* Menu:

* Add/Remove target::
* Add/Remove files::
* Customize Features::
* Project Local Variables::
* EDE Project Features::


File: ede-cedet.info,  Node: Add/Remove target,  Next: Add/Remove files,  Prev: Modifying your project,  Up: Modifying your project

5.1 Add/Remove target
=====================

A project with no targets isn't very useful, so you can use EDE to add
and remove targets from your project.

   You can create a new target with the `ede-new-target' command `C-c .
t'.  If appropriate you will be given the option to add the current
buffer into the newly created target.

   When creating a target, you will be given an option list of target
types.  Each target type will have its own build process and class of
files it will accept.

   You can remove a target with the command `ede-delete-target'.

   The add and remove commands are in the `Project->Project Options'
menu.


File: ede-cedet.info,  Node: Add/Remove files,  Next: Customize Features,  Prev: Add/Remove target,  Up: Modifying your project

5.2 Add/Remove files
====================

A target with no files isn't very useful, so you can use EDE to add and
remove files to targets.  Sometimes files can belong to multiple
targets, and that is OK.

   You can add files into targets with the command `ede-add-file' bound
to `C-c . a'.   If there are no targets created that you wish to use,
you can type in `new target' to create a new target apropriate for the
file you are adding.

   You can remove files from a target with the `ede-remove-file' bound
to `C-c . d'.  If the file is in multiple targets, it will query for
every target it could be removed from.

   When you are working in a project, if you load a new file into a
buffer that is not a part of an active target, EDE will automatically
remind you to add it to a target of your choosing.  If you do not wish
to add it to a target, you can choose `none'.  You can customize the
behavior with the variable `ede-auto-add-method'.


File: ede-cedet.info,  Node: Customize Features,  Next: Project Local Variables,  Prev: Add/Remove files,  Up: Modifying your project

5.3 Customize Features
======================

A project, and its targets, are objects using the `EIEIO' object
system. *Note (eieio)EIEIO::.  These objects have data fields containing
important information related to your work.

   If the high-level functions aren't enough, you can tweak all
user-customizable fields at any time by running the command
`customize-project' or `customize-target'.  This will load the current
project or target into a _customization buffer_ where you tweak
individual slots.  This is usually necessary for project modes that are
very complex.

   Some project modes do not have a project file, but directly read a
Makefile, or existing file.  Instead of letting you directly edit the
object, you can edit the file.  Use the command `ede-edit-file-target'
bound to `C-c . e'.


File: ede-cedet.info,  Node: Project Local Variables,  Next: EDE Project Features,  Prev: Customize Features,  Up: Modifying your project

5.4 Project Local Variables
===========================

EDE projects can store and manager project local variables.  The
variables are stored in the project, and will be restored when a
project reloads.

   Projects which are not stored on disk WILL NOT restore your project
local variables later.

   You can use *Note Customize Features:: to of the project to edit the
project local variables.  They are under the 'Settings' group as
"Project Local Variables".

   You can also use `M-x ede-set' to set a new variable local in the
mini buffer.

   In multi-level projects such as Automake and Make generating
projects, project local variables are installed from both the TOP most
project, and the local directory's project.  In that way, you can have
some variables across your whole project, and some specific to a
subdirectory.

   You can use project local variables to set any Emacs variable so that
buffers belonging to different projects can have different settings.

   NOTE: When you use project-local variables with *Note ede-cpp-root::,
the format is an association list.  For example:

     (ede-cpp-root-project "SOMENAME"
                            :file "/dir/to/some/file"
                            :local-variables
                            '((grep-command . "grep -nHi -e ")
                              (compile-command . "make -f MyCustomMakefile all")))


File: ede-cedet.info,  Node: EDE Project Features,  Prev: Project Local Variables,  Up: Modifying your project

5.5 EDE Project Features
========================

This section details user facing features of an EDE `Make' style
project.  The specified options may be the same as in a `Automake'
project, but are not the same as in an direct Automake project.

   To modify any of the specific features mentioned here, you need to
customize the project or target with `customize-project' or
`customize-target'.

   When you are customizing, you are directly manipulating slot values
in EIEIO objects.  If you are interested in additional details, see
*Note Extending EDE::

* Menu:

* Changing Compilers and Flags::
* Configurations::


File: ede-cedet.info,  Node: Changing Compilers and Flags,  Next: Configurations,  Prev: EDE Project Features,  Up: EDE Project Features

5.5.1 Changing Compilers and Flags
----------------------------------

Targets that build stuff need compilers.  To change compilers, you need
to customize the desired target.

   In the `[Make]' section, you can then choose a new compiler or
linker from the list.  If a linker you need is not available, you will
need to create a new one.  *Note Compiler and Linker objects::.

   If an existing compiler or linker is close, but you need to modify
some flag set such as adding an include path you will need to add a
configuration variable.

   To start, you should create the basic setup, and construct a makefile
with `ede-proj-regenerate'.  Look in the `Makefile' to see what
commands are inserted.  Once you have determined the variable you need
to modify, you can add a configuration for it.  *Note Configurations::.


File: ede-cedet.info,  Node: Configurations,  Prev: Changing Compilers and Flags,  Up: EDE Project Features

5.5.2 Configurations
--------------------

Configurations specify different ways to build a project.  For example,
you may configure a project to be in "debug" mode, or perhaps in
"release" mode.

   The project, and each target type all have a slot named
`configuration-variables'.  To add new variables to a configuration
find this slot in the custom buffer, and insert a new configuration.
Name it either "debug" or "release", then insert some number of
name/value pairs to it.

   You can have any number of valid configurations too.  To add a new
configuration, customize your project.  Work in the `[Settings]' block
for "configurations".  Add a new named configuration here.

   To switch between different active configurations, modify the
"configuration default" slot.


File: ede-cedet.info,  Node: Building and Debugging,  Next: Miscellaneous commands,  Prev: Modifying your project,  Up: Top

6 Building and Debugging
************************

EDE assumes you are writing some sort of program, so it attempts to
facilitate this activity.  EDE will associate the current buffer with a
target.  The target then knows how to compile or debug the given source
file.

   The following commands enable compilation and debugging.

`C-c . c'
     Compile the current target.

`C-c . C'
     Compile the entire project.

`c-c . D'
     Debug the current target.

`ede-make-dist'
     Build a distribution file for your project.

   These commands, plus project or target specific options are available
in the `Project' menu.


File: ede-cedet.info,  Node: Miscellaneous commands,  Next: Project types,  Prev: Building and Debugging,  Up: Top

7 Miscellaneous commands
************************

7.1 Rescan
==========

If you opt to go in and edit EDE project files directly, perhaps with
the `ede-edit-file-target', you will need to have Emacs rescan the
project files to update the internal data structures.

   Use `ede-rescan-toplevel' bound to `C-c . g' to refresh your system.

7.2 EDE Find File
=================

EDE can help you find files in your project.  Use `ede-find-file' bound
to `C-c . f'.  It will prompt you for a name.  You can specify the name
without a directory.  EDE will try to find a file with that name
somewhere in your project.

   EDE can use external tools to help with file finding.  Configure the
variable `ede-locate-setup-options' to help EDE find external tools.

 -- Variable: ede-locate-setup-options
     List of locate objects to try out by default.  Listed in order of
     preference.  If the first item cannot be used in a particular
     project, then the next one is tried.  It is always assumed that
     "ede-locate-base" is at end of the list.

7.3 Speedbar
============

EDE also supports the speedbar package.  While speedbar works great
against directories already, EDE provides a project display mode.  This
lets you look at your source files as they are structured in your
project.  Thus, where many files may be clumped together in one
directory, the Project view will provide a hierarchical view of your
files as grouped by target.

   You can activate speedbar in this mode with the command
`ede-speedbar'.  This is bound to `C-c . s'.


File: ede-cedet.info,  Node: Project types,  Next: Extending EDE,  Prev: Miscellaneous commands,  Up: Top

8 Project types
***************

There are currently three types of project modes.  One is
`ede-project', and shows up as `Make' and `Automake' when creating new
projects.

   The other project type handles automake projects directly from the
automake files.  EDE cannot make new projects of this type, assuming
the user will do it themselves.  Use `ede-project' in `Automake' mode
to have EDE create `Makefile.am' file, and a `configure.in' file.

   The third project style are "Simple" projects.  If you already have
project infrastructure for building and debugging, you can instead
create a simple project that identifies a project root and can look up
files.  The simple project styles are useful for working with tools
that use EDE to look up files.

* Menu:

* Make and Automake projects::  Project types of `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.


File: ede-cedet.info,  Node: Make and Automake projects,  Next: Automake direct projects,  Up: Project types

8.1 Make and Automake projects
==============================

A project of `ede-project' type creates a file called `Project.ede' in
every project directory.  This is used to track your configuration
information.  If you configure this project to be in `Makefile' mode,
then this project will autogenerate a `Makefile'.  If you configure it
in `Automake' mode a `Makefile.am' file will be created.  The automake
bootstrapping routines will also import and maintain a configure.am
script and a host of other files required by Automake.


File: ede-cedet.info,  Node: Automake direct projects,  Next: Android projects,  Prev: Make and Automake projects,  Up: Project types

8.2 Automake direct projects
============================

The project type that reads `Makefile.am' directly is derived from the
sources of the original `project-am.el' mode that was distributed
independently.  This mode eventually became EDE.  The `project-am'
project will read existing automake files, but will not generate them
automatically, or create new ones.  As such, it is useful as a browsing
tool, or as maintenance in managing file lists.


File: ede-cedet.info,  Node: Android projects,  Next: Arduino projects,  Prev: Automake direct projects,  Up: Project types

8.3 Android projects
====================

An Android project of type `ede-android-project' will detect and
support development of Android apps.  Android projects use an
`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 `ede-new' but depend on a
correctly configured Android SDK via CEDET support.

 -- Function: cedet-android-sdk-root
     The root to the android SDK.

   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 `android.el'.


File: ede-cedet.info,  Node: Arduino projects,  Next: Simple projects,  Prev: Android projects,  Up: Project types

8.4 Arduino projects
====================

An arduino project of type `ede-arduino-project' will read your
`~/.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 quiting the IDE, Emacs will be able to find your
sketches, compile them, and upload them to your arduino.

   If you have the `arduino' command on your path, EDE will be able to
find your SDK and compile your programs.


File: ede-cedet.info,  Node: Simple projects,  Prev: Arduino projects,  Up: Project types

8.5 Simple Projects
===================

There can be a wide array of Simple projects.  The root for simple
projects is the class `ede-simple-project'.  This handles the
infrastructure of storing a .ede file if needed.

   The class `ede-simple-project' is designed to be subclassed.  Then
key EDE methods can be overridden to provide a quick wrapper over any
project.

   A second project type is `ede-cpp-root'.  This project type is
designed to be created for a directory hierarchy full of C/C++ code.
It can be configured with minimal lisp knowledge to do header file
lookup for semantic, improving code completion performance.

* Menu:

* Generic::             Detect generic Make, SCons or CMake projects
* Add Generic Support:: Support more build types with Generic projects
* ede-cpp-root::        This project marks the root of a C/C++ code project.
* ede-emacs::           A project for working with Emacs.
* ede-linux::           A project for working with Linux kernels.
* Custom Locate::       Customizing how to locate files in a simple project


File: ede-cedet.info,  Node: Generic,  Next: Add Generic Support,  Up: Simple projects

8.5.1 Generic Projects
----------------------

The Generic project system provides a way for EDE to identify a project
based on the build system.  Simple aspects of how this project builds
or interacts with semantic can be done via the Customize interface.

   For C++ projects, even if the build system is supported by Generic,
may want to use *Note ede-cpp-root:: which has addtional options for
C/C++.

   Generic projects are new, and disabled by default to prevent possible
conflicts with other types of projects, to enable them, use
`ede-enable-generic-projects'.

 -- Function: ede-enable-generic-projects
     Enable generic project loaders.

   When a generic project identifies your code, you can use:

     M-x ede-customize-project

   to create an customization buffer and edit any configuration items
for your project.  It will save the configuration in `EDEConfig.el' at
the root of your project.

   Generic projects also support *Note Building and Debugging:: for the
different project types.


File: ede-cedet.info,  Node: Add Generic Support,  Next: ede-cpp-root,  Prev: Generic,  Up: Simple projects

8.5.2 Add Generic Support for new build systems
-----------------------------------------------

The Generic EDE project type can support almost any kind of build
system.  To add support for a new build system using the Generic type
is pretty easy.  Here is an example for supporting SCons:

     ;;; SCONS
     (defclass ede-generic-scons-project (ede-generic-project)
       ((buildfile :initform "SConstruct")
        )
       "Generic Project for scons.")

     (defmethod ede-generic-setup-configuration ((proj ede-generic-scons-project) config)
       "Setup a configuration for SCONS."
       (oset config build-command "scons")
       (oset config debug-command "gdb ")
       )

   The first block of code creates a new class for the SCons project
type.  It inherits from `ede-generic-project'.  The only configuration
really needed is to specify the initial value for the `buildfile' slot.
This is `SConstruct' for SCons, and is `Makefile' for supporting Make.

   The second thing to do is implement a method for your build system
that will setup the Configuration.  Each generic project gets a common
Configuration object which contains details on how to work with the
different kinds of Source code.  It also contains the build and debug
commands which should be setup here.  These are the defaults.  A user
of your generic project can customize the configuration and change
these values later.

   Once the class is created, it needs to be registered.  If you wish to
permanently add this to ede-generic.el, then you would edit
`ede-enable-generic-projects'.  If you write support just for you, you
would add a line of code like this example from SCons.

     (ede-generic-new-autoloader "edeproject-scons" "SCons"
     			    "SConstruct" 'ede-generic-scons-project)

   Adding a generic autoloader tells EDE how to identify, and
automatically create your project.

 -- Function: ede-generic-new-autoloader internal-name external-name
          projectfile class
     Add a new EDE Autoload instance for identifying a generic project.
     INTERNAL-NAME is a long name that identifies thsi project type.
     EXTERNAL-NAME is a shorter human readable name to describe the
     project.  PROJECTFILE is a file name that identifies a project of
     this type to EDE, such as a Makefile, or SConstruct file.  CLASS
     is the EIEIO class that is used to track this project.  It should
     subclass the class "ede-generic-project" project.


File: ede-cedet.info,  Node: ede-cpp-root,  Next: ede-emacs,  Prev: Add Generic Support,  Up: Simple projects

8.5.3 ede-cpp-root
------------------

The `ede-cpp-root' project type will allow you to create a single
object with no save-file in your `.emacs' file.  It will allow EDE to
provide semantic with the ability to find header files quickly.

   The `ede-cpp-root' class knows a few things about C++ projects, such
as the prevalence of "include" directories, and typical file-layout
stuff.  If this isn't sufficient, you can subclass
`ede-cpp-root-project' and add your own tweaks in just a few lines.
See the end of this file for an example.

   In the most basic case, add this to your `.emacs' file, modifying
appropriate bits as needed.

     (ede-cpp-root-project "SOMENAME" :file "/dir/to/some/file")

   Replace 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.

   The most likely reason to create this project, is to speed up
searching for includes files, or to simplify bootstrapping semantic's
ability to find files without much user interaction.  In conjunction
with semantic completion, having a short include path is key.  You can
override the default include path and system include path like this:

     (ede-cpp-root-project "NAME" :file "FILENAME"
         :include-path '( "/include" "../include" "/c/include" )
         :system-include-path '( "/usr/include/c++/3.2.2/" )
         :spp-table '( ("MOOSE" . "")
                       ("CONST" . "const") ) )

   In this case each item in the include path list is searched.  If the
directory starts with "/", then that expands to the project root
directory.  If a directory does not start with "/", then it is relative
to the default-directory of the current buffer when the file name is
expanded.

   The include path only affects C/C++ header files.  Use the slot
`:header-match-regexp' to change it.

   The `:system-include-path' allows you to specify full directory
names to include directories where system header files can be found.
These will be applied to files in this project only.

   The `: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.  See the
`semantic-lex-c-preprocessor-symbol-map' for more on how to format this
entry.

   If there is a single file in your project, you can instead set the
`:spp-files' to a list of file names relative to the root of your
project.  Specifying this is like setting the variable
`semantic-lex-c-preprocessor-symbol-file' in semantic.

   If you want to override the file-finding tool with your own function
you can do this:

     (ede-cpp-root-project "NAME" :file "FILENAME" :locate-fcn 'MYFCN)

   Where MYFCN is a symbol for a function.  The locate function can be
used in place of `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:

NAME
     The name of the file to find.

DIR
     The directory root for this cpp-root project.

   When creating a project with `ede-cpp-root', you can get additional
configurations via *Note Project Local Variables::.  Be aware that the
format for project local variables is an association list.  You cannot
use `M-x ede-set' and have your project local variables persist between
sessions.

   If the cpp-root project style is right for you, but you want a
dynamic loader, instead of hard-coding path name values in your
`.emacs', you can do that too, but you will need to write some lisp
code.

   To do that, you need to add an entry to the
`ede-project-class-files' list, and also provide two functions to teach
EDE how to load your project pattern

   It would look like this:

     (defun MY-FILE-FOR-DIR (&optional dir)
       "Return a full file name to the project file stored in DIR."
       <write your code here, or return nil>
       )

     (defun MY-ROOT-FCN ()
       "Return the root fcn for `default-directory'"
       ;; You might be able to use `ede-cpp-root-project-root'
       ;; and not write this at all.
       )

     (defun MY-LOAD (dir)
       "Load a project of type `cpp-root' for the directory DIR.
     Return nil if there isn't one."
       ;; Use your preferred constructin method here.
       (ede-cpp-root-project "NAME" :file (expand-file-name "FILE" dir)
                                    :locate-fcn 'MYFCN)
       )

     (add-to-list 'ede-project-class-files
                  (ede-project-autoload "cpp-root"
                   :name "CPP ROOT"
                   :file 'ede-cpp-root
                   :proj-file 'MY-FILE-FOR-DIR
                   :proj-root 'MY-ROOT-FCN
                   :load-type 'MY-LOAD
                   :class-sym 'ede-cpp-root)
                  t)

   This example only creates an auto-loader, and does not create a new
kind of project.


File: ede-cedet.info,  Node: ede-emacs,  Next: ede-linux,  Prev: ede-cpp-root,  Up: Simple projects

8.5.4 ede-emacs
---------------

The `ede-emacs' project will automatically identify an Emacs source
tree, and enable EDE project mode for it.

   It pre-populates the C Preprocessor symbol map for correct parsing,
and has an optimized include file identification function.


File: ede-cedet.info,  Node: ede-linux,  Next: Custom Locate,  Prev: ede-emacs,  Up: Simple projects

8.5.5 ede-linux
---------------

The `ede-linux' project will automatically identify a Linux Kernel
source tree, and enable EDE project mode for it.

   It pre-populates the C Preprocessor symbol map for reasonable
parsing, and has an optimized include file identification function.


File: ede-cedet.info,  Node: Custom Locate,  Prev: ede-linux,  Up: Simple projects

8.5.6 Custom Locate
-------------------

The various simple project styles all have one major drawback, which is
that the files in the project are not completely known to EDE.  When
the EDE API is used to try and file files by some reference name in the
project, then that could fail.

   @TODO - Add ID Utils and CScope examples

   EDE can therefore use some external locate commands, such as the unix
"locate" command, or "GNU Global".

   Configuration of the tool you want to use such as `locate', or
`global' will need to be done without the aid of EDE.  Once configured,
however, EDE can use it.

   To enable one of these tools, set the variable
`ede-locate-setup-options' with the names of different locate objects.
*Note Miscellaneous commands::.

   Configure this in your `.emacs' before loading in CEDET or EDE.  If
you want to add support for GNU Global, your configuration would look
like this:

     (setq ede-locate-setup-options '(ede-locate-global ede-locate-base))

   That way, when a search needs to be done, it will first try using
GLOBAL.  If global is not available for that directory, then it will
revert to the base locate object.  The base object always fails to find
a file.

   You can add your own locate tool but subclassing from
`ede-locate-base'.  The subclass should also implement two methods.
See the code in `ede-locate.el' for GNU Global as a simple example.


File: ede-cedet.info,  Node: Extending EDE,  Next: Project,  Prev: Project types,  Up: Top

9 Extending EDE
***************

This chapter is intended for users who want to write new parts or fix
bugs in EDE.  A knowledge of Emacs Lisp, and some EIEIO(CLOS) is
required.

   If you are in this chapter because you need to enhance or fix EDE,
here are some suggestions:

EDE doesn't recognize your project
     In this case, you will need to read *Note Detecting a Project::.
     If you think one of the existing project types should work, then
     you will need to understand the detection process, then
     investigate the project code to see what may be wrong.

EDE doesn't support your project
     In this case, you will need to read all the sections, though you
     can skip those sections specific to the secions on sourcecode and
     compiler/linker objects which are specific to the project type that
     autogenerates Makefiles.

EDE doesn't support your compiler/linker
     For the EDE project types that build makefiles, you will want to
     read the *Note Compiler and Linker objects:: section.

EDE doesn't support your language
     For the EDE project types that build makefiles, you will need to
     read the section on the `ede-proj-project', which is a project
     type that will accept new types of languages, and build Makefiles
     that support that language.

* Menu:

* Development Overview::        Overview for developers
* Detecting a Project::         How EDE identifies projects
* User interface methods::      Methods associated with keybindings
* Base project methods::        The most basic methods on EDE objects.
* EDE proj-project::            Extending Makefile generating project types.
* Sourcecode objects::          Defining new sourcecode classes.
* Compiler and Linker objects::  Defining new compilers and linkers.


File: ede-cedet.info,  Node: Development Overview,  Next: Detecting a Project,  Up: Extending EDE

9.1 Development Overview
========================

EDE is made up of a series of classes implemented with EIEIO.  These
classes define an interface that can be used to create different types
of projects.

   EDE defines two superclasses which are `ede-project' and
`ede-target'.  All commands in EDE are usually meant to address the
current project, or current target.

   All specific projects in EDE derive subclasses of the EDE
superclasses.  In this way, specific behaviors such as how a project is
saved, or how a target is compiled can be customized by a project
author in detail.  EDE communicates to these project objects via an API
using methods.  The commands you use in EDE mode are high-level
functional wrappers over these methods.  For details on different types
of projects, *Note Project types::.  *Note (eieio)Top::. For details on
using EIEIO to extending classes, and writing methods.

   Some example project types are:

`project-am'
     Autmake project which reads existing Automake files.

`ede-proj-project'
     This project type will create `Makefiles', or `Makefile.am' files
     to compile your project.

`ede-linux'
     This project type will detect linux source trees.

`ede-emacs'
     This proejct will detect an Emacs source tree.

   There are several other project types as well.

   The first class you need to know to create a new project type is
`ede-project-autoload'.  New instances of this class are needed to
define how Emacs associates different files/buffers with different
project types.  All the autoloads are kept in the variable
`ede-project-class-files'.

   The next most important class to know is `ede-project'.  This is the
baseclass defines how all projects behave.  The basic pattern for a
project is that there is one project per directory, and the topmost
project or directory defines the project as a whole.

   Key features of `ede-project' are things like name and version
number.  It also holds a list of `ede-target' objects and a list of sub
projects, or more `ede-project' objects.

   New project types must subclass `ede-project' to add special
behavior. New project types also need to subclass `ede-target' to add
specialty behavior.

   In this way, the common EDE interface is designed to work against
`ede-project', and thus all subclasses.

   `ede-project' subclasses `ede-project-placeholder'.  This is the
minimum necessary project needed to be cached between runs of Emacs.
This way, Emacs can track all projects ever seen, without loading those
projects into memory.

   Here is a high-level UML diagram for the EDE system created with
COGRE..

     +-----------------------+        +-----------------------+
     |                       |        |ede-project-placeholder|
     |ede-project-class-files|        +-----------------------+
     |                       |        +-----------------------+
     +-----------------------+        +-----------------------+
                /\                                ^
                \/                               /_\
                 |                                |
      +--------------------+                +-----------+         +----------+
      |ede-project-autoload|                |ede-project|         |ede-target|
      +--------------------+<>--------------+-----------+<>-------+----------+
      +--------------------+                +-----------+         +----------+
      +--------------------+                +-----------+         +----------+
                                                  ^
                                                 /_\
                                                  |
                            +---------------------+-----------------+
                            |                     |                 |
                            |                     |                 |
                            |                     |                 |
                   +----------------+   +-------------------+  +---------+
                   |ede-proj-project|   |project-am-makefile|  |ede-emacs|
                   +----------------+   +-------------------+  +---------+
                   +----------------+   +-------------------+  +---------+
                   +----------------+   +-------------------+  +---------+


File: ede-cedet.info,  Node: Detecting a Project,  Next: User interface methods,  Prev: Development Overview,  Up: Extending EDE

9.2 Detecting a Project
=======================

Project detection happens with the list of `ede-project-autoload'
instances stored in `ede-project-class-files'.  The full project
detection scheme works like this:

Step 1:
     `find-file-hooks' calls `ede-turn-on-hook' on BUFFER.

Step 2:
     `ede-turn-on-hook' turns on `ede-minor-mode'

Step 3:
     `ede-minor-mode' looks to see if BUFFER is associated with any
     open projects.  If not, it calls `ede-load-project-file' to find a
     project associated with the current directory BUFFER is in.

Step 4:
     `ede-minor-mode' associates the found project with the current
     buffer with a series of variables, such as `ede-object', and
     `ede-object-project' and `ede-object-root-project'.

   Once a buffer is associated, EDE minor mode commands will operate on
that buffer.

   The function `ede-load-project-file' is at the heart of detecting
projects, and it works by looping over all the known project autoload
types in `ede-project-autoload' using the utility
`ede-directory-project-p'.

   The function `ede-directory-project-p' will call
`ede-dir-to-projectfile' on every `ede-project-autoload' until one of
them returns true.  The method `ede-dir-to-projectfile' in turn gets
the `:proj-file' slot from the autoload.  If it is a string (ie, 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 part of a project, and
`ede-directory-project-p' returns the instance of
`ede-project-autoload' that matched.

   If the current directory contains the file `.ede-ignore' then that
directory is automatically assumed to contain no projects, even if
there is a matching pattern.  Use this type of file in a directory that
may contain many other sub projects, but still has a Makefile of some
sort.

   If the current directory is a project, then EDE scans upwards till
it finds the top of the project.  It does this by calling
`ede-toplevel-project'.  If this hasn't already been discovered, the
directories as scanned upward one at a time until a directory with no
project is found.  The last found project becomes the project root.  If
the ofund instance of `ede-project-autoload' has a valid `proj-root'
slot value, then that function is called instead of scanning the
project by hand.  Some project types have a short-cut for determining
the root of a project, so this comes in handy.

   Getting back to `ede-load-project-file', this now has an instance of
`ede-project-autoload'.  It uses the `load-type' slot to both autoload
in the project type, and to create a new instance of the project type
found for the root of the project.  That project is added to the global
list of all projects.  All subprojects are then created and assembled
into the project data structures.


File: ede-cedet.info,  Node: User interface methods,  Next: Base project methods,  Prev: Detecting a Project,  Up: Extending EDE

9.3 User interface methods
==========================

These methods are core behaviors associated with user commands.  If you
do not implement a method, there is a reasonable default that may do
what you need.

`project-add-file'
     Add a file to your project.  Override this if you want to put new
     sources into different fields depending on extension, or other
     details.

`project-remove-file'
     Reverse of project-add-file.

`project-compile-target'
     Override this if you want to do something special when the user
     "compiles" this target.

`project-debug-target'
     What to do when a user wants to debug your target.

`project-update-version'
     Easily update the version number of your project.

`project-edit-file-target'
     Edit the file the project's information is stored in.

`project-new-target'
     Create a new target in a project.

`project-delete-target'
     Delete a target from a project.

`project-make-dist'
     Make a distribution (tar archive) of the project.

`project-rescan'
     Rescan a project file, changing the data in the existing objects.


File: ede-cedet.info,  Node: Base project methods,  Next: EDE proj-project,  Prev: User interface methods,  Up: Extending EDE

9.4 Base project methods
========================

These methods are important for querying base information from project
and target types:

`ede-name'
     Return a string that is the name of this target.

`ede-target-name'
     Return a string that is the name of the target used by a Make
     system.

`ede-description'
     A brief description of the project or target.  This is currently
     used by the `ede-speedbar' interface.

`ede-want-file-p'
     Return non-nil if a target will accept a given file.  It is
     generally unecessary to override this.  See the section on source
     code.

`ede-buffer-mine'
     Return non-nil if a buffer belongs to this target.  Used during
     association when a file is loaded.  It is generally unecessary to
     override this unless you keep auxiliary files.

   These methods are used by the semantic package extensions *Note
(semantic)Top::.

`ede-buffer-header-file'
     Return a header file belonging to a given buffer.  Prototypes are
     place there when appropriate

`ede-buffer-documentation-files'
     Return the documentation file information about this file would be
     stored in.

`ede-documentation'
     List all documentation a project or target is responsible for.


File: ede-cedet.info,  Node: EDE proj-project,  Next: Sourcecode objects,  Prev: Base project methods,  Up: Extending EDE

9.5 EDE proj-project
====================

The EDE proj-project is a project type that will build Makefiles.  This
project type stores data in a `Project.ede', and implements new user
commands for building a Makefile.

   This project type can be extended through the use of new Targets,
*Note Sourcecode objects::, or *Note Compiler and Linker objects::.

   This project type could also be extended to support alternate forms
of build systems, though no documentation has been setup for this.

   TODO - write more for this.  See cedet-devel mailing list for help
here.


File: ede-cedet.info,  Node: Sourcecode objects,  Next: Compiler and Linker objects,  Prev: EDE proj-project,  Up: Extending EDE

9.6 Sourcecode objects
======================

EDE projects track source file / target associates via source code
objects.  The definitions for this is in `ede-source.el'.  A source
code object contains methods that know how to identify a file as being
of that class, (ie, a C file ends with `.c').  Some targets can handle
many different types of sources which must all be compiled together.
For example, a mixed C and C++ program would have instantiations of
both sourcecode types.

   When a target needs to know if it will accept a source file, it
references its list of source code objects.  These objects then make
that decision.

   Source code objects are stored in the target objects as a list of
symbols, where the symbol's value is the object.  This enables the
project save file mechanism to work.

   Here is an example for an instantiation of an Emacs Lisp source code
object:

     (defvar ede-source-emacs
       (ede-sourcecode "ede-emacs-source"
                       :name "Emacs Lisp"
                       :sourcepattern "\\.el$"
                       :garbagepattern '("*.elc"))
       "Emacs Lisp source code definition.")

   If you want to recycle parts of an existing sourcecode object, you
can clone the original, and then just tweak the parts that are
different.  For example:

     (defvar ede-source-emacs-autoload
       (clone ede-source-emacs "ede-source-emacs-autoload"
              :name "Emacs Lisp Autoload"
              :sourcepattern "-loaddefs\\.el")
       "Emacs Lisp autoload source code.")

   In this case, the garbage pattern is the same.

   *Note Sourcecode::.


File: ede-cedet.info,  Node: Compiler and Linker objects,  Prev: Sourcecode objects,  Up: Extending EDE

9.7 Compiler and Linker objects
===============================

In order for a target to create a `Makefile', it must know how to
compile the sources into the program or desired data file, and possibly
link them together.

   A compiler object instantiation is used to associate a given target
with a given source code type.  Some targets can handle many types of
sources, and thus has many compilers available to it.  Some targets may
have multiple compilers for a given type of source code.

   EDE will examine the actual source files in a target, cross reference
that against the compiler list to come up with the final set of
compilers that will be inserted into the Makefile.

   Compiler instantiations must also insert variables specifying the
compiler it plans to use, in addition to creating Automake settings for
`configure.in' when appropriate.

   Compiler objects are stored in the target objects as a list of
symbols, where the symbols value is the object.  This enables the
project output mechanism to work more efficiently.

   Targets will also have a special "compiler" slot which lets a user
explicitly choose the compiler they want to use.

   Here is an example for texinfo:

     (defvar ede-makeinfo-compiler
       (ede-compiler
        "ede-makeinfo-compiler"
        :name "makeinfo"
        :variables '(("MAKEINFO" . "makeinfo"))
        :commands '("makeinfo -o $ $<")
        :autoconf '(("AC_CHECK_PROG" . "MAKEINFO, makeinfo"))
        :sourcetype '(ede-makeinfo-source)
        )
       "Compile texinfo files into info files.")

   *Note Compilers::.

   When creating compiler instantiations, it may be useful to `clone'
an existing compiler variable.  Cloning allows you to only modify parts
of the original, while keeping the rest of the same.  Modification of
the original will result in the clone also being changed for shared
value slots.

   The second important object is the linker class.  The linker is
similar to the compiler, except several compilers might be used to
create some object files, and only one linker is used to link those
objects together.

   See `ede-proj-obj.el' for examples of the combination.

9.8 Class hierarchies
=====================

* Menu:

* Project    :: The different project types.
* Targets    :: The different target types.
* Sourcecode :: Source Code management types.
* Compilers  :: Compiler management types.


File: ede-cedet.info,  Node: Project,  Next: Targets,  Prev: Extending EDE,  Up: Top

10 Project
**********

* Menu:

* ede-project-placeholder ::
*  ede-project ::
*   ede-cpp-root-project ::
*   ede-emacs-project ::
*   ede-linux-project ::
*   ede-maven-project ::
*   ede-simple-project ::
*   ede-simple-base-project ::
*   ede-proj-project ::
*   project-am-makefile ::
*   ede-step-project ::


File: ede-cedet.info,  Node: ede-project-placeholder,  Next: ede-project,  Up: Project

10.1 ede-project-placeholder
============================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `ede-project-placeholder'

                   Children:
                         *Note ede-project::.




Create a new object with name NAME of class type ede-project-placeholder

Slots:

    `:name'
          Type: `string'
          Default Value: `"Untitled"'

          The name used when generating distribution files.

    `:version'
          Type: `string'
          Default Value: `"1.0"'

          The version number used when distributing files.

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.



10.1.1 Specialized Methods
--------------------------

 -- Method: ede-project-inode :AFTER proj
     Get the inode of the directory project PROJ is in.

 -- Method: ede-project-root :AFTER this
     If a project knows its root, return it here.  Allows for
     one-project-object-for-a-tree type systems.

 -- Method: ede-find-subproject-for-directory :AFTER proj dir
     Find a subproject of PROJ that corresponds to DIR.

 -- Method: ede-project-root-directory :AFTER this &optional file
     If a project knows its root, return it here.  Allows for
     one-project-object-for-a-tree type systems.  Optional FILE is the
     file to test.  It is ignored in preference of the anchor file for
     the project.

 -- Method: ede-project-force-load :AFTER this
     Make sure the placeholder THIS is replaced with the real thing.
     Return the new object created in its place.

 -- Method: project-interactive-select-target :AFTER this prompt
     Make sure placeholder THIS is replaced with the real thing, and
     pass through.

 -- Method: project-add-file :AFTER this file
     Make sure placeholder THIS is replaced with the real thing, and
     pass through.


File: ede-cedet.info,  Node: ede-project,  Next: ede-cpp-root-project,  Prev: ede-project-placeholder,  Up: Project

10.2 ede-project
================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `ede-project'

                        Children:
                              *Note ede-cpp-root-project::,
                              *Note ede-emacs-project::,
                              *Note ede-linux-project::,
                              *Note ede-maven-project::,
                              *Note ede-simple-project::,
                              *Note ede-simple-base-project::,
                              *Note ede-proj-project::,
                              *Note project-am-makefile::,
                              *Note ede-step-project::.





Create a new object with name NAME of class type ede-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.

    `:web-site-url'
          Type: `string'
          Default Value: `""'

          URL to this projects web site.  This is a URL to be sent to a
          web site for documentation.

    `:web-site-directory
          '
          Default Value: `""'

          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.

    `:web-site-file
          '
          Default Value: `""'

          A file which contains the home page for this project.  This
          file can be relative to slot `web-site-directory'.  This can
          be a local file, use ange-ftp, EFS, or TRAMP.

    `:ftp-site'
          Type: `string'
          Default Value: `""'

          FTP site where this project's distribution can be found.
          This FTP site should be in Emacs form, as needed by
          `ange-ftp', but can also be of a form used by TRAMP for use
          with scp, or rcp.

    `:ftp-upload-site'
          Type: `string'
          Default Value: `""'

          FTP Site to upload new distributions to.  This FTP site
          should be in Emacs form as needed by `ange-ftp'.  If this
          slot is `nil', then use `ftp-site' instead.

    `:configurations'
          Type: `list'
          Default Value: `("debug" "release")'

          List of available configuration types.  Individual
          target/project types can form associations between a
          configuration, and target specific elements such as build
          variables.

    `:configuration-default
          '
          Default Value: `"debug"'

          The default configuration.

    `:local-variables
          '
          Default Value: `nil'

          Project local variables



10.2.1 Specialized Methods
--------------------------

 -- Method: ede-preprocessor-map :AFTER this
     Get the pre-processor map for project THIS.

 -- Method: ede-subproject-relative-path :AFTER proj &optional parent-in
     Get a path name for PROJ which is relative to the parent project.
     If PARENT is specified, then be relative to the PARENT project.
     Specifying PARENT is useful for sub-sub projects relative to the
     root project.

 -- Method: eieio-speedbar-description :AFTER obj
     Provide a speedbar description for OBJ.

 -- Method: ede-map-any-target-p :AFTER this proc
     For project THIS, map PROC to all targets and return if any
     non-nil.  Return the first non-`nil' value returned by PROC.

 -- Method: project-rescan :AFTER this
     Rescan the EDE proj project THIS.

 -- Method: ede-map-subprojects :AFTER this proc
     For object THIS, execute PROC on all direct subprojects.  This
     function does not apply PROC to sub-sub projects.  See also
     "ede-map-all-subprojects".

 -- Method: ede-convert-path :AFTER this path
     Convert path in a standard way for a given project.  Default to
     making it project relative.  Argument THIS is the project to
     convert PATH to.

 -- Method: ede-name :AFTER this
     Return a short-name for THIS project file.  Do this by extracting
     the lowest directory name.

 -- Method: ede-set-project-variables :AFTER project &optional buffer
     Set variables local to PROJECT in BUFFER.

 -- Method: eieio-speedbar-derive-line-path :AFTER obj &optional depth
     Return the path to OBJ.  Optional DEPTH is the depth we start at.

 -- Method: ede-map-all-subprojects :AFTER this allproc
     For object THIS, execute PROC on THIS and  all subprojects.  This
     function also applies PROC to sub-sub projects.  See also
     "ede-map-subprojects".

 -- Method: project-update-version :AFTER ot
     The `:version' of the project OT has been updated.  Handle saving,
     or other detail.

 -- Method: ede-buffer-header-file :AFTER this buffer
     Return `nil', projects don't have header files.

 -- Method: ede-buffer-documentation-files :AFTER this buffer
     Return all documentation in project THIS based on BUFFER.

 -- Method: ede-map-targets :AFTER this proc
     For object THIS, execute PROC on all targets.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return non-`nil' if object THIS lays claim to the file in BUFFER.

 -- Method: ede-object-keybindings :BEFORE this
     Retrieves the slot `keybindings' from an object of class
     `ede-project'

 -- Method: ede-description :AFTER this
     Return a description suitable for the minibuffer about THIS.

 -- Method: eieio-speedbar-object-children :AFTER this
     Return the list of speedbar display children for THIS.

 -- Method: project-make-dist :AFTER this
     Build a distribution for the project based on THIS project.

 -- Method: ede-system-include-path :AFTER this
     Get the system include path used by project THIS.

 -- Method: project-new-target-custom :AFTER proj
     Create a new target.  It is up to the project PROJ to get the name.

 -- Method: ede-subproject-p :AFTER proj
     Return non-`nil' if PROJ is a sub project.

 -- Method: ede-expand-filename :AFTER this filename &optional force
     Return a fully qualified file name based on project THIS.
     FILENAME should be just a filename which occurs in a directory
     controlled by this project.  Optional argument FORCE forces the
     default filename to be provided even if it doesn't exist.

 -- Method: ede-menu-items-build :AFTER obj &optional current
     Return a list of menu items for building project OBJ.  If optional
     argument CURRENT is non-`nil', return sub-menu code.

 -- Method: ede-update-version-in-source :AFTER this version
     Change occurrences of a version string in sources.  In project
     THIS, cycle over all targets to give them a chance to set their
     sources to VERSION.

 -- Method: project-new-target :AFTER proj &rest args
     Create a new target.  It is up to the project PROJ to get the name.

 -- Method: project-compile-project :AFTER obj &optional command
     Compile the entire current project OBJ.  Argument COMMAND is the
     command to use when compiling.

 -- Method: eieio-speedbar-object-buttonname :AFTER object
     Return a string to use as a speedbar button for OBJECT.

 -- Method: ede-map-project-buffers :AFTER this proc
     For THIS, execute PROC on all buffers belonging to THIS.

 -- Method: ede-expand-filename-impl :AFTER this filename &optional
          force
     Return a fully qualified file name based on project THIS.
     FILENAME should be just a filename which occurs in a directory
     controlled by this project.  Optional argument FORCE forces the
     default filename to be provided even if it doesn't exist.

 -- Method: eieio-done-customizing :AFTER proj
     Call this when a user finishes customizing PROJ.

 -- Method: ede-html-documentation :AFTER this
     Return a list of HTML files provided by project THIS.

 -- Method: ede-documentation :AFTER this
     Return a list of files that provides documentation.  Documentation
     is not for object THIS, but is provided by THIS for other files in
     the project.

 -- Method: project-interactive-select-target :AFTER this prompt
     Interactively query for a target that exists in project THIS.
     Argument PROMPT is the prompt to use when querying the user for a
     target.

 -- Method: ede-target-in-project-p :AFTER proj target
     Is PROJ the parent of TARGET?  If TARGET belongs to a subproject,
     return that project file.

 -- Method: ede-find-target :AFTER proj buffer
     Fetch the target in PROJ belonging to BUFFER or nil.

 -- Method: ede-add-subproject :AFTER proj-a proj-b
     Add into PROJ-A, the subproject PROJ-B.

 -- Method: ede-commit-project :AFTER proj
     Commit any change to PROJ to its file.

 -- Method: project-dist-files :AFTER this
     Return a list of files that constitutes a distribution of THIS
     project.

 -- Method: ede-object-menu :BEFORE this
     Retrieves the slot `menu' from an object of class `ede-project'

 -- Method: ede-commit-local-variables :AFTER proj
     Commit change to local variables in PROJ.


File: ede-cedet.info,  Node: ede-cpp-root-project,  Next: ede-emacs-project,  Prev: ede-project,  Up: Project

10.3 ede-cpp-root-project
=========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-cpp-root-project'
                              No children





Create a new object with name NAME of class type ede-cpp-root-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.

    `:include-path'
          Type: `list'
          Default Value: `(quote ("/include" "../include/"))'

          The default locate function expands filenames within a
          project.  If a header file (.h, .hh, etc) name is expanded,
          and the `:locate-fcn' slot is `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.

          Directory names in the path can be relative to the current
          buffer's `default-directory' (not starting with a /).
          Directories that are relative to the project's root should
          start with a /, such as  "/include", meaning the directory
          `include' off the project root directory.

    `:system-include-path'
          Type: `list'
          Default Value: `nil'

          The system include path for files in this project.  C files
          initialized in an ede-cpp-root-project have their semantic
          system include path set to this value.  If this is `nil',
          then the semantic path is not modified.

    `:spp-table'
          Type: `list'
          Default Value: `nil'

          C Preprocessor macros for your files.  Preprocessor symbols
          will be used while parsing your files.  These macros might be
          passed in through the command line compiler, or 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.

    `:spp-files'
          Type: `list'
          Default Value: `nil'

          C header file with Preprocessor macros for your files.  The
          PreProcessor symbols appearing in these files will be used
          while parsing files in this project.  See
          `semantic-lex-c-preprocessor-symbol-map' for more on how this
          works.

    `:header-match-regexp'
          Type: `string'
          Default Value:
          `"\\.\\(h\\(h\\|xx\\|pp\\|\\+\\+\\)?\\|H\\)$\\|\\<\\w+$"'

          Regexp used to identify C/C++ header files.

    `:locate-fcn'
          Type: `(or null function)'
          Default Value: `nil'

          The locate function can be used in place of
          "ede-expand-filename" so you can quickly customize your
          custom target to use specialized local routines instead of
          the EDE routines.  The function symbol must take two
          arguments:   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.



10.3.1 Specialized Methods
--------------------------

 -- Method: initialize-instance :AFTER this &rest fields
     Make sure the `:file' is fully expanded.

 -- Method: ede-preprocessor-map :AFTER this
     Get the pre-processor map for project THIS.

 -- Method: ede-set-project-variables :AFTER project &optional buffer
     Set variables local to PROJECT in BUFFER.  Also set up the lexical
     preprocessor map.

 -- Method: ede-cpp-root-header-file-p :AFTER proj name
     Non `nil' if in PROJ the filename NAME is a header.

 -- Method: ede-system-include-path :AFTER this
     Get the system include path used by project THIS.

 -- Method: ede-project-root :AFTER this
     Return my root.

 -- Method: ede-find-subproject-for-directory :AFTER proj dir
     Return PROJ, for handling all subdirs below DIR.

 -- Method: ede-project-root-directory :AFTER this
     Return my root.

 -- Method: ede-expand-filename-impl :AFTER proj name
     Within this project PROJ, find the file NAME.  This knows details
     about or source tree.

 -- Method: ede-find-target :AFTER proj buffer
     Find an EDE target in PROJ for BUFFER.  If one doesn't exist,
     create a new one for this directory.


File: ede-cedet.info,  Node: ede-emacs-project,  Next: ede-linux-project,  Prev: ede-cpp-root-project,  Up: Project

10.4 ede-emacs-project
======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-emacs-project'
                              No children





Create a new object with name NAME of class type ede-emacs-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.



10.4.1 Specialized Methods
--------------------------

 -- Method: initialize-instance :AFTER this &rest fields
     Make sure the `:file' is fully expanded.

 -- Method: ede-project-root :AFTER this
     Return my root.

 -- Method: ede-find-subproject-for-directory :AFTER proj dir
     Return PROJ, for handling all subdirs below DIR.

 -- Method: ede-project-root-directory :AFTER this &optional file
     Return the root for THIS Emacs project with file.

 -- Method: ede-expand-filename-impl :AFTER proj name
     Within this project PROJ, find the file NAME.  Knows about how the
     Emacs source tree is organized.

 -- Method: ede-find-target :AFTER proj buffer
     Find an EDE target in PROJ for BUFFER.  If one doesn't exist,
     create a new one for this directory.


File: ede-cedet.info,  Node: ede-linux-project,  Next: ede-maven-project,  Prev: ede-emacs-project,  Up: Project

10.5 ede-linux-project
======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-linux-project'
                              No children





Create a new object with name NAME of class type ede-linux-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.



10.5.1 Specialized Methods
--------------------------

 -- Method: initialize-instance :AFTER this &rest fields
     Make sure the `:file' is fully expanded.

 -- Method: ede-project-root :AFTER this
     Return my root.

 -- Method: ede-find-subproject-for-directory :AFTER proj dir
     Return PROJ, for handling all subdirs below DIR.

 -- Method: ede-project-root-directory :AFTER this &optional file
     Return the root for THIS Linux project with file.

 -- Method: ede-expand-filename-impl :AFTER proj name
     Within this project PROJ, find the file NAME.  Knows about how the
     Linux source tree is organized.

 -- Method: ede-find-target :AFTER proj buffer
     Find an EDE target in PROJ for BUFFER.  If one doesn't exist,
     create a new one for this directory.


File: ede-cedet.info,  Node: ede-maven-project,  Next: ede-simple-project,  Prev: ede-linux-project,  Up: Project

10.6 ede-maven-project
======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-maven-project'
                              No children





Create a new object with name NAME of class type ede-maven-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.



10.6.1 Specialized Methods
--------------------------

 -- Method: initialize-instance :AFTER this &rest fields
     Make sure the `:targets' is setup.

 -- Method: ede-project-root :AFTER this
     Return my root.

 -- Method: ede-find-subproject-for-directory :AFTER proj dir
     Return PROJ, for handling all subdirs below DIR.

 -- Method: ede-project-root-directory :AFTER this &optional file
     Return the root for THIS Maven project with file.

 -- Method: ede-find-target :AFTER proj buffer
     Find an EDE target in PROJ for BUFFER.  If one doesn't exist,
     create a new one for this directory.


File: ede-cedet.info,  Node: ede-simple-project,  Next: ede-simple-base-project,  Prev: ede-maven-project,  Up: Project

10.7 ede-simple-project
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-simple-project'
                              No children





Create a new object with name NAME of class type ede-simple-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.



10.7.1 Specialized Methods
--------------------------

 -- Method: ede-find-subproject-for-directory :AFTER proj dir
     Return PROJ, for handling all subdirs below DIR.

 -- Method: ede-commit-project :AFTER proj
     Commit any change to PROJ to its file.


File: ede-cedet.info,  Node: ede-simple-base-project,  Next: ede-proj-project,  Prev: ede-simple-project,  Up: Project

10.8 ede-simple-base-project
============================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-simple-base-project'
                              No children





EDE Simple project base class.  This one project could control a tree
of subdirectories.



File: ede-cedet.info,  Node: ede-proj-project,  Next: project-am-makefile,  Prev: ede-simple-base-project,  Up: Project

10.9 ede-proj-project
=====================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-proj-project'
                              No children





Create a new object with name NAME of class type ede-proj-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.

    `:makefile-type'
          Type: `symbol'
          Default Value: `Makefile'

          The type of Makefile to generate.  Can be one of `'Makefile',
          'Makefile.in, or 'Makefile.am.  If this value is NOT
          `'Makefile', then that overrides the `:makefile' slot in
          targets.

    `:variables'
          Type: `list'
          Default Value: `nil'

          Variables to set in this Makefile.

    `:configuration-variables'
          Type: `list'
          Default Value: `("debug" (("DEBUG" . "1")))'

          Makefile variables to use in different configurations.  These
          variables are used in the makefile when a configuration
          becomes active.

    `:inference-rules
          '
          Default Value: `nil'

          Inference rules to add to the makefile.

    `:include-file
          '
          Default Value: `nil'

          Additional files to include.  These files can contain
          additional rules, variables, and customizations.

    `:automatic-dependencies'
          Type: `boolean'
          Default Value: `t'

          Non-`nil' to do implement automatic dependencies in the
          Makefile.

    `:metasubproject'
          Type: `boolean'
          Default Value: `nil'

          Non-`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 `dist' rule will then avoid making a tar file.



10.9.1 Specialized Methods
--------------------------

 -- Method: project-rescan :AFTER this
     Rescan the EDE proj project THIS.

 -- Method: ede-proj-makefile-create :AFTER this mfilename
     Create a Makefile for all Makefile targets in THIS.  MFILENAME is
     the makefile to generate.

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Insert rules needed by THIS target.

 -- Method: ede-proj-makefile-tags :AFTER this targets
     Insert into the current location rules to make recursive TAGS
     files.  Argument THIS is the project to create tags for.  Argument
     TARGETS are the targets we should depend on for TAGS.

 -- Method: project-update-version :AFTER this
     The `:version' of project THIS has changed.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.

 -- Method: ede-proj-makefile-insert-variables :AFTER this
     Insert variables needed by target THIS.

 -- Method: project-make-dist :AFTER this
     Build a distribution for the project based on THIS target.

 -- Method: ede-proj-makefile-insert-dist-rules :AFTER this
     Insert distribution rules for THIS in a Makefile, such as CLEAN
     and DIST.

 -- Method: project-new-target-custom :AFTER this
     Create a new target in THIS for custom.

 -- Method: ede-proj-makefile-insert-dist-dependencies :AFTER this
     Insert any symbols that the DIST rule should depend on.  Argument
     THIS is the project that should insert stuff.

 -- Method: ede-proj-makefile-insert-subproj-rules :AFTER this
     Insert a rule for the project THIS which should be a subproject.

 -- Method: ede-proj-makefile-create-maybe :AFTER this mfilename
     Create a Makefile for all Makefile targets in THIS if needed.
     MFILENAME is the makefile to generate.

 -- Method: ede-proj-configure-test-required-file :AFTER this file
     For project THIS, test that the file FILE exists, or create it.

 -- Method: ede-proj-setup-buildenvironment :AFTER this &optional force
     Setup the build environment for project THIS.  Handles the
     Makefile, or a Makefile.am configure.in combination.  Optional
     argument FORCE will force items to be regenerated.

 -- Method: ede-proj-makefile-garbage-patterns :AFTER this
     Return a list of patterns that are considered garbage to THIS.
     These are removed with make clean.

 -- Method: ede-proj-configure-synchronize :AFTER this
     Synchronize what we know about project THIS into configure.in.

 -- Method: project-new-target :AFTER this &optional name type autoadd
     Create a new target in THIS based on the current buffer.

 -- Method: project-compile-project :AFTER proj &optional command
     Compile the entire current project PROJ.  Argument COMMAND is the
     command to use when compiling.

 -- Method: ede-proj-makefile-insert-variables-new :AFTER this
     Insert variables needed by target THIS.

     NOTE: Not yet in use!  This is part of an SRecode conversion of
       EDE that is in progress.

 -- Method: ede-proj-makefile-configuration-variables :AFTER this
          configuration
     Return a list of configuration variables from THIS.  Use
     CONFIGURATION as the current configuration to query.

 -- Method: eieio-done-customizing :AFTER proj
     Call this when a user finishes customizing this object.  Argument
     PROJ is the project to save.

 -- Method: ede-proj-configure-recreate :AFTER this
     Delete project THISes configure script and start over.

 -- Method: ede-proj-makefile-insert-user-rules :AFTER this
     Insert user specified rules needed by THIS target.  This is
     different from "ede-proj-makefile-insert-rules" in that this
     function won't create the building rules which are auto created
     with automake.

 -- Method: ede-proj-dist-makefile :AFTER this
     Return the name of the Makefile with the DIST target in it for
     THIS.

 -- Method: ede-proj-configure-file :AFTER this
     The configure.in script used by project THIS.

 -- Method: ede-commit-project :AFTER proj
     Commit any change to PROJ to its file.

 -- Method: project-dist-files :AFTER this
     Return a list of files that constitutes a distribution of THIS
     project.

 -- Method: ede-commit-local-variables :AFTER proj
     Commit change to local variables in PROJ.


File: ede-cedet.info,  Node: project-am-makefile,  Next: ede-step-project,  Prev: ede-proj-project,  Up: Project

10.10 project-am-makefile
=========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `project-am-makefile'
                              No children





Create a new object with name NAME of class type project-am-makefile

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'
          Default Value: `nil'

          Top level targets in this makefile.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.



10.10.1 Specialized Methods
---------------------------

 -- Method: project-rescan :AFTER this
     Rescan the makefile for all targets and sub targets.

 -- Method: project-am-subtree :AFTER ampf subdir
     Return the sub project in AMPF specified by SUBDIR.

 -- Method: project-targets-for-file :AFTER proj
     Return a list of targets the project PROJ.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.

 -- Method: project-new-target :AFTER proj &optional name type
     Create a new target named NAME.  Argument TYPE is the type of
     target to insert.  This is a string matching something in
     `project-am-type-alist' or type class symbol.  Despite the fact
     that this is a method, it depends on the current buffer being in
     order to provide a smart default target type.

 -- Method: project-compile-project :AFTER obj &optional command
     Compile the entire current project.  Argument COMMAND is the
     command to use when compiling.

 -- Method: ede-find-target :AFTER amf buffer
     Fetch the target belonging to BUFFER.


File: ede-cedet.info,  Node: ede-step-project,  Prev: project-am-makefile,  Up: Project

10.11 ede-step-project
======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-project-placeholder::.'

                   `*Note ede-project::.'

                        `ede-step-project'
                              No children





Create a new object with name NAME of class type ede-step-project

Slots:

    `:directory'
          Type: `string'

          Directory this project is associated with.

    `:file'
          Type: `string'

          File name where this project is stored.

    `:targets'
          Type: `list'

          List of top level targets in this project.

    `:tool-cache'
          Type: `list'

          List of tool cache configurations in this project.  This
          allows any tool to create, manage, and persist
          project-specific settings.

    `:init-variables'
          Type: `list'
          Default Value: `nil'

          Variables to set in this Makefile, at top of file.

    `:additional-variables'
          Type: `(or null list)'
          Default Value: `nil'

          Arbitrary variables needed from this project.  It is safe to
          leave this blank.

    `:additional-rules'
          Type: `(or null list)'
          Default Value: `nil'

          Arbitrary rules and dependencies needed to make this target.
          It is safe to leave this blank.

    `:installation-domain'
          Type: `symbol'
          Default Value: `user'

          Installation domain specification.  The variable
          GNUSTEP_INSTALLATION_DOMAIN is set at this value.

    `:preamble'
          Type: `(or null list)'
          Default Value: `(quote ("GNUmakefile.preamble"))'

          The auxiliary makefile for additional variables.  Included
          just before the specific target files.

    `:postamble'
          Type: `(or null list)'
          Default Value: `(quote ("GNUmakefile.postamble"))'

          The auxiliary makefile for additional rules.  Included just
          after the specific target files.

    `:metasubproject'
          Type: `boolean'
          Default Value: `nil'

          Non-`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 `dist' rule will then avoid making a tar file.



10.11.1 Specialized Methods
---------------------------

 -- Method: project-rescan :AFTER this
     Rescan the EDE proj project THIS.

 -- Method: ede-proj-makefile-create :AFTER this mfilename
     Create a GNUmakefile for all Makefile targets in THIS.  MFILENAME
     is the makefile to generate.

 -- Method: project-update-version :AFTER this
     The `:version' of project THIS has changed.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.

 -- Method: project-make-dist :AFTER this
     Build a distribution for the project based on THIS target.

 -- Method: project-new-target-custom :AFTER this
     Create a new target in THIS for custom.

 -- Method: ede-proj-makefile-create-maybe :AFTER this mfilename
     Create a Makefile for all Makefile targets in THIS if needed.
     MFILENAME is the makefile to generate.

 -- Method: ede-proj-setup-buildenvironment :AFTER this &optional force
     Setup the build environment for project THIS.  Handles the
     Makefile, or a Makefile.am configure.in combination.  Optional
     argument FORCE will force items to be regenerated.

 -- Method: project-new-target :AFTER this &optional name type autoadd
     Create a new target in THIS based on the current buffer.

 -- Method: project-compile-project :AFTER proj &optional command
     Compile the entire current project PROJ.  Argument COMMAND is the
     command to use when compiling.

 -- Method: eieio-done-customizing :AFTER proj
     Call this when a user finishes customizing this object.  Argument
     PROJ is the project to save.

 -- Method: ede-proj-dist-makefile :AFTER this
     Return the name of the Makefile with the DIST target in it for
     THIS.

 -- Method: ede-commit-project :AFTER proj
     Commit any change to PROJ to its file.

 -- Method: project-dist-files :AFTER this
     Return a list of files that constitutes a distribution of THIS
     project.

 -- Method: ede-commit-local-variables :AFTER proj
     Commit change to local variables in PROJ.


File: ede-cedet.info,  Node: Targets,  Next: Sourcecode,  Prev: Project,  Up: Top

11 Targets
**********

* Menu:

* ede-target ::
*  ede-cpp-root-target ::
*  ede-emacs-target-c ::
*  ede-emacs-target-el ::
*  ede-emacs-target-misc ::
*  ede-linux-target-c ::
*  ede-linux-target-misc ::
*  ede-maven-target-java ::
*  ede-maven-target-c ::
*  ede-maven-target-misc ::
*  ede-simple-target ::
*  ede-proj-target ::
*   ede-proj-target-makefile ::
*    semantic-ede-proj-target-grammar ::
*    ede-proj-target-makefile-objectcode ::
*     ede-proj-target-makefile-archive ::
*     ede-proj-target-makefile-program ::
*      ede-proj-target-makefile-shared-object ::
*    ede-proj-target-elisp ::
*     ede-proj-target-elisp-autoloads ::
*    ede-proj-target-makefile-miscelaneous ::
*    ede-proj-target-makefile-info ::
*   ede-proj-target-aux ::
*   ede-proj-target-scheme ::
*  project-am-target ::
*   project-am-objectcode ::
*    project-am-program ::
*    project-am-lib ::
*   project-am-header ::
*    project-am-header-noinst ::
*    project-am-header-inst ::
*   project-am-lisp ::
*   project-am-texinfo ::
*   project-am-man ::


File: ede-cedet.info,  Node: ede-target,  Next: ede-cpp-root-target,  Up: Targets

11.1 ede-target
===============

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `ede-target'

                   Children:
                         *Note ede-cpp-root-target::,
                         *Note ede-emacs-target-c::,
                         *Note ede-emacs-target-el::,
                         *Note ede-emacs-target-misc::,
                         *Note ede-linux-target-c::,
                         *Note ede-linux-target-misc::,
                         *Note ede-maven-target-java::,
                         *Note ede-maven-target-c::,
                         *Note ede-maven-target-misc::,
                         *Note ede-simple-target::,
                         *Note ede-proj-target::,
                         *Note project-am-target::.




Create a new object with name NAME of class type ede-target

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:source'
          Type: `list'
          Default Value: `nil'

          Source files in this target.

    `:versionsource'
          Type: `list'
          Default Value: `nil'

          Source files with a version string in them.  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.



11.1.1 Specialized Methods
--------------------------

 -- Method: ede-preprocessor-map :AFTER this
     Get the pre-processor map for project THIS.

 -- Method: eieio-speedbar-description :AFTER obj
     Provide a speedbar description for OBJ.

 -- Method: project-compile-target :AFTER obj &optional command
     Compile the current target OBJ.  Argument COMMAND is the command
     to use for compiling the target.

 -- Method: project-debug-target :AFTER obj
     Run the current project target OBJ in a debugger.

 -- Method: ede-convert-path :AFTER this path
     Convert path in a standard way for a given project.  Default to
     making it project relative.  Argument THIS is the project to
     convert PATH to.

 -- Method: ede-name :AFTER this
     Return the name of THIS targt.

 -- Method: ede-target-buffer-in-sourcelist :AFTER this buffer source
     Return non-`nil' if object THIS is in BUFFER to a SOURCE list.
     Handles complex path issues.

 -- Method: eieio-speedbar-derive-line-path :AFTER obj &optional depth
     Return the path to OBJ.  Optional DEPTH is the depth we start at.

 -- Method: ede-buffer-header-file :AFTER this buffer
     There are no default header files in EDE.  Do a quick check to see
     if there is a Header tag in this buffer.

 -- Method: project-remove-file :AFTER ot fnnd
     Remove the current buffer from project target OT.  Argument FNND
     is an argument.

 -- Method: ede-buffer-documentation-files :AFTER this buffer
     Check for some documentation files for THIS.  Also do a quick
     check to see if there is a Documentation tag in this BUFFER.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return non-`nil' if object THIS lays claim to the file in BUFFER.

 -- Method: ede-map-target-buffers :AFTER this proc
     For THIS, execute PROC on all buffers belonging to THIS.

 -- Method: eieio-speedbar-child-description :AFTER obj
     Provide a speedbar description for a plain-child of OBJ.  A plain
     child is a child element which is not an EIEIO object.

 -- Method: ede-object-keybindings :BEFORE this
     Retrieves the slot `keybindings' from an object of class
     `ede-target'

 -- Method: ede-description :AFTER this
     Return a description suitable for the minibuffer about THIS.

 -- Method: eieio-speedbar-object-children :AFTER this
     Return the list of speedbar display children for THIS.

 -- Method: ede-system-include-path :AFTER this
     Get the system include path used by project THIS.

 -- Method: ede-object-sourcecode :BEFORE this
     Retrieves the slot `sourcetype' from an object of class
     `ede-target'

 -- Method: ede-expand-filename :AFTER this filename &optional force
     Return a fully qualified file name based on target THIS.  FILENAME
     should a a filename which occurs in a directory in which THIS
     works.  Optional argument FORCE forces the default filename to be
     provided even if it doesn't exist.

 -- Method: ede-menu-items-build :AFTER obj &optional current
     Return a list of menu items for building target OBJ.  If optional
     argument CURRENT is non-`nil', return sub-menu code.

 -- Method: ede-want-file-p :AFTER this file
     Return non-`nil' if THIS target wants FILE.

 -- Method: ede-update-version-in-source :AFTER this version
     In sources for THIS, change version numbers to VERSION.

 -- Method: project-delete-target :AFTER ot
     Delete the current target OT from its parent project.

 -- Method: ede-target-sourcecode :AFTER this
     Return the sourcecode objects which THIS permits.

 -- Method: eieio-speedbar-child-make-tag-lines :AFTER this depth
     Create a speedbar tag line for a child of THIS.  It has depth
     DEPTH.

 -- Method: eieio-speedbar-object-buttonname :AFTER object
     Return a string to use as a speedbar button for OBJECT.

 -- Method: eieio-done-customizing :AFTER target
     Call this when a user finishes customizing TARGET.

 -- Method: project-edit-file-target :AFTER ot
     Edit the target OT associated w/ this file.

 -- Method: ede-documentation :AFTER this
     Return a list of files that provides documentation.  Documentation
     is not for object THIS, but is provided by THIS for other files in
     the project.

 -- Method: ede-want-file-source-p :AFTER this file
     Return non-`nil' if THIS target wants FILE.

 -- Method: ede-want-file-auxiliary-p :AFTER this file
     Return non-`nil' if THIS target wants FILE.

 -- Method: project-add-file :AFTER ot file
     Add the current buffer into project project target OT.  Argument
     FILE is the file to add.

 -- Method: ede-target-name :AFTER this
     Return the name of THIS target, suitable for make or debug style
     commands.

 -- Method: ede-object-menu :BEFORE this
     Retrieves the slot `menu' from an object of class `ede-target'


File: ede-cedet.info,  Node: ede-cpp-root-target,  Next: ede-emacs-target-c,  Prev: ede-target,  Up: Targets

11.2 ede-cpp-root-target
========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-cpp-root-target'
                         No children




Create a new object with name NAME of class type ede-cpp-root-target

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.2.1 Specialized Methods
--------------------------

 -- Method: ede-preprocessor-map :AFTER this
     Get the pre-processor map for project THIS.

 -- Method: ede-system-include-path :AFTER this
     Get the system include path used by project THIS.


File: ede-cedet.info,  Node: ede-emacs-target-c,  Next: ede-emacs-target-el,  Prev: ede-cpp-root-target,  Up: Targets

11.3 ede-emacs-target-c
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-emacs-target-c'
                         No children




Create a new object with name NAME of class type ede-emacs-target-c

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.3.1 Specialized Methods
--------------------------

 -- Method: ede-preprocessor-map :AFTER this
     Get the pre-processor map for Emacs C code.  All files need the
     macros from lisp.h!


File: ede-cedet.info,  Node: ede-emacs-target-el,  Next: ede-emacs-target-misc,  Prev: ede-emacs-target-c,  Up: Targets

11.4 ede-emacs-target-el
========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-emacs-target-el'
                         No children




Create a new object with name NAME of class type ede-emacs-target-el

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-emacs-target-misc,  Next: ede-linux-target-c,  Prev: ede-emacs-target-el,  Up: Targets

11.5 ede-emacs-target-misc
==========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-emacs-target-misc'
                         No children




Create a new object with name NAME of class type ede-emacs-target-misc

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-linux-target-c,  Next: ede-linux-target-misc,  Prev: ede-emacs-target-misc,  Up: Targets

11.6 ede-linux-target-c
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-linux-target-c'
                         No children




Create a new object with name NAME of class type ede-linux-target-c

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.6.1 Specialized Methods
--------------------------

 -- Method: ede-preprocessor-map :AFTER this
     Get the pre-processor map for Linux C code.  All files need the
     macros from lisp.h!


File: ede-cedet.info,  Node: ede-linux-target-misc,  Next: ede-maven-target-java,  Prev: ede-linux-target-c,  Up: Targets

11.7 ede-linux-target-misc
==========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-linux-target-misc'
                         No children




Create a new object with name NAME of class type ede-linux-target-misc

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-maven-target-java,  Next: ede-maven-target-c,  Prev: ede-linux-target-misc,  Up: Targets

11.8 ede-maven-target-java
==========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-maven-target-java'
                         No children




Create a new object with name NAME of class type ede-maven-target-java

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-maven-target-c,  Next: ede-maven-target-misc,  Prev: ede-maven-target-java,  Up: Targets

11.9 ede-maven-target-c
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-maven-target-c'
                         No children




Create a new object with name NAME of class type ede-maven-target-c

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-maven-target-misc,  Next: ede-simple-target,  Prev: ede-maven-target-c,  Up: Targets

11.10 ede-maven-target-misc
===========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-maven-target-misc'
                         No children




Create a new object with name NAME of class type ede-maven-target-misc

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-simple-target,  Next: ede-proj-target,  Prev: ede-maven-target-misc,  Up: Targets

11.11 ede-simple-target
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-simple-target'
                         No children




Create a new object with name NAME of class type ede-simple-target

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.




File: ede-cedet.info,  Node: ede-proj-target,  Next: ede-proj-target-makefile,  Prev: ede-simple-target,  Up: Targets

11.12 ede-proj-target
=====================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `ede-proj-target'

                        Children:
                              *Note ede-proj-target-makefile::,
                              *Note ede-proj-target-aux::,
                              *Note ede-proj-target-scheme::.





Create a new object with name NAME of class type ede-proj-target

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:auxsource'
          Type: `list'
          Default Value: `nil'

          Auxilliary 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.

    `:compiler'
          Type: `(or null symbol)'
          Default Value: `nil'

          The compiler to be used to compile this object.  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.

    `:linker'
          Type: `(or null symbol)'
          Default Value: `nil'

          The linker to be used to link compiled sources for this
          object.  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.



11.12.1 Specialized Methods
---------------------------

 -- Method: project-compile-target :AFTER obj &optional command
     Compile the current target OBJ.  Argument COMMAND is the command
     to use for compiling the target.

 -- Method: project-rescan :AFTER this readstream
     Rescan target THIS from the read list READSTREAM.

 -- Method: project-debug-target :AFTER obj
     Run the current project target OBJ in a debugger.

 -- Method: ede-proj-configure-add-missing :AFTER this
     Query if any files needed by THIS provided by automake are missing.
     Results in -add-missing being passed to automake.

 -- Method: ede-proj-flush-autoconf :AFTER this
     Flush the configure file (current buffer) to accomodate THIS.  By
     flushing, remove any cruft that may be in the file.  Subsequent
     calls to "ede-proj-tweak-autoconf" can restore items removed by
     flush.

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Insert rules needed by THIS target.

 -- Method: project-remove-file :AFTER target file
     For TARGET, remove FILE.  FILE must be massaged by
     "ede-convert-path".

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.

 -- Method: ede-proj-configure-create-missing :AFTER this
     Add any missing files for THIS by creating them.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-insert-variables :AFTER this &optional
          moresource
     Insert variables needed by target THIS.  Optional argument
     MORESOURCE is a list of additional sources to add to the sources
     variable.

 -- Method: ede-proj-makefile-insert-automake-post-variables :AFTER this
     Insert variables needed by target THIS in Makefile.am after
     SOURCES.

 -- Method: ede-proj-makefile-insert-dist-dependencies :AFTER this
     Insert any symbols that the DIST rule should depend on.  Argument
     THIS is the target that should insert stuff.

 -- Method: ede-proj-linkers :AFTER obj
     List of linkers being used by OBJ.  If the `linker' slot is empty,
     concoct one on a first match found basis for any given type from
     the `availablelinkers' slot.  Otherwise, return the `linker' slot.
     Converts all symbols into the objects to be used.

 -- Method: ede-proj-makefile-garbage-patterns :AFTER this
     Return a list of patterns that are considered garbage to THIS.
     These are removed with make clean.

 -- Method: ede-proj-tweak-autoconf :AFTER this
     Tweak the configure file (current buffer) to accomodate THIS.

 -- Method: ede-proj-compilers :AFTER obj
     List of compilers being used by OBJ.  If the `compiler' slot is
     empty, concoct one on a first match found basis for any given type
     from the `availablecompilers' slot.  Otherwise, return the
     `compiler' slot.  Converts all symbols into the objects to be used.

 -- Method: project-delete-target :AFTER this
     Delete the current target THIS from its parent project.

 -- Method: ede-proj-makefile-target-name :AFTER this
     Return the name of the main target for THIS target.

 -- Method: eieio-done-customizing :AFTER target
     Call this when a user finishes customizing this object.  Argument
     TARGET is the project we are completing customization on.

 -- Method: ede-proj-makefile-insert-user-rules :AFTER this
     Insert user specified rules needed by THIS target.

 -- Method: project-add-file :AFTER this file
     Add to target THIS the current buffer represented as FILE.

 -- Method: ede-proj-makefile-insert-automake-pre-variables :AFTER this
     Insert variables needed by target THIS in Makefile.am before
     SOURCES.

 -- Method: ede-proj-makefile-insert-dist-filepatterns :AFTER this
     Insert any symbols that the DIST rule should depend on.  Argument
     THIS is the target that should insert stuff.

 -- Method: ede-proj-makefile-dependency-files :AFTER this
     Return a list of source files to convert to dependencies.
     Argument THIS is the target to get sources from.

 -- Method: ede-proj-makefile-insert-source-variables :AFTER this
          &optional moresource
     Insert the source variables needed by THIS.  Optional argument
     MORESOURCE is a list of additional sources to add to the sources
     variable.


File: ede-cedet.info,  Node: ede-proj-target-makefile,  Next: semantic-ede-proj-target-grammar,  Prev: ede-proj-target,  Up: Targets

11.13 ede-proj-target-makefile
==============================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `ede-proj-target-makefile'

                             Children:
                                   *Note semantic-ede-proj-target-grammar::,
                                   *Note ede-proj-target-makefile-objectcode::,
                                   *Note ede-proj-target-elisp::,
                                   *Note ede-proj-target-makefile-miscelaneous::,
                                   *Note ede-proj-target-makefile-info::.






Create a new object with name NAME of class type
ede-proj-target-makefile

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:makefile'
          Type: `string'
          Default Value: `"Makefile"'

          File name of generated Makefile.

    `:partofall'
          Type: `boolean'
          Default Value: `t'

          Non `nil' means the rule created is part of the all target.
          Setting this to `nil' creates the rule to build this item,
          but does not include it in the ALL`all:' rule.

    `:configuration-variables'
          Type: `list'
          Default Value: `nil'

          Makefile variables appended to use in different
          configurations.  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.

    `:rules'
          Type: `list'
          Default Value: `nil'

          Arbitrary rules and dependencies needed to make this target.
          It is safe to leave this blank.



11.13.1 Specialized Methods
---------------------------

 -- Method: ede-proj-makefile-dependencies :AFTER this
     Return a string representing the dependencies for THIS.  Some
     compilers only use the first element in the dependencies, others
     have a list of intermediates (object files), and others don't care.
     This allows customization of how these elements appear.

 -- Method: project-compile-target :AFTER obj &optional command
     Compile the current target program OBJ.  Optional argument COMMAND
     is the s the alternate command to use.

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Insert rules needed by THIS target.

 -- Method: ede-proj-makefile-insert-variables :AFTER this &optional
          moresource
     Insert variables needed by target THIS.  Optional argument
     MORESOURCE is a list of additional sources to add to the sources
     variable.

 -- Method: ede-proj-makefile-insert-commands :AFTER this
     Insert the commands needed by target THIS.  For targets, insert
     the commands needed by the chosen compiler.

 -- Method: ede-proj-makefile-configuration-variables :AFTER this
          configuration
     Return a list of configuration variables from THIS.  Use
     CONFIGURATION as the current configuration to query.


File: ede-cedet.info,  Node: semantic-ede-proj-target-grammar,  Next: ede-proj-target-makefile-objectcode,  Prev: ede-proj-target-makefile,  Up: Targets

11.14 semantic-ede-proj-target-grammar
======================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `semantic-ede-proj-target-grammar'
                                   No children






Create a new object with name NAME of class type
semantic-ede-proj-target-grammar

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.14.1 Specialized Methods
---------------------------

 -- Method: project-compile-target :AFTER obj
     Compile all sources in a Lisp target OBJ.

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Insert rules needed by THIS target.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.  Lays
     claim to all -by.el, and -wy.el files.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-insert-dist-dependencies :AFTER this
     Insert dist dependencies, or intermediate targets.  This makes
     sure that all grammar lisp files are created before the dist runs,
     so they are always up to date.  Argument THIS is the target that
     should insert stuff.


File: ede-cedet.info,  Node: ede-proj-target-makefile-objectcode,  Next: ede-proj-target-makefile-archive,  Prev: semantic-ede-proj-target-grammar,  Up: Targets

11.15 ede-proj-target-makefile-objectcode
=========================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `ede-proj-target-makefile-objectcode'

                                  Children:
                                        *Note ede-proj-target-makefile-archive::,
                                        *Note ede-proj-target-makefile-program::.







Create a new object with name NAME of class type
ede-proj-target-makefile-objectcode

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:configuration-variables'
          Type: `list'
          Default Value: `("debug" ("CFLAGS" . "-g") ("LDFLAGS" .
          "-g"))'

          *Note ede-proj-target-makefile::.


11.15.1 Specialized Methods
---------------------------

 -- Method: ede-buffer-header-file :AFTER this buffer
     There are no default header files.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-insert-variables :AFTER this &optional
          moresource
     Insert variables needed by target THIS.  Optional argument
     MORESOURCE is not used.

 -- Method: ede-proj-makefile-dependency-files :AFTER this
     Return a list of source files to convert to dependencies.
     Argument THIS is the target to get sources from.


File: ede-cedet.info,  Node: ede-proj-target-makefile-archive,  Next: ede-proj-target-makefile-program,  Prev: ede-proj-target-makefile-objectcode,  Up: Targets

11.16 ede-proj-target-makefile-archive
======================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `*Note ede-proj-target-makefile-objectcode::.'

                                  `ede-proj-target-makefile-archive'
                                        No children







Create a new object with name NAME of class type
ede-proj-target-makefile-archive

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.16.1 Specialized Methods
---------------------------

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Create the make rule needed to create an archive for THIS.

 -- Method: ede-proj-makefile-insert-source-variables :PRIMARY this
     Insert bin_PROGRAMS variables needed by target THIS.  We aren't
     acutally inserting SOURCE details, but this is used by the
     Makefile.am generator, so use it to add this important bin program.


File: ede-cedet.info,  Node: ede-proj-target-makefile-program,  Next: ede-proj-target-makefile-shared-object,  Prev: ede-proj-target-makefile-archive,  Up: Targets

11.17 ede-proj-target-makefile-program
======================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `*Note ede-proj-target-makefile-objectcode::.'

                                  `ede-proj-target-makefile-program'

                                       Children:
                                             *Note ede-proj-target-makefile-shared-object::.








Create a new object with name NAME of class type
ede-proj-target-makefile-program

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:ldlibs'
          Type: `list'
          Default Value: `nil'

          Libraries, such as "m" or "Xt" which this program depends on.
          The linker flag "-l" is automatically prepended.  Do not
          include a "lib" prefix, or a ".so" suffix.

          Note: Currently only used for Automake projects.

    `:ldflags'
          Type: `list'
          Default Value: `nil'

          Additional flags to add when linking this target.  Use ldlibs
          to add addition libraries.  Use this to specify specific
          options to the linker.

          Note: Not currently used.  This bug needs to be fixed.



11.17.1 Specialized Methods
---------------------------

 -- Method: project-debug-target :AFTER obj
     Debug a program target OBJ.

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Insert rules needed by THIS target.

 -- Method: ede-proj-makefile-insert-automake-post-variables :AFTER this
     Insert bin_PROGRAMS variables needed by target THIS.

 -- Method: ede-proj-makefile-insert-automake-pre-variables :AFTER this
     Insert bin_PROGRAMS variables needed by target THIS.


File: ede-cedet.info,  Node: ede-proj-target-makefile-shared-object,  Next: ede-proj-target-elisp,  Prev: ede-proj-target-makefile-program,  Up: Targets

11.18 ede-proj-target-makefile-shared-object
============================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `*Note ede-proj-target-makefile-objectcode::.'

                                  `*Note ede-proj-target-makefile-program::.'

                                       `ede-proj-target-makefile-shared-object'
                                             No children








Create a new object with name NAME of class type
ede-proj-target-makefile-shared-object

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.18.1 Specialized Methods
---------------------------

 -- Method: ede-proj-configure-add-missing :AFTER this
     Query if any files needed by THIS provided by automake are missing.
     Results in -add-missing being passed to automake.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-insert-automake-post-variables :AFTER this
     Insert bin_PROGRAMS variables needed by target THIS.  We need to
     override -program which has an LDADD element.

 -- Method: ede-proj-makefile-target-name :AFTER this
     Return the name of the main target for THIS target.

 -- Method: ede-proj-makefile-insert-automake-pre-variables :AFTER this
     Insert bin_PROGRAMS variables needed by target THIS.  We aren't
     acutally inserting SOURCE details, but this is used by the
     Makefile.am generator, so use it to add this important bin program.


File: ede-cedet.info,  Node: ede-proj-target-elisp,  Next: ede-proj-target-elisp-autoloads,  Prev: ede-proj-target-makefile-shared-object,  Up: Targets

11.19 ede-proj-target-elisp
===========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `ede-proj-target-elisp'

                                  Children:
                                        *Note ede-proj-target-elisp-autoloads::.







Create a new object with name NAME of class type ede-proj-target-elisp

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:aux-packages'
          Type: `list'
          Default Value: `nil'

          Additional packages needed.  There should only be one
          toplevel package per auxiliary tool needed.  These packages
          location is found, and added to the compile time load path.



11.19.1 Specialized Methods
---------------------------

 -- Method: project-compile-target :AFTER obj
     Compile all sources in a Lisp target OBJ.  Bonus: Return a cons
     cell: (COMPILED . UPTODATE).

 -- Method: ede-proj-flush-autoconf :AFTER this
     Flush the configure file (current buffer) to accomodate THIS.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.  Lays
     claim to all .elc files that match .el files in this target.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-tweak-autoconf :AFTER this
     Tweak the configure file (current buffer) to accomodate THIS.

 -- Method: ede-update-version-in-source :AFTER this version
     In a Lisp file, updated a version string for THIS to VERSION.
     There are standards in Elisp files specifying how the version
     string is found, such as a `-version' variable, or the standard
     header.


File: ede-cedet.info,  Node: ede-proj-target-elisp-autoloads,  Next: ede-proj-target-makefile-miscelaneous,  Prev: ede-proj-target-elisp,  Up: Targets

11.20 ede-proj-target-elisp-autoloads
=====================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `*Note ede-proj-target-elisp::.'

                                  `ede-proj-target-elisp-autoloads'
                                        No children







Create a new object with name NAME of class type
ede-proj-target-elisp-autoloads

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:aux-packages'
          Type: `list'
          Default Value: `("cedet-autogen")'

          *Note ede-proj-target-elisp::.

    `:autoload-file'
          Type: `string'
          Default Value: `"loaddefs.el"'

          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.

    `:autoload-dirs'
          Type: `list'
          Default Value: `nil'

          The directories to scan for autoload definitions.  If `nil'
          defaults to the current directory.



11.20.1 Specialized Methods
---------------------------

 -- Method: ede-proj-makefile-dependencies :AFTER this
     Return a string representing the dependencies for THIS.  Always
     return an empty string for an autoloads generator.

 -- Method: project-compile-target :AFTER obj
     Create or update the autoload target.

 -- Method: ede-proj-flush-autoconf :AFTER this
     Flush the configure file (current buffer) to accomodate THIS.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.  Lays
     claim to all .elc files that match .el files in this target.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-insert-dist-dependencies :AFTER this
     Insert any symbols that the DIST rule should depend on.  Emacs
     Lisp autoload files ship the generated .el files.  Argument THIS
     is the target which needs to insert an info file.

 -- Method: ede-proj-tweak-autoconf :AFTER this
     Tweak the configure file (current buffer) to accomodate THIS.

 -- Method: ede-update-version-in-source :AFTER this version
     In a Lisp file, updated a version string for THIS to VERSION.
     There are standards in Elisp files specifying how the version
     string is found, such as a `-version' variable, or the standard
     header.

 -- Method: ede-proj-compilers :AFTER obj
     List of compilers being used by OBJ.  If the `compiler' slot is
     empty, get the car of the compilers list.

 -- Method: ede-proj-makefile-insert-dist-filepatterns :AFTER this
     Insert any symbols that the DIST rule should distribute.  Emacs
     Lisp autoload files ship the generated .el files.  Argument THIS
     is the target which needs to insert an info file.

 -- Method: ede-proj-makefile-insert-source-variables :AFTER this
          &optional moresource
     Insert the source variables needed by THIS.  Optional argument
     MORESOURCE is a list of additional sources to add to the sources
     variable.


File: ede-cedet.info,  Node: ede-proj-target-makefile-miscelaneous,  Next: ede-proj-target-makefile-info,  Prev: ede-proj-target-elisp-autoloads,  Up: Targets

11.21 ede-proj-target-makefile-miscelaneous
===========================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `ede-proj-target-makefile-miscelaneous'
                                   No children






Create a new object with name NAME of class type
ede-proj-target-makefile-miscelaneous

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:submakefile'
          Type: `string'
          Default Value: `""'

          Miscellaneous sources which have a specialized makefile.  The
          sub-makefile is used to build this target.



11.21.1 Specialized Methods
---------------------------

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Create the make rule needed to create an archive for THIS.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-dependency-files :AFTER this
     Return a list of files which THIS target depends on.


File: ede-cedet.info,  Node: ede-proj-target-makefile-info,  Next: ede-proj-target-aux,  Prev: ede-proj-target-makefile-miscelaneous,  Up: Targets

11.22 ede-proj-target-makefile-info
===================================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `*Note ede-proj-target-makefile::.'

                             `ede-proj-target-makefile-info'
                                   No children






Create a new object with name NAME of class type
ede-proj-target-makefile-info

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:mainmenu'
          Type: `string'
          Default Value: `""'

          The main menu resides in this file.  All other sources should
          be included independently.



11.22.1 Specialized Methods
---------------------------

 -- Method: ede-proj-configure-add-missing :AFTER this
     Query if any files needed by THIS provided by automake are missing.
     Results in -add-missing being passed to automake.

 -- Method: object-write :AFTER this
     Before committing any change to THIS, make sure the mainmenu is
     first.

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.

 -- Method: ede-proj-makefile-insert-dist-dependencies :AFTER this
     Insert any symbols that the DIST rule should depend on.  Texinfo
     files want to insert generated `.info' files.  Argument THIS is
     the target which needs to insert an info file.

 -- Method: ede-proj-makefile-target-name :AFTER this
     Return the name of the main target for THIS target.

 -- Method: ede-documentation :AFTER this
     Return a list of files that provides documentation.  Documentation
     is not for object THIS, but is provided by THIS for other files in
     the project.

 -- Method: ede-proj-makefile-insert-dist-filepatterns :AFTER this
     Insert any symbols that the DIST rule should depend on.  Texinfo
     files want to insert generated `.info' files.  Argument THIS is
     the target which needs to insert an info file.

 -- Method: ede-proj-makefile-insert-source-variables :AFTER this
          &optional moresource
     Insert the source variables needed by THIS info target.  Optional
     argument MORESOURCE is a list of additional sources to add to the
     sources variable.  Does the usual for Makefile mode, but splits
     source into two variables when working in Automake mode.


File: ede-cedet.info,  Node: ede-proj-target-aux,  Next: ede-proj-target-scheme,  Prev: ede-proj-target-makefile-info,  Up: Targets

11.23 ede-proj-target-aux
=========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `ede-proj-target-aux'
                              No children





Create a new object with name NAME of class type ede-proj-target-aux

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.23.1 Specialized Methods
---------------------------

 -- Method: ede-proj-makefile-sourcevar :AFTER this
     Return the variable name for THIS's sources.


File: ede-cedet.info,  Node: ede-proj-target-scheme,  Next: project-am-target,  Prev: ede-proj-target-aux,  Up: Targets

11.24 ede-proj-target-scheme
============================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note ede-proj-target::.'

                        `ede-proj-target-scheme'
                              No children





Create a new object with name NAME of class type ede-proj-target-scheme

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:interpreter'
          Type: `string'
          Default Value: `"guile"'

          The preferred interpreter for this code.



11.24.1 Specialized Methods
---------------------------

 -- Method: ede-proj-tweak-autoconf :AFTER this
     Tweak the configure file (current buffer) to accomodate THIS.


File: ede-cedet.info,  Node: project-am-target,  Next: project-am-objectcode,  Prev: ede-proj-target-scheme,  Up: Targets

11.25 project-am-target
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `project-am-target'

                        Children:
                              *Note project-am-objectcode::,
                              *Note project-am-header::,
                              *Note project-am-lisp::,
                              *Note project-am-texinfo::,
                              *Note project-am-man::.





Create a new object with name NAME of class type project-am-target

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.25.1 Specialized Methods
---------------------------

 -- Method: project-compile-target :AFTER obj &optional command
     Compile the current target.  Argument COMMAND is the command to
     use for compiling the target.

 -- Method: project-compile-target-command :AFTER this
     Default target to use when compiling a given target.

 -- Method: project-remove-file :AFTER ot fnnd
     Remove the current buffer from any project targets.

 -- Method: project-make-dist :AFTER this
     Run the current project in the debugger.

 -- Method: project-compile-project :AFTER obj &optional command
     Compile the entire current project.  Argument COMMAND is the
     command to use when compiling.

 -- Method: project-edit-file-target :AFTER obj
     Edit the target associated w/ this file.

 -- Method: project-add-file :AFTER ot
     Add the current buffer into a project.  OT is the object target.
     DIR is the directory to start in.


File: ede-cedet.info,  Node: project-am-objectcode,  Next: project-am-program,  Prev: project-am-target,  Up: Targets

11.26 project-am-objectcode
===========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `project-am-objectcode'

                             Children:
                                   *Note project-am-program::,
                                   *Note project-am-lib::.






Create a new object with name NAME of class type project-am-objectcode

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.26.1 Specialized Methods
---------------------------

 -- Method: project-am-macro :AFTER this
     Return the default macro to 'edit' for this object type.

 -- Method: project-debug-target :AFTER obj
     Run the current project target in a debugger.

 -- Method: project-compile-target-command :AFTER this
     Default target to use when compiling an object code target.

 -- Method: ede-buffer-header-file :AFTER this buffer
     There are no default header files.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.


File: ede-cedet.info,  Node: project-am-program,  Next: project-am-lib,  Prev: project-am-objectcode,  Up: Targets

11.27 project-am-program
========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `*Note project-am-objectcode::.'

                             `project-am-program'
                                   No children






Create a new object with name NAME of class type project-am-program

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:ldadd
          '
          Default Value: `nil'

          Additional LD args.



11.27.1 Specialized Methods
---------------------------

 -- Method: project-rescan :AFTER this
     Rescan object THIS.


File: ede-cedet.info,  Node: project-am-lib,  Next: project-am-header,  Prev: project-am-program,  Up: Targets

11.28 project-am-lib
====================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `*Note project-am-objectcode::.'

                             `project-am-lib'
                                   No children






Create a new object with name NAME of class type project-am-lib

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.28.1 Specialized Methods
---------------------------

 -- Method: project-rescan :AFTER this
     Rescan object THIS.


File: ede-cedet.info,  Node: project-am-header,  Next: project-am-header-noinst,  Prev: project-am-lib,  Up: Targets

11.29 project-am-header
=======================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `project-am-header'

                             Children:
                                   *Note project-am-header-noinst::,
                                   *Note project-am-header-inst::.






Create a new object with name NAME of class type project-am-header

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.29.1 Specialized Methods
---------------------------

 -- Method: project-rescan :AFTER this
     Rescan the Header sources.


File: ede-cedet.info,  Node: project-am-header-noinst,  Next: project-am-header-inst,  Prev: project-am-header,  Up: Targets

11.30 project-am-header-noinst
==============================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `*Note project-am-header::.'

                             `project-am-header-noinst'
                                   No children






Create a new object with name NAME of class type
project-am-header-noinst

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.30.1 Specialized Methods
---------------------------

 -- Method: project-am-macro :AFTER this
     Return the default macro to 'edit' for this object.


File: ede-cedet.info,  Node: project-am-header-inst,  Next: project-am-lisp,  Prev: project-am-header-noinst,  Up: Targets

11.31 project-am-header-inst
============================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `*Note project-am-header::.'

                             `project-am-header-inst'
                                   No children






Create a new object with name NAME of class type project-am-header-inst

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.31.1 Specialized Methods
---------------------------

 -- Method: project-am-macro :AFTER this
     Return the default macro to 'edit' for this object.


File: ede-cedet.info,  Node: project-am-lisp,  Next: project-am-texinfo,  Prev: project-am-header-inst,  Up: Targets

11.32 project-am-lisp
=====================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `project-am-lisp'
                              No children





Create a new object with name NAME of class type project-am-lisp

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.32.1 Specialized Methods
---------------------------

 -- Method: project-am-macro :AFTER this
     Return the default macro to 'edit' for this object.

 -- Method: project-rescan :AFTER this
     Rescan the lisp sources.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.


File: ede-cedet.info,  Node: project-am-texinfo,  Next: project-am-man,  Prev: project-am-lisp,  Up: Targets

11.33 project-am-texinfo
========================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `project-am-texinfo'
                              No children





Create a new object with name NAME of class type project-am-texinfo

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.

    `:include
          '
          Default Value: `nil'

          Additional texinfo included in this one.



11.33.1 Specialized Methods
---------------------------

 -- Method: project-am-macro :AFTER this
     Return the default macro to 'edit' for this object type.

 -- Method: project-rescan :AFTER this
     Rescan object THIS.

 -- Method: project-compile-target-command :AFTER this
     Default target t- use when compling a texinfo file.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.

 -- Method: ede-documentation :AFTER this
     Return a list of files that provides documentation.  Documentation
     is not for object THIS, but is provided by THIS for other files in
     the project.


File: ede-cedet.info,  Node: project-am-man,  Prev: project-am-texinfo,  Up: Targets

11.34 project-am-man
====================

Inheritance Tree:

    `eieio-speedbar'

         `eieio-speedbar-directory-button'

              `*Note ede-target::.'

                   `*Note project-am-target::.'

                        `project-am-man'
                              No children





Create a new object with name NAME of class type project-am-man

Slots:

    `:name'
          Type: `string'

          Name of this target.

    `:path'
          Type: `string'

          The path to the sources of this target.  Relative to the path
          of the project it belongs to.



11.34.1 Specialized Methods
---------------------------

 -- Method: project-am-macro :AFTER this
     Return the default macro to 'edit' for this object type.

 -- Method: project-rescan :AFTER this
     Rescan object THIS.

 -- Method: ede-buffer-mine :AFTER this buffer
     Return `t' if object THIS lays claim to the file in BUFFER.


File: ede-cedet.info,  Node: Sourcecode,  Next: Compilers,  Prev: Targets,  Up: Top

12 Sourcecode
*************

The source code type is an object designed to associated files with
targets.

* Menu:

* ede-sourcecode ::


File: ede-cedet.info,  Node: ede-sourcecode,  Up: Sourcecode

12.1 ede-sourcecode
===================

Inheritance Tree:

    `eieio-instance-inheritor'

         `ede-sourcecode'
               No children


Create a new object with name NAME of class type ede-sourcecode

Slots:

    `:parent-instance'
          Type: `eieio-instance-inheritor-child'

          The parent of this instance.  If a slot of this class is
          reference, and is unbound, then  the parent is checked for a
          value.

    `:name'
          Type: `string'

          The name of this type of source code.  Such as "C" or "Emacs
          Lisp"

    `:sourcepattern'
          Type: `string'
          Default Value: `".*"'

          Emacs regex matching sourcecode this target accepts.

    `:auxsourcepattern'
          Type: `(or null string)'
          Default Value: `nil'

          Emacs regex matching auxiliary source code this target
          accepts.  Aux source are source code files needed for
          compilation, which are not comiled themselves.

    `:enable-subdirectories'
          Type: `boolean'
          Default Value: `nil'

          Non `nil' if this sourcecode type uses subdirectores.  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.

    `:garbagepattern'
          Type: `list'
          Default Value: `nil'

          Shell file regex matching files considered as garbage.  This
          is a list of items added to an `rm' command when executing a
          `clean' type directive.



12.1.1 Specialized Methods
--------------------------

 -- Method: ede-want-any-files-p :AFTER this filenames
     Return non-`nil' if THIS will accept any files in FILENAMES.

 -- Method: ede-want-any-source-files-p :AFTER this filenames
     Return non-`nil' if THIS will accept any source files in FILENAMES.

 -- Method: ede-want-any-auxiliary-files-p :AFTER this filenames
     Return non-`nil' if THIS will accept any aux files in FILENAMES.

 -- Method: ede-buffer-header-file :AFTER this filename
     Return a list of file names of header files for THIS with FILENAME.
     Used to guess header files, but uses the auxsource regular
     expression.

 -- Method: ede-want-file-p :AFTER this filename
     Return non-`nil' if sourcecode definition THIS will take FILENAME.

 -- Method: ede-want-file-source-p :AFTER this filename
     Return non-`nil' if THIS will take FILENAME as an auxiliary .

 -- Method: ede-want-file-auxiliary-p :AFTER this filename
     Return non-`nil' if THIS will take FILENAME as an auxiliary .


File: ede-cedet.info,  Node: Compilers,  Prev: Sourcecode,  Up: Top

13 Compilers
************

The compiler object is designed to associate source code with
compilers.  The target then references the compilers it can use.  When
the makefile is created, this object type knows how to create compile
commands.

* Menu:

* ede-compilation-program ::
*  ede-compiler ::
*   ede-object-compiler ::
*   semantic-ede-grammar-compiler-class ::
*  ede-linker ::


File: ede-cedet.info,  Node: ede-compilation-program,  Next: ede-compiler,  Up: Compilers

13.1 ede-compilation-program
============================

Inheritance Tree:

    `eieio-instance-inheritor'

         `ede-compilation-program'

              Children:
                    *Note ede-compiler::, *Note ede-linker::.



Create a new object with name NAME of class type ede-compilation-program

Slots:

    `:parent-instance'
          Type: `eieio-instance-inheritor-child'

          The parent of this instance.  If a slot of this class is
          reference, and is unbound, then  the parent is checked for a
          value.

    `:name'
          Type: `string'

          Name of this type of compiler.

    `:variables'
          Type: `list'

          Variables needed in the Makefile for this compiler.  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.

    `:sourcetype'
          Type: `list'

          A list of `ede-sourcecode' *Note 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.

    `:rules'
          Type: `list'
          Default Value: `nil'

          Auxiliary rules needed for this compiler to run.  For
          example, yacc/lex files need additional chain rules, or
          inferences.

    `:commands'
          Type: `list'

          The commands used to execute this compiler.  The object which
          uses this compiler will place these commands after its rule
          definition.

    `:autoconf'
          Type: `list'
          Default Value: `nil'

          Autoconf function to call if this type of compiler is used.
          When a project is in Automake mode, this defines the autoconf
          function to 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.

    `:objectextention'
          Type: `string'

          A string which is the extention used for object files.  For
          example, C code uses .o on unix, and Emacs Lisp uses .elc.



13.1.1 Specialized Methods
--------------------------

 -- Method: ede-proj-flush-autoconf :AFTER this
     Flush the configure file (current buffer) to accomodate THIS.

 -- Method: ede-proj-makefile-insert-rules :AFTER this
     Insert rules needed for THIS compiler object.

 -- Method: ede-proj-makefile-insert-variables :AFTER this
     Insert variables needed by the compiler THIS.

 -- Method: ede-proj-makefile-insert-commands :AFTER this
     Insert the commands needed to use compiler THIS.  The object
     creating makefile rules must call this method for the compiler it
     decides to use after inserting in the rule.

 -- Method: ede-object-sourcecode :AFTER this
     Retrieves the slot `sourcetype' from an object of class
     `ede-compilation-program'

 -- Method: ede-proj-tweak-autoconf :AFTER this
     Tweak the configure file (current buffer) to accomodate THIS.


File: ede-cedet.info,  Node: ede-compiler,  Next: ede-object-compiler,  Prev: ede-compilation-program,  Up: Compilers

13.2 ede-compiler
=================

Inheritance Tree:

    `eieio-instance-inheritor'

         `*Note ede-compilation-program::.'

              `ede-compiler'

                   Children:
                         *Note ede-object-compiler::,
                         *Note semantic-ede-grammar-compiler-class::.




Create a new object with name NAME of class type ede-compiler

Slots:

    `:parent-instance'
          Type: `eieio-instance-inheritor-child'

          The parent of this instance.  If a slot of this class is
          reference, and is unbound, then  the parent is checked for a
          value.

    `:name'
          Type: `string'

          Name of this type of compiler.

    `:variables'
          Type: `list'

          Variables needed in the Makefile for this compiler.  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.

    `:sourcetype'
          Type: `list'

          A list of `ede-sourcecode' *Note 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.

    `:commands'
          Type: `list'

          The commands used to execute this compiler.  The object which
          uses this compiler will place these commands after its rule
          definition.

    `:objectextention'
          Type: `string'

          A string which is the extention used for object files.  For
          example, C code uses .o on unix, and Emacs Lisp uses .elc.

    `:makedepends'
          Type: `boolean'
          Default Value: `nil'

          Non-`nil' if this compiler can make dependencies.

    `:uselinker'
          Type: `boolean'
          Default Value: `nil'

          Non-`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.



13.2.1 Specialized Methods
--------------------------

 -- Method: ede-proj-makefile-insert-object-variables :AFTER this
          targetname sourcefiles
     Insert an OBJ variable to specify object code to be generated for
     THIS.  The name of the target is TARGETNAME as a string.
     SOURCEFILES is the list of files to be objectified.  Not all
     compilers do this.

 -- Method: ede-compiler-intermediate-objects-p :AFTER this
     Return non-`nil' if THIS has intermediate object files.  If this
     compiler creates code that can be linked together, then the object
     files created by the compiler are considered intermediate.

 -- Method: ede-compiler-intermediate-object-variable :AFTER this
          targetname
     Return a string based on THIS representing a make object variable.
     TARGETNAME is the name of the target that these objects belong to.


File: ede-cedet.info,  Node: ede-object-compiler,  Next: semantic-ede-grammar-compiler-class,  Prev: ede-compiler,  Up: Compilers

13.3 ede-object-compiler
========================

Inheritance Tree:

    `eieio-instance-inheritor'

         `*Note ede-compilation-program::.'

              `*Note ede-compiler::.'

                   `ede-object-compiler'
                         No children




Create a new object with name NAME of class type ede-object-compiler

Slots:

    `:parent-instance'
          Type: `eieio-instance-inheritor-child'

          The parent of this instance.  If a slot of this class is
          reference, and is unbound, then  the parent is checked for a
          value.

    `:name'
          Type: `string'

          Name of this type of compiler.

    `:variables'
          Type: `list'

          Variables needed in the Makefile for this compiler.  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.

    `:sourcetype'
          Type: `list'

          A list of `ede-sourcecode' *Note 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.

    `:commands'
          Type: `list'

          The commands used to execute this compiler.  The object which
          uses this compiler will place these commands after its rule
          definition.

    `:objectextention'
          Type: `string'

          A string which is the extention used for object files.  For
          example, C code uses .o on unix, and Emacs Lisp uses .elc.

    `:uselinker'
          Type: `boolean'
          Default Value: `t'

          *Note ede-compiler::.

    `:dependencyvar'
          Type: `list'

          A variable dedicated to dependency generation.



13.3.1 Specialized Methods
--------------------------

 -- Method: ede-proj-makefile-insert-variables :AFTER this
     Insert variables needed by the compiler THIS.


File: ede-cedet.info,  Node: semantic-ede-grammar-compiler-class,  Next: ede-linker,  Prev: ede-object-compiler,  Up: Compilers

13.4 semantic-ede-grammar-compiler-class
========================================

Inheritance Tree:

    `eieio-instance-inheritor'

         `*Note ede-compilation-program::.'

              `*Note ede-compiler::.'

                   `semantic-ede-grammar-compiler-class'
                         No children




Create a new object with name NAME of class type
semantic-ede-grammar-compiler-class

Slots:

    `:parent-instance'
          Type: `eieio-instance-inheritor-child'

          The parent of this instance.  If a slot of this class is
          reference, and is unbound, then  the parent is checked for a
          value.

    `:name'
          Type: `string'

          Name of this type of compiler.

    `:variables'
          Type: `list'

          Variables needed in the Makefile for this compiler.  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.

    `:sourcetype'
          Type: `list'

          A list of `ede-sourcecode' *Note 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.

    `:commands'
          Type: `list'

          The commands used to execute this compiler.  The object which
          uses this compiler will place these commands after its rule
          definition.

    `:objectextention'
          Type: `string'

          A string which is the extention used for object files.  For
          example, C code uses .o on unix, and Emacs Lisp uses .elc.




File: ede-cedet.info,  Node: ede-linker,  Prev: semantic-ede-grammar-compiler-class,  Up: Compilers

13.5 ede-linker
===============

Inheritance Tree:

    `eieio-instance-inheritor'

         `*Note ede-compilation-program::.'

              `ede-linker'
                    No children



Create a new object with name NAME of class type ede-linker

Slots:

    `:parent-instance'
          Type: `eieio-instance-inheritor-child'

          The parent of this instance.  If a slot of this class is
          reference, and is unbound, then  the parent is checked for a
          value.

    `:name'
          Type: `string'

          Name of this type of compiler.

    `:variables'
          Type: `list'

          Variables needed in the Makefile for this compiler.  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.

    `:sourcetype'
          Type: `list'

          A list of `ede-sourcecode' *Note 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.

    `:commands'
          Type: `list'

          The commands used to execute this compiler.  The object which
          uses this compiler will place these commands after its rule
          definition.

    `:objectextention'
          Type: `string'

          A string which is the extention used for object files.  For
          example, C code uses .o on unix, and Emacs Lisp uses .elc.





Tag Table:
Node: Top191
Node: EDE Project Concepts1490
Node: EDE Mode3110
Node: Quick Start3915
Node: Creating a project11349
Node: Modifying your project13680
Node: Add/Remove target14196
Node: Add/Remove files14970
Node: Customize Features16051
Node: Project Local Variables16996
Node: EDE Project Features18521
Node: Changing Compilers and Flags19258
Node: Configurations20221
Node: Building and Debugging21111
Node: Miscellaneous commands21862
Ref: ede-locate-setup-options22774
Node: Project types23528
Node: Make and Automake projects24738
Node: Automake direct projects25387
Node: Android projects25978
Ref: cedet-android-sdk-root26562
Node: Arduino projects26795
Node: Simple projects27399
Node: Generic28552
Ref: ede-enable-generic-projects29255
Node: Add Generic Support29653
Ref: ede-generic-new-autoloader31742
Node: ede-cpp-root32219
Node: ede-emacs37336
Node: ede-linux37714
Node: Custom Locate38102
Node: Extending EDE39587
Node: Development Overview41457
Node: Detecting a Project45866
Node: User interface methods48921
Node: Base project methods50155
Node: EDE proj-project51526
Node: Sourcecode objects52224
Node: Compiler and Linker objects53971
Node: Project56473
Node: ede-project-placeholder56876
Node: ede-project58941
Node: ede-cpp-root-project68449
Node: ede-emacs-project73416
Node: ede-linux-project75194
Node: ede-maven-project76969
Node: ede-simple-project78575
Node: ede-simple-base-project79839
Node: ede-proj-project80386
Node: project-am-makefile87305
Node: ede-step-project89448
Node: Targets94092
Node: ede-target95236
Node: ede-cpp-root-target101699
Node: ede-emacs-target-c102621
Node: ede-emacs-target-el103489
Node: ede-emacs-target-misc104168
Node: ede-linux-target-c104855
Node: ede-linux-target-misc105727
Node: ede-maven-target-java106416
Node: ede-maven-target-c107105
Node: ede-maven-target-misc107782
Node: ede-simple-target108469
Node: ede-proj-target109137
Node: ede-proj-target-makefile115419
Node: semantic-ede-proj-target-grammar118841
Node: ede-proj-target-makefile-objectcode120555
Node: ede-proj-target-makefile-archive122433
Node: ede-proj-target-makefile-program123877
Node: ede-proj-target-makefile-shared-object126090
Node: ede-proj-target-elisp128118
Node: ede-proj-target-elisp-autoloads130334
Node: ede-proj-target-makefile-miscelaneous134021
Node: ede-proj-target-makefile-info135542
Node: ede-proj-target-aux138271
Node: ede-proj-target-scheme139182
Node: project-am-target140238
Node: project-am-objectcode142143
Node: project-am-program143597
Node: project-am-lib144607
Node: project-am-header145510
Node: project-am-header-noinst146504
Node: project-am-header-inst147491
Node: project-am-lisp148468
Node: project-am-texinfo149529
Node: project-am-man151022
Node: Sourcecode152047
Node: ede-sourcecode152271
Node: Compilers154973
Node: ede-compilation-program155430
Node: ede-compiler158706
Node: ede-object-compiler161850
Node: semantic-ede-grammar-compiler-class164056
Node: ede-linker165949

End Tag Table
