with Ada.Characters.Handling; use Ada.Characters.Handling;
with Ada.Unchecked_Deallocation;
+with GNAT.Case_Util; use GNAT.Case_Util;
with GNAT.Directory_Operations; use GNAT.Directory_Operations;
-
-with GNAT.Case_Util; use GNAT.Case_Util;
with GNAT.HTable;
package body Prj is
The_Empty_String : Name_Id := No_Name;
- subtype Known_Casing is Casing_Type range All_Upper_Case .. Mixed_Case;
-
type Cst_String_Access is access constant String;
All_Lower_Case_Image : aliased constant String := "lowercase";
return No_File;
when Makefile =>
- return
- File_Name_Type
- (Extend_Name
- (Source_File_Name, Makefile_Dependency_Suffix));
+ return Extend_Name (Source_File_Name, Makefile_Dependency_Suffix);
when ALI_File =>
- return
- File_Name_Type
- (Extend_Name
- (Source_File_Name, ALI_Dependency_Suffix));
+ return Extend_Name (Source_File_Name, ALI_Dependency_Suffix);
end case;
end Dependency_Name;
The_Empty_String := Name_Find;
Prj.Attr.Initialize;
- Set_Name_Table_Byte (Name_Project, Token_Type'Pos (Tok_Project));
- Set_Name_Table_Byte (Name_Extends, Token_Type'Pos (Tok_Extends));
- Set_Name_Table_Byte (Name_External, Token_Type'Pos (Tok_External));
+
+ Set_Name_Table_Byte
+ (Name_Project, Token_Type'Pos (Tok_Project));
+ Set_Name_Table_Byte
+ (Name_Extends, Token_Type'Pos (Tok_Extends));
+ Set_Name_Table_Byte
+ (Name_External, Token_Type'Pos (Tok_External));
+ Set_Name_Table_Byte
+ (Name_External_As_List, Token_Type'Pos (Tok_External_As_List));
end if;
if Tree /= No_Project_Tree then
Array_Table.Free (Tree.Arrays);
Package_Table.Free (Tree.Packages);
Source_Paths_Htable.Reset (Tree.Source_Paths_HT);
+ Source_Files_Htable.Reset (Tree.Source_Files_HT);
Free_List (Tree.Projects, Free_Project => True);
Free_Units (Tree.Units_HT);
Array_Table.Init (Tree.Arrays);
Package_Table.Init (Tree.Packages);
Source_Paths_Htable.Reset (Tree.Source_Paths_HT);
+ Source_Files_Htable.Reset (Tree.Source_Files_HT);
+ Replaced_Source_HTable.Reset (Tree.Replaced_Sources);
+
+ Tree.Replaced_Source_Number := 0;
Free_List (Tree.Projects, Free_Project => True);
Free_Units (Tree.Units_HT);
if Project.Library then
if Project.Object_Directory = No_Path_Information
- or else Contains_ALI_Files (Project.Library_ALI_Dir.Name)
+ or else Contains_ALI_Files (Project.Library_ALI_Dir.Display_Name)
then
- return Project.Library_ALI_Dir.Name;
+ return Project.Library_ALI_Dir.Display_Name;
else
- return Project.Object_Directory.Name;
+ return Project.Object_Directory.Display_Name;
end if;
-- For a non-library project, add object directory if it is not a
end loop;
if Add_Object_Dir then
- return Project.Object_Directory.Name;
+ return Project.Object_Directory.Display_Name;
end if;
end;
end if;
function Is_Compilable (Source : Source_Id) return Boolean is
begin
- return Source.Language.Config.Compiler_Driver /= No_File
- and then Length_Of_Name (Source.Language.Config.Compiler_Driver) /= 0
- and then not Source.Locally_Removed;
+ case Source.Compilable is
+ when Unknown =>
+ if Source.Language.Config.Compiler_Driver /= No_File
+ and then
+ Length_Of_Name (Source.Language.Config.Compiler_Driver) /= 0
+ and then not Source.Locally_Removed
+ and then (Source.Language.Config.Kind /= File_Based
+ or else Source.Kind /= Spec)
+ then
+ -- Do not modify Source.Compilable before the source record
+ -- has been initialized.
+
+ if Source.Source_TS /= Empty_Time_Stamp then
+ Source.Compilable := Yes;
+ end if;
+
+ return True;
+
+ else
+ if Source.Source_TS /= Empty_Time_Stamp then
+ Source.Compilable := No;
+ end if;
+
+ return False;
+ end if;
+
+ when Yes =>
+ return True;
+
+ when No =>
+ return False;
+ end case;
end Is_Compilable;
------------------------------
Compiler_Driver_Mandatory : Boolean := False;
Error_On_Unknown_Language : Boolean := True;
Require_Obj_Dirs : Error_Warning := Error;
- Allow_Invalid_External : Error_Warning := Error)
+ Allow_Invalid_External : Error_Warning := Error;
+ Missing_Source_Files : Error_Warning := Error)
return Processing_Flags
is
begin
Error_On_Unknown_Language => Error_On_Unknown_Language,
Compiler_Driver_Mandatory => Compiler_Driver_Mandatory,
Require_Obj_Dirs => Require_Obj_Dirs,
- Allow_Invalid_External => Allow_Invalid_External);
+ Allow_Invalid_External => Allow_Invalid_External,
+ Missing_Source_Files => Missing_Source_Files);
end Create_Flags;
------------