-- -- Copyright (C) 2023, AdaCore -- -- SPDX-License-Identifier: Apache-2.0 WITH LLVM-Exception -- with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; private with Ada.Containers.Ordered_Sets; private with Ada.Containers.Vectors; with GPR2.Project.Tree; private with GPR2.Project.Typ; package GPR2.Project.External is -- This API provides a mean to obtain externals for a given project. -- -- An external value is an expression whose value is obtained -- from the command that invoked the processing of the current -- project file (typically a gprbuild commmand). -- -- Example: -- type Type_Name is ("A", "B"); -- Variable : Type_Name := external ("EXTERNAL_NAME", "A") -- In this case, the External EXTERNAL_NAME is "typed", and has -- two possible values: "A" and "B". In the case where EXTERNAL_NAME -- is undefined, "A" is its default value. -- -- Another example: -- Variable_2 := external ("EXTERNAL_NAME_2", "default") -- In this case, EXTERNAL_NAME_2 is untyped, and can take any value. type Object is tagged private; type External_Arr is array (Positive range <>) of Object; function Externals (Tree : GPR2.Project.Tree.Object; Root_Only : Boolean := False) return External_Arr; -- Return both typed and untyped externals found in the provided tree function Name (Ext : Object) return String; -- Return the external name, which is the first field of the external. -- For example, A in "external ("A", "default-value"). function Is_Typed (Ext : Object) return Boolean; -- Return True if an external is typed function Is_Conflicting (Ext : Object) return Boolean; -- Return True if an external has been assigned several types whose -- values are not identicals. type Unbounded_String_Array is array (Positive range <>) of Unbounded_String; function Possible_Values_Of (Ext : Object) return Unbounded_String_Array; -- In case of a typed variable, return all possible values. -- Otherwise, return an empty array. private type Type_Assignment is record Typ : GPR2.Project.Typ.Object; Assignment_Sloc : Source_Reference.Object; end record; package Type_Assignments_Vec is new Ada.Containers.Vectors (Index_Type => Natural, Element_Type => Type_Assignment); package Unbounded_String_Sets is new Ada.Containers.Ordered_Sets (Element_Type => Unbounded_String); type Object is tagged record Name : Unbounded_String; Typed : Boolean; Conflicting : Boolean := False; Possible_Values : Unbounded_String_Sets.Set; Types_Assignments : Type_Assignments_Vec.Vector; end record; end GPR2.Project.External;