From: Nicolas Boulenguez Date: Mon, 20 Oct 2025 11:08:22 +0000 (+0200) Subject: Ada: Use Osint.Program_Name in gnatchop X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=99c4287dca3d01492dffd2c769942038783be1d9;p=thirdparty%2Fgcc.git Ada: Use Osint.Program_Name in gnatchop This aligns gnatchop with the other GNAT tools when it comes to locating GCC's driver executable. gcc/ada/ PR ada/87777 * gnatchop.adb: Add with clause for Osint. (Locate_Executable): Delete. (Gnatchop): Use Osint.Program_Name and Locate_Exec_On_Path instead of Locate_Executable to locate GCC's driver executable. --- diff --git a/gcc/ada/gnatchop.adb b/gcc/ada/gnatchop.adb index 8f9887eb577..bc045e1fb7a 100644 --- a/gcc/ada/gnatchop.adb +++ b/gcc/ada/gnatchop.adb @@ -36,6 +36,7 @@ with GNAT.OS_Lib; use GNAT.OS_Lib; with GNAT.Heap_Sort_G; with GNAT.Table; +with Osint; with Switch; use Switch; with Types; @@ -44,12 +45,9 @@ procedure Gnatchop is Config_File_Name : constant String_Access := new String'("gnat.adc"); -- The name of the file holding the GNAT configuration pragmas - Gcc : String_Access := new String'("gcc"); + Gcc : String_Access := null; -- May be modified by switch --GCC= - Gcc_Set : Boolean := False; - -- True if a switch --GCC= is used - Gnat_Cmd : String_Access; -- Command to execute the GNAT compiler @@ -222,12 +220,6 @@ procedure Gnatchop is Integer'Image (Maximum_File_Name_Length); - function Locate_Executable - (Program_Name : String; - Look_For_Prefix : Boolean := True) return String_Access; - -- Locate executable for given program name. This takes into account - -- the target-prefix of the current command, if Look_For_Prefix is True. - subtype EOL_Length is Natural range 0 .. 2; -- Possible lengths of end of line sequence @@ -492,76 +484,6 @@ procedure Gnatchop is Unit.Table (Sorted_Units.Table (U + 1)).File_Name.all; end Is_Duplicated; - ----------------------- - -- Locate_Executable -- - ----------------------- - - function Locate_Executable - (Program_Name : String; - Look_For_Prefix : Boolean := True) return String_Access - is - Gnatchop_Str : constant String := "gnatchop"; - Current_Command : constant String := Normalize_Pathname (Command_Name); - End_Of_Prefix : Natural; - Start_Of_Prefix : Positive; - Start_Of_Suffix : Positive; - Result : String_Access; - - begin - Start_Of_Prefix := Current_Command'First; - Start_Of_Suffix := Current_Command'Last + 1; - End_Of_Prefix := Start_Of_Prefix - 1; - - if Look_For_Prefix then - - -- Find Start_Of_Prefix - - for J in reverse Current_Command'Range loop - if Current_Command (J) = '/' or else - Current_Command (J) = Directory_Separator or else - Current_Command (J) = ':' - then - Start_Of_Prefix := J + 1; - exit; - end if; - end loop; - - -- Find End_Of_Prefix - - for J in Start_Of_Prefix .. - Current_Command'Last - Gnatchop_Str'Length + 1 - loop - if Current_Command (J .. J + Gnatchop_Str'Length - 1) = - Gnatchop_Str - then - End_Of_Prefix := J - 1; - exit; - end if; - end loop; - end if; - - if End_Of_Prefix > Current_Command'First then - Start_Of_Suffix := End_Of_Prefix + Gnatchop_Str'Length + 1; - end if; - - declare - Command : constant String := - Current_Command (Start_Of_Prefix .. End_Of_Prefix) - & Program_Name - & Current_Command (Start_Of_Suffix .. - Current_Command'Last); - begin - Result := Locate_Exec_On_Path (Command); - - if Result = null then - Error_Msg - (Command & ": installation problem, executable not found"); - end if; - end; - - return Result; - end Locate_Executable; - --------------- -- Parse_EOL -- --------------- @@ -1088,8 +1010,8 @@ procedure Gnatchop is exit; when '-' => - Gcc := new String'(Parameter); - Gcc_Set := True; + Free (Gcc); + Gcc := new String'(Parameter); when 'c' => Compilation_Mode := True; @@ -1767,9 +1689,13 @@ begin -- Check presence of required executables - Gnat_Cmd := Locate_Executable (Gcc.all, not Gcc_Set); + if Gcc = null then + Gcc := Osint.Program_Name ("gcc", "gnatchop"); + end if; + Gnat_Cmd := Locate_Exec_On_Path (Gcc.all); if Gnat_Cmd = null then + Error_Msg (Gcc.all & ": installation problem, executable not found"); goto No_Files_Written; end if;