[Ada] fix handling of --param
Arnaud Charlet
charlet@adacore.com
Thu Aug 30 08:57:00 GMT 2007
Tested on i686-linux, committed on trunk.
Some options for the compiler, such as the parameter following switch
--param, were taken as relative paths and expanded to absolute paths.
This patch ensures that these compiler options are not modified.
The test for this is to have --param switches in package Compiler
and/or on the command line following -cargs, when invoking gnatmake
with the project file. The compiler should be invoked with the option
following --param unmodified.
2007-08-16 Vincent Celier <celier@adacore.com>
* make.adb (Collect_Arguments): Call Test_If_Relative_Path with
Including_Non_Switch set to False.
(Gnatmake): For the compiler, call Test_If_Relative_Path with
Including_Non_Switch set to False.
* makeutl.adb, makeutl.ads (Test_If_Relative_Path): New Boolean
parameter Including_Non_Switch, defaulted to True. When
Including_Non_Switch is False, options that are not switches and
appear as relative path are not converted to absolute paths.
-------------- next part --------------
Index: make.adb
===================================================================
--- make.adb (revision 127453)
+++ make.adb (working copy)
@@ -2372,7 +2372,8 @@ package body Make is
new String'(Name_Buffer (1 .. Name_Len));
Test_If_Relative_Path
(New_Args (Last_New),
- Parent => Data.Dir_Path);
+ Parent => Data.Dir_Path,
+ Including_Non_Switch => False);
end if;
Current := Element.Next;
@@ -2399,7 +2400,9 @@ package body Make is
begin
Test_If_Relative_Path
- (New_Args (1), Parent => Data.Dir_Path);
+ (New_Args (1),
+ Parent => Data.Dir_Path,
+ Including_Non_Switch => False);
Add_Arguments
(Configuration_Pragmas_Switch (Arguments_Project) &
New_Args & The_Saved_Gcc_Switches.all);
@@ -5315,12 +5318,16 @@ package body Make is
for J in 1 .. Gcc_Switches.Last loop
Test_If_Relative_Path
- (Gcc_Switches.Table (J), Parent => Dir_Path);
+ (Gcc_Switches.Table (J),
+ Parent => Dir_Path,
+ Including_Non_Switch => False);
end loop;
for J in 1 .. Saved_Gcc_Switches.Last loop
Test_If_Relative_Path
- (Saved_Gcc_Switches.Table (J), Parent => Current_Work_Dir);
+ (Saved_Gcc_Switches.Table (J),
+ Parent => Current_Work_Dir,
+ Including_Non_Switch => False);
end loop;
end;
end if;
Index: makeutl.adb
===================================================================
--- makeutl.adb (revision 127432)
+++ makeutl.adb (working copy)
@@ -551,9 +551,10 @@ package body Makeutl is
---------------------------
procedure Test_If_Relative_Path
- (Switch : in out String_Access;
- Parent : String_Access;
- Including_L_Switch : Boolean := True)
+ (Switch : in out String_Access;
+ Parent : String_Access;
+ Including_L_Switch : Boolean := True;
+ Including_Non_Switch : Boolean := True)
is
begin
if Switch /= null then
@@ -608,7 +609,7 @@ package body Makeutl is
end if;
end if;
- else
+ elsif Including_Non_Switch then
if not Is_Absolute_Path (Sw) then
if Parent = null or else Parent'Length = 0 then
Do_Fail
Index: makeutl.ads
===================================================================
--- makeutl.ads (revision 127432)
+++ makeutl.ads (working copy)
@@ -124,9 +124,10 @@ package Makeutl is
end Mains;
procedure Test_If_Relative_Path
- (Switch : in out String_Access;
- Parent : String_Access;
- Including_L_Switch : Boolean := True);
+ (Switch : in out String_Access;
+ Parent : String_Access;
+ Including_L_Switch : Boolean := True;
+ Including_Non_Switch : Boolean := True);
-- Test if Switch is a relative search path switch.
-- If it is, fail if Parent is null, otherwise prepend the path with
-- Parent. This subprogram is only called when using project files.
More information about the Gcc-patches
mailing list