[Ada] Implement -gnateb switch
authorGhjuvan Lacambre <lacambre@adacore.com>
Thu, 12 Nov 2020 08:38:58 +0000 (09:38 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 30 Nov 2020 14:16:18 +0000 (09:16 -0500)
gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Describe -gnateb switch.
* doc/gnat_ugn/the_gnat_compilation_model.rst: Mention -gnateb
switch in configuration pragma files section.
* gnat_ugn.texi: Regenerate.
* lib-writ.adb (Write_ALI): Strip directories from configuration
files path if needed.
* opt.ads: Declare Config_Files_Store_Basename option.
* par.adb (Par): Save configuration file checksum.
* switch-c.adb (Scan_Front_End_Switches): Set
Config_Files_Store_Basename true if -gnateb is present.

gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
gcc/ada/gnat_ugn.texi
gcc/ada/lib-writ.adb
gcc/ada/opt.ads
gcc/ada/par.adb
gcc/ada/switch-c.adb

index 6993f0d..9c62d6e 100644 (file)
@@ -1517,6 +1517,13 @@ Alphabetical List of All Switches
   an exception because ``Self(Obj)`` produces an anonymous object which does
   not share the memory location of ``Obj``.
 
+.. index:: -gnateb  (gcc)
+
+:switch:`-gnateb`
+  Store configuration files by their basename in ALI files. This switch is
+  used for instance by gprbuild for distributed builds in order to prevent
+  issues where machine-specific absolute paths could end up being stored in
+  ALI files.
 
 .. index:: -gnatec  (gcc)
 
index 2f0e10c..46d589a 100644 (file)
@@ -1560,6 +1560,10 @@ temporary files that are immediately deleted; it doesn't make sense to
 depend on a file that no longer exists. Such tools include
 ``gprbuild``, ``gnatmake``, and ``gnatcheck``.
 
+By default, configuration pragma files are stored by their absolute paths in
+ALI files. You can use the :switch:`-gnateb` switch in order to store them by
+their basename instead.
+
 If you are using project file, a separate mechanism is provided using
 project attributes.
 
index 2981d78..14e9271 100644 (file)
@@ -2970,6 +2970,10 @@ temporary files that are immediately deleted; it doesn't make sense to
 depend on a file that no longer exists. Such tools include
 @code{gprbuild}, @code{gnatmake}, and @code{gnatcheck}.
 
+By default, configuration pragma files are stored by their absolute paths in
+ALI files. You can use the @code{-gnateb} switch in order to store them by
+their basename instead.
+
 If you are using project file, a separate mechanism is provided using
 project attributes.
 
@@ -8968,6 +8972,19 @@ an exception because @code{Self(Obj)} produces an anonymous object which does
 not share the memory location of @code{Obj}.
 @end table
 
+@geindex -gnateb (gcc)
+
+
+@table @asis
+
+@item @code{-gnateb}
+
+Store configuration files by their basename in ALI files. This switch is
+used for instance by gprbuild for distributed builds in order to prevent
+issues where machine-specific absolute paths could end up being stored in
+ALI files.
+@end table
+
 @geindex -gnatec (gcc)
 
 
index 34a8d63..f5b9e30 100644 (file)
@@ -1476,11 +1476,8 @@ package body Lib.Writ is
             --  Normal case of a unit entry with a source index
 
             if Sind > No_Source_File then
-               --  We never want directory information in ALI files
-               --  ???But back out this change temporarily until
-               --  gprbuild is fixed.
 
-               if False then
+               if Config_Files_Store_Basename then
                   Fname := Strip_Directory (File_Name (Sind));
                else
                   Fname := File_Name (Sind);
index 5017792..f55e9c6 100644 (file)
@@ -364,6 +364,11 @@ package Opt is
    --  GNAT
    --  Names of configuration pragmas files (given by switches -gnatec)
 
+   Config_Files_Store_Basename : Boolean := False;
+   --  GNAT
+   --  Set True for -gnateb. Tells GNAT that config files should be referred to
+   --  by their basename and their checksums computed in ALI files.
+
    Configurable_Run_Time_Mode : Boolean := False;
    --  GNAT, GNATBIND
    --  Set True if the compiler is operating in configurable run-time mode.
index 4c3a154..95695d2 100644 (file)
@@ -1546,6 +1546,10 @@ begin
          end loop;
       end;
 
+      if Config_Files_Store_Basename then
+         Complete_Source_File_Entry;
+      end if;
+
    --  Normal case of compilation unit
 
    else
index e086a5d..c6eb063 100644 (file)
@@ -486,6 +486,12 @@ package body Switch.C is
                      Ptr := Ptr + 1;
                      Check_Aliasing_Of_Parameters := True;
 
+                  --  -gnateb (config file basenames and checksums in ALI)
+
+                  when 'b' =>
+                     Ptr := Ptr + 1;
+                     Config_Files_Store_Basename := True;
+
                   --  -gnatec (configuration pragmas)
 
                   when 'c' =>