From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Binding and linking non-withed packages into an executable
Date: 27 Jan 2004 19:44:13 -0500
Date: 2004-01-27T19:44:13-05:00 [thread overview]
Message-ID: <wcc3ca0lx5u.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: bv6n5n$oai2g$1@ID-218515.news.uni-berlin.de
"Marc A. Criley" <mcNOSPAM@mckae.com> writes:
> (I vaguely recall this topic previously being discussed in some forum
> somewhere but have been unable to locate it.)
>
> I want to be able to have a compiled package bound and linked in with an Ada
> executable, despite there being no "with" of that package. The reason is
> that there are "access procedure variables" in the main set of code, which
> this peripheral package can set to its own procedures during the elaboration
> of the package. This is bound to be compiler-specific, so I'm using GNAT
> 3.15p on Linux.
>
> Here's a toy illustration:
>
> -- A package with a "callback variable"
> package Back_Caller is
> type Callback is access procedure;
> Cb : Callback;
> end Back_Caller;
>
> -- The main program that invokes that callback variable.
> with Back_Caller;
> procedure Cb_Main is
> begin
> Back_Caller.Cb.all;
> end Cb_Main;
>
> -- The peripheral package that supplies the callback...
> package CB_Provider is
> procedure My_Callback;
> end CB_Provider;
>
> -- ...that the callback variable is set to during pkg elaboration.
> with Text_IO; use Text_IO;
> with Back_Caller;
> package body CB_Provider is
> procedure My_Callback is
> begin
> Put_Line("Invoking callback");
> end My_Callback;
> begin
> Back_Caller.CB := My_Callback'access;
> end CB_Provider;
>
>
> Invoking gnatmake on Cb_Main compiles just the Back_Caller package and
> Cb_Main procedures, as one would expect. How can I get the CB_Provider
> package bound (so it'll be elaborated) and linked in?
I think you have to say "with CB_Provider;" somewhere in your system.
By the way, there seems to be no need to export My_Callback. You could
declare the package spec as:
package CB_Provider is
pragma Elaborate_Body;
end CB_Provider;
> I've looked at the various gnatbind options, but they're more geared for "no
> main" or "non-Ada main" situations.
>
> Obviously I can have a "configuration package" that with's the "peripheral"
> packages and is withed by the main,
I think that's what you need to do.
>... but I'd like to make the inclusion of
> such packages a build, rather than compile, issue. This way new callback
> packages can be brought in or omitted as needed (the actual app is of course
> more sophisticated than the above toy), so no actual software would have to
> change.
Why? Build scripts are software!
- Bob
next prev parent reply other threads:[~2004-01-28 0:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-27 21:56 Binding and linking non-withed packages into an executable Marc A. Criley
2004-01-27 23:25 ` Stephen Leake
2004-01-28 0:44 ` Ludovic Brenta
2004-01-28 2:55 ` Stephen Leake
2004-01-28 0:44 ` Robert A Duff [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-02-05 18:53 Lionel.DRAGHI
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox