[jamming] Not relinking dynamic libraries when not needed (Was Re:Build foo after bar, but don't depend on it)

Alen Ladavac alenl-ml at croteam.com
Sat Apr 9 02:08:12 PDT 2005


FYI, I got a response off-list noting that this idea, even if realised may
create problems if a function is removed from LibCpp, but LibH is not
changed. The build would succeed, but the app would not load.

----- Original Message -----
From: "Alen Ladavac" <alenl-ml at croteam.com>
To: <jamming at perforce.com>
Sent: Thursday, April 07, 2005 11:08
Subject: [jamming] Not relinking dynamic libraries when not needed (Was
Re:Build foo after bar, but don't depend on it)


> I've been thinking of this some more and I find the problem to be even
> simpler than I originally thought. But I don't see a solution.
>
> Consider a standard dependency chain used to build a simple library made
of
> one source file and one header and a simple application using it:
>
> Depends Application : Library AppObj ;
> Depends Library : LibObj ;
> Depends AppObj : AppCpp ;
> Depends LibObj : LibCpp ;
> Includes AppCpp : LibH ;
> Includes LibObj : LibH ;
>
> 1) Changing LibH causes Application to be relinked, and that is ok, since
> AppObj must be recompiled. That is ok.
>
> 2) If I only change LibCpp, it will recompile LibObj, and relink Library
and
> in turn cause relinking of Application. If this is not a static, but a
> dynamic library, then it is completely unneccessary.
>
> I want to set it up so that Application is relinked only if AppObj is
> recompiled. _But_, I cannot completely remove the dependency of
Application
> on Library, because if both AppCpp and LibCpp are changed, or if Library
> does not exist, Library _must_ be linked _before_ Application, since it is
> one of its inputs.
>
> Any ideas on how to solve this? IIRC, Benjamin Scherrey mentioned fake
> targets, but I don't quite understand how that fits this situation. Any
help
> is welcome.
>
> Thanks,
> Alen
>
>
>
> ----- Original Message -----
> From: "Alen Ladavac" <alenl-ml at croteam.com>
> To: <jamming at perforce.com>
> Sent: Friday, January 28, 2005 15:56
> Subject: Re: [jamming] Build foo after bar, but don't depend on it
>
>
> > Heh, well, the actual situation I was working on when I posted the OP is
a
> > bit complex to explain. (Hey, if it weren't complex, I wouldn't be using
> Jam
> > for it. ;) ) But, I can give some example from the everyday work that is
> > usually set up a bit wrong, because this feature is missing:
> >
> > Imagine having a set of dynamic libraries and an executable (not so
> unusual
> > setup, right?). The libraries need to be "linked" into one another and
> into
> > the executable, in the standard dependency order. But in fact, when you
> look
> > at it, in most cases there is no need to actually perform the linking
step
> > at all, even if the library was changed. E.g. you have changed something
> in
> > the implementation of one library function. This will usually pull a
whole
> > chain of linking, without any good reason. Dynamic libraries are binary
> > compatible unless you change an interface. But to change an interface,
you
> > need to change a .h file. If would be best to setup dependencies so that
> > linking of a library is issued only if some of the dependent h files are
> > changed, or if obj files of that particular library is changed. But the
> > linking definitely must take place _after_ the dependent libraries.
> >
> > This is not what I needed that for, but it depicts the problem quite
well
> I
> > believe.
> >
> > Alen
> >
> > ----- Original Message -----
> > From: "Diane Holt" <holtdl at yahoo.com>
> > To: "Craig Allsop" <callsop at sceptre.net>; "'Alen Ladavac'"
> > <alenl-ml at croteam.com>; <jamming at perforce.com>
> > Sent: Wednesday, January 26, 2005 20:49
> > Subject: RE: [jamming] Build foo after bar, but don't depend on it
> >
> >
> > > It's hard for me to say for sure, since I'm not real good with A's and
> E's
> > > instead of specific examples, but pseudotargets is what comes to mind.
> > >
> > > Diane
> > >
> > > --- Craig Allsop <callsop at sceptre.net> wrote:
> > >
> > > >
> > > > Good question, if you find out, please tell.
> > > >
> > > > Craig.
> > > >
> > > > -----Original Message-----
> > > > From: jamming-admin at perforce.com [mailto:jamming-admin at perforce.com]
> On
> > > > Behalf Of Alen Ladavac
> > > > Sent: Tuesday, 11 January 2005 7:29 PM
> > > > To: jamming at perforce.com
> > > > Subject: [jamming] Build foo after bar, but don't depend on it
> > > >
> > > > Hi all,
> > > >
> > > > I've been pondering this one specific glitch that I hit
constantly...
> I
> > > > don't see a way to specify that one target is to be built after
> another
> > > > one,
> > > > but not depend on it.
> > > >
> > > > E.g. target C is built from A and B, and then E is built from C and
D,
> > > > but E
> > > > shouldn't be rebuilt when B changes, only when A changes. In other
> words
> > > > I
> > > > should specify that E depends on A and D only, not on C, but C must
be
> > > > built
> > > > before E's build is started.
> > > >
> > > > Is there any way in the basic Jam to specify this, or is there some
> > > > patch
> > > > for this?
> > > >
> > > >
> > > > _______________________________________________
> > > > jamming mailing list  -  jamming at perforce.com
> > > > http://maillist.perforce.com/mailman/listinfo/jamming
> > > >
> > >
> > >
> > > =====
> > > (holtdl at yahoo.com)
> > >
> > >
> > > _______________________________________________
> > > jamming mailing list  -  jamming at perforce.com
> > > http://maillist.perforce.com/mailman/listinfo/jamming
> > >
> >
> > _______________________________________________
> > jamming mailing list  -  jamming at perforce.com
> > http://maillist.perforce.com/mailman/listinfo/jamming
> >
>
> _______________________________________________
> jamming mailing list  -  jamming at perforce.com
> http://maillist.perforce.com/mailman/listinfo/jamming
>




More information about the jamming mailing list