Next: Sharing Between Projects, Previous: Project Dependencies, Up: Organizing Projects into Subsystems
Cyclic dependencies are mostly forbidden:
if A imports B (directly or indirectly) then B
is not allowed to import A. However, there are cases when cyclic
dependencies would be beneficial. For these cases, another form of import
between projects exists: the limited with. A project A that
imports a project B with a straight with may also be imported,
directly or indirectly, by B through a limited with.
The difference between straight with and limited with is that
the name of a project imported with a limited with cannot be used in the
project importing it. In particular, its packages cannot be renamed and
its variables cannot be referred to.
with "b.gpr";
with "c.gpr";
project A is
For Exec_Dir use B'Exec_Dir; -- ok
end A;
limited with "a.gpr"; -- Cyclic dependency: A -> B -> A
project B is
For Exec_Dir use A'Exec_Dir; -- not ok
end B;
with "d.gpr";
project C is
end C;
limited with "a.gpr"; -- Cyclic dependency: A -> C -> D -> A
project D is
For Exec_Dir use A'Exec_Dir; -- not ok
end D;