[Ada] New package Clean in project files

Arnaud Charlet charlet@adacore.com
Thu Apr 26 09:50:00 GMT 2012


A new package Clean with attributes Object_Artifact_Extensions and
Source_Artifact_Extensions is created in project files.

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

2012-04-26  Vincent Celier  <celier@adacore.com>

	* prj-attr.adb: New package Clean with attributes
	Object_Artifact_Extensions and Source_Artifact_Extensions.
	* prj-nmsc.adb (Process_Clean): Process new package Clean
	* prj.ads (Language_Config): New components
	Clean_Object_Artifacts and Clean_Source_Artifacts.
	* snames.ads-tmpl: New standard names Clean,
	Object_Artifact_Extensions and Source_Artifact_Extensions.

-------------- next part --------------
Index: prj.ads
===================================================================
--- prj.ads	(revision 186860)
+++ prj.ads	(working copy)
@@ -606,6 +606,12 @@
       Toolchain_Description : Name_Id := No_Name;
       --  Hold the value of attribute Toolchain_Description for the language
 
+      Clean_Object_Artifacts : Name_List_Index := No_Name_List;
+      --  List of object artifact extensions to be deleted by gprclean
+
+      Clean_Source_Artifacts : Name_List_Index := No_Name_List;
+      --  List of source artifact extensions to be deleted by gprclean
+
    end record;
 
    No_Language_Config : constant Language_Config :=
@@ -654,7 +660,9 @@
                            Binder_Required_Switches     => No_Name_List,
                            Binder_Prefix                => No_Name,
                            Toolchain_Version            => No_Name,
-                           Toolchain_Description        => No_Name);
+                           Toolchain_Description        => No_Name,
+                           Clean_Object_Artifacts       => No_Name_List,
+                           Clean_Source_Artifacts       => No_Name_List);
 
    --  The following record ???
 
Index: prj-nmsc.adb
===================================================================
--- prj-nmsc.adb	(revision 186860)
+++ prj-nmsc.adb	(working copy)
@@ -1101,6 +1101,9 @@
          procedure Process_Builder (Attributes : Variable_Id);
          --  Process the simple attributes of package Builder
 
+         procedure Process_Clean  (Arrays : Array_Id);
+         --  Process the associate array attributes of package Clean
+
          procedure Process_Compiler (Arrays : Array_Id);
          --  Process the associate array attributes of package Compiler
 
@@ -1223,6 +1226,71 @@
             end loop;
          end Process_Builder;
 
+         -------------------
+         -- Process_Clean --
+         -------------------
+
+         procedure Process_Clean  (Arrays : Array_Id) is
+            Current_Array_Id : Array_Id;
+            Current_Array    : Array_Data;
+            Element_Id       : Array_Element_Id;
+            Element          : Array_Element;
+            List             : String_List_Id;
+
+         begin
+            --  Process the associative array attribute of package Clean
+
+            Current_Array_Id := Arrays;
+            while Current_Array_Id /= No_Array loop
+               Current_Array := Shared.Arrays.Table (Current_Array_Id);
+
+               Element_Id := Current_Array.Value;
+               while Element_Id /= No_Array_Element loop
+                  Element := Shared.Array_Elements.Table (Element_Id);
+
+                  --  Get the name of the language
+
+                  Lang_Index := Get_Language_From_Name
+                    (Project, Get_Name_String (Element.Index));
+
+                  if Lang_Index /= No_Language_Index then
+                     case Current_Array.Name is
+
+                        --  Attribute Object_Artifact_Extensions (<language>)
+
+                        when Name_Object_Artifact_Extensions =>
+                           List := Element.Value.Values;
+
+                           if List /= Nil_String then
+                              Put (Into_List =>
+                                     Lang_Index.Config.Clean_Object_Artifacts,
+                                   From_List => List,
+                                   In_Tree   => Data.Tree);
+                           end if;
+
+                        --  Attribute Source_Artifact_Extensions (<language>)
+
+                        when Name_Source_Artifact_Extensions =>
+                           List := Element.Value.Values;
+
+                           if List /= Nil_String then
+                              Put (Into_List =>
+                                     Lang_Index.Config.Clean_Source_Artifacts,
+                                   From_List => List,
+                                   In_Tree   => Data.Tree);
+                           end if;
+                        when others =>
+                           null;
+                     end case;
+                  end if;
+
+                  Element_Id := Element.Next;
+               end loop;
+
+               Current_Array_Id := Current_Array.Next;
+            end loop;
+         end Process_Clean;
+
          ----------------------
          -- Process_Compiler --
          ----------------------
@@ -1832,6 +1900,12 @@
 
                   Process_Builder (Element.Decl.Attributes);
 
+               when Name_Clean =>
+
+                  --  Process attributes of package Clean
+
+                  Process_Clean (Element.Decl.Arrays);
+
                when Name_Compiler =>
 
                   --  Process attributes of package Compiler
@@ -3217,7 +3291,9 @@
       if Project.Library then
          Support_For_Libraries := Project.Config.Lib_Support;
 
-         if Support_For_Libraries = Prj.None then
+         if not Project.Externally_Built and then
+           Support_For_Libraries = Prj.None
+         then
             Error_Msg
               (Data.Flags,
                "?libraries are not supported on this platform",
@@ -3405,7 +3481,9 @@
                   end if;
 
                   if Project.Library_Kind /= Static then
-                     if Support_For_Libraries = Prj.Static_Only then
+                     if not Project.Externally_Built and then
+                       Support_For_Libraries = Prj.Static_Only
+                     then
                         Error_Msg
                           (Data.Flags,
                            "only static libraries are supported " &
Index: prj-attr.adb
===================================================================
--- prj-attr.adb	(revision 186860)
+++ prj-attr.adb	(working copy)
@@ -281,6 +281,13 @@
    "SVresponse_file_format#" &
    "LVresponse_file_switches#" &
 
+   --  package Clean
+
+   "Pclean#" &
+   "LVswitches#" &
+   "Lasource_artifact_extensions#" &
+   "Laobject_artifact_extensions#" &
+
    --  package Cross_Reference
 
    "Pcross_reference#" &
Index: snames.ads-tmpl
===================================================================
--- snames.ads-tmpl	(revision 186860)
+++ snames.ads-tmpl	(working copy)
@@ -1106,6 +1106,7 @@
    Name_Binder                             : constant Name_Id := N + $;
    Name_Body_Suffix                        : constant Name_Id := N + $;
    Name_Builder                            : constant Name_Id := N + $;
+   Name_Clean                              : constant Name_Id := N + $;
    Name_Compiler                           : constant Name_Id := N + $;
    Name_Compiler_Command                   : constant Name_Id := N + $; -- GB
    Name_Config_Body_File_Name              : constant Name_Id := N + $;
@@ -1195,6 +1196,7 @@
    Name_Multi_Unit_Switches                : constant Name_Id := N + $;
    Name_Naming                             : constant Name_Id := N + $;
    Name_None                               : constant Name_Id := N + $;
+   Name_Object_Artifact_Extensions         : constant Name_Id := N + $;
    Name_Object_File_Suffix                 : constant Name_Id := N + $;
    Name_Object_File_Switches               : constant Name_Id := N + $;
    Name_Object_Generated                   : constant Name_Id := N + $;
@@ -1224,6 +1226,7 @@
    Name_Shared_Library_Prefix              : constant Name_Id := N + $;
    Name_Shared_Library_Suffix              : constant Name_Id := N + $;
    Name_Separate_Suffix                    : constant Name_Id := N + $;
+   Name_Source_Artifact_Extensions         : constant Name_Id := N + $;
    Name_Source_Dirs                        : constant Name_Id := N + $;
    Name_Source_File_Switches               : constant Name_Id := N + $;
    Name_Source_Files                       : constant Name_Id := N + $;


More information about the Gcc-patches mailing list