This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC/RFA] (testsuite/Ada) Add gdb_compile_ada


On Wed, Feb 25, 2004 at 03:17:49PM -0500, Daniel Jacobowitz wrote:
> On Wed, Feb 25, 2004 at 10:32:11AM -0800, Joel Brobecker wrote:
> > Continuing my fascinating monologous with myself :)
> > 
> > >   - Object files are placed in the testsuite directory. I'd rather
> > >     see them being placed in gdb.ada.
> > > 
> > >     I managed to do this, but I a not completely sure that it's such
> > >     a good idea after all. See patch below. On the one hand, the object
> > >     files et al are placed in gdb.ada rather than gdb/testsuite, but
> > >     on the other hand this has a slight impact in the debug info generated
> > >     by the compiler, since the source file name is no longer absolute.
> > >     So this change is not completely transparent for the debugger...
> > >     What do you think?
> > 
> > Actually, I just noticed that the few tests that do generate object
> > files and other compilation artifacts actually leave them in the
> > testsuite directory, not inside the gdb.* directories.
> > 
> > So I would be tempted to discard the idea above of making sure that
> > all these artifacts be placed in the gdb.ada directory for all Ada
> > testcases. Hence the attached patch. One note, however: contrary to
> > C where temporary .o files are automatically deleted, gnatmake leaves
> > behind. This is to allow incremental builds, similar what make does.
> > This will cause a much higher number of object files to be created
> > in the testsuite directory. I hope this is fine? Otherwise, we'll
> > can use the previous approach, but I believe it should be done
> > consistently across all languages.
> 
> I would prefer to have them placed in the subdirectory.  Can't you
> specify an output directory for gnatmake?  It seems like a terrible
> limitation.

Normally, gnatmake is just a tool like make which job is to call the
compiler with the appropriate switches. It actually does a "little more"
since is also evaluates the dependencies and determines which files need
to be recompiled, but the general idea is that gnatmake = make for GNAT.

That being said, it just occured to me that there is a very simple way
to control the location of the files generated by gnatmake: the GNAT
project files. I created a new file gnat_ada.gpr.in in gdb.ada which
contains the following:

<<
--  This project files allows us to control the loation where the
--  compilation artifacts produced when building the Ada examples
--  are stored.

project Gnat_Ada is

   for Source_Dirs use ("@srcdir@");
   --  No need to set the Object_Dir, it is set to "." by default.

end Gnat_Ada;
>>

And then building a typical Ada program will be done using the
following command:

        % gnatmake -P$objdir/gdb.ada/gnat_ada -g <src_file> -o <dest>

where <src_file> is the name of the Ada file (*basename* only)
and <dest> is the name of the executable (can be basename or fullname,
it doesn't matter)

> Also, gdb_compile_ada may want to remove the incremental files in this
> case, since the testsuite will not use them.

gnatmake will. For instance gnatmake won't recompile the test programs
on subsequent runs, unless the sources have changes. Or if we have two
test programs depending on the same unit, this unit will only be compiled
once. I think we should keep them, they are useful.

> > +    lappend options "compiler=gnatmake"
> 
> See find_gcc in dejagnu's libgloss.exp.

Could you explain a bit more what you mean (sorry, dejagnu is still
new to me, and I have allergic reactions to tcl and expect :-/)?
Do you means that I should create a new find_gnatmake function and
then do

        lappend options "compiler=[find_gnatmake]"

instead? I think this is the last sticky point to look at before being
able to properly submit these changes for inclusion.

Here is a small preview of where I current am, adding our first ada
testcase to our dejagnu testsuite. This is with our debugger based on
6.0, but should be fairly close to apply to head as well.

        * lib/gdb.exp (gdb_compile_ada): New function.
        * lib/ada.exp: New file.
        * gdb.ada/Makefile.in: New file.
        * gdb.ada/gnat_ada.gpr.in: New file.
        * Makefile.in (ALL_SUBDIRS): Add gdb.ada.
        * configure.in: Generate gdb.ada/Makefile and gdb.ada/gnat_ada.gpr.

And the new testcase:

        * gdb.ada/bar.ads: New file.
        * gdb.ada/bar.adb: New file.
        * gdb.ada/null_record.adb: New file.
        * gdb.ada/null_record.exp: New file.

Am I on the right track?

Thanks,
-- 
Joel

Attachment: lib-gdb.exp.diff
Description: Text document

Attachment: ada.exp
Description: Text document

Attachment: Makefile.in
Description: Text document

Attachment: gnat_ada.gpr.in
Description: Text document

Attachment: dejagnu.ada.diff
Description: Text document

Attachment: bar.ads
Description: Text document

Attachment: bar.adb
Description: Text document

Attachment: null_record.adb
Description: Text document

Attachment: null_record.exp
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]