Index: prj.adb
===================================================================
--- prj.adb	(revision 161179)
+++ prj.adb	(working copy)
@@ -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;
 
    ------------
Index: prj.ads
===================================================================
--- prj.ads	(revision 161088)
+++ prj.ads	(working copy)
@@ -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;
Index: prj-nmsc.adb
===================================================================
--- prj-nmsc.adb	(revision 161166)
+++ prj-nmsc.adb	(working copy)
@@ -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);
