Next: User interface methods, Previous: Development Overview, Up: Extending EDE [Contents]
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:
find-file-hook calls ede-turn-on-hook on BUFFER.
ede-turn-on-hook turns on ede-minor-mode
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.
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 (i.e., a project file name), it
checks to see if that exists in BUFFER’s directory.  If it is a
function, then it calls that function and expects it to return a file
name or nil.  If the file exists, then this directory is assumed to be
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 found 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.
Next: User interface methods, Previous: Development Overview, Up: Extending EDE [Contents]