-- -- Copyright (C) 2018-2019, AdaCore -- -- SPDX-License-Identifier: Apache-2.0 -- -- Notes about names of variables: its case sensitivity is platform dependent. -- On case insensitive platforms original casing is returned by Keys function. with Spawn.String_Vectors; private with Ada.Containers.Indefinite_Ordered_Maps; private with Spawn.Internal; package Spawn.Environments is type Process_Environment is tagged private; procedure Clear (Self : in out Process_Environment'Class); -- Reset given Process_Environment to an empty state. function Contains (Self : Process_Environment'Class; Name : UTF_8_String) return Boolean; -- Check if given Process_Environment has variable with given Name. procedure Insert (Self : in out Process_Environment'Class; Name : UTF_8_String; Value : UTF_8_String); -- Insert variable into Process_Environment, replace existing variable -- with the same name if any. procedure Insert (Self : in out Process_Environment'Class; Environemnt : Process_Environment'Class); -- Insert all variables into Process_Environment. function Keys (Self : Process_Environment'Class) return Spawn.String_Vectors.UTF_8_String_Vector; -- Return list of names of variables. procedure Remove (Self : in out Process_Environment'Class; Name : UTF_8_String); -- Delete variable from Process_Environment. Do nothing if no such variable function Value (Self : Process_Environment'Class; Name : UTF_8_String; Default : UTF_8_String := "") return UTF_8_String; -- Get value of an variable from Process_Environment function Search_Path (Self : Process_Environment'Class; File : UTF_8_String; Name : UTF_8_String := "PATH") return UTF_8_String; -- Take an environment variable with given Name as directory list, then -- search for the File in each of this directory. Return path to found file -- or empty string if not found. function System_Environment return Process_Environment; private package UTF_8_String_Maps is new Ada.Containers.Indefinite_Ordered_Maps (Key_Type => UTF_8_String, Element_Type => UTF_8_String, "<" => Spawn.Internal.Environments."<", "=" => Spawn.Internal.Environments."="); type Process_Environment is tagged record Map : UTF_8_String_Maps.Map; end record; end Spawn.Environments;