comp.lang.ada
 help / color / mirror / Atom feed
From: "Marc A. Criley" <mcNOSPAM@mckae.com>
Subject: Binding and linking non-withed packages into an executable
Date: Tue, 27 Jan 2004 15:56:37 -0600
Date: 2004-01-27T15:56:37-06:00	[thread overview]
Message-ID: <bv6n5n$oai2g$1@ID-218515.news.uni-berlin.de> (raw)

(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'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, 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.

Thanks for any help.

Marc A. Criley





             reply	other threads:[~2004-01-27 21:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-27 21:56 Marc A. Criley [this message]
2004-01-27 23:25 ` Binding and linking non-withed packages into an executable Stephen Leake
2004-01-28  0:44   ` Ludovic Brenta
2004-01-28  2:55     ` Stephen Leake
2004-01-28  0:44 ` Robert A Duff
  -- 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