------------------------------------------------------------------------------ -- -- -- GPR PROJECT MANAGER -- -- -- -- Copyright (C) 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 -- -- . -- -- -- ------------------------------------------------------------------------------ -- This package manages the communication with GNU make jobserver with Ada.Strings.Hash; with GPR.Compilation; use GPR.Compilation; with Ada.Containers.Indefinite_Hashed_Maps; package GPR.Jobserver is JS_Initialize_Error : exception; -- Error exception raised when jobserver's initialization fails JS_Makeflags_Parsing_Detects_Dry_Run : exception; -- Exception raised when make was invoked with "-n" JS_Access_Error : exception; -- Error exception raised when jobserver's read or write fails procedure Initialize; -- Initialize Jobserver communication function Preorder_Token return Boolean; -- Returns True if there is an available token on the current jobserver, -- returns False if there is not. procedure Register_Token_Id (Id : GPR.Compilation.Id); -- Affiliates the last preordered token to the process Id procedure Unregister_All_Token_Id; -- Free all registered tokens procedure Unregister_Token_Id (Id : GPR.Compilation.Id); -- Release the token affiliated to the process Id function Registered_Processes return Boolean; -- Returns True if there are ongoing processes affiliated with a token, -- returns False if there are not. function Unavailable_Token return Boolean; -- Returns True if the last attempt of preordering a token failed, -- returns False otherwise. private package Token_Process_Id is new Ada.Containers.Indefinite_Hashed_Maps (String, Character, Ada.Strings.Hash, "="); Source_Id_Token_Map : Token_Process_Id.Map; type Connection_Type is (Undefined, Named_Pipe, Simple_Pipe, Windows_Semaphore); Current_Connection_Method : Connection_Type := Undefined; type Implemented_Connection_Type is array (Connection_Type) of Boolean; type Token_Status is (Not_Needed, Unavailable); Default_Token_Status : constant Token_Status := Not_Needed; Last_Token_Status : Token_Status := Default_Token_Status; Char : aliased Character := ASCII.NUL; end GPR.Jobserver;