If an object and/or exec directory exists and is declared in a project
with no source, it was not taken into account. This patch correct this.

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

2011-12-12  Vincent Celier  <cel...@adacore.com>

        * prj-nmsc.adb (Get_Directories): For a non extending project,
        always get a declared object and/or exec directory if it already
        exists, even when there are no sources, but do not create them.

Index: prj-nmsc.adb
===================================================================
--- prj-nmsc.adb        (revision 182223)
+++ prj-nmsc.adb        (working copy)
@@ -5284,8 +5284,24 @@
                "Object_Dir cannot be empty",
                Object_Dir.Location, Project);
 
-         elsif not No_Sources then
+         elsif Setup_Projects and then
+               No_Sources and then
+               Project.Extends = No_Project
+         then
+            --  Do not create an object directory for a non extending project
+            --  with no sources.
 
+            Locate_Directory
+              (Project,
+               File_Name_Type (Object_Dir.Value),
+               Path             => Project.Object_Directory,
+               Dir_Exists       => Dir_Exists,
+               Data             => Data,
+               Location         => Object_Dir.Location,
+               Must_Exist       => False,
+               Externally_Built => Project.Externally_Built);
+
+         else
             --  We check that the specified object directory does exist.
             --  However, even when it doesn't exist, we set it to a default
             --  value. This is for the benefit of tools that recover from
@@ -5355,8 +5371,23 @@
                "Exec_Dir cannot be empty",
                Exec_Dir.Location, Project);
 
-         elsif not No_Sources then
+         elsif Setup_Projects and then
+               No_Sources and then
+               Project.Extends = No_Project
+         then
+            --  Do not create an exec directory for a non extending project
+            --  with no sources.
 
+            Locate_Directory
+              (Project,
+               File_Name_Type (Exec_Dir.Value),
+               Path             => Project.Exec_Directory,
+               Dir_Exists       => Dir_Exists,
+               Data             => Data,
+               Location         => Exec_Dir.Location,
+               Externally_Built => Project.Externally_Built);
+
+         else
             --  We check that the specified exec directory does exist
 
             Locate_Directory

Reply via email to