[multiple changes]
2011-12-23 Pascal Obry <obry@adacore.com> * prj.ads (For_Every_Project_Imported): Add In_Aggregate_Lib parameter to generic formal procedure. * prj.adb (For_Every_Project_Imported): Update accordingly. (Recursive_Check): Likewise. Do not parse imported project for aggregate library. This is needed as the imported projects are there just to handle dependencies. (Look_For_Sources): Likewise. (Recursive_Add): Likewise. * prj-env.adb, prj-conf.adb, makeutl.adb, gnatcmd.adb: Add In_Aggregate_Lib parameter to routines used with For_Every_Project_Imported generic procedure. * prj-nmsc.adb (Tree_Processing_Data): Add In_Aggregate_Lib field. (Check): Move where it is used. Fix implementation to not check libraries that are inside aggregate libraries. (Recursive_Check): Add In_Aggregate_Lib parameter. 2011-12-23 Ed Schonberg <schonberg@adacore.com> * sem_ch7.adb (Analyze_Package_Body, Has_Referencer): A generic package is a referencer regardless of whether there is a subsequent subprogram with an Inline pragma. 2011-12-23 Geert Bosch <bosch@adacore.com> * sem_ch3.adb (Can_Derive_From): Check matching Float_Rep on VMS. From-SVN: r182656
This commit is contained in:
parent
7471389a77
commit
a17e8c0593
10 changed files with 383 additions and 263 deletions
|
@ -1,3 +1,31 @@
|
|||
2011-12-23 Pascal Obry <obry@adacore.com>
|
||||
|
||||
* prj.ads (For_Every_Project_Imported): Add In_Aggregate_Lib
|
||||
parameter to generic formal procedure.
|
||||
* prj.adb (For_Every_Project_Imported): Update accordingly.
|
||||
(Recursive_Check): Likewise. Do not parse imported project for
|
||||
aggregate library. This is needed as the imported projects are
|
||||
there just to handle dependencies.
|
||||
(Look_For_Sources): Likewise.
|
||||
(Recursive_Add): Likewise.
|
||||
* prj-env.adb, prj-conf.adb, makeutl.adb, gnatcmd.adb:
|
||||
Add In_Aggregate_Lib parameter to routines used with
|
||||
For_Every_Project_Imported generic procedure.
|
||||
* prj-nmsc.adb (Tree_Processing_Data): Add In_Aggregate_Lib field.
|
||||
(Check): Move where it is used. Fix implementation
|
||||
to not check libraries that are inside aggregate libraries.
|
||||
(Recursive_Check): Add In_Aggregate_Lib parameter.
|
||||
|
||||
2011-12-23 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* sem_ch7.adb (Analyze_Package_Body, Has_Referencer): A generic
|
||||
package is a referencer regardless of whether there is a
|
||||
subsequent subprogram with an Inline pragma.
|
||||
|
||||
2011-12-23 Geert Bosch <bosch@adacore.com>
|
||||
|
||||
* sem_ch3.adb (Can_Derive_From): Check matching Float_Rep on VMS.
|
||||
|
||||
2011-12-23 Pascal Obry <obry@adacore.com>
|
||||
|
||||
* gnatcmd.adb, prj.adb, prj-nmsc.adb: Minor reformatting.
|
||||
|
|
|
@ -264,6 +264,7 @@ procedure GNATCmd is
|
|||
procedure Set_Library_For
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Libraries_Present : in out Boolean);
|
||||
-- If Project is a library project, add the correct -L and -l switches to
|
||||
-- the linker invocation.
|
||||
|
@ -1264,9 +1265,10 @@ procedure GNATCmd is
|
|||
procedure Set_Library_For
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Libraries_Present : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (Tree);
|
||||
pragma Unreferenced (Tree, In_Aggregate_Lib);
|
||||
|
||||
Path_Option : constant String_Access :=
|
||||
MLib.Linker_Library_Path_Option;
|
||||
|
|
|
@ -692,9 +692,10 @@ package body Makeutl is
|
|||
is
|
||||
|
||||
procedure Recursive_Add
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Extended : in out Boolean);
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Extended : in out Boolean);
|
||||
-- Add all the source directories of a project to the path only if
|
||||
-- this project has not been visited. Calls itself recursively for
|
||||
-- projects being extended, and imported projects.
|
||||
|
@ -731,14 +732,18 @@ package body Makeutl is
|
|||
-------------------
|
||||
|
||||
procedure Recursive_Add
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Extended : in out Boolean)
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Extended : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (In_Aggregate_Lib);
|
||||
|
||||
Current : String_List_Id;
|
||||
Dir : String_Element;
|
||||
OK : Boolean := False;
|
||||
Lang_Proc : Language_Ptr := Project.Languages;
|
||||
|
||||
begin
|
||||
-- Add to path all directories of this project
|
||||
|
||||
|
@ -1229,9 +1234,10 @@ package body Makeutl is
|
|||
In_Tree : Project_Tree_Ref) return String_List
|
||||
is
|
||||
procedure Recursive_Add
|
||||
(Proj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean);
|
||||
(Proj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean);
|
||||
-- The recursive routine used to add linker options
|
||||
|
||||
-------------------
|
||||
|
@ -1239,11 +1245,12 @@ package body Makeutl is
|
|||
-------------------
|
||||
|
||||
procedure Recursive_Add
|
||||
(Proj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean)
|
||||
(Proj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (Dummy);
|
||||
pragma Unreferenced (Dummy, In_Aggregate_Lib);
|
||||
|
||||
Linker_Package : Package_Id;
|
||||
Options : Variable_Value;
|
||||
|
|
|
@ -728,9 +728,10 @@ package body Prj.Conf is
|
|||
Value_Of (Name_Ide, Project.Decl.Packages, Shared);
|
||||
|
||||
procedure Add_Config_Switches_For_Project
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
With_State : in out Integer);
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
With_State : in out Integer);
|
||||
-- Add all --config switches for this project. This is also called
|
||||
-- for aggregate projects.
|
||||
|
||||
|
@ -739,11 +740,13 @@ package body Prj.Conf is
|
|||
-------------------------------------
|
||||
|
||||
procedure Add_Config_Switches_For_Project
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
With_State : in out Integer)
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
With_State : in out Integer)
|
||||
is
|
||||
pragma Unreferenced (With_State);
|
||||
pragma Unreferenced (With_State, In_Aggregate_Lib);
|
||||
|
||||
Shared : constant Shared_Project_Tree_Data_Access := Tree.Shared;
|
||||
|
||||
Variable : Variable_Value;
|
||||
|
@ -757,9 +760,8 @@ package body Prj.Conf is
|
|||
Variable :=
|
||||
Value_Of (Name_Languages, Project.Decl.Attributes, Shared);
|
||||
|
||||
if Variable = Nil_Variable_Value
|
||||
or else Variable.Default
|
||||
then
|
||||
if Variable = Nil_Variable_Value or else Variable.Default then
|
||||
|
||||
-- Languages is not declared. If it is not an extending
|
||||
-- project, or if it extends a project with no Languages,
|
||||
-- check for Default_Language.
|
||||
|
@ -792,17 +794,17 @@ package body Prj.Conf is
|
|||
Lang := Name_Find;
|
||||
Language_Htable.Set (Lang, Lang);
|
||||
|
||||
else
|
||||
-- If no default language is declared, default to Ada
|
||||
-- If no default language is declared, default to Ada
|
||||
|
||||
else
|
||||
Language_Htable.Set (Name_Ada, Name_Ada);
|
||||
end if;
|
||||
end if;
|
||||
|
||||
elsif Variable.Values /= Nil_String then
|
||||
|
||||
-- Attribute Languages is declared with a non empty
|
||||
-- list: put all the languages in Language_HTable.
|
||||
-- Attribute Languages is declared with a non empty list:
|
||||
-- put all the languages in Language_HTable.
|
||||
|
||||
List := Variable.Values;
|
||||
while List /= Nil_String loop
|
||||
|
|
|
@ -115,9 +115,10 @@ package body Prj.Env is
|
|||
Buffer_Last : Natural := 0;
|
||||
|
||||
procedure Add
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean);
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean);
|
||||
-- Add source dirs of Project to the path
|
||||
|
||||
---------
|
||||
|
@ -125,11 +126,12 @@ package body Prj.Env is
|
|||
---------
|
||||
|
||||
procedure Add
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean)
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (Dummy);
|
||||
pragma Unreferenced (Dummy, In_Aggregate_Lib);
|
||||
begin
|
||||
Add_To_Path
|
||||
(Project.Source_Dirs, In_Tree.Shared, Buffer, Buffer_Last);
|
||||
|
@ -185,9 +187,10 @@ package body Prj.Env is
|
|||
Buffer_Last : Natural := 0;
|
||||
|
||||
procedure Add
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean);
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean);
|
||||
-- Add all the object directories of a project to the path
|
||||
|
||||
---------
|
||||
|
@ -195,11 +198,12 @@ package body Prj.Env is
|
|||
---------
|
||||
|
||||
procedure Add
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean)
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (Dummy, In_Tree);
|
||||
pragma Unreferenced (Dummy, In_Tree, In_Aggregate_Lib);
|
||||
|
||||
Path : constant Path_Name_Type :=
|
||||
Get_Object_Directory
|
||||
|
@ -472,9 +476,10 @@ package body Prj.Env is
|
|||
Current_Naming : Naming_Id;
|
||||
|
||||
procedure Check
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
State : in out Integer);
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
State : in out Integer);
|
||||
-- Recursive procedure that put in the config pragmas file any non
|
||||
-- standard naming schemes, if it is not already in the file, then call
|
||||
-- itself for any imported project.
|
||||
|
@ -496,11 +501,12 @@ package body Prj.Env is
|
|||
-----------
|
||||
|
||||
procedure Check
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
State : in out Integer)
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
State : in out Integer)
|
||||
is
|
||||
pragma Unreferenced (State);
|
||||
pragma Unreferenced (State, In_Aggregate_Lib);
|
||||
|
||||
Lang : constant Language_Ptr :=
|
||||
Get_Language_From_Name (Project, "ada");
|
||||
|
@ -786,9 +792,10 @@ package body Prj.Env is
|
|||
-- Put the line contained in the Name_Buffer in the global buffer
|
||||
|
||||
procedure Process
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
State : in out Integer);
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
State : in out Integer);
|
||||
-- Generate the mapping file for Project (not recursively)
|
||||
|
||||
---------------------
|
||||
|
@ -811,11 +818,12 @@ package body Prj.Env is
|
|||
-------------
|
||||
|
||||
procedure Process
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
State : in out Integer)
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
State : in out Integer)
|
||||
is
|
||||
pragma Unreferenced (State);
|
||||
pragma Unreferenced (State, In_Aggregate_Lib);
|
||||
|
||||
Source : Source_Id;
|
||||
Suffix : File_Name_Type;
|
||||
|
@ -1225,9 +1233,10 @@ package body Prj.Env is
|
|||
Tree : Project_Tree_Ref)
|
||||
is
|
||||
procedure For_Project
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Dummy : in out Integer);
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Integer);
|
||||
-- Get all object directories of Prj
|
||||
|
||||
-----------------
|
||||
|
@ -1235,11 +1244,12 @@ package body Prj.Env is
|
|||
-----------------
|
||||
|
||||
procedure For_Project
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Dummy : in out Integer)
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Integer)
|
||||
is
|
||||
pragma Unreferenced (Dummy, Tree);
|
||||
pragma Unreferenced (Dummy, Tree, In_Aggregate_Lib);
|
||||
|
||||
begin
|
||||
-- ??? Set_Ada_Paths has a different behavior for library project
|
||||
|
@ -1270,9 +1280,10 @@ package body Prj.Env is
|
|||
In_Tree : Project_Tree_Ref)
|
||||
is
|
||||
procedure For_Project
|
||||
(Prj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Integer);
|
||||
(Prj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Integer);
|
||||
-- Get all object directories of Prj
|
||||
|
||||
-----------------
|
||||
|
@ -1280,11 +1291,12 @@ package body Prj.Env is
|
|||
-----------------
|
||||
|
||||
procedure For_Project
|
||||
(Prj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Integer)
|
||||
(Prj : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Integer)
|
||||
is
|
||||
pragma Unreferenced (Dummy);
|
||||
pragma Unreferenced (Dummy, In_Aggregate_Lib);
|
||||
|
||||
Current : String_List_Id := Prj.Source_Dirs;
|
||||
The_String : String_Element;
|
||||
|
@ -1642,9 +1654,10 @@ package body Prj.Env is
|
|||
Buffer_Last : Natural := 0;
|
||||
|
||||
procedure Recursive_Add
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean);
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean);
|
||||
-- Recursive procedure to add the source/object paths of extended/
|
||||
-- imported projects.
|
||||
|
||||
|
@ -1653,11 +1666,12 @@ package body Prj.Env is
|
|||
-------------------
|
||||
|
||||
procedure Recursive_Add
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean)
|
||||
(Project : Project_Id;
|
||||
In_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (Dummy, In_Tree);
|
||||
pragma Unreferenced (Dummy, In_Tree, In_Aggregate_Lib);
|
||||
|
||||
Path : Path_Name_Type;
|
||||
|
||||
|
|
|
@ -151,9 +151,10 @@ package body Prj.Nmsc is
|
|||
-- be discarded as soon as we have finished processing the project
|
||||
|
||||
type Tree_Processing_Data is record
|
||||
Tree : Project_Tree_Ref;
|
||||
Node_Tree : Prj.Tree.Project_Node_Tree_Ref;
|
||||
Flags : Prj.Processing_Flags;
|
||||
Tree : Project_Tree_Ref;
|
||||
Node_Tree : Prj.Tree.Project_Node_Tree_Ref;
|
||||
Flags : Prj.Processing_Flags;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
end record;
|
||||
-- Temporary data which is needed while parsing a project. It does not need
|
||||
-- to be kept in memory once a project has been fully loaded, but is
|
||||
|
@ -185,11 +186,6 @@ package body Prj.Nmsc is
|
|||
procedure Free (Data : in out Tree_Processing_Data);
|
||||
-- Free the memory occupied by Data
|
||||
|
||||
procedure Check
|
||||
(Project : Project_Id;
|
||||
Data : in out Tree_Processing_Data);
|
||||
-- Process the naming scheme for a single project
|
||||
|
||||
procedure Initialize
|
||||
(Data : in out Project_Processing_Data;
|
||||
Project : Project_Id);
|
||||
|
@ -728,6 +724,7 @@ package body Prj.Nmsc is
|
|||
elsif Prev_Unit /= No_Unit_Index
|
||||
and then Prev_Unit.File_Names (Kind) /= null
|
||||
and then not Source.Locally_Removed
|
||||
and then not Data.In_Aggregate_Lib
|
||||
then
|
||||
-- Path is set if this is a source we found on the disk, in which
|
||||
-- case we can provide more explicit error message. Path is unset
|
||||
|
@ -765,6 +762,7 @@ package body Prj.Nmsc is
|
|||
and then not Data.Flags.Allow_Duplicate_Basenames
|
||||
and then Lang_Id.Config.Kind = Unit_Based
|
||||
and then Source.Language.Config.Kind = Unit_Based
|
||||
and then not Data.In_Aggregate_Lib
|
||||
then
|
||||
Error_Msg_File_1 := File_Name;
|
||||
Error_Msg_File_2 := File_Name_Type (Source.Project.Name);
|
||||
|
@ -924,9 +922,10 @@ package body Prj.Nmsc is
|
|||
Flags : Processing_Flags)
|
||||
is
|
||||
Data : Tree_Processing_Data :=
|
||||
(Tree => Tree,
|
||||
Node_Tree => Node_Tree,
|
||||
Flags => Flags);
|
||||
(Tree => Tree,
|
||||
Node_Tree => Node_Tree,
|
||||
Flags => Flags,
|
||||
In_Aggregate_Lib => False);
|
||||
|
||||
Project_Files : constant Prj.Variable_Value :=
|
||||
Prj.Util.Value_Of
|
||||
|
@ -1012,132 +1011,6 @@ package body Prj.Nmsc is
|
|||
Free (Project_Path_For_Aggregate);
|
||||
end Process_Aggregated_Projects;
|
||||
|
||||
-----------
|
||||
-- Check --
|
||||
-----------
|
||||
|
||||
procedure Check
|
||||
(Project : Project_Id;
|
||||
Data : in out Tree_Processing_Data)
|
||||
is
|
||||
procedure Check_Aggregate
|
||||
(Project : Project_Id;
|
||||
Data : in out Tree_Processing_Data);
|
||||
-- Check the aggregate project attributes, reject any not supported
|
||||
-- attributes.
|
||||
|
||||
---------------------
|
||||
-- Check_Aggregate --
|
||||
---------------------
|
||||
|
||||
procedure Check_Aggregate
|
||||
(Project : Project_Id;
|
||||
Data : in out Tree_Processing_Data)
|
||||
is
|
||||
procedure Check_Not_Defined (Name : Name_Id);
|
||||
-- Report an error if Var is defined
|
||||
|
||||
-----------------------
|
||||
-- Check_Not_Defined --
|
||||
-----------------------
|
||||
|
||||
procedure Check_Not_Defined (Name : Name_Id) is
|
||||
Var : constant Prj.Variable_Value :=
|
||||
Prj.Util.Value_Of
|
||||
(Name,
|
||||
Project.Decl.Attributes,
|
||||
Data.Tree.Shared);
|
||||
begin
|
||||
if not Var.Default then
|
||||
Error_Msg_Name_1 := Name;
|
||||
Error_Msg
|
||||
(Data.Flags, "wrong attribute %% in aggregate library",
|
||||
Var.Location, Project);
|
||||
end if;
|
||||
end Check_Not_Defined;
|
||||
|
||||
-- Start of processing for Check_Not_Defined
|
||||
|
||||
begin
|
||||
Check_Not_Defined (Snames.Name_Library_Dir);
|
||||
Check_Not_Defined (Snames.Name_Library_Interface);
|
||||
Check_Not_Defined (Snames.Name_Library_Name);
|
||||
Check_Not_Defined (Snames.Name_Library_Ali_Dir);
|
||||
Check_Not_Defined (Snames.Name_Library_Src_Dir);
|
||||
Check_Not_Defined (Snames.Name_Library_Options);
|
||||
Check_Not_Defined (Snames.Name_Library_Standalone);
|
||||
Check_Not_Defined (Snames.Name_Library_Kind);
|
||||
Check_Not_Defined (Snames.Name_Leading_Library_Options);
|
||||
Check_Not_Defined (Snames.Name_Library_Version);
|
||||
end Check_Aggregate;
|
||||
|
||||
Shared : constant Shared_Project_Tree_Data_Access := Data.Tree.Shared;
|
||||
Prj_Data : Project_Processing_Data;
|
||||
|
||||
begin
|
||||
Debug_Increase_Indent ("check", Project.Name);
|
||||
|
||||
Initialize (Prj_Data, Project);
|
||||
|
||||
Check_If_Externally_Built (Project, Data);
|
||||
|
||||
case Project.Qualifier is
|
||||
when Aggregate =>
|
||||
null;
|
||||
|
||||
when Aggregate_Library =>
|
||||
if Project.Object_Directory = No_Path_Information then
|
||||
Project.Object_Directory := Project.Directory;
|
||||
end if;
|
||||
|
||||
when others =>
|
||||
Get_Directories (Project, Data);
|
||||
Check_Programming_Languages (Project, Data);
|
||||
|
||||
if Current_Verbosity = High then
|
||||
Show_Source_Dirs (Project, Shared);
|
||||
end if;
|
||||
|
||||
if Project.Qualifier = Dry then
|
||||
Check_Abstract_Project (Project, Data);
|
||||
end if;
|
||||
end case;
|
||||
|
||||
-- Check configuration. This must be done even for gnatmake (even though
|
||||
-- no user configuration file was provided) since the default config we
|
||||
-- generate indicates whether libraries are supported for instance.
|
||||
|
||||
Check_Configuration (Project, Data);
|
||||
|
||||
-- For aggregate project checks that no library attributes are defined
|
||||
|
||||
if Project.Qualifier = Aggregate then
|
||||
Check_Aggregate (Project, Data);
|
||||
|
||||
else
|
||||
Check_Library_Attributes (Project, Data);
|
||||
Check_Package_Naming (Project, Data);
|
||||
|
||||
-- An aggregate library has no source, no need to look for them
|
||||
|
||||
if Project.Qualifier /= Aggregate_Library then
|
||||
Look_For_Sources (Prj_Data, Data);
|
||||
end if;
|
||||
|
||||
Check_Interfaces (Project, Data);
|
||||
|
||||
if Project.Library then
|
||||
Check_Stand_Alone_Library (Project, Data);
|
||||
end if;
|
||||
|
||||
Get_Mains (Project, Data);
|
||||
end if;
|
||||
|
||||
Free (Prj_Data);
|
||||
|
||||
Debug_Decrease_Indent ("done check");
|
||||
end Check;
|
||||
|
||||
----------------------------
|
||||
-- Check_Abstract_Project --
|
||||
----------------------------
|
||||
|
@ -3219,7 +3092,7 @@ package body Prj.Nmsc is
|
|||
Lib_Name.Location, Project);
|
||||
end if;
|
||||
|
||||
when Library =>
|
||||
when Library | Aggregate_Library =>
|
||||
if not Project.Library then
|
||||
if Project.Library_Name = No_Name then
|
||||
Error_Msg
|
||||
|
@ -3579,7 +3452,7 @@ package body Prj.Nmsc is
|
|||
end loop;
|
||||
end if;
|
||||
|
||||
if Project.Library then
|
||||
if Project.Library and not Data.In_Aggregate_Lib then
|
||||
|
||||
-- Record the library name
|
||||
|
||||
|
@ -8313,20 +8186,163 @@ package body Prj.Nmsc is
|
|||
Node_Tree : Prj.Tree.Project_Node_Tree_Ref;
|
||||
Flags : Processing_Flags)
|
||||
is
|
||||
|
||||
procedure Check
|
||||
(Project : Project_Id;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Data : in out Tree_Processing_Data);
|
||||
-- Process the naming scheme for a single project
|
||||
|
||||
procedure Recursive_Check
|
||||
(Project : Project_Id;
|
||||
Prj_Tree : Project_Tree_Ref;
|
||||
Data : in out Tree_Processing_Data);
|
||||
(Project : Project_Id;
|
||||
Prj_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Data : in out Tree_Processing_Data);
|
||||
-- Check_Naming_Scheme for the project
|
||||
|
||||
-----------
|
||||
-- Check --
|
||||
-----------
|
||||
|
||||
procedure Check
|
||||
(Project : Project_Id;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Data : in out Tree_Processing_Data)
|
||||
is
|
||||
procedure Check_Aggregate
|
||||
(Project : Project_Id;
|
||||
Data : in out Tree_Processing_Data);
|
||||
-- Check the aggregate project attributes, reject any not supported
|
||||
-- attributes.
|
||||
|
||||
---------------------
|
||||
-- Check_Aggregate --
|
||||
---------------------
|
||||
|
||||
procedure Check_Aggregate
|
||||
(Project : Project_Id;
|
||||
Data : in out Tree_Processing_Data)
|
||||
is
|
||||
|
||||
procedure Check_Not_Defined (Name : Name_Id);
|
||||
-- Report an error if Var is defined
|
||||
|
||||
-----------------------
|
||||
-- Check_Not_Defined --
|
||||
-----------------------
|
||||
|
||||
procedure Check_Not_Defined (Name : Name_Id) is
|
||||
Var : constant Prj.Variable_Value :=
|
||||
Prj.Util.Value_Of
|
||||
(Name,
|
||||
Project.Decl.Attributes,
|
||||
Data.Tree.Shared);
|
||||
begin
|
||||
if not Var.Default then
|
||||
Error_Msg_Name_1 := Name;
|
||||
Error_Msg
|
||||
(Data.Flags, "wrong attribute %% in aggregate library",
|
||||
Var.Location, Project);
|
||||
end if;
|
||||
end Check_Not_Defined;
|
||||
|
||||
begin
|
||||
Check_Not_Defined (Snames.Name_Library_Dir);
|
||||
Check_Not_Defined (Snames.Name_Library_Interface);
|
||||
Check_Not_Defined (Snames.Name_Library_Name);
|
||||
Check_Not_Defined (Snames.Name_Library_Ali_Dir);
|
||||
Check_Not_Defined (Snames.Name_Library_Src_Dir);
|
||||
Check_Not_Defined (Snames.Name_Library_Options);
|
||||
Check_Not_Defined (Snames.Name_Library_Standalone);
|
||||
Check_Not_Defined (Snames.Name_Library_Kind);
|
||||
Check_Not_Defined (Snames.Name_Leading_Library_Options);
|
||||
Check_Not_Defined (Snames.Name_Library_Version);
|
||||
end Check_Aggregate;
|
||||
|
||||
Shared : constant Shared_Project_Tree_Data_Access :=
|
||||
Data.Tree.Shared;
|
||||
Prj_Data : Project_Processing_Data;
|
||||
|
||||
-- Start of processing for Check
|
||||
|
||||
begin
|
||||
Debug_Increase_Indent ("check", Project.Name);
|
||||
|
||||
Initialize (Prj_Data, Project);
|
||||
|
||||
Check_If_Externally_Built (Project, Data);
|
||||
|
||||
case Project.Qualifier is
|
||||
when Aggregate =>
|
||||
null;
|
||||
|
||||
when Aggregate_Library =>
|
||||
if Project.Object_Directory = No_Path_Information then
|
||||
Project.Object_Directory := Project.Directory;
|
||||
end if;
|
||||
|
||||
when others =>
|
||||
Get_Directories (Project, Data);
|
||||
Check_Programming_Languages (Project, Data);
|
||||
|
||||
if Current_Verbosity = High then
|
||||
Show_Source_Dirs (Project, Shared);
|
||||
end if;
|
||||
|
||||
if Project.Qualifier = Dry then
|
||||
Check_Abstract_Project (Project, Data);
|
||||
end if;
|
||||
end case;
|
||||
|
||||
-- Check configuration. This must be done even for gnatmake (even
|
||||
-- though no user configuration file was provided) since the default
|
||||
-- config we generate indicates whether libraries are supported for
|
||||
-- instance.
|
||||
|
||||
Check_Configuration (Project, Data);
|
||||
|
||||
-- For aggregate project check no library attributes are defined
|
||||
|
||||
if Project.Qualifier = Aggregate then
|
||||
Check_Aggregate (Project, Data);
|
||||
|
||||
else
|
||||
Check_Library_Attributes (Project, Data);
|
||||
Check_Package_Naming (Project, Data);
|
||||
|
||||
-- An aggregate library has no source, no need to look for them
|
||||
|
||||
if Project.Qualifier /= Aggregate_Library then
|
||||
Look_For_Sources (Prj_Data, Data);
|
||||
end if;
|
||||
|
||||
Check_Interfaces (Project, Data);
|
||||
|
||||
-- If this library is part of an aggregated library don't check it
|
||||
-- as it has no sources by itself and so interface won't be found.
|
||||
|
||||
if Project.Library and not In_Aggregate_Lib then
|
||||
Check_Stand_Alone_Library (Project, Data);
|
||||
end if;
|
||||
|
||||
Get_Mains (Project, Data);
|
||||
end if;
|
||||
|
||||
Free (Prj_Data);
|
||||
|
||||
Debug_Decrease_Indent ("done check");
|
||||
end Check;
|
||||
|
||||
---------------------
|
||||
-- Recursive_Check --
|
||||
---------------------
|
||||
|
||||
procedure Recursive_Check
|
||||
(Project : Project_Id;
|
||||
Prj_Tree : Project_Tree_Ref;
|
||||
Data : in out Tree_Processing_Data) is
|
||||
(Project : Project_Id;
|
||||
Prj_Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Data : in out Tree_Processing_Data)
|
||||
is
|
||||
begin
|
||||
if Current_Verbosity = High then
|
||||
Debug_Increase_Indent
|
||||
|
@ -8334,7 +8350,9 @@ package body Prj.Nmsc is
|
|||
end if;
|
||||
|
||||
Data.Tree := Prj_Tree;
|
||||
Prj.Nmsc.Check (Project, Data);
|
||||
Data.In_Aggregate_Lib := In_Aggregate_Lib;
|
||||
|
||||
Check (Project, In_Aggregate_Lib, Data);
|
||||
|
||||
if Current_Verbosity = High then
|
||||
Debug_Decrease_Indent ("done Processing_Naming_Scheme");
|
||||
|
@ -8347,6 +8365,7 @@ package body Prj.Nmsc is
|
|||
Data : Tree_Processing_Data;
|
||||
|
||||
-- Start of processing for Process_Naming_Scheme
|
||||
|
||||
begin
|
||||
Lib_Data_Table.Init;
|
||||
Initialize (Data, Tree => Tree, Node_Tree => Node_Tree, Flags => Flags);
|
||||
|
|
|
@ -528,20 +528,24 @@ package body Prj is
|
|||
Seen : Project_Boolean_Htable.Instance := Project_Boolean_Htable.Nil;
|
||||
|
||||
procedure Recursive_Check
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref);
|
||||
-- Check if a project has already been seen. If not seen, mark it as
|
||||
-- Seen, Call Action, and check all its imported projects.
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean);
|
||||
-- Check if a project has already been seen. If not seen, mark it
|
||||
-- as Seen, Call Action, and check all its imported and aggregated
|
||||
-- projects.
|
||||
|
||||
---------------------
|
||||
-- Recursive_Check --
|
||||
---------------------
|
||||
|
||||
procedure Recursive_Check
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref)
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean)
|
||||
is
|
||||
List : Project_List;
|
||||
T : Project_Tree_Ref;
|
||||
|
||||
begin
|
||||
if not Get (Seen, Project) then
|
||||
|
@ -552,22 +556,28 @@ package body Prj is
|
|||
Set (Seen, Project, True);
|
||||
|
||||
if not Imported_First then
|
||||
Action (Project, Tree, With_State);
|
||||
Action (Project, Tree, In_Aggregate_Lib, With_State);
|
||||
end if;
|
||||
|
||||
-- Visit all extended projects
|
||||
|
||||
if Project.Extends /= No_Project then
|
||||
Recursive_Check (Project.Extends, Tree);
|
||||
Recursive_Check (Project.Extends, Tree, In_Aggregate_Lib);
|
||||
end if;
|
||||
|
||||
-- Visit all imported projects
|
||||
-- Visit all imported projects if needed. This is not needed
|
||||
-- for an aggregate library as imported libraries are just
|
||||
-- there for dependency support.
|
||||
|
||||
List := Project.Imported_Projects;
|
||||
while List /= null loop
|
||||
Recursive_Check (List.Project, Tree);
|
||||
List := List.Next;
|
||||
end loop;
|
||||
if Project.Qualifier /= Aggregate_Library
|
||||
or else not Include_Aggregated
|
||||
then
|
||||
List := Project.Imported_Projects;
|
||||
while List /= null loop
|
||||
Recursive_Check (List.Project, Tree, In_Aggregate_Lib);
|
||||
List := List.Next;
|
||||
end loop;
|
||||
end if;
|
||||
|
||||
-- Visit all aggregated projects
|
||||
|
||||
|
@ -580,14 +590,25 @@ package body Prj is
|
|||
Agg := Project.Aggregated_Projects;
|
||||
while Agg /= null loop
|
||||
pragma Assert (Agg.Project /= No_Project);
|
||||
Recursive_Check (Agg.Project, Agg.Tree);
|
||||
|
||||
-- For aggregated libraries, the tree must be the one
|
||||
-- of the aggregate library.
|
||||
|
||||
if Project.Qualifier = Aggregate_Library then
|
||||
T := Tree;
|
||||
else
|
||||
T := Agg.Tree;
|
||||
end if;
|
||||
|
||||
Recursive_Check
|
||||
(Agg.Project, T, Project.Qualifier = Aggregate_Library);
|
||||
Agg := Agg.Next;
|
||||
end loop;
|
||||
end;
|
||||
end if;
|
||||
|
||||
if Imported_First then
|
||||
Action (Project, Tree, With_State);
|
||||
Action (Project, Tree, In_Aggregate_Lib, With_State);
|
||||
end if;
|
||||
end if;
|
||||
end Recursive_Check;
|
||||
|
@ -595,7 +616,7 @@ package body Prj is
|
|||
-- Start of processing for For_Every_Project_Imported
|
||||
|
||||
begin
|
||||
Recursive_Check (Project => By, Tree => Tree);
|
||||
Recursive_Check (Project => By, Tree => Tree, In_Aggregate_Lib => False);
|
||||
Reset (Seen);
|
||||
end For_Every_Project_Imported;
|
||||
|
||||
|
@ -614,9 +635,10 @@ package body Prj is
|
|||
Result : Source_Id := No_Source;
|
||||
|
||||
procedure Look_For_Sources
|
||||
(Proj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Src : in out Source_Id);
|
||||
(Proj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate : Boolean;
|
||||
Src : in out Source_Id);
|
||||
-- Look for Base_Name in the sources of Proj
|
||||
|
||||
----------------------
|
||||
|
@ -624,10 +646,13 @@ package body Prj is
|
|||
----------------------
|
||||
|
||||
procedure Look_For_Sources
|
||||
(Proj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Src : in out Source_Id)
|
||||
(Proj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate : Boolean;
|
||||
Src : in out Source_Id)
|
||||
is
|
||||
pragma Unreferenced (In_Aggregate);
|
||||
|
||||
Iterator : Source_Iterator;
|
||||
|
||||
begin
|
||||
|
@ -662,14 +687,14 @@ package body Prj is
|
|||
if In_Extended_Only then
|
||||
Proj := Project;
|
||||
while Proj /= No_Project loop
|
||||
Look_For_Sources (Proj, In_Tree, Result);
|
||||
Look_For_Sources (Proj, In_Tree, False, Result);
|
||||
exit when Result /= No_Source;
|
||||
|
||||
Proj := Proj.Extends;
|
||||
end loop;
|
||||
|
||||
elsif In_Imported_Only then
|
||||
Look_For_Sources (Project, In_Tree, Result);
|
||||
Look_For_Sources (Project, In_Tree, False, Result);
|
||||
|
||||
if Result = No_Source then
|
||||
For_Imported_Projects
|
||||
|
@ -680,7 +705,7 @@ package body Prj is
|
|||
end if;
|
||||
|
||||
else
|
||||
Look_For_Sources (No_Project, In_Tree, Result);
|
||||
Look_For_Sources (No_Project, In_Tree, False, Result);
|
||||
end if;
|
||||
|
||||
return Result;
|
||||
|
@ -1365,9 +1390,10 @@ package body Prj is
|
|||
Project : Project_Id;
|
||||
|
||||
procedure Recursive_Add
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean);
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean);
|
||||
-- Recursively add the projects imported by project Project, but not
|
||||
-- those that are extended.
|
||||
|
||||
|
@ -1376,11 +1402,13 @@ package body Prj is
|
|||
-------------------
|
||||
|
||||
procedure Recursive_Add
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
Dummy : in out Boolean)
|
||||
(Prj : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
Dummy : in out Boolean)
|
||||
is
|
||||
pragma Unreferenced (Dummy, Tree);
|
||||
pragma Unreferenced (Dummy, Tree, In_Aggregate_Lib);
|
||||
|
||||
List : Project_List;
|
||||
Prj2 : Project_Id;
|
||||
|
||||
|
|
|
@ -1562,9 +1562,10 @@ package Prj is
|
|||
generic
|
||||
type State is limited private;
|
||||
with procedure Action
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
With_State : in out State);
|
||||
(Project : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
In_Aggregate_Lib : Boolean;
|
||||
With_State : in out State);
|
||||
procedure For_Every_Project_Imported
|
||||
(By : Project_Id;
|
||||
Tree : Project_Tree_Ref;
|
||||
|
@ -1589,7 +1590,9 @@ package Prj is
|
|||
--
|
||||
-- If Include_Aggregated is True, then an aggregate project will recurse
|
||||
-- into the projects it aggregates. Otherwise, the latter are never
|
||||
-- returned
|
||||
-- returned.
|
||||
--
|
||||
-- In_Aggregate_Lib is True if the project is in an aggregate library
|
||||
--
|
||||
-- The Tree argument passed to the callback is required in the case of
|
||||
-- aggregated projects, since they might not be using the same tree as 'By'
|
||||
|
|
|
@ -15333,10 +15333,23 @@ package body Sem_Ch3 is
|
|||
Spec : constant Entity_Id := Real_Range_Specification (Def);
|
||||
|
||||
begin
|
||||
-- Check specified "digits" constraint
|
||||
|
||||
if Digs_Val > Digits_Value (E) then
|
||||
return False;
|
||||
end if;
|
||||
|
||||
-- Avoid types not matching pragma Float_Representation, if present
|
||||
|
||||
if (Opt.Float_Format = 'I' and then Float_Rep (E) /= IEEE_Binary)
|
||||
or else
|
||||
(Opt.Float_Format = 'V' and then Float_Rep (E) /= VAX_Native)
|
||||
then
|
||||
return False;
|
||||
end if;
|
||||
|
||||
-- Check for matching range, if specified
|
||||
|
||||
if Present (Spec) then
|
||||
if Expr_Value_R (Type_Low_Bound (E)) >
|
||||
Expr_Value_R (Low_Bound (Spec))
|
||||
|
|
|
@ -638,7 +638,6 @@ package body Sem_Ch7 is
|
|||
-- Processing for package bodies
|
||||
|
||||
elsif K = N_Package_Body
|
||||
and then not Has_Referencer_Except_For_Subprograms
|
||||
and then Present (Corresponding_Spec (D))
|
||||
then
|
||||
E := Corresponding_Spec (D);
|
||||
|
@ -648,7 +647,10 @@ package body Sem_Ch7 is
|
|||
-- exported, i.e. where the corresponding spec is the
|
||||
-- spec of the current package, but because of nested
|
||||
-- instantiations, a fully private generic body may
|
||||
-- export other private body entities.
|
||||
-- export other private body entities. Furthermore,
|
||||
-- regardless of whether there was a previous inlined
|
||||
-- subprogram, (an instantiation of) the generic package
|
||||
-- may reference any entity declared before it.
|
||||
|
||||
if Is_Generic_Unit (E) then
|
||||
return True;
|
||||
|
@ -657,7 +659,9 @@ package body Sem_Ch7 is
|
|||
-- this is an instance, we ignore instances since they
|
||||
-- cannot have references that affect outer entities.
|
||||
|
||||
elsif not Is_Generic_Instance (E) then
|
||||
elsif not Is_Generic_Instance (E)
|
||||
and then not Has_Referencer_Except_For_Subprograms
|
||||
then
|
||||
if Has_Referencer
|
||||
(Declarations (D), Outer => False)
|
||||
then
|
||||
|
|
Loading…
Add table
Reference in a new issue