with Ada.Containers.Hashed_Maps; with GNAT.OS_Lib; use GNAT.OS_Lib; with GNAT.String_Hash; with GNATCOLL.Projects; use GNATCOLL.Projects; with Utils.Command_Lines; use Utils.Command_Lines; package Utils.Projects is function Hash is new GNAT.String_Hash.Hash (Character, String, Ada.Containers.Hash_Type); function Hash (S : String_Access) return Ada.Containers.Hash_Type is (Hash (S.all)); function Equivalent_Keys (S1, S2 : String_Access) return Boolean is (S1.all = S2.all); package String_String_Maps is new Ada.Containers.Hashed_Maps (Key_Type => String_Access, Element_Type => String_Access, Hash => Hash, Equivalent_Keys => Equivalent_Keys); use String_String_Maps; subtype String_String_Map is String_String_Maps.Map; package String_String_List_Maps is new Ada.Containers.Hashed_Maps (Key_Type => String_Access, Element_Type => String_List_Access, Hash => Hash, Equivalent_Keys => Equivalent_Keys); use String_String_List_Maps; subtype String_String_List_Map is String_String_List_Maps.Map; procedure Process_Command_Line (Cmd : in out Command_Line; Cmd_Text, Cmd_Cargs, Project_Switches_Text : out Argument_List_Access; Global_Report_Dir : out String_Ref; Compiler_Options : out String_List_Access; Project_RTS : out String_Access; Individual_Source_Options : out String_String_List_Map; Result_Dirs : out String_String_Map; The_Project_Tree : out not null Project_Tree_Access; The_Project_Env : out not null Project_Environment_Access; Needs_Per_File_Output : Boolean; Preprocessing_Allowed : Boolean; Tool_Package_Name : String; Compute_Project_Closure : Boolean := True; Callback : Parse_Callback := null; Post_Cmd_Line_1_Action : not null access procedure (Cmd : Command_Line); Tool_Temp_Dir : String; Print_Help : not null access procedure); -- Processes the command line and (if specified on the command line) the -- project file. -- -- Cmd_Text and Project_Switches_Text are the textual arguments from -- the command line and project file, if any. Project_Switches_Text is -- empty if there is no project file. These are needed temporarily so -- we can process "-cargs" the old way. -- -- Global_Report_Dir is set to the directory name in which to place global -- tool results, if this information comes from the project file (see -- Set_Global_Result_Dirs). Otherwise it is null. -- -- Compiler_Options are options that should be passed to gcc, based on the -- content of the project file. -- -- Project_RTS is the value Runtime of the project. -- -- Individual_Source_Options is a mapping from source file names to -- switches specified specifically for that source file. -- -- Result_Dirs is a mapping from source file names to file-specific result -- directories. Only used if Needs_Per_File_Output is ON. -- -- Tool_Package_Name is the name of the project-file package to use for the -- tool. -- -- ????? Use Compiler_Options for more stuff, -- where we currently have actions that call Store_GNAT_Option_With_Path -- and friends. -- -- Compute_Project_Closure is True if source files should be extracted from -- the project if no argument file is specified explicitly. There are at -- least two tools that pass False - gnatelim and gnatstub. -- -- Callback is called for each switch, and can be used when some immediate -- action is required as soon as the switch is seen. -- -- Post_Cmd_Line_1_Action is called after the Cmd_Line_1 pass. -- -- Tool_Temp_Dir is the name of the directory to which temp files should be -- written. -- -- Print_Help is called if --help appears on the command line. procedure Read_File_Names_From_File (Par_File_Name : String; Action : not null access procedure (File_Name : String)); -- Read each file name from the named file, and call Action for each -- one. This is used to implement the --files and --ignore switches. procedure Print_Command_Line (Incremental_Mode, Mimic_gcc : Boolean); -- Prints the command line to standard output for debugging end Utils.Projects;