diff mbox

[Ada] new flag to disable some errors when loading projects

Message ID 20100623063614.GA22344@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet June 23, 2010, 6:36 a.m. UTC
This flag can be used to disable errors when a source file is referenced
in the Source_Files attribute, but does not actually exists in the
source directories. In particular, this is useful when the project is
used in an IDE, where we do not want to force the user to have a fully
valid project.

Tested on x86_64-pc-linux-gnu, committed on trunk

2010-06-23  Emmanuel Briot  <briot@adacore.com>

	* prj.adb, prj.ads, prj-nmsc.adb (Processing_Flags): New flag
	Missing_Source_Files.
diff mbox

Patch

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);