aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2005-02-10 14:55:43 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2005-02-10 14:55:43 +0100
commita3a0db2eb9a89957d478bce7132e19d0492eb96d (patch)
treecc687c95ee7270932641e3965b2827b6d50dfca3 /gcc/ada
parent3536d406b5a5d065dcfc43b434f99118eab96fa9 (diff)
downloadgcc-a3a0db2eb9a89957d478bce7132e19d0492eb96d.zip
gcc-a3a0db2eb9a89957d478bce7132e19d0492eb96d.tar.gz
gcc-a3a0db2eb9a89957d478bce7132e19d0492eb96d.tar.bz2
prj-makr.adb (Process_Directory): Put file name in canonical case before matching against the patterns.
* prj-makr.adb (Process_Directory): Put file name in canonical case before matching against the patterns. If gnatname has been invoked as <prefix>-gnatname then invoke the compiler as <prefix>-gcc, not just "gcc". From-SVN: r94819
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/prj-makr.adb84
1 files changed, 58 insertions, 26 deletions
diff --git a/gcc/ada/prj-makr.adb b/gcc/ada/prj-makr.adb
index 671b315..22f94ae 100644
--- a/gcc/ada/prj-makr.adb
+++ b/gcc/ada/prj-makr.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 2001-2005 Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -44,14 +44,13 @@ with GNAT.OS_Lib; use GNAT.OS_Lib;
with GNAT.Regexp; use GNAT.Regexp;
with System.Case_Util; use System.Case_Util;
+with System.CRTL;
package body Prj.Makr is
function Dup (Fd : File_Descriptor) return File_Descriptor;
- pragma Import (C, Dup);
procedure Dup2 (Old_Fd, New_Fd : File_Descriptor);
- pragma Import (C, Dup2);
Gcc : constant String := "gcc";
Gcc_Path : String_Access := null;
@@ -64,11 +63,11 @@ package body Prj.Makr is
Naming_File_Suffix : constant String := "_naming";
Source_List_File_Suffix : constant String := "_source_list.txt";
- Output_FD : File_Descriptor;
- -- To save the project file and its naming project file.
+ Output_FD : File_Descriptor;
+ -- To save the project file and its naming project file
procedure Write_Eol;
- -- Output an empty line.
+ -- Output an empty line
procedure Write_A_Char (C : Character);
-- Write one character to Output_FD
@@ -84,6 +83,26 @@ package body Prj.Makr is
Table_Increment => 10,
Table_Name => "Prj.Makr.Processed_Directories");
+ ---------
+ -- Dup --
+ ---------
+
+ function Dup (Fd : File_Descriptor) return File_Descriptor is
+ begin
+ return File_Descriptor (System.CRTL.dup (Integer (Fd)));
+ end Dup;
+
+ ----------
+ -- Dup2 --
+ ----------
+
+ procedure Dup2 (Old_Fd, New_Fd : File_Descriptor) is
+ Fd : Integer;
+ pragma Warnings (Off, Fd);
+ begin
+ Fd := System.CRTL.dup2 (Integer (Old_Fd), Integer (New_Fd));
+ end Dup2;
+
----------
-- Make --
----------
@@ -160,19 +179,17 @@ package body Prj.Makr is
-----------------------
procedure Process_Directory (Dir_Name : String; Recursively : Boolean) is
- Matched : Matched_Type := False;
- Str : String (1 .. 2_000);
- Last : Natural;
- Dir : Dir_Type;
- Process : Boolean := True;
-
- Temp_File_Name : String_Access := null;
-
+ Matched : Matched_Type := False;
+ Str : String (1 .. 2_000);
+ Canon : String (1 .. 2_000);
+ Last : Natural;
+ Dir : Dir_Type;
+ Process : Boolean := True;
+
+ Temp_File_Name : String_Access := null;
Save_Last_Pragma_Index : Natural := 0;
-
- File_Name_Id : Name_Id := No_Name;
-
- SFN_Prag : SFN_Pragma;
+ File_Name_Id : Name_Id := No_Name;
+ SFN_Prag : SFN_Pragma;
begin
-- Avoid processing the same directory more than once
@@ -195,12 +212,11 @@ package body Prj.Makr is
Processed_Directories.Table (Processed_Directories.Last) :=
new String'(Dir_Name);
- -- Get the source file names from the directory.
- -- Fails if the directory does not exist.
+ -- Get the source file names from the directory. Fails if the
+ -- directory does not exist.
begin
Open (Dir, Dir_Name);
-
exception
when Directory_Error =>
Prj.Com.Fail ("cannot open directory """, Dir_Name, """");
@@ -212,6 +228,13 @@ package body Prj.Makr is
Read (Dir, Str, Last);
exit File_Loop when Last = 0;
+ -- Copy the file name and put it in canonical case to match
+ -- against the patterns that have themselves already been put
+ -- in canonical case.
+
+ Canon (1 .. Last) := Str (1 .. Last);
+ Canonical_Case_File_Name (Canon (1 .. Last));
+
if Is_Regular_File
(Dir_Name & Directory_Separator & Str (1 .. Last))
then
@@ -226,7 +249,7 @@ package body Prj.Makr is
for Index in Excluded_Expressions'Range loop
if
- Match (Str (1 .. Last), Excluded_Expressions (Index))
+ Match (Canon (1 .. Last), Excluded_Expressions (Index))
then
Matched := Excluded;
exit;
@@ -242,7 +265,8 @@ package body Prj.Makr is
for Index in Regular_Expressions'Range loop
if
- Match (Str (1 .. Last), Regular_Expressions (Index))
+ Match
+ (Canon (1 .. Last), Regular_Expressions (Index))
then
Matched := True;
exit;
@@ -270,10 +294,18 @@ package body Prj.Makr is
begin
-- If we don't have the path of the compiler yet,
- -- get it now.
+ -- get it now. The compiler name may have a prefix,
+ -- so we get the potentially prefixed name.
if Gcc_Path = null then
- Gcc_Path := Locate_Exec_On_Path (Gcc);
+ declare
+ Prefix_Gcc : String_Access :=
+ Program_Name (Gcc);
+ begin
+ Gcc_Path :=
+ Locate_Exec_On_Path (Prefix_Gcc.all);
+ Free (Prefix_Gcc);
+ end;
if Gcc_Path = null then
Prj.Com.Fail ("could not locate " & Gcc);
@@ -538,7 +570,7 @@ package body Prj.Makr is
if Matched /= Excluded then
for Index in Foreign_Expressions'Range loop
- if Match (Str (1 .. Last),
+ if Match (Canon (1 .. Last),
Foreign_Expressions (Index))
then
Matched := True;