diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f23c566acfb4b7ac691f6db55d4c12eda3b72f74..1680a5286ec9f0030ec4d625cb207f5dfbdd938a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2013-01-29 Pascal Obry <obry@adacore.com> + + * prj-proc.adb (Process_Expression_Variable_Decl): Prepend + Project_Path to current environment. + 2013-01-29 Thomas Quinot <quinot@adacore.com> * sprint.adb (Sprint_Node_Actual): Output freeze nodes for diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb index d4bda03aac647024d5e93b74c3ed2587bf218de7..4788fbedf952a4a5237495b38f5cba3f0d93b9c1 100644 --- a/gcc/ada/prj-env.adb +++ b/gcc/ada/prj-env.adb @@ -2188,7 +2188,7 @@ package body Prj.Env is function Try_Path_Name is new Find_Name_In_Path (Check_Filename => Is_Regular_File); - -- Find a file in the project search path. + -- Find a file in the project search path -- Local Declarations diff --git a/gcc/ada/prj-proc.adb b/gcc/ada/prj-proc.adb index e997d17ebd8313c9a47abb9589b540dcbe0d7e6c..5e2828be5d8cfbb406dac4f965ab171d01661e1e 100644 --- a/gcc/ada/prj-proc.adb +++ b/gcc/ada/prj-proc.adb @@ -33,11 +33,12 @@ with Prj.Env; with Prj.Err; use Prj.Err; with Prj.Ext; use Prj.Ext; with Prj.Nmsc; use Prj.Nmsc; -with Prj.Util; with Prj.Part; +with Prj.Util; with Snames; -with Ada.Strings.Fixed; use Ada.Strings.Fixed; +with Ada.Containers.Vectors; +with Ada.Strings.Fixed; use Ada.Strings.Fixed; with GNAT.Case_Util; use GNAT.Case_Util; with GNAT.HTable; @@ -2062,19 +2063,30 @@ package body Prj.Proc is if Is_Attribute and then Name = Snames.Name_Project_Path then if In_Tree.Is_Root_Tree then declare - Val : String_List_Id := New_Value.Values; + package Name_Ids is + new Ada.Containers.Vectors (Positive, Name_Id); + Val : String_List_Id := New_Value.Values; + List : Name_Ids.Vector; begin + -- Get all values + while Val /= Nil_String loop + List.Prepend + (Shared.String_Elements.Table (Val).Value); + Val := Shared.String_Elements.Table (Val).Next; + end loop; + + -- Prepend them in the oder found in the attribute + + for K in Positive range 1 .. Positive (List.Length) loop Prj.Env.Add_Directories (Child_Env.Project_Path, Normalize_Pathname - (Name => - Get_Name_String - (Shared.String_Elements.Table (Val).Value), - Directory => - Get_Name_String - (Project.Directory.Display_Name))); - Val := Shared.String_Elements.Table (Val).Next; + (Name => Get_Name_String + (List.Element (K)), + Directory => Get_Name_String + (Project.Directory.Display_Name)), + Prepend => True); end loop; end;