1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 | --
-- Copyright (C) 2019-2023, AdaCore
--
-- SPDX-License-Identifier: Apache-2.0 WITH LLVM-Exception
--
with Ada.Containers.Ordered_Maps;
package body GPR2.Project.Registry.Pack is
type Package_Options is record
Projects : Projects_Kind;
Check_Attributes : Boolean;
end record;
package Pack_Definition is new Ada.Containers.Ordered_Maps
(Package_Id, Package_Options, "<");
Store : Pack_Definition.Map;
---------
-- Add --
---------
procedure Add (Name : Package_Id; Projects : Projects_Kind) is
begin
Store.Insert (Name, (Projects, False));
end Add;
------------------
-- All_Packages --
------------------
function All_Packages return Containers.Package_Id_List is
Result : Containers.Package_Id_List;
begin
for P in Store.Iterate loop
declare
Name : constant Package_Id := Pack_Definition.Key (P);
begin
Result.Insert (Name);
end;
end loop;
return Result;
end All_Packages;
----------------------------
-- Attributes_Are_Checked --
----------------------------
function Attributes_Are_Checked (Name : Package_Id) return Boolean is
CS : constant Pack_Definition.Cursor := Store.Find (Name);
begin
return Pack_Definition.Has_Element (CS)
and then Pack_Definition.Element (CS).Check_Attributes;
end Attributes_Are_Checked;
----------------------
-- Check_Attributes --
----------------------
procedure Check_Attributes (Name : Package_Id; Flag : Boolean := True) is
begin
Store (Name).Check_Attributes := Flag;
end Check_Attributes;
------------
-- Exists --
------------
function Exists (Name : Package_Id) return Boolean is
begin
if Name = GPR2.Project_Level_Scope then
return True;
else
return Store.Contains (Name);
end if;
end Exists;
-------------------
-- Is_Allowed_In --
-------------------
function Is_Allowed_In
(Name : Package_Id;
Project : Project_Kind) return Boolean is
begin
if Store.Contains (Name) then
return Store (Name).Projects (Project);
else
-- If the package is unknown, it is probably a user's package,
-- let's assume it is allowed everywhere.
return True;
end if;
end Is_Allowed_In;
begin
Add (Naming, No_Aggregates);
Add (Compiler, No_Aggregates);
Add (Linker, No_Aggregates);
Add (Binder, No_Aggregates);
Add (Clean, Everywhere);
Add (Builder, Everywhere);
Add (Install, (K_Aggregate => False, others => True));
Add (Remote, Everywhere);
Add (Gnatls, Everywhere);
end GPR2.Project.Registry.Pack;
|