From 65818fc9550ffda7724504e38c8d2005f6c4f2ca Mon Sep 17 00:00:00 2001 From: Ghjuvan Lacambre Date: Fri, 6 May 2022 18:53:57 +0200 Subject: [PATCH] [Ada] Enable using absolute paths in -fdiagnostics-format=json output This commit makes GNAT use absolute paths in -fdiagnostics-format=json's output when -gnatef is present on the command line. This makes life easier for tools that ingest GNAT's output. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Document new behavior. * errout.adb (Write_JSON_Location): Output absolute paths when needed. * switch-c.adb (Scan_Front_End_Switches): Update -gnatef comment. * usage.adb (Usage): Update description of -gnatef. * gnat_ugn.texi: Regenerate. --- .../building_executable_programs_with_gnat.rst | 6 ++++-- gcc/ada/errout.adb | 24 +++++++++++++++++++--- gcc/ada/gnat_ugn.texi | 10 +++++---- gcc/ada/switch-c.adb | 3 ++- gcc/ada/usage.adb | 2 +- 5 files changed, 34 insertions(+), 11 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 ed6b463..29293e1 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 @@ -1238,7 +1238,8 @@ Alphabetical List of All Switches :switch:`-fdiagnostics-format=json` Makes GNAT emit warning and error messages as JSON. Inhibits printing of text warning and errors messages except if :switch:`-gnatv` or - :switch:`-gnatl` are present. + :switch:`-gnatl` are present. Uses absolute file paths when used along + :switch:`-gnatef`. .. index:: -fdump-scos (gcc) @@ -1582,7 +1583,8 @@ Alphabetical List of All Switches .. index:: -gnatef (gcc) :switch:`-gnatef` - Display full source path name in brief error messages. + Display full source path name in brief error messages and absolute paths in + :switch:`-fdiagnostics-format=json`'s output. .. index:: -gnateF (gcc) diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index 8658c38..e3aa0ed 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -51,6 +51,7 @@ with Sinfo.Utils; use Sinfo.Utils; with Snames; use Snames; with Stand; use Stand; with Stylesw; use Stylesw; +with System.OS_Lib; with Uname; use Uname; package body Errout is @@ -2082,6 +2083,7 @@ package body Errout is -- Return True if E is a continuation message. procedure Write_JSON_Escaped_String (Str : String_Ptr); + procedure Write_JSON_Escaped_String (Str : String); -- Write each character of Str, taking care of preceding each quote and -- backslash with a backslash. Note that this escaping differs from what -- GCC does. @@ -2114,9 +2116,9 @@ package body Errout is -- Write_JSON_Escaped_String -- ------------------------------- - procedure Write_JSON_Escaped_String (Str : String_Ptr) is + procedure Write_JSON_Escaped_String (Str : String) is begin - for C of Str.all loop + for C of Str loop if C = '"' or else C = '\' then Write_Char ('\'); end if; @@ -2125,14 +2127,30 @@ package body Errout is end loop; end Write_JSON_Escaped_String; + ------------------------------- + -- Write_JSON_Escaped_String -- + ------------------------------- + + procedure Write_JSON_Escaped_String (Str : String_Ptr) is + begin + Write_JSON_Escaped_String (Str.all); + end Write_JSON_Escaped_String; + ------------------------- -- Write_JSON_Location -- ------------------------- procedure Write_JSON_Location (Sptr : Source_Ptr) is + Name : constant File_Name_Type := + Full_Ref_Name (Get_Source_File_Index (Sptr)); begin Write_Str ("{""file"":"""); - Write_Name (Full_Ref_Name (Get_Source_File_Index (Sptr))); + if Full_Path_Name_For_Brief_Errors then + Write_JSON_Escaped_String + (System.OS_Lib.Normalize_Pathname (Get_Name_String (Name))); + else + Write_Name (Name); + end if; Write_Str (""",""line"":"); Write_Int (Pos (Get_Physical_Line_Number (Sptr))); Write_Str (", ""column"":"); diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi index 1664c49..a2a2990 100644 --- a/gcc/ada/gnat_ugn.texi +++ b/gcc/ada/gnat_ugn.texi @@ -21,7 +21,7 @@ @copying @quotation -GNAT User's Guide for Native Platforms , Apr 22, 2022 +GNAT User's Guide for Native Platforms , May 24, 2022 AdaCore @@ -8552,7 +8552,8 @@ dynamically allocated objects. Makes GNAT emit warning and error messages as JSON. Inhibits printing of text warning and errors messages except if @code{-gnatv} or -@code{-gnatl} are present. +@code{-gnatl} are present. Uses absolute file paths when used along +@code{-gnatef}. @end table @geindex -fdump-scos (gcc) @@ -9037,7 +9038,8 @@ produced at run time. @item @code{-gnatef} -Display full source path name in brief error messages. +Display full source path name in brief error messages and absolute paths in +@code{-fdiagnostics-format=json}’s output. @end table @geindex -gnateF (gcc) @@ -29247,8 +29249,8 @@ to permit their use in free software. @printindex ge -@anchor{cf}@w{ } @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{ } +@anchor{cf}@w{ } @c %**end of body @bye diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb index 522cdf6..feac8bd 100644 --- a/gcc/ada/switch-c.adb +++ b/gcc/ada/switch-c.adb @@ -603,7 +603,8 @@ package body Switch.C is Exception_Extra_Info := True; Ptr := Ptr + 1; - -- -gnatef (full source path for brief error messages) + -- -gnatef (full source path for brief error messages and + -- absolute paths for -fdiagnostics-format=json) when 'f' => Store_Switch := False; diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index a3d59b6..7d11ae5 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -187,7 +187,7 @@ begin -- Line for -gnatef switch Write_Switch_Char ("ef"); - Write_Line ("Full source path in brief error messages"); + Write_Line ("Full source path in brief error messages and JSON output"); -- Line for -gnateF switch -- 2.7.4