From 4afae4b9c87a32dd832f2b28670a8e074982db98 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 8 Apr 2004 17:30:32 +0000 Subject: [PATCH] re PR ada/14665 (gnatmake invokes wrong cross tools) 2004-04-08 Joel Sherrill PR ada/14665 * ada/osint.adb (Find_Program_Name): Rework to properly handle filenames which end in .exe or have versioning suffixes like VMS. From-SVN: r80514 --- gcc/ChangeLog | 6 ++++++ gcc/ada/osint.adb | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0718ffcfcb..7639f5efac2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-04-08 Joel Sherrill + + PR ada/14665 + * ada/osint.adb (Find_Program_Name): Rework to properly handle + filenames which end in .exe or have versioning suffixes like VMS. + 2004-04-08 Andrew Pinski PR target/10129 diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb index e2e559fac7e..2dc5c321509 100644 --- a/gcc/ada/osint.adb +++ b/gcc/ada/osint.adb @@ -1008,12 +1008,37 @@ package body Osint is end if; end loop; - for J in reverse Cindex1 .. Cindex2 loop - if Command_Name (J) = '.' then - Cindex2 := J - 1; - exit; + -- Command_Name(Cindex1 .. Cindex2) is now the equivalent of the + -- POSIX command "basename argv[0]" + + -- Strip off any versioning information such as found on VMS. + -- This would take the form of TOOL.exe followed by a ";" or "." + -- and a sequence of one or more numbers. + + if Command_Name (Cindex2) in '0' .. '9' then + for J in reverse Cindex1 .. Cindex2 loop + + exit when Command_Name (J) not in '0' .. '9'; + + if Command_Name (J) = '.' or Command_Name (J) = ';' then + Cindex2 := J - 1; + exit; + end if; + end loop; + end if; + + -- Strip off any executable extension (usually nothing or .exe) + -- but formally reported by autoconf in the variable EXEEXT + + if Cindex2 - Cindex1 >= 4 then + if To_Lower (Command_Name (Cindex2 - 3)) = '.' + and then To_Lower (Command_Name (Cindex2 - 2)) = 'e' + and then To_Lower (Command_Name (Cindex2 - 1)) = 'x' + and then To_Lower (Command_Name (Cindex2)) = 'e' + then + Cindex2 := Cindex2 - 4; end if; - end loop; + end if; Name_Len := Cindex2 - Cindex1 + 1; Name_Buffer (1 .. Name_Len) := Command_Name (Cindex1 .. Cindex2); -- 2.30.2