[multiple changes]

2009-10-30  Emmanuel Briot  <briot@adacore.com>

	* make.adb, osint.adb (Add_Lib_Search_Dir): Do not add if dir is
	already in the list.
	This saves system calls when looking for ALI files
	(Scan_Make_Args): The parameter to gnatmake's -D is now converted to an
	absolute PATH (so that the above improvement properly occurs if both
	-D<dir> and -aO<dir> are specified).

2009-10-30  Thomas Quinot  <quinot@adacore.com>

	* a-direct.adb: Minor reformatting

From-SVN: r153748
This commit is contained in:
Arnaud Charlet 2009-10-30 14:49:17 +01:00
parent 48263c9aa0
commit cafdbd2e9d
4 changed files with 193 additions and 173 deletions

View File

@ -1,3 +1,16 @@
2009-10-30 Emmanuel Briot <briot@adacore.com>
* make.adb, osint.adb (Add_Lib_Search_Dir): Do not add if dir is
already in the list.
This saves system calls when looking for ALI files
(Scan_Make_Args): The parameter to gnatmake's -D is now converted to an
absolute PATH (so that the above improvement properly occurs if both
-D<dir> and -aO<dir> are specified).
2009-10-30 Thomas Quinot <quinot@adacore.com>
* a-direct.adb: Minor reformatting
2009-10-30 Emmanuel Briot <briot@adacore.com>
* make.adb, adaint.c, adaint.h, osint.adb, osint.ads, bcheck.adb

View File

@ -211,7 +211,8 @@ package body Ada.Directories is
else
declare
-- We need to resolve links because of A.16(47), since we must not
-- return alternative names for files
-- return alternative names for files.
Norm : constant String := Normalize_Pathname (Name);
Last_DS : constant Natural :=
Strings.Fixed.Index

View File

@ -360,7 +360,7 @@ package body Make is
Project_Of_Current_Object_Directory : Project_Id := No_Project;
-- The object directory of the project for the last compilation. Avoid
-- calling Change_Dir if the current working directory is already this
-- directory
-- directory.
-- Packages of project files where unknown attributes are errors
@ -3219,7 +3219,7 @@ package body Make is
Source_File : File_Name_Type;
Full_Source_File : File_Name_Type;
Source_File_Attr : aliased File_Attributes;
-- The full name of the source file, and its attributes (size,...)
-- The full name of the source file and its attributes (size, ...)
Source_Unit : Unit_Name_Type;
Source_Index : Int;
@ -3230,7 +3230,7 @@ package body Make is
Lib_File_Attr : aliased File_Attributes;
Read_Only : Boolean := False;
ALI : ALI_Id;
-- The ALI file and its attributes (size, stamp,...)
-- The ALI file and its attributes (size, stamp, ...)
Obj_File : File_Name_Type;
Obj_Stamp : Time_Stamp_Type;
@ -3262,7 +3262,7 @@ package body Make is
and then In_Ada_Lib_Dir (Full_Lib_File);
-- Since the following requires a system call, we precompute it
-- when needed
-- when needed.
if not In_Lib_Dir then
if Full_Lib_File /= No_File
@ -3286,11 +3286,10 @@ package body Make is
Prefix => " ",
Minimum_Verbosity => Opt.High);
-- If the library file is a read-only library skip it, but
-- only if, when using project files, this library file is
-- in the right object directory (a read-only ALI file
-- in the object directory of a project being extended
-- should not be skipped).
-- If the library file is a read-only library skip it, but only
-- if, when using project files, this library file is in the
-- right object directory (a read-only ALI file in the object
-- directory of a project being extended must not be skipped).
elsif Read_Only
and then Is_In_Object_Directory (Source_File, Full_Lib_File)
@ -3307,7 +3306,7 @@ package body Make is
Record_Failure (Source_File, Source_Unit, False);
-- Source and library files can be located but are internal
-- files
-- files.
elsif not Check_Readonly_Files
and then Full_Lib_File /= No_File
@ -3397,6 +3396,7 @@ package body Make is
if Do_Not_Execute then
-- Exit the main loop
return True;
end if;
end if;
@ -3422,14 +3422,14 @@ package body Make is
else
-- We will recompile, so we'll have to guess the
-- location of the object file based on the command
-- line switches and object_dir
-- line switches and Object_Dir.
Full_Lib_File := No_File;
Lib_File_Attr := Unknown_Attributes;
end if;
-- Start the compilation and record it. We can do
-- this because there is at least one free process.
-- Start the compilation and record it. We can do this
-- because there is at least one free process.
Collect_Arguments_And_Compile
(Full_Source_File => Full_Source_File,
@ -3438,8 +3438,7 @@ package body Make is
Pid => Pid,
Process_Created => Process_Created);
-- Make sure we could successfully start
-- the Compilation.
-- Make sure we could successfully start the compilation
if Process_Created then
if Pid = Invalid_Pid then
@ -3493,9 +3492,9 @@ package body Make is
Check_Object_Consistency;
begin
-- If compilation was not OK, or if output is not an
-- object file and we don't do the bind step, don't check
-- for object consistency.
-- If compilation was not OK, or if output is not an object
-- file and we don't do the bind step, don't check for
-- object consistency.
Check_Object_Consistency :=
Check_Object_Consistency
@ -3508,10 +3507,11 @@ package body Make is
-- -i => in place mode. In such a case, Full_Lib_File
-- has already been set above
-- -D => if specified
-- or defaults in current dir
-- or defaults in current dir.
--
-- We could simply use a call similar to
-- Osint.Full_Lib_File_Name (Lib_File)
-- but that involves system calls and is thus slower
-- but that involves system calls and is thus slower.
if Object_Directory_Path /= null then
Name_Len := 0;
@ -3524,7 +3524,7 @@ package body Make is
end if;
-- Invalidate the cache for the attributes, since the
-- file was just created
-- file was just created.
Data.Lib_File_Attr := Unknown_Attributes;
end if;
@ -3629,7 +3629,7 @@ package body Make is
Main_Unit := False;
-- Keep looping until there is no more work to do (the Q is empty)
-- and all the outstanding compilations have terminated
-- and all the outstanding compilations have terminated.
Make_Loop : while not Empty_Q or else Outstanding_Compiles > 0 loop
exit Make_Loop when Must_Exit_Because_Of_Error;
@ -3638,7 +3638,8 @@ package body Make is
Wait_For_Available_Slot;
-- ??? Should be done as soon as we add a Good_ALI, wouldn't it avoid
-- the need for a list of good ALI ?
-- the need for a list of good ALI?
Fill_Queue_From_ALI_Files;
if Display_Compilation_Progress then
@ -3896,7 +3897,7 @@ package body Make is
-- recreate another config file: we cannot reuse the one that
-- we just deleted!
Proj.Project.Config_Checked := False;
Proj.Project.Config_Checked := False;
Proj.Project.Config_File_Name := No_Path;
Proj.Project.Config_File_Temp := False;
end if;
@ -3947,8 +3948,8 @@ package body Make is
then
Temporary_Config_File := False;
-- Do not display the -F=mapping_file switch for
-- gnatbind, if -dn is not specified.
-- Do not display the -F=mapping_file switch for gnatbind
-- if -dn is not specified.
elsif Debug.Debug_Flag_N
or else Args (J)'Length < 4
@ -4108,8 +4109,7 @@ package body Make is
Total_Compilation_Failures : Natural := 0;
Is_Main_Unit : Boolean;
-- Set to True by Compile_Sources if the Main_Source_File can be a
-- main unit.
-- Set True by Compile_Sources if Main_Source_File can be a main unit
Main_ALI_File : File_Name_Type;
-- The ali file corresponding to Main_Source_File
@ -4118,8 +4118,8 @@ package body Make is
-- The file name of an executable
Non_Std_Executable : Boolean := False;
-- Non_Std_Executable is set to True when there is a possibility
-- that the linker will not choose the correct executable file name.
-- Non_Std_Executable is set to True when there is a possibility that
-- the linker will not choose the correct executable file name.
Current_Work_Dir : constant String_Access :=
new String'(Get_Current_Dir);
@ -4170,8 +4170,8 @@ package body Make is
loop
declare
Main : constant String := Mains.Next_Main;
-- The name specified on the command line may include
-- directory information.
-- The name specified on the command line may include directory
-- information.
File_Name : constant String := Base_Name (Main);
-- The simple file name of the current main
@ -4186,17 +4186,16 @@ package body Make is
Proj := Prj.Env.Project_Of
(File_Name, Main_Project, Project_Tree);
-- Fail if the current main is not a source of a
-- project.
-- Fail if the current main is not a source of a project
if Proj = No_Project then
Make_Failed
("""" & Main & """ is not a source of any project");
else
-- If there is directory information, check that
-- the source exists and, if it does, that the path
-- is the actual path of a source of a project.
-- If there is directory information, check that the source
-- exists and, if it does, that the path is the actual path
-- of a source of a project.
if Main /= File_Name then
Lang := Get_Language_From_Name (Main_Project, "ada");
@ -4270,8 +4269,8 @@ package body Make is
elsif Proj /= Real_Main_Project then
-- Fail, as the current main is not a source
-- of the same project as the first main.
-- Fail, as the current main is not a source of the
-- same project as the first main.
Make_Failed
("""" & Main &
@ -4281,9 +4280,9 @@ package body Make is
end if;
end if;
-- If -u and -U are not used, we may have mains that
-- are sources of a project that is not the one
-- specified with switch -P.
-- If -u and -U are not used, we may have mains that are
-- sources of a project that is not the one specified with
-- switch -P.
if not Unique_Compile then
Main_Project := Real_Main_Project;
@ -4345,8 +4344,7 @@ package body Make is
(Unit.File_Names (Impl).Display_File);
ALI_Project := Unit.File_Names (Impl).Project;
-- Otherwise, if there is a spec, put it in the
-- mapping.
-- Otherwise, if there is a spec, put it in the mapping
elsif Unit.File_Names (Spec) /= No_Source
and then Unit.File_Names (Spec).Project /=
@ -4367,8 +4365,9 @@ package body Make is
-- If we have something to put in the mapping then do it
-- now. However, if the project is extended, we don't put
-- anything in the mapping file, because we don't know where
-- the ALI file is: it might be in the extended project obj
-- dir as well as in the extending project obj dir.
-- the ALI file is: it might be in the extended project
-- object directory as well as in the extending project
-- object directory.
if ALI_Name /= No_File
and then ALI_Project.Extended_By = No_Project
@ -4461,8 +4460,8 @@ package body Make is
OK := OK and Status;
-- If the creation of the mapping file was successful,
-- we add the switch to the arguments of gnatbind.
-- If the creation of the mapping file was successful, we add the
-- switch to the arguments of gnatbind.
if OK then
Last_Arg := Last_Arg + 1;
@ -4474,7 +4473,7 @@ package body Make is
-- Start of processing for Gnatmake
-- This body is very long, should be broken down ???
-- This body is very long, should be broken down???
begin
Install_Int_Handler (Sigint_Intercepted'Access);
@ -4527,10 +4526,10 @@ package body Make is
end if;
-- Specify -n for gnatbind and add the ALI files of all the
-- sources, except the one which is a fake main subprogram:
-- this is the one for the binder generated file and it will be
-- transmitted to gnatlink. These sources are those that are
-- in the queue.
-- sources, except the one which is a fake main subprogram: this
-- is the one for the binder generated file and it will be
-- transmitted to gnatlink. These sources are those that are in
-- the queue.
Add_Switch ("-n", Binder, And_Save => True);
@ -4547,8 +4546,8 @@ package body Make is
elsif Main_Project /= No_Project then
-- If the main project file is a library project file, main(s)
-- cannot be specified on the command line.
-- If the main project file is a library project file, main(s) cannot
-- be specified on the command line.
if Osint.Number_Of_Files /= 0 then
if Main_Project.Library
@ -4566,10 +4565,10 @@ package body Make is
Check_Mains;
end if;
-- If no mains have been specified on the command line,
-- and we are using a project file, we either find the main(s)
-- in the attribute Main of the main project, or we put all
-- the sources of the project file as mains.
-- If no mains have been specified on the command line, and we are
-- using a project file, we either find the main(s) in attribute
-- Main of the main project, or we put all the sources of the project
-- file as mains.
else
if Main_Index /= 0 then
@ -4581,16 +4580,16 @@ package body Make is
Value : String_List_Id := Main_Project.Mains;
begin
-- The attribute Main is an empty list or not specified,
-- or else gnatmake was invoked with the switch "-u".
-- The attribute Main is an empty list or not specified, or
-- else gnatmake was invoked with the switch "-u".
if Value = Prj.Nil_String or else Unique_Compile then
if (not Make_Steps) or else Compile_Only
or else not Main_Project.Library
then
-- First make sure that the binder and the linker
-- will not be invoked.
-- First make sure that the binder and the linker will
-- not be invoked.
Do_Bind_Step := False;
Do_Link_Step := False;
@ -4618,8 +4617,8 @@ package body Make is
else
-- The attribute Main is not an empty list.
-- Put all the main subprograms in the list as if there
-- were specified on the command line. However, if attribute
-- Put all the main subprograms in the list as if they were
-- specified on the command line. However, if attribute
-- Languages includes a language other than Ada, only
-- include the Ada mains; if there is no Ada main, compile
-- all the sources of the project.
@ -4883,8 +4882,8 @@ package body Make is
& """ is not a unit of project "
& Project_File_Name.all & ".");
else
-- Remove any directory information from the main
-- source file name.
-- Remove any directory information from the main source file
-- file name.
declare
Pos : Natural := Main_Unit_File_Name'Last;
@ -5156,8 +5155,8 @@ package body Make is
end if;
-- Get the target parameters, which are only needed for a couple of
-- cases in gnatmake. Protect against an exception, such as the case
-- of system.ads missing from the library, and fail gracefully.
-- cases in gnatmake. Protect against an exception, such as the case of
-- system.ads missing from the library, and fail gracefully.
begin
Targparm.Get_Target_Parameters;
@ -5250,8 +5249,8 @@ package body Make is
end;
end if;
-- If a relative path output file has been specified, we add
-- the exec directory.
-- If a relative path output file has been specified, we add the
-- exec directory.
for J in reverse 1 .. Saved_Linker_Switches.Last - 1 loop
if Saved_Linker_Switches.Table (J).all = Output_Flag.all then
@ -5372,9 +5371,9 @@ package body Make is
The_Saved_Gcc_Switches (The_Saved_Gcc_Switches'Last) := No_gnat_adc;
end if;
-- If there was a --GCC, --GNATBIND or --GNATLINK switch on
-- the command line, then we have to use it, even if there was
-- another switch in the project file.
-- If there was a --GCC, --GNATBIND or --GNATLINK switch on the command
-- line, then we have to use it, even if there was another switch in
-- the project file.
if Saved_Gcc /= null then
Gcc := Saved_Gcc;
@ -6691,8 +6690,8 @@ package body Make is
Mains.Delete;
-- Add the directory where gnatmake is invoked in front of the
-- path, if gnatmake is invoked from a bin directory or with directory
-- Add the directory where gnatmake is invoked in front of the path,
-- if gnatmake is invoked from a bin directory or with directory
-- information. Only do this if the platform is not VMS, where the
-- notion of path does not really exist.
@ -6860,8 +6859,8 @@ package body Make is
Write_Eol;
end if;
-- We add the source directories and the object directories
-- to the search paths.
-- We add the source directories and the object directories to the
-- search paths.
Add_Source_Directories (Main_Project, Project_Tree);
Add_Object_Directories (Main_Project);
@ -7022,9 +7021,8 @@ package body Make is
and then not Unit.File_Names (Spec).Locally_Removed
and then Check_Project (Unit.File_Names (Spec).Project)
then
-- If there is no source for the body, but there is a source
-- for the spec which has not been locally removed, then we take
-- this one.
-- If there is no source for the body, but there is one for the
-- spec which has not been locally removed, then we take this one.
Sfile := Unit.File_Names (Spec).Display_File;
Index := Unit.File_Names (Spec).Index;
@ -7368,9 +7366,9 @@ package body Make is
B : Byte;
function Base_Directory return String;
-- If Dir comes from the command line, empty string (relative paths
-- are resolved with respect to the current directory), else return
-- the main project's directory.
-- If Dir comes from the command line, empty string (relative paths are
-- resolved with respect to the current directory), else return the main
-- project's directory.
--------------------
-- Base_Directory --
@ -7671,7 +7669,7 @@ package body Make is
-- If the previous switch has set the Object_Directory_Present flag
-- (that is we have seen a -D), then the next argument is the path name
-- of the object directory..
-- of the object directory.
elsif Object_Directory_Present
and then not Object_Directory_Seen
@ -7685,21 +7683,26 @@ package body Make is
Make_Failed ("cannot find object directory """ & Argv & """");
else
Add_Lib_Search_Dir (Argv);
-- Specify the object directory to the binder
Add_Switch ("-aO" & Argv, Binder, And_Save => And_Save);
-- Record the object directory. Make sure it ends with a directory
-- separator.
if Argv (Argv'Last) = Directory_Separator then
Object_Directory_Path := new String'(Argv);
else
Object_Directory_Path :=
new String'(Argv & Directory_Separator);
end if;
declare
Norm : constant String := Normalize_Pathname (Argv);
begin
if Norm (Norm'Last) = Directory_Separator then
Object_Directory_Path := new String'(Norm);
else
Object_Directory_Path :=
new String'(Norm & Directory_Separator);
end if;
Add_Lib_Search_Dir (Norm);
-- Specify the object directory to the binder
Add_Switch ("-aO" & Norm, Binder, And_Save => And_Save);
end;
end if;
-- Then check if we are dealing with -cargs/-bargs/-largs/-margs
@ -7722,9 +7725,8 @@ package body Make is
raise Program_Error;
end case;
-- A special test is needed for the -o switch within a -largs
-- since that is another way to specify the name of the final
-- executable.
-- A special test is needed for the -o switch within a -largs since that
-- is another way to specify the name of the final executable.
elsif Program_Args = Linker
and then Argv = "-o"
@ -7732,8 +7734,8 @@ package body Make is
Make_Failed ("switch -o not allowed within a -largs. " &
"Use -o directly.");
-- Check to see if we are reading switches after a -cargs,
-- -bargs or -largs switch. If yes save it.
-- Check to see if we are reading switches after a -cargs, -bargs or
-- -largs switch. If so, save it.
elsif Program_Args /= None then
@ -7776,9 +7778,7 @@ package body Make is
for J in 2 .. Program_Args.all'Last loop
Add_Switch
(Program_Args.all (J).all,
Compiler,
And_Save => And_Save);
(Program_Args.all (J).all, Compiler, And_Save => And_Save);
end loop;
end;
@ -7826,7 +7826,7 @@ package body Make is
Argv (1 .. 5) = "--RTS"
then
Add_Switch (Argv, Compiler, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
if Argv'Length <= 6 or else Argv (6) /= '=' then
Make_Failed ("missing path for --RTS");
@ -7889,7 +7889,7 @@ package body Make is
Argv (1 .. 8) = "--param="
then
Add_Switch (Argv, Compiler, And_Save => And_Save);
Add_Switch (Argv, Linker, And_Save => And_Save);
Add_Switch (Argv, Linker, And_Save => And_Save);
else
Scan_Make_Switches (Project_Node_Tree, Argv, Success);
@ -7927,18 +7927,17 @@ package body Make is
-- -Idir
elsif Argv (2) = 'I' then
Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save);
Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save);
Add_Library_Search_Dir (Argv (3 .. Argv'Last), And_Save);
Add_Switch (Argv, Compiler, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
-- -aIdir (to gcc this is like a -I switch)
elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aI" then
Add_Source_Search_Dir (Argv (4 .. Argv'Last), And_Save);
Add_Switch ("-I" & Argv (4 .. Argv'Last),
Compiler,
And_Save => And_Save);
Add_Switch
("-I" & Argv (4 .. Argv'Last), Compiler, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
-- -aOdir
@ -7952,9 +7951,8 @@ package body Make is
elsif Argv'Length >= 3 and then Argv (2 .. 3) = "aL" then
Mark_Directory (Argv (4 .. Argv'Last), Ada_Lib_Dir, And_Save);
Add_Library_Search_Dir (Argv (4 .. Argv'Last), And_Save);
Add_Switch ("-aO" & Argv (4 .. Argv'Last),
Binder,
And_Save => And_Save);
Add_Switch
("-aO" & Argv (4 .. Argv'Last), Binder, And_Save => And_Save);
-- -aamp_target=...
@ -7972,14 +7970,12 @@ package body Make is
elsif Argv (2) = 'A' then
Mark_Directory (Argv (3 .. Argv'Last), Ada_Lib_Dir, And_Save);
Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save);
Add_Source_Search_Dir (Argv (3 .. Argv'Last), And_Save);
Add_Library_Search_Dir (Argv (3 .. Argv'Last), And_Save);
Add_Switch ("-I" & Argv (3 .. Argv'Last),
Compiler,
And_Save => And_Save);
Add_Switch ("-aO" & Argv (3 .. Argv'Last),
Binder,
And_Save => And_Save);
Add_Switch
("-I" & Argv (3 .. Argv'Last), Compiler, And_Save => And_Save);
Add_Switch
("-aO" & Argv (3 .. Argv'Last), Binder, And_Save => And_Save);
-- -Ldir
@ -7987,11 +7983,11 @@ package body Make is
Add_Switch (Argv, Linker, And_Save => And_Save);
-- For -gxxxxx, -pg, -mxxx, -fxxx: give the switch to both the
-- compiler and the linker (except for -gnatxxx which is only for
-- the compiler). Some of the -mxxx (for example -m64) and -fxxx
-- (for example -ftest-coverage for gcov) need to be used when
-- compiling the binder generated files, and using all these gcc
-- switches for the binder generated files should not be a problem.
-- compiler and the linker (except for -gnatxxx which is only for the
-- compiler). Some of the -mxxx (for example -m64) and -fxxx (for
-- example -ftest-coverage for gcov) need to be used when compiling
-- the binder generated files, and using all these gcc switches for
-- the binder generated files should not be a problem.
elsif
(Argv (2) = 'g' and then (Argv'Last < 5
@ -8001,7 +7997,7 @@ package body Make is
or else (Argv (2) = 'f' and then Argv'Last > 2)
then
Add_Switch (Argv, Compiler, And_Save => And_Save);
Add_Switch (Argv, Linker, And_Save => And_Save);
Add_Switch (Argv, Linker, And_Save => And_Save);
-- The following condition has to be kept synchronized with
-- the Process_Multilib one.
@ -8027,8 +8023,8 @@ package body Make is
elsif Argv'Last = 2 and then Argv (2) = 'D' then
if Project_File_Name /= null then
Make_Failed ("-D cannot be used in conjunction with a " &
"project file");
Make_Failed
("-D cannot be used in conjunction with a project file");
else
Scan_Make_Switches (Project_Node_Tree, Argv, Success);
@ -8036,17 +8032,15 @@ package body Make is
-- -d
elsif Argv (2) = 'd'
and then Argv'Last = 2
then
elsif Argv (2) = 'd' and then Argv'Last = 2 then
Display_Compilation_Progress := True;
-- -i
elsif Argv'Last = 2 and then Argv (2) = 'i' then
if Project_File_Name /= null then
Make_Failed ("-i cannot be used in conjunction with a " &
"project file");
Make_Failed
("-i cannot be used in conjunction with a project file");
else
Scan_Make_Switches (Project_Node_Tree, Argv, Success);
end if;
@ -8062,20 +8056,16 @@ package body Make is
-- -m
elsif Argv (2) = 'm'
and then Argv'Last = 2
then
elsif Argv (2) = 'm' and then Argv'Last = 2 then
Minimal_Recompilation := True;
-- -u
elsif Argv (2) = 'u'
and then Argv'Last = 2
then
Unique_Compile := True;
Compile_Only := True;
Do_Bind_Step := False;
Do_Link_Step := False;
elsif Argv (2) = 'u' and then Argv'Last = 2 then
Unique_Compile := True;
Compile_Only := True;
Do_Bind_Step := False;
Do_Link_Step := False;
-- -U
@ -8083,10 +8073,10 @@ package body Make is
and then Argv'Last = 2
then
Unique_Compile_All_Projects := True;
Unique_Compile := True;
Compile_Only := True;
Do_Bind_Step := False;
Do_Link_Step := False;
Unique_Compile := True;
Compile_Only := True;
Do_Bind_Step := False;
Do_Link_Step := False;
-- -Pprj or -P prj (only once, and only on the command line)
@ -8095,16 +8085,16 @@ package body Make is
Make_Failed ("cannot have several project files specified");
elsif Object_Directory_Path /= null then
Make_Failed ("-D cannot be used in conjunction with a " &
"project file");
Make_Failed
("-D cannot be used in conjunction with a project file");
elsif In_Place_Mode then
Make_Failed ("-i cannot be used in conjunction with a " &
"project file");
Make_Failed
("-i cannot be used in conjunction with a project file");
elsif not And_Save then
-- It could be a tool other than gnatmake (i.e, gnatdist)
-- It could be a tool other than gnatmake (e.g. gnatdist)
-- or a -P switch inside a project file.
Fail
@ -8145,31 +8135,30 @@ package body Make is
elsif Argv (2) = 'X'
and then Is_External_Assignment (Project_Node_Tree, Argv)
then
-- Is_External_Assignment has side effects
-- when it returns True;
-- Is_External_Assignment has side effects when it returns True
null;
-- If -gnath is present, then generate the usage information
-- right now and do not pass this option on to the compiler calls.
-- If -gnath is present, then generate the usage information right
-- now and do not pass this option on to the compiler calls.
elsif Argv = "-gnath" then
Usage;
-- If -gnatc is specified, make sure the bind step and the link
-- step are not executed.
-- If -gnatc is specified, make sure the bind and link steps are not
-- executed.
elsif Argv'Length >= 6 and then Argv (2 .. 6) = "gnatc" then
-- If -gnatc is specified, make sure the bind step and the link
-- step are not executed.
-- If -gnatc is specified, make sure the bind and link steps are
-- not executed.
Add_Switch (Argv, Compiler, And_Save => And_Save);
Operating_Mode := Check_Semantics;
Operating_Mode := Check_Semantics;
Check_Object_Consistency := False;
Compile_Only := True;
Do_Bind_Step := False;
Do_Link_Step := False;
Do_Bind_Step := False;
Do_Link_Step := False;
elsif Argv (2 .. Argv'Last) = "nostdlib" then
@ -8187,7 +8176,7 @@ package body Make is
No_Stdinc := True;
Add_Switch (Argv, Compiler, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
Add_Switch (Argv, Binder, And_Save => And_Save);
-- All other switches are processed by Scan_Make_Switches. If the
-- call returns with Gnatmake_Switch_Found = False, then the switch

View File

@ -582,9 +582,25 @@ package body Osint is
Fail ("missing library directory name");
end if;
Lib_Search_Directories.Increment_Last;
Lib_Search_Directories.Table (Lib_Search_Directories.Last) :=
Normalize_Directory_Name (Dir);
declare
Norm : String_Ptr := Normalize_Directory_Name (Dir);
begin
-- Do nothing if the directory is already in the list. This saves
-- system calls and avoid unneeded work
for D in Lib_Search_Directories.First ..
Lib_Search_Directories.Last
loop
if Lib_Search_Directories.Table (D).all = Norm.all then
Free (Norm);
return;
end if;
end loop;
Lib_Search_Directories.Increment_Last;
Lib_Search_Directories.Table (Lib_Search_Directories.Last) := Norm;
end;
end Add_Lib_Search_Dir;
---------------------
@ -1021,9 +1037,9 @@ package body Osint is
Get_Name_String (Name);
-- File_Time_Stamp will always return Invalid_Time if the file does not
-- exist, and that OS_Time_To_GNAT_Time will convert that to
-- exist, and OS_Time_To_GNAT_Time will convert this value to
-- Empty_Time_Stamp. Therefore we do not need to first test whether the
-- file actually exists, which saves a system call
-- file actually exists, which saves a system call.
return OS_Time_To_GNAT_Time
(File_Time_Stamp (Name_Buffer (1 .. Name_Len)));
@ -1732,7 +1748,8 @@ package body Osint is
elsif T = Library then
Dir_Name := Lib_Search_Directories.Table (Dir);
else pragma Assert (T /= Config);
else
pragma Assert (T /= Config);
Dir_Name := Src_Search_Directories.Table (Dir);
end if;