aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVincent Celier <celier@adacore.com>2008-05-23 16:33:14 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2008-05-23 16:33:14 +0200
commit4dff0aaf61963447ecdcc453d4058dc29ae61c87 (patch)
tree1f1b39705e9f388124a153cb993c79de33fb8eb1 /gcc
parent163792bc392c8362fede7bc55c0c671c4c642e72 (diff)
downloadgcc-4dff0aaf61963447ecdcc453d4058dc29ae61c87.zip
gcc-4dff0aaf61963447ecdcc453d4058dc29ae61c87.tar.gz
gcc-4dff0aaf61963447ecdcc453d4058dc29ae61c87.tar.bz2
snames.adb: New standard name Excluded_Source_List_File
2008-05-23 Vincent Celier <celier@adacore.com> * snames.adb: New standard name Excluded_Source_List_File * snames.ads: New standard name Excluded_Source_List_File * prj-attr.adb: New project level attribute Excluded_Source_List_File * prj-nmsc.adb: (Find_Excluded_Sources): New parameter Project. Get excluded sources from file indicated by attribute Excluded_Source_List_File, when present and neither Excluded_Source_Files nor Locally_Removed_Files are declared. From-SVN: r135809
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/prj-attr.adb1
-rw-r--r--gcc/ada/prj-nmsc.adb125
-rw-r--r--gcc/ada/snames.adb1
-rw-r--r--gcc/ada/snames.ads185
4 files changed, 211 insertions, 101 deletions
diff --git a/gcc/ada/prj-attr.adb b/gcc/ada/prj-attr.adb
index 1b56e84..e2b1fbc 100644
--- a/gcc/ada/prj-attr.adb
+++ b/gcc/ada/prj-attr.adb
@@ -86,6 +86,7 @@ package body Prj.Attr is
"LVlocally_removed_files#" &
"LVexcluded_source_files#" &
"SVsource_list_file#" &
+ "SVexcluded_source_list_file#" &
"LVinterfaces#" &
-- Libraries
diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb
index b443d4f..a2fb600 100644
--- a/gcc/ada/prj-nmsc.adb
+++ b/gcc/ada/prj-nmsc.adb
@@ -181,7 +181,8 @@ package body Prj.Nmsc is
-- Find_Excluded_Sources below.
procedure Find_Excluded_Sources
- (In_Tree : Project_Tree_Ref;
+ (Project : Project_Id;
+ In_Tree : Project_Tree_Ref;
Data : Project_Data);
-- Find the list of files that should not be considered as source files
-- for this project. Sets the list in the Excluded_Sources_Htable.
@@ -7430,23 +7431,41 @@ package body Prj.Nmsc is
---------------------------
procedure Find_Excluded_Sources
- (In_Tree : Project_Tree_Ref;
+ (Project : Project_Id;
+ In_Tree : Project_Tree_Ref;
Data : Project_Data)
is
Excluded_Sources : Variable_Value;
- Current : String_List_Id;
- Element : String_Element;
+
+ Excluded_Source_List_File : Variable_Value;
+
+ Current : String_List_Id;
+
+ Element : String_Element;
+
Location : Source_Ptr;
- Name : File_Name_Type;
+
+ Name : File_Name_Type;
+
+ File : Prj.Util.Text_File;
+ Line : String (1 .. 300);
+ Last : Natural;
+
+ Locally_Removed : Boolean := False;
begin
- -- If Excluded_Source_Files is not declared, check
- -- Locally_Removed_Files.
+ Excluded_Source_List_File :=
+ Util.Value_Of
+ (Name_Excluded_Source_List_File, Data.Decl.Attributes, In_Tree);
Excluded_Sources :=
Util.Value_Of
(Name_Excluded_Source_Files, Data.Decl.Attributes, In_Tree);
+ -- If Excluded_Source_Files is not declared, check
+ -- Locally_Removed_Files.
+
if Excluded_Sources.Default then
+ Locally_Removed := True;
Excluded_Sources :=
Util.Value_Of
(Name_Locally_Removed_Files, Data.Decl.Attributes, In_Tree);
@@ -7457,6 +7476,22 @@ package body Prj.Nmsc is
-- If there are excluded sources, put them in the table
if not Excluded_Sources.Default then
+ if not Excluded_Source_List_File.Default then
+ if Locally_Removed then
+ Error_Msg
+ (Project, In_Tree,
+ "?both attributes Locally_Removed_Files and " &
+ "Excluded_Source_List_File are present",
+ Excluded_Source_List_File.Location);
+ else
+ Error_Msg
+ (Project, In_Tree,
+ "?both attributes Excluded_Source_Files and " &
+ "Excluded_Source_List_File are present",
+ Excluded_Source_List_File.Location);
+ end if;
+ end if;
+
Current := Excluded_Sources.Values;
while Current /= Nil_String loop
Element := In_Tree.String_Elements.Table (Current);
@@ -7481,6 +7516,78 @@ package body Prj.Nmsc is
Excluded_Sources_Htable.Set (Name, (Name, False, Location));
Current := Element.Next;
end loop;
+
+ elsif not Excluded_Source_List_File.Default then
+ Location := Excluded_Source_List_File.Location;
+
+ declare
+ Source_File_Path_Name : constant String :=
+ Path_Name_Of
+ (File_Name_Type
+ (Excluded_Source_List_File.Value),
+ Data.Directory);
+
+ begin
+ if Source_File_Path_Name'Length = 0 then
+ Err_Vars.Error_Msg_File_1 :=
+ File_Name_Type (Excluded_Source_List_File.Value);
+ Error_Msg
+ (Project, In_Tree,
+ "file with excluded sources { does not exist",
+ Excluded_Source_List_File.Location);
+
+ else
+ -- Open the file
+
+ Prj.Util.Open (File, Source_File_Path_Name);
+
+ if not Prj.Util.Is_Valid (File) then
+ Error_Msg
+ (Project, In_Tree, "file does not exist", Location);
+ else
+ -- Read the lines one by one
+
+ while not Prj.Util.End_Of_File (File) loop
+ Prj.Util.Get_Line (File, Line, Last);
+
+ -- A non empty, non comment line should contain a file
+ -- name
+
+ if Last /= 0
+ and then (Last = 1 or else Line (1 .. 2) /= "--")
+ then
+ Name_Len := Last;
+ Name_Buffer (1 .. Name_Len) := Line (1 .. Last);
+ Canonical_Case_File_Name
+ (Name_Buffer (1 .. Name_Len));
+ Name := Name_Find;
+
+ -- Check that there is no directory information
+
+ for J in 1 .. Last loop
+ if Line (J) = '/'
+ or else Line (J) = Directory_Separator
+ then
+ Error_Msg_File_1 := Name;
+ Error_Msg
+ (Project,
+ In_Tree,
+ "file name cannot include " &
+ "directory information ({)",
+ Location);
+ exit;
+ end if;
+ end loop;
+
+ Excluded_Sources_Htable.Set
+ (Name, (Name, False, Location));
+ end if;
+ end loop;
+
+ Prj.Util.Close (File);
+ end if;
+ end if;
+ end;
end if;
end Find_Excluded_Sources;
@@ -7519,7 +7626,7 @@ package body Prj.Nmsc is
if not Source_List_File.Default then
Error_Msg
(Project, In_Tree,
- "?both variables source_files and " &
+ "?both attributes source_files and " &
"source_list_file are present",
Source_List_File.Location);
end if;
@@ -8998,7 +9105,7 @@ package body Prj.Nmsc is
begin
Source_Names.Reset;
- Find_Excluded_Sources (In_Tree, Data);
+ Find_Excluded_Sources (Project, In_Tree, Data);
case Get_Mode is
when Ada_Only =>
diff --git a/gcc/ada/snames.adb b/gcc/ada/snames.adb
index 7e589fb..84b24d2 100644
--- a/gcc/ada/snames.adb
+++ b/gcc/ada/snames.adb
@@ -719,6 +719,7 @@ package body Snames is
"driver#" &
"excluded_source_dirs#" &
"excluded_source_files#" &
+ "excluded_source_list_file#" &
"exec_dir#" &
"executable#" &
"executable_suffix#" &
diff --git a/gcc/ada/snames.ads b/gcc/ada/snames.ads
index 1777991..0b247e7 100644
--- a/gcc/ada/snames.ads
+++ b/gcc/ada/snames.ads
@@ -1040,110 +1040,111 @@ package Snames is
Name_Driver : constant Name_Id := N + 658;
Name_Excluded_Source_Dirs : constant Name_Id := N + 659;
Name_Excluded_Source_Files : constant Name_Id := N + 660;
- Name_Exec_Dir : constant Name_Id := N + 661;
- Name_Executable : constant Name_Id := N + 662;
- Name_Executable_Suffix : constant Name_Id := N + 663;
- Name_Extends : constant Name_Id := N + 664;
- Name_Externally_Built : constant Name_Id := N + 665;
- Name_Finder : constant Name_Id := N + 666;
- Name_Global_Configuration_Pragmas : constant Name_Id := N + 667;
- Name_Global_Config_File : constant Name_Id := N + 668;
- Name_Gnatls : constant Name_Id := N + 669;
- Name_Gnatstub : constant Name_Id := N + 670;
- Name_Implementation : constant Name_Id := N + 671;
- Name_Implementation_Exceptions : constant Name_Id := N + 672;
- Name_Implementation_Suffix : constant Name_Id := N + 673;
- Name_Include_Switches : constant Name_Id := N + 674;
- Name_Include_Path : constant Name_Id := N + 675;
- Name_Include_Path_File : constant Name_Id := N + 676;
- Name_Inherit_Source_Path : constant Name_Id := N + 677;
- Name_Language_Kind : constant Name_Id := N + 678;
- Name_Language_Processing : constant Name_Id := N + 679;
- Name_Languages : constant Name_Id := N + 680;
- Name_Library : constant Name_Id := N + 681;
- Name_Library_Ali_Dir : constant Name_Id := N + 682;
- Name_Library_Auto_Init : constant Name_Id := N + 683;
- Name_Library_Auto_Init_Supported : constant Name_Id := N + 684;
- Name_Library_Builder : constant Name_Id := N + 685;
- Name_Library_Dir : constant Name_Id := N + 686;
- Name_Library_GCC : constant Name_Id := N + 687;
- Name_Library_Interface : constant Name_Id := N + 688;
- Name_Library_Kind : constant Name_Id := N + 689;
- Name_Library_Name : constant Name_Id := N + 690;
- Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 691;
- Name_Library_Options : constant Name_Id := N + 692;
- Name_Library_Partial_Linker : constant Name_Id := N + 693;
- Name_Library_Reference_Symbol_File : constant Name_Id := N + 694;
- Name_Library_Src_Dir : constant Name_Id := N + 695;
- Name_Library_Support : constant Name_Id := N + 696;
- Name_Library_Symbol_File : constant Name_Id := N + 697;
- Name_Library_Symbol_Policy : constant Name_Id := N + 698;
- Name_Library_Version : constant Name_Id := N + 699;
- Name_Library_Version_Switches : constant Name_Id := N + 700;
- Name_Linker : constant Name_Id := N + 701;
- Name_Linker_Executable_Option : constant Name_Id := N + 702;
- Name_Linker_Lib_Dir_Option : constant Name_Id := N + 703;
- Name_Linker_Lib_Name_Option : constant Name_Id := N + 704;
- Name_Local_Config_File : constant Name_Id := N + 705;
- Name_Local_Configuration_Pragmas : constant Name_Id := N + 706;
- Name_Locally_Removed_Files : constant Name_Id := N + 707;
- Name_Mapping_File_Switches : constant Name_Id := N + 708;
- Name_Mapping_Spec_Suffix : constant Name_Id := N + 709;
- Name_Mapping_Body_Suffix : constant Name_Id := N + 710;
- Name_Metrics : constant Name_Id := N + 711;
- Name_Naming : constant Name_Id := N + 712;
- Name_Object_Generated : constant Name_Id := N + 713;
- Name_Objects_Linked : constant Name_Id := N + 714;
- Name_Objects_Path : constant Name_Id := N + 715;
- Name_Objects_Path_File : constant Name_Id := N + 716;
- Name_Object_Dir : constant Name_Id := N + 717;
- Name_Pic_Option : constant Name_Id := N + 718;
- Name_Pretty_Printer : constant Name_Id := N + 719;
- Name_Prefix : constant Name_Id := N + 720;
- Name_Project : constant Name_Id := N + 721;
- Name_Roots : constant Name_Id := N + 722;
- Name_Required_Switches : constant Name_Id := N + 723;
- Name_Run_Path_Option : constant Name_Id := N + 724;
- Name_Runtime_Project : constant Name_Id := N + 725;
- Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 726;
- Name_Shared_Library_Prefix : constant Name_Id := N + 727;
- Name_Shared_Library_Suffix : constant Name_Id := N + 728;
- Name_Separate_Suffix : constant Name_Id := N + 729;
- Name_Source_Dirs : constant Name_Id := N + 730;
- Name_Source_Files : constant Name_Id := N + 731;
- Name_Source_List_File : constant Name_Id := N + 732;
- Name_Spec : constant Name_Id := N + 733;
- Name_Spec_Suffix : constant Name_Id := N + 734;
- Name_Specification : constant Name_Id := N + 735;
- Name_Specification_Exceptions : constant Name_Id := N + 736;
- Name_Specification_Suffix : constant Name_Id := N + 737;
- Name_Stack : constant Name_Id := N + 738;
- Name_Switches : constant Name_Id := N + 739;
- Name_Symbolic_Link_Supported : constant Name_Id := N + 740;
- Name_Sync : constant Name_Id := N + 741;
- Name_Synchronize : constant Name_Id := N + 742;
- Name_Toolchain_Description : constant Name_Id := N + 743;
- Name_Toolchain_Version : constant Name_Id := N + 744;
- Name_Runtime_Library_Dir : constant Name_Id := N + 745;
+ Name_Excluded_Source_List_File : constant Name_Id := N + 661;
+ Name_Exec_Dir : constant Name_Id := N + 662;
+ Name_Executable : constant Name_Id := N + 663;
+ Name_Executable_Suffix : constant Name_Id := N + 664;
+ Name_Extends : constant Name_Id := N + 665;
+ Name_Externally_Built : constant Name_Id := N + 666;
+ Name_Finder : constant Name_Id := N + 667;
+ Name_Global_Configuration_Pragmas : constant Name_Id := N + 668;
+ Name_Global_Config_File : constant Name_Id := N + 669;
+ Name_Gnatls : constant Name_Id := N + 670;
+ Name_Gnatstub : constant Name_Id := N + 671;
+ Name_Implementation : constant Name_Id := N + 672;
+ Name_Implementation_Exceptions : constant Name_Id := N + 673;
+ Name_Implementation_Suffix : constant Name_Id := N + 674;
+ Name_Include_Switches : constant Name_Id := N + 675;
+ Name_Include_Path : constant Name_Id := N + 676;
+ Name_Include_Path_File : constant Name_Id := N + 677;
+ Name_Inherit_Source_Path : constant Name_Id := N + 678;
+ Name_Language_Kind : constant Name_Id := N + 679;
+ Name_Language_Processing : constant Name_Id := N + 680;
+ Name_Languages : constant Name_Id := N + 681;
+ Name_Library : constant Name_Id := N + 682;
+ Name_Library_Ali_Dir : constant Name_Id := N + 683;
+ Name_Library_Auto_Init : constant Name_Id := N + 684;
+ Name_Library_Auto_Init_Supported : constant Name_Id := N + 685;
+ Name_Library_Builder : constant Name_Id := N + 686;
+ Name_Library_Dir : constant Name_Id := N + 687;
+ Name_Library_GCC : constant Name_Id := N + 688;
+ Name_Library_Interface : constant Name_Id := N + 689;
+ Name_Library_Kind : constant Name_Id := N + 690;
+ Name_Library_Name : constant Name_Id := N + 691;
+ Name_Library_Major_Minor_Id_Supported : constant Name_Id := N + 692;
+ Name_Library_Options : constant Name_Id := N + 693;
+ Name_Library_Partial_Linker : constant Name_Id := N + 694;
+ Name_Library_Reference_Symbol_File : constant Name_Id := N + 695;
+ Name_Library_Src_Dir : constant Name_Id := N + 696;
+ Name_Library_Support : constant Name_Id := N + 697;
+ Name_Library_Symbol_File : constant Name_Id := N + 698;
+ Name_Library_Symbol_Policy : constant Name_Id := N + 699;
+ Name_Library_Version : constant Name_Id := N + 700;
+ Name_Library_Version_Switches : constant Name_Id := N + 701;
+ Name_Linker : constant Name_Id := N + 702;
+ Name_Linker_Executable_Option : constant Name_Id := N + 703;
+ Name_Linker_Lib_Dir_Option : constant Name_Id := N + 704;
+ Name_Linker_Lib_Name_Option : constant Name_Id := N + 705;
+ Name_Local_Config_File : constant Name_Id := N + 706;
+ Name_Local_Configuration_Pragmas : constant Name_Id := N + 707;
+ Name_Locally_Removed_Files : constant Name_Id := N + 708;
+ Name_Mapping_File_Switches : constant Name_Id := N + 709;
+ Name_Mapping_Spec_Suffix : constant Name_Id := N + 710;
+ Name_Mapping_Body_Suffix : constant Name_Id := N + 711;
+ Name_Metrics : constant Name_Id := N + 712;
+ Name_Naming : constant Name_Id := N + 713;
+ Name_Object_Generated : constant Name_Id := N + 714;
+ Name_Objects_Linked : constant Name_Id := N + 715;
+ Name_Objects_Path : constant Name_Id := N + 716;
+ Name_Objects_Path_File : constant Name_Id := N + 717;
+ Name_Object_Dir : constant Name_Id := N + 718;
+ Name_Pic_Option : constant Name_Id := N + 719;
+ Name_Pretty_Printer : constant Name_Id := N + 720;
+ Name_Prefix : constant Name_Id := N + 721;
+ Name_Project : constant Name_Id := N + 722;
+ Name_Roots : constant Name_Id := N + 723;
+ Name_Required_Switches : constant Name_Id := N + 724;
+ Name_Run_Path_Option : constant Name_Id := N + 725;
+ Name_Runtime_Project : constant Name_Id := N + 726;
+ Name_Shared_Library_Minimum_Switches : constant Name_Id := N + 727;
+ Name_Shared_Library_Prefix : constant Name_Id := N + 728;
+ Name_Shared_Library_Suffix : constant Name_Id := N + 729;
+ Name_Separate_Suffix : constant Name_Id := N + 730;
+ Name_Source_Dirs : constant Name_Id := N + 731;
+ Name_Source_Files : constant Name_Id := N + 732;
+ Name_Source_List_File : constant Name_Id := N + 733;
+ Name_Spec : constant Name_Id := N + 734;
+ Name_Spec_Suffix : constant Name_Id := N + 735;
+ Name_Specification : constant Name_Id := N + 736;
+ Name_Specification_Exceptions : constant Name_Id := N + 737;
+ Name_Specification_Suffix : constant Name_Id := N + 738;
+ Name_Stack : constant Name_Id := N + 739;
+ Name_Switches : constant Name_Id := N + 740;
+ Name_Symbolic_Link_Supported : constant Name_Id := N + 741;
+ Name_Sync : constant Name_Id := N + 742;
+ Name_Synchronize : constant Name_Id := N + 743;
+ Name_Toolchain_Description : constant Name_Id := N + 744;
+ Name_Toolchain_Version : constant Name_Id := N + 745;
+ Name_Runtime_Library_Dir : constant Name_Id := N + 746;
-- Other miscellaneous names used in front end
- Name_Unaligned_Valid : constant Name_Id := N + 746;
+ Name_Unaligned_Valid : constant Name_Id := N + 747;
-- Ada 2005 reserved words
- First_2005_Reserved_Word : constant Name_Id := N + 747;
- Name_Interface : constant Name_Id := N + 747;
- Name_Overriding : constant Name_Id := N + 748;
- Name_Synchronized : constant Name_Id := N + 749;
- Last_2005_Reserved_Word : constant Name_Id := N + 749;
+ First_2005_Reserved_Word : constant Name_Id := N + 748;
+ Name_Interface : constant Name_Id := N + 748;
+ Name_Overriding : constant Name_Id := N + 749;
+ Name_Synchronized : constant Name_Id := N + 750;
+ Last_2005_Reserved_Word : constant Name_Id := N + 750;
subtype Ada_2005_Reserved_Words is
Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
-- Mark last defined name for consistency check in Snames body
- Last_Predefined_Name : constant Name_Id := N + 749;
+ Last_Predefined_Name : constant Name_Id := N + 750;
---------------------------------------
-- Subtypes Defining Name Categories --