summaryrefslogtreecommitdiff
path: root/gcc/ada/prj-nmsc.adb
diff options
context:
space:
mode:
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-17 21:19:32 +0000
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-17 21:19:32 +0000
commit533360190e2e0500f37128fc38cda0f48b0f456a (patch)
tree405209476eafde3f87744b76bb4787227777129a /gcc/ada/prj-nmsc.adb
parent26bdbe289ff47a014f2bf4aa06bf3d12d54ca755 (diff)
downloadgcc-533360190e2e0500f37128fc38cda0f48b0f456a.tar.gz
* make.adb:
(Switches_Of): New function (Test_If_Relative_Path): New procedure (Add_Switches): Use new function Switches_Of (Collect_Arguments_And_Compile): Use new function Switches_Of. When using a project file, test if there are any relative search path. Fail if there are any. (Gnatmake): Only add switches for the primary directory when not using a project file. When using a project file, change directory to the object directory of the main project file. When using a project file, test if there are any relative search path. Fail if there are any. When using a project file, fail if specified executable is relative path with directory information, and prepend executable, if not specified as an absolute path, with the exec directory. Make sure that only one -o switch is transmitted to the linker. * prj-attr.adb (Initialization_Data): Add project attribute Exec_Dir * prj-nmsc.adb: (Ada_Check): Get Spec_Suffix_Loc and Impl_Suffix_Loc, when using a non standard naming scheme. (Check_Ada_Naming_Scheme): Make sure that error messages do not raise exceptions. (Is_Illegal_Append): Return True if there is no dot in the suffix. (Language_Independent_Check): Check the exec directory. * prj.adb (Project_Empty): Add new component Exec_Directory * prj.ads: (Default_Ada_Spec_Suffix, Default_Ada_Impl_Suffix): Add defaults. (Project_Data): Add component Exec_Directory * snames.adb: Updated to match snames.ads revision 1.215 * snames.ads: Added Exec_Dir * make.adb: Minor reformatting * prj-nmsc.adb: Minor reformatting * snames.adb: Updated to match snames.ads * snames.ads: Alphebetize entries for project file * trans.c (process_freeze_entity): Do nothing if the entity is a subprogram that was already elaborated. * decl.c (gnat_to_gnu_entity, object): Do not back-annotate Alignment and Esize if object is referenced via pointer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48127 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/prj-nmsc.adb')
-rw-r--r--gcc/ada/prj-nmsc.adb98
1 files changed, 82 insertions, 16 deletions
diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb
index 56075cf292d..9f11f6f0170 100644
--- a/gcc/ada/prj-nmsc.adb
+++ b/gcc/ada/prj-nmsc.adb
@@ -628,14 +628,18 @@ package body Prj.Nmsc is
-- Check Specification_Suffix
declare
- Ada_Spec_Suffix : constant Name_Id :=
+ Ada_Spec_Suffix : constant Variable_Value :=
Prj.Util.Value_Of
(Index => Name_Ada,
In_Array => Data.Naming.Specification_Suffix);
begin
- if Ada_Spec_Suffix /= No_Name then
- Data.Naming.Current_Spec_Suffix := Ada_Spec_Suffix;
+ if Ada_Spec_Suffix.Kind = Single
+ and then String_Length (Ada_Spec_Suffix.Value) /= 0
+ then
+ String_To_Name_Buffer (Ada_Spec_Suffix.Value);
+ Data.Naming.Current_Spec_Suffix := Name_Find;
+ Data.Naming.Spec_Suffix_Loc := Ada_Spec_Suffix.Location;
else
Data.Naming.Current_Spec_Suffix := Default_Ada_Spec_Suffix;
@@ -652,14 +656,18 @@ package body Prj.Nmsc is
-- Check Implementation_Suffix
declare
- Ada_Impl_Suffix : constant Name_Id :=
+ Ada_Impl_Suffix : constant Variable_Value :=
Prj.Util.Value_Of
(Index => Name_Ada,
In_Array => Data.Naming.Implementation_Suffix);
begin
- if Ada_Impl_Suffix /= No_Name then
- Data.Naming.Current_Impl_Suffix := Ada_Impl_Suffix;
+ if Ada_Impl_Suffix.Kind = Single
+ and then String_Length (Ada_Impl_Suffix.Value) /= 0
+ then
+ String_To_Name_Buffer (Ada_Impl_Suffix.Value);
+ Data.Naming.Current_Impl_Suffix := Name_Find;
+ Data.Naming.Impl_Suffix_Loc := Ada_Impl_Suffix.Location;
else
Data.Naming.Current_Impl_Suffix := Default_Ada_Impl_Suffix;
@@ -920,9 +928,9 @@ package body Prj.Nmsc is
end if;
end Check_Ada_Name;
- -------------------------
- -- Check_Naming_Scheme --
- -------------------------
+ -----------------------------
+ -- Check_Ada_Naming_Scheme --
+ -----------------------------
procedure Check_Ada_Naming_Scheme (Naming : Naming_Data) is
begin
@@ -982,24 +990,24 @@ package body Prj.Nmsc is
-- - start with an '_' followed by an alphanumeric
if Is_Illegal_Append (Specification_Suffix) then
+ Error_Msg_Name_1 := Naming.Current_Spec_Suffix;
Error_Msg
- ('"' & Specification_Suffix &
- """ is illegal for Specification_Suffix.",
+ ("{ is illegal for Specification_Suffix",
Naming.Spec_Suffix_Loc);
end if;
if Is_Illegal_Append (Implementation_Suffix) then
+ Error_Msg_Name_1 := Naming.Current_Impl_Suffix;
Error_Msg
- ('"' & Implementation_Suffix &
- """ is illegal for Implementation_Suffix.",
+ ("% is illegal for Implementation_Suffix",
Naming.Impl_Suffix_Loc);
end if;
if Implementation_Suffix /= Separate_Suffix then
if Is_Illegal_Append (Separate_Suffix) then
+ Error_Msg_Name_1 := Naming.Separate_Suffix;
Error_Msg
- ('"' & Separate_Suffix &
- """ is illegal for Separate_Append.",
+ ("{ is illegal for Separate_Append",
Naming.Sep_Suffix_Loc);
end if;
end if;
@@ -1039,6 +1047,7 @@ package body Prj.Nmsc is
end if;
end;
end if;
+
end Check_Ada_Naming_Scheme;
---------------
@@ -1430,6 +1439,7 @@ package body Prj.Nmsc is
begin
return This'Length = 0
or else Is_Alphanumeric (This (This'First))
+ or else Index (This, ".") = 0
or else (This'Length >= 2
and then This (This'First) = '_'
and then Is_Alphanumeric (This (This'First + 1)));
@@ -1701,7 +1711,7 @@ package body Prj.Nmsc is
Write_Line ("Starting to look for directories");
end if;
- -- Let's check the object directory
+ -- Check the object directory
declare
Object_Dir : Variable_Value :=
@@ -1757,6 +1767,62 @@ package body Prj.Nmsc is
end if;
end if;
+ -- Check the exec directory
+
+ declare
+ Exec_Dir : Variable_Value :=
+ Util.Value_Of (Name_Exec_Dir, Data.Decl.Attributes);
+
+ begin
+ pragma Assert (Exec_Dir.Kind = Single,
+ "Exec_Dir is not a single string");
+
+ -- We set the object directory to its default
+
+ Data.Exec_Directory := Data.Object_Directory;
+
+ if not String_Equal (Exec_Dir.Value, Empty_String) then
+
+ String_To_Name_Buffer (Exec_Dir.Value);
+
+ if Name_Len = 0 then
+ Error_Msg ("Exec_Dir cannot be empty",
+ Exec_Dir.Location);
+
+ else
+ -- We check that the specified object directory
+ -- does exist.
+
+ Canonical_Case_File_Name (Name_Buffer (1 .. Name_Len));
+
+ declare
+ Dir_Id : constant Name_Id := Name_Find;
+
+ begin
+ Data.Exec_Directory :=
+ Locate_Directory (Dir_Id, Data.Directory);
+
+ if Data.Exec_Directory = No_Name then
+ Error_Msg_Name_1 := Dir_Id;
+ Error_Msg
+ ("the exec directory { cannot be found",
+ Data.Location);
+ end if;
+ end;
+ end if;
+ end if;
+ end;
+
+ if Current_Verbosity = High then
+ if Data.Exec_Directory = No_Name then
+ Write_Line ("No exec directory");
+ else
+ Write_Str ("Exec directory: """);
+ Write_Str (Get_Name_String (Data.Exec_Directory));
+ Write_Line ("""");
+ end if;
+ end if;
+
-- Look for the source directories
declare