+2011-08-04 Emmanuel Briot <briot@adacore.com>
+
+ * makeutl.adb (Compute_Builder_Switches): no longer accept a unit name
+ as an index for Builder'Switches. This conforms to the documentation.
+ * make.adb (Insert_Project_Sources): avoid duplicate code
+
2011-08-04 Emmanuel Briot <briot@adacore.com>
* makeutl.adb (Complete_Mains): if the user has passed a relative file
-- Get the first executable.
-- ??? This needs to be done early, because Osint.Next_Main_File also
- -- initializes the primary search directory, used below to initiliaze
+ -- initializes the primary search directory, used below to initialize
-- the "-I" parameter
Main_Source_File := Next_Main_Source; -- No directory information
Index : Int;
Project : Project_Id;
- Extending : constant Boolean := The_Project.Extends /= No_Project;
-
- function Check_Project (P : Project_Id) return Boolean;
- -- Returns True if P is The_Project or a project extended by The_Project
-
- -------------------
- -- Check_Project --
- -------------------
-
- function Check_Project (P : Project_Id) return Boolean is
- begin
- if All_Projects or else P = The_Project then
- return True;
-
- elsif Extending then
- declare
- Proj : Project_Id;
-
- begin
- Proj := The_Project;
- while Proj /= null loop
- if P = Proj.Extends then
- return True;
- end if;
-
- Proj := Proj.Extends;
- end loop;
- end;
- end if;
-
- return False;
- end Check_Project;
-
- -- Start of processing for Insert_Project_Sources
-
begin
-- Loop through all the sources in the project files
then
-- And it is a source for the specified project
- if Check_Project (Unit.File_Names (Impl).Project) then
+ if All_Projects
+ or else
+ Is_Extending (The_Project, Unit.File_Names (Impl).Project)
+ then
Project := Unit.File_Names (Impl).Project;
-- If we don't have a spec, we cannot consider the source
elsif Unit.File_Names (Spec) /= null
and then not Unit.File_Names (Spec).Locally_Removed
- and then Check_Project (Unit.File_Names (Spec).Project)
+ and then
+ (All_Projects
+ or else
+ Is_Extending (The_Project, Unit.File_Names (Spec).Project))
then
-- If there is no source for the body, but there is one for the
-- spec which has not been locally removed, then we take this one.
Shared => Project_Tree.Shared,
Force_Lower_Case_Index => False,
Allow_Wildcards => True);
-
- -- If not found, try without extension ???
- -- That's because gnatmake accepts unit names in Switches
-
- if Switches_For_Main = Nil_Variable_Value
- and then Source.Unit /= null
- then
- Switches_For_Main := Value_Of
- (Name => Source.Unit.Name,
- Attribute_Or_Array_Name => Name_Switches,
- In_Package => Builder_Package,
- Shared => Project_Tree.Shared,
- Force_Lower_Case_Index => False,
- Allow_Wildcards => True);
- end if;
end if;
if Index = 1 then
if Switches_For_Lang /= Nil_Variable_Value then
Write_Line
- ("Warning: using Builder'Default_Switches"
- & "(""" & Get_Name_String (Lang)
+ ("Warning: using Builder'Switches("""
+ & Get_Name_String (Lang)
& """), as there are several mains");
elsif Other_Switches /= Nil_Variable_Value then