From: ldries46 on
I'm relatively new to GPS. I'm trying to compile a program but every time I
compile the program I observe that all units are compiled when I had
expected that only the unit I had altered would be compiled again. What do I
have to do to make this work. I alreday have tried all types of building of
the program.


From: Ludovic Brenta on
ldries46 wrote on comp.lang.ada:
> I'm relatively new to GPS. I'm trying to compile a program but every time I
> compile the program I observe that all units are compiled when I had
> expected that only the unit I had altered would be compiled again. What do I
> have to do to make this work. I alreday have tried all types of building of
> the program.

The bug may be either in gnatmake or in your expectations; this
depends on which unit you change.

If you change a spec, then all specs and all bodies that depend on the
changed spec need to be recompiled.

If you change a generic body, then all specs and bodies that contain
an instantiation of the generic body need to be recompiled (this is
specific to GNAT, which does not share the object code between
insiantiations of a generic).

If you change a file containing a "separate" unit, then the enclosing
unit needs to be recompiled too, because GNAT emits only one object
file containing the enclosing units and all "separate" bodies in it.

We could help you more if you would be more specific about the units
in your program and on which units you changed.

PS. Maybe consider using the gnatmake -m switch ("minimal
recompilation"); you do that by changing the project properties in
GPS. With this option, gnatmake expends more effort trying to
determine which units are still up to date.

--
Ludovic Brenta.
From: Dmitry A. Kazakov on
On Fri, 9 Apr 2010 07:15:07 -0700 (PDT), Ludovic Brenta wrote:

> ldries46 wrote on comp.lang.ada:
>> I'm relatively new to GPS. I'm trying to compile a program but every time I
>> compile the program I observe that all units are compiled when I had
>> expected that only the unit I had altered would be compiled again. What do I
>> have to do to make this work. I alreday have tried all types of building of
>> the program.
>
> The bug may be either in gnatmake or in your expectations; this
> depends on which unit you change.
>
> If you change a spec, then all specs and all bodies that depend on the
> changed spec need to be recompiled.
>
> If you change a generic body, then all specs and bodies that contain
> an instantiation of the generic body need to be recompiled (this is
> specific to GNAT, which does not share the object code between
> insiantiations of a generic).
>
> If you change a file containing a "separate" unit, then the enclosing
> unit needs to be recompiled too, because GNAT emits only one object
> file containing the enclosing units and all "separate" bodies in it.
>
> We could help you more if you would be more specific about the units
> in your program and on which units you changed.
>
> PS. Maybe consider using the gnatmake -m switch ("minimal
> recompilation"); you do that by changing the project properties in
> GPS. With this option, gnatmake expends more effort trying to
> determine which units are still up to date.

Also, when the object and ali-files are on a remote server, usually
together with the sources (this is the case at my work), accessed over a
network file system (samba, NFS etc), then if the compiling computer has
the clock unsynchronized with the server, you may get the described effect
(or worse, non-compiled files).

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
From: sjw on
On Apr 9, 3:26 pm, "Dmitry A. Kazakov" <mail...(a)dmitry-kazakov.de>
wrote:

> Also, when the object and ali-files are on a remote server, usually
> together with the sources (this is the case at my work), accessed over a
> network file system (samba, NFS etc), then if the compiling computer has
> the clock unsynchronized with the server, you may get the described effect
> (or worse, non-compiled files).

And (experience on a previous project with Solaris NFS) much longer
compilation times.
From: Ludovic Brenta on
Dmitry A. Kazakov wrote on comp.lang.ada:
> On Fri, 9 Apr 2010 07:15:07 -0700 (PDT), Ludovic Brenta wrote:
> > ldries46 wrote on comp.lang.ada:
> >> I'm relatively new to GPS. I'm trying to compile a program but every time I
> >> compile the program I observe that all units are compiled when I had
> >> expected that only the unit I had altered would be compiled again. What do I
> >> have to do to make this work. I alreday have tried all types of building of
> >> the program.
>
> > The bug may be either in gnatmake or in your expectations; this
> > depends on which unit you change.
>
> > If you change a spec, then all specs and all bodies that depend on the
> > changed spec need to be recompiled.
>
> > If you change a generic body, then all specs and bodies that contain
> > an instantiation of the generic body need to be recompiled (this is
> > specific to GNAT, which does not share the object code between
> > insiantiations of a generic).
>
> > If you change a file containing a "separate" unit, then the enclosing
> > unit needs to be recompiled too, because GNAT emits only one object
> > file containing the enclosing units and all "separate" bodies in it.
>
> > We could help you more if you would be more specific about the units
> > in your program and on which units you changed.
>
> > PS. Maybe consider using the gnatmake -m switch ("minimal
> > recompilation"); you do that by changing the project properties in
> > GPS. With this option, gnatmake expends more effort trying to
> > determine which units are still up to date.

> Also, when the object and ali-files are on a remote server, usually
> together with the sources (this is the case at my work), accessed over a
> network file system (samba, NFS etc), then if the compiling computer has
> the clock unsynchronized with the server, you may get the described effect
> (or worse, non-compiled files).

I think gnatmake -m corrects this problem. With this option, gnatmake
no longer relies on the timestamps but only on the CRC32 values in
the .ali files.

--
Ludovic Brenta.