------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                             B I N D U S G                                --
--                                                                          --
--                                 B o d y                                  --
--                                                                          --
--          Copyright (C) 1992-2026, Free Software Foundation, Inc.         --
--                                                                          --
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
-- for  more details.  You should have  received  a copy of the GNU General --
-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

with Osint;  use Osint;
with Output; use Output;
with Switch; use Switch;

with System.WCh_Con; use System.WCh_Con;

package body Bindusg is

   Already_Displayed : Boolean := False;
   --  Set True if Display called, used to avoid showing usage information
   --  more than once.

   -------------
   -- Display --
   -------------

   procedure Display is
   begin
      if Already_Displayed then
         return;
      else
         Already_Displayed := True;
      end if;

      --  Usage line

      Write_Str ("Usage: ");
      Write_Program_Name;
      Write_Char (' ');
      Write_Str ("switches lfile");
      Write_Eol;
      Write_Eol;

      Display_Usage_Version_And_Help;

      --  Line for @response_file

      Write_Line
        ("  @<resp_file> Get arguments from response file");
      Write_Eol;

      --  Line for -aO switch

      Write_Line
        ("  -aOdir    Specify library files search path");

      --  Line for -aI switch

      Write_Line
        ("  -aIdir    Specify source files search path");

      --  Line for a switch

      Write_Line
        ("  -a        Automatically initialize elaboration procedure");

      --  Lines for -A switch

      Write_Line
        ("  -A        Give list of ALI files in partition");
      Write_Line
        ("  -A=file   Write ALI file list to named file");

      --  Line for -b switch

      Write_Line
        ("  -b        Generate brief messages to stderr even if verbose mode "
         & "set");

      --  Line for -c switch

      Write_Line
        ("  -c        Check only, no generation of binder output file");

      --  Line for -d switch

      Write_Line
        ("  -dnn[k|m] Default primary stack size = nn [kilo|mega] bytes");

      --  Line for D switch

      Write_Line
        ("  -Dnn[k|m] Default secondary stack size = nn [kilo|mega] bytes");

      --  Line for -e switch

      Write_Line
        ("  -e        Output complete list of elaboration order dependencies");

      --  Line for -E switch

      Write_Line
        ("  -Ea       Store tracebacks in exception occurrences");
      Write_Line
        ("  -Es       Store tracebacks in exception occurrences,");
      Write_Line
        ("            and enable symbolic tracebacks");
      Write_Line
        ("  -E        Same as -Ea");

      --  Line for -f switch

      Write_Line
        ("  -ffile    Force elaboration order from given file");

      --  Line for -F switch

      Write_Line
        ("  -F        Force checking of elaboration Flags");

      --  Line for -G switch

      Write_Line
        ("  -G        Generate binder file suitable for CCG");

      --  Line for -h switch

      Write_Line
        ("  -h        Output this usage (help) information");

      --  Line for -H switch

      Write_Line
        ("  -H        Legacy elaboration order model enabled");

      --  Lines for -I switch

      Write_Line
        ("  -Idir     Specify library and source files search path");
      Write_Line
        ("  -I-       Don't look for sources & library files in default "
         & "directory");

      --  Line for -k switch

      Write_Line
        ("  -k        Disable checking of elaboration flags");

      --  Line for -K switch

      Write_Line
        ("  -K        Give list of linker options specified for link");

      --  Line for -l switch

      Write_Line
        ("  -l        Output chosen elaboration order");

      --  Line of -L switch

      Write_Line
        ("  -Lxyz     Library build: adainit/final renamed to xyzinit/final, "
         & "implies -n");

      --  Line for -m switch

      Write_Line
        ("  -mnnn     Limit number of detected errors/warnings to nnn "
         & "(1-999999)");

      --  Line for -minimal switch

      Write_Line
        ("  -minimal  Generate binder file suitable for space-constrained "
         & "applications");

      --  Line for -M switch

      Write_Line
        ("  -Mxyz     Rename generated main program from main to xyz");

      --  Line for -n switch

      Write_Line
        ("  -n        No Ada main program (foreign main routine)");

      --  Line for -nostdinc

      Write_Line
        ("  -nostdinc Don't look for source files in the system default "
         & "directory");

      --  Line for -nostdlib

      Write_Line
        ("  -nostdlib Don't look for library files in the system default "
         & "directory");

      --  Line for -o switch

      Write_Line
        ("  -o file   Give the output file name (default is b~xxx.adb)");

      --  Line for -O switch

      Write_Line
        ("  -O        Give list of objects required for link");

      --  Line for -p switch

      Write_Line
        ("  -p        Pessimistic (worst-case) elaboration order");

      --  Line for -P switch

      Write_Line
        ("  -P        Generate binder file suitable for CodePeer");

      --  Line for Q switch

      Write_Line
        ("  -Qnnn     Generate nnn additional default-sized secondary stacks");

      --  Line for -r switch

      Write_Line
        ("  -r        List restrictions that could be applied to this "
         & "partition");

      --  Line for -R switch

      Write_Line
        ("  -R        List sources referenced in closure");

      --  Line for -s switch

      Write_Line
        ("  -s        Require all source files to be present");

      --  Line for -S?? switch

      Write_Line
        ("  -S??      Sin/lo/hi/xx/ev Initialize_Scalars "
         & "invalid/low/high/hex/env var");

      --  Line for -static

      Write_Line
        ("  -static   Link against a static GNAT run time");

      --  Line for -shared

      Write_Line
        ("  -shared   Link against a shared GNAT run time");

      --  Line for -t switch

      Write_Line
        ("  -t        Tolerate time stamp and other consistency errors");

      --  Line for -T switch

      Write_Line
        ("  -Tn       Set time slice value to n milliseconds (n >= 0)");

      --  Line for -u switch

      Write_Line
        ("  -un       Enable dynamic stack analysis, with n results stored");

      --  Line for -v switch

      Write_Line
        ("  -v        Verbose mode. Error messages, header, summary output to "
         & "stdout");

      --  Line for -V switch

      Write_Line
        ("  -Vkey=val Record bind-time variable key with value val");
      --  Line for -w switch

      Write_Line
        ("  -wx       Warning mode. (x=s/e for suppress/treat as error)");

      --  Line for -W switch

      Write_Str
        ("  -W?       Wide character encoding method (");

      for J in WC_Encoding_Method loop
         Write_Char (WC_Encoding_Letters (J));

         if J = WC_Encoding_Method'Last then
            Write_Char (')');
         else
            Write_Char ('/');
         end if;
      end loop;

      Write_Eol;

      --  Line for -x switch

      Write_Line
        ("  -x        Exclude source files (check object consistency only)");

      --  Line for -xdr switch

      Write_Line
        ("  -xdr      Use the XDR protocol for streaming");

      --  Line for -X switch

      Write_Line
        ("  -Xnnn     Default exit status value = nnn");

      --  Line for -y switch

      Write_Line
        ("  -y        Enable leap seconds");

      --  Line for -z switch

      Write_Line
        ("  -z        No main subprogram (zero main)");

      --  Line for -Z switch

      Write_Line
        ("  -Z        Zero formatting in auxiliary outputs (-e, -K, -l, -R)");

      --  Line for --RTS

      Write_Line
        ("  --RTS=dir Specify the default source and object search path");

      --  Line for sfile

      Write_Line
        ("  lfile     Library file names");
   end Display;

end Bindusg;
