
       How to build and install the DJGPP native version of GDB
       ********************************************************

General
=======

GDB built with DJGPP supports native DJGPP debugging, whereby you run
gdb.exe and the program being debugged on the same machine.  In
addition, this version supports remote debugging via a serial port,
provided that the target machine has a GDB-compatible debugging stub
which can be linked with the target program (see the section "Remote
Serial" in the GDB manual for more details).


Installation of the binary distribution
=======================================

Simply unzip the gdbNNNb.zip file (where NNN is the version number)
from the top DJGPP installation directory.  Be sure to preserve the
directory structure while you unzip (use -d switch if you do this with
PKUNZIP).  On Windows 9X and Windows 2000, use an unzip program which
supports long file names; one such program is unzip32.exe, available
from the DJGPP sites.

If you need the libraries which are built as part of GDB, install the
companion file gdbNNNa.zip.  This allows to develop applications which
use the same functions as GDB.  For example, you can build your own
front end to the debugger.


Rebuilding GDB from sources
===========================

1. Prerequisites
   -------------
To build the package, you will need the DJGPP development environment
(GCC, header files, and the libraries), and also DJGPP ports of the
following tools:

	- GNU Make 3.79.1 or later
	- Bash 2.03 or later
	- GNU Sed
	- GNU Fileutils
	- GNU Textutils 2.0 or later
	- GNU Sh-utils
	- GNU Grep 2.4 or later
	- GNU Findutils
	- GNU Awk 3.04 or later
	- GNU Bison (only if you change one of the gdb/*.y files)
	- Groff (only if you need to format the man pages)
	- GNU Diffutils (only if you run the test suite)

These programs should be available from the DJGPP sites, in the v2gnu
directory.  In addition, the configuration script invokes the `update'
and `utod' utilities which are part of the basic DJGPP development kit
(djdevNNN.zip).


2. Unpacking the sources
   ---------------------
If you download the source distribution from one of the DJGPP sites,
just unzip it while preserving the directory structure (I suggest to
use unzip32.exe available with the rest of DJGPP), and proceed to the
section "How to build", below.

Source distributions downloaded from one of the GNU FTP sites need
some more work to unpack.  First, you MUST use the `djunpack' batch
file to unzip the package.  That's because some file names in the
official distributions need to be changed to avoid problems on the
various platforms supported by DJGPP.  `djunpack' invokes the `djtar'
program (that is part of the basic DJGPP development kit) to rename
these files on the fly given a file with name mappings; the
distribution includes a file `gdb/config/djgpp/fnchange.lst' with the
necessary mappings.  So you need first to retrieve that batch file,
and then invoke it to unpack the distribution.  Here's how:

 djtar -x -p -o gdb-5.2/djunpack.bat gdb-5.2.tar.gz > djunpack.bat
 djunpack gdb-5.2.tar.gz

(The name of the distribution archive and the leading directory of the
path to `djunpack.bat' in the distribution will be different for
versions of GDB other than 5.2.)

If the argument to `djunpack.bat' include leading directories, it MUST
be given with the DOS-style backslashes; Unix-style forward slashes
will NOT work.

If the distribution comes as a .tar.bz2 archive, and your version of
`djtar' doesn't support bzip2 decompression, you need to unpack it as
follows:

 bnzip2 gdb-5.2.tar.bz2
 djtar -x -p -o gdb-5.2/djunpack.bat gdb-5.2.tar > djunpack.bat
 djunpack gdb-5.2.tar


3. How to build
   ------------

If the source distribution available from DJGPP archives is already
configured for DJGPP v2.x (if it is, you will find files named
`Makefile' in each subdirectory), then just invoke Make:

		make

To build a package that is not yet configured, or if you downloaded
GDB from a GNU FTP site, you will need to configure it first.  You
will also need to configure it if you want to change the configuration
options (e.g., compile without support for the GDBMI interface).  To
configure GDB, type this command:

		sh ./gdb/config/djgpp/djconfig.sh

This script checks the unpacked distribution, then edits the configure
scripts in the various subdirectories, to make them suitable for
DJGPP, and finally invokes the top-level configure script, which
recursively configures all the subdirectories.

You may pass optional switches to djconfig.sh.  It accepts all the
switches accepted by the original GDB configure script.  These
switches are described in the file gdb/README, and their full list can
be displayed by running the following command:

		sh ./gdb/configure --help

NOTE: if you *do* use optional command-line switches, you MUST pass
to the script the name of the directory where GDB sources are
unpacked--even if you are building GDB in-place!  For example:

	sh ./gdb/config/djgpp/djconfig.sh . --disable-gdbmi

It is also possible to build GDB in a directory that is different from
the one where the sources were unpacked.  In that case, you have to
pass the source directory as the first argument to the script:

	sh ./gdb/config/djgpp/djconfig.sh d:/gnu/gdb-5.2

You MUST use forward slashes in the first argument.

After the configure script finishes, run Make:

	make

If you want to produce the documentation (for example, if you changed
some of the Texinfo sources), type this:

	make info

When Make finishes, you can install the package:

	make install prefix='${DJDIR}' INSTALL='ginstall -c'

The above doesn't install the docs; for that you will need to say
this:

	make install-info prefix='${DJDIR}' INSTALL='ginstall -c'

The test suite has been made to work with DJGPP.  If you make a change
in some of the programs, or want to be sure you have a fully
functional GDB executable, it is a good idea to run the test suite.
You cannot use "make check" for that, since it will want to run the
`dejagnu' utility which GDB doesn't support.  Instead, use the special
script gdb/config/djgpp/djcheck.sh, like this:

		cd gdb/testsuite
		sh ../config/djgpp/djcheck.sh

This will run for a while and should not print anything, except the
messages "Running tests in DIR", where DIR is one of the
subdirectories of the testsuite.  Any test that fails to produce the
expected output will cause the diffs between the expected and the
actual output be printed, and in addition will leave behind a file
SOMETHING.tst (where SOMETHING is the name of the failed test).  You
should compare each of the *.tst files with the corresponding *.out
file and convince yourself that the differences do not indicate a real
problem.  Examples of differences you can disregard are changes in the
copyright blurb printed by GDB, values of unitialized variables,
addresses of global variables like argv[] and envp[] (which depend on
the size of your environment), etc.

Note that djcheck.sh only recurses into those of the subdirectories of
the test suite which test features supported by the DJGPP port of GDB.
For example, the tests in the gdb.gdbtk, gdb.threads, and gdb.hp
directories are not run.


Enjoy,
                                    Eli Zaretskii <eliz@is.elta.co.il>
