===================================================================
@@ -1230,7 +1230,8 @@ package body Prj is
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
@@ -1242,7 +1243,8 @@ package body Prj is
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;
------------
===================================================================
@@ -1459,7 +1459,8 @@ package Prj is
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;
-- Function used to create Processing_Flags structure
--
@@ -1492,6 +1493,10 @@ package Prj is
-- If Allow_Invalid_External is Silent, then no error is reported when an
-- invalid value is used for an external variable (and it doesn't match its
-- type). Instead, the first possible value is used.
+ --
+ -- Missing_Source_Files indicates whether it is an error or a warning that
+ -- a source file mentioned in the Source_Files attributes is not actually
+ -- found in the source directories
Gprbuild_Flags : constant Processing_Flags;
Gprclean_Flags : constant Processing_Flags;
@@ -1521,6 +1526,10 @@ package Prj is
-- another program running on the same machine has recreated it.
-- Does nothing if Debug.Debug_Flag_N is set
+ Virtual_Prefix : constant String := "v$";
+ -- The prefix for virtual extending projects. Because of the '$', which is
+ -- normally forbidden for project names, there cannot be any name clash.
+
private
All_Packages : constant String_List_Access := null;
@@ -1535,10 +1544,6 @@ private
Location => No_Location,
Default => False);
- Virtual_Prefix : constant String := "v$";
- -- The prefix for virtual extending projects. Because of the '$', which is
- -- normally forbidden for project names, there cannot be any name clash.
-
type Source_Iterator is record
In_Tree : Project_Tree_Ref;
@@ -1601,6 +1606,7 @@ private
Error_On_Unknown_Language : Boolean;
Require_Obj_Dirs : Error_Warning;
Allow_Invalid_External : Error_Warning;
+ Missing_Source_Files : Error_Warning;
end record;
Gprbuild_Flags : constant Processing_Flags :=
@@ -1611,7 +1617,8 @@ private
Compiler_Driver_Mandatory => True,
Error_On_Unknown_Language => True,
Require_Obj_Dirs => Error,
- Allow_Invalid_External => Error);
+ Allow_Invalid_External => Error,
+ Missing_Source_Files => Error);
Gprclean_Flags : constant Processing_Flags :=
(Report_Error => null,
@@ -1621,7 +1628,8 @@ private
Compiler_Driver_Mandatory => True,
Error_On_Unknown_Language => True,
Require_Obj_Dirs => Warning,
- Allow_Invalid_External => Error);
+ Allow_Invalid_External => Error,
+ Missing_Source_Files => Warning);
Gnatmake_Flags : constant Processing_Flags :=
(Report_Error => null,
@@ -1631,6 +1639,7 @@ private
Compiler_Driver_Mandatory => False,
Error_On_Unknown_Language => False,
Require_Obj_Dirs => Error,
- Allow_Invalid_External => Error);
+ Allow_Invalid_External => Error,
+ Missing_Source_Files => Error);
end Prj;
===================================================================
@@ -6537,19 +6537,40 @@ package body Prj.Nmsc is
if not NL.Found then
Err_Vars.Error_Msg_File_1 := NL.Name;
- if First_Error then
- Error_Msg
- (Data.Flags,
- "source file { not found",
- NL.Location, Project.Project);
- First_Error := False;
-
- else
- Error_Msg
- (Data.Flags,
- "\source file { not found",
- NL.Location, Project.Project);
- end if;
+ case Data.Flags.Missing_Source_Files is
+ when Error =>
+ if First_Error then
+ Error_Msg
+ (Data.Flags,
+ "source file { not found",
+ NL.Location, Project.Project);
+ First_Error := False;
+
+ else
+ Error_Msg
+ (Data.Flags,
+ "\source file { not found",
+ NL.Location, Project.Project);
+ end if;
+
+ when Warning =>
+ if First_Error then
+ Error_Msg
+ (Data.Flags,
+ "?source file { not found",
+ NL.Location, Project.Project);
+ First_Error := False;
+
+ else
+ Error_Msg
+ (Data.Flags,
+ "?\source file { not found",
+ NL.Location, Project.Project);
+ end if;
+
+ when Silent =>
+ null;
+ end case;
end if;
NL := Source_Names_Htable.Get_Next (Project.Source_Names);