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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 | ------------------------------------------------------------------------------
-- --
-- GPR PROJECT MANAGER --
-- --
-- Copyright (C) 2012-2023, Free Software Foundation, Inc. --
-- --
-- This library is free software; you can redistribute it and/or modify it --
-- under terms of the GNU General Public License as published by the Free --
-- Software Foundation; either version 3, or (at your option) any later --
-- version. This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
------------------------------------------------------------------------------
-- This is the root package for the compilation support. It handles the local
-- and distributed compilation modes.
with Ada.Characters.Latin_1;
with Ada.Containers.Vectors;
with Ada.Strings.Unbounded;
with GNAT.OS_Lib;
with GPR.Util;
package GPR.Compilation is
Default_Port : constant := 8484;
Opts_Sep : constant Character := Ada.Characters.Latin_1.HT;
-- Command options separator, that is the separator used for options to be
-- passed to the executed command.
-- A simple concurrent counter type
protected type Shared_Counter (Default : Natural := 0) is
function Count return Natural;
-- Returns the current counter value
procedure Increment;
-- Increment by one
procedure Decrement;
-- Decrement by one
procedure Reset;
-- Reset counter to 0
entry Wait_Non_Zero;
-- Returns when the counter is above zero
private
Counter : Natural := Default;
end Shared_Counter;
type Shared_Counter_Access is access Shared_Counter;
procedure Set_Env
(Env : String;
Fail : Boolean;
Force : Boolean := False);
-- Set environment given an Env variable containing a set of name=value
-- separated with Opts_Sep.
--
-- name=value[<opts_sep>name=value]
--
-- If Fail is true the program will exit if the a format error is detected.
-- If Force is set to True the environment will always be set otherwise it
-- will be set only if not already set.
-- The set of files for a given project (associated with a synchronization
-- job).
type File_Data is record
Path_Name : Ada.Strings.Unbounded.Unbounded_String;
Timestamp : Time_Stamp_Type; -- YYYYMMDDhhmmss
Is_Executable : Boolean;
end record;
package File_Data_Set is new Ada.Containers.Vectors (Positive, File_Data);
-- Process's Id, shared between Slave and Process children
type Remote_Id is mod 2 ** 64;
-- Represent a remote process id, this number is unique across all slaves.
-- Such number if created by the slaves using a slave id (unique number)
-- and a compilation number. Bother numbers are 32bits value:
--
-- 63 32 31 0
-- | [slave id] | [compilation number] |
type Process_Kind is (Local, Remote);
type Id (Kind : Process_Kind := Local) is record
case Kind is
when Local => Pid : GNAT.OS_Lib.Process_Id;
when Remote => R_Pid : Remote_Id;
end case;
end record;
Invalid_Process : constant Id := (Local, Pid => GNAT.OS_Lib.Invalid_Pid);
function Image (Pid : Remote_Id) return String;
-- Returns the string representation of Pid
procedure Check_Local_Process
(Process : Id;
Executable : String;
Options : GPR.Util.String_Vectors.Vector);
-- Check that a local process is valid. If not, fail with the errno and
-- associated message and failed command composed from Executable and
-- Options.
private
function To_Native_Directory_Separator
(Pathname : String) return String with Inline;
-- Returns Pathname with native directory separator
end GPR.Compilation;
|