]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Ada: Use Osint.Program_Name in gnatchop
authorNicolas Boulenguez <nicolas@debian.org>
Mon, 20 Oct 2025 11:08:22 +0000 (13:08 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Mon, 20 Oct 2025 11:13:05 +0000 (13:13 +0200)
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.

gcc/ada/gnatchop.adb

index 8f9887eb57759877713ef12ecebea4d338c2e595..bc045e1fb7ae62fbb7dfd11b2ff30324301ea2f9 100644 (file)
@@ -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;