]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
prj.ads, prj.adb (For_Project_And_Aggregated_Context): New generic routine with a...
authorPascal Obry <obry@adacore.com>
Wed, 8 Feb 2012 09:29:11 +0000 (09:29 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 8 Feb 2012 09:29:11 +0000 (10:29 +0100)
2012-02-08  Pascal Obry  <obry@adacore.com>

* prj.ads, prj.adb (For_Project_And_Aggregated_Context): New
generic routine with a context parameter.

From-SVN: r183998

gcc/ada/ChangeLog
gcc/ada/prj.adb
gcc/ada/prj.ads

index 16cd2e91dd6a848621f9d46f1cadc12f946ceeb7..76ff4fb23fcd065b0f42490455384e8a08dde407 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-08  Pascal Obry  <obry@adacore.com>
+
+       * prj.ads, prj.adb (For_Project_And_Aggregated_Context): New
+       generic routine with a context parameter.
+
 2012-02-08  Robert Dewar  <dewar@adacore.com>
 
        * a-coinve.adb, sem_util.adb, sem_ch8.adb, a-cobove.adb,
index 1327b58bda0e09b76fe699fda7bf1bec28dae8c2..15cb808f0d1d7ae32b201a8a0be0053a09540ca1 100644 (file)
@@ -1863,6 +1863,56 @@ package body Prj is
       end if;
    end For_Project_And_Aggregated;
 
+   ----------------------------------------
+   -- For_Project_And_Aggregated_Context --
+   ----------------------------------------
+
+   procedure For_Project_And_Aggregated_Context
+     (Root_Project : Project_Id;
+      Root_Tree    : Project_Tree_Ref)
+   is
+
+      procedure Recursive_Process
+        (Project : Project_Id;
+         Tree    : Project_Tree_Ref;
+         Context : Project_Context);
+      --  Process Project and all aggregated projects recursively
+
+      -----------------------
+      -- Recursive_Process --
+      -----------------------
+
+      procedure Recursive_Process
+        (Project : Project_Id;
+         Tree    : Project_Tree_Ref;
+         Context : Project_Context)
+      is
+         Agg : Aggregated_Project_List;
+         Ctx : Project_Context;
+      begin
+         Action (Project, Tree, Context);
+
+         if Project.Qualifier in Aggregate_Project then
+            Ctx :=
+              (In_Aggregate_Lib      => True,
+               From_Encapsulated_Lib =>
+                 Context.From_Encapsulated_Lib
+                   or else
+                 Project.Standalone_Library = Encapsulated);
+
+            Agg := Project.Aggregated_Projects;
+            while Agg /= null loop
+               Recursive_Process (Agg.Project, Agg.Tree, Ctx);
+               Agg := Agg.Next;
+            end loop;
+         end if;
+      end Recursive_Process;
+
+   begin
+      Recursive_Process
+        (Root_Project, Root_Tree, Project_Context'(False, False));
+   end For_Project_And_Aggregated_Context;
+
 --  Package initialization for Prj
 
 begin
index fa36d850e1cf6cdbb938caf5374e9aab65080168..44aa94d8151767c535688a20d52fb7c0f208ea73 100644 (file)
@@ -1621,6 +1621,17 @@ package Prj is
       With_State         : in out State;
       Include_Aggregated : Boolean := True;
       Imported_First     : Boolean := False);
+   --  As above but with an associated context
+
+   generic
+      with procedure Action
+        (Project : Project_Id;
+         Tree    : Project_Tree_Ref;
+         Context : Project_Context);
+   procedure For_Project_And_Aggregated_Context
+     (Root_Project : Project_Id;
+      Root_Tree    : Project_Tree_Ref);
+   --  As above but with an associated context
 
    function Extend_Name
      (File        : File_Name_Type;