aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGhjuvan Lacambre <lacambre@adacore.com>2020-11-12 09:38:58 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2020-11-30 09:16:18 -0500
commita18d46a4b6cd2b3c6f6506d09a3bd547b20293bf (patch)
tree233dbccaf253b1af1fa284e358ce8124f6a2339f /gcc
parentb514643caeac517d06482a70f8fa38328601dd7a (diff)
downloadgcc-a18d46a4b6cd2b3c6f6506d09a3bd547b20293bf.zip
gcc-a18d46a4b6cd2b3c6f6506d09a3bd547b20293bf.tar.gz
gcc-a18d46a4b6cd2b3c6f6506d09a3bd547b20293bf.tar.bz2
[Ada] Implement -gnateb switch
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst7
-rw-r--r--gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst4
-rw-r--r--gcc/ada/gnat_ugn.texi17
-rw-r--r--gcc/ada/lib-writ.adb5
-rw-r--r--gcc/ada/opt.ads5
-rw-r--r--gcc/ada/par.adb4
-rw-r--r--gcc/ada/switch-c.adb6
7 files changed, 44 insertions, 4 deletions
diff --git a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
index 6993f0d..9c62d6e 100644
--- a/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
+++ b/gcc/ada/doc/gnat_ugn/building_executable_programs_with_gnat.rst
@@ -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)
diff --git a/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst b/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
index 2f0e10c..46d589a 100644
--- a/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
+++ b/gcc/ada/doc/gnat_ugn/the_gnat_compilation_model.rst
@@ -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.
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index 2981d78..14e9271 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -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)
diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb
index 34a8d631..f5b9e30 100644
--- a/gcc/ada/lib-writ.adb
+++ b/gcc/ada/lib-writ.adb
@@ -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);
diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads
index 5017792..f55e9c6 100644
--- a/gcc/ada/opt.ads
+++ b/gcc/ada/opt.ads
@@ -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.
diff --git a/gcc/ada/par.adb b/gcc/ada/par.adb
index 4c3a154..95695d2 100644
--- a/gcc/ada/par.adb
+++ b/gcc/ada/par.adb
@@ -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
diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb
index e086a5d..c6eb063 100644
--- a/gcc/ada/switch-c.adb
+++ b/gcc/ada/switch-c.adb
@@ -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' =>