[SR-Dev] exlude module from the compilation
Andrei Pelinescu-Onciul
andrei at iptel.org
Fri Mar 20 22:14:36 CET 2009
On Mar 16, 2009 at 13:08, Henning Westerholt <henning.westerholt at 1und1.de> wrote:
> On Friday 13 March 2009, Andrei Pelinescu-Onciul wrote:
> > > thanks for the pointer, thats a cool feature. Some things i noticed
> > > during my tests of the 'kamailio-3.0' branch: It seems that the library
> > > dependencies of the modules are recompiled again for every module. I
> > > thought you fixed something in this regards in the main branch, perhaps
> > > this is not yet integrated into this? But i don't remember exactly, its
> > > of course not a big issue.
> >
> > It's fixed, but for ser :-)
>
> Hi Andrei,
>
> ok. :-)
>
> > The problem is that we always save all the options a module or a lib was
> > compiled with and then on re-compile we check if the options (defines)
> > have changed. If they did => recompile everything.
> > This avoids problems like compiling a module with -DDBG_QM_MALLOC, then
> > doing some change and compiling without it (which without this extra
> > check might work but will produce coredumps at runtime).
> > The DEFS and INCLUDES are saved in makecfg.lst in each modules or lib
> > directory.
>
> Understand. We detect this on runtime in the module loader, if there is a
> mismatch in the compile flags of core and modules the server will not start.
Right, we do it too, in fact it's in ser before the openser fork (but I
forgot about it :-)). So replace coredump in the above paragraph with
"sr will refuse to start".
>
> > The problem with libs re-compiling happens because the list of lib
> > defines changes as new modules using the lib are compiled. This happens
> > because of the different DEFS in different modules (when a module
> > makefile calls the lib makefile its local DEFS will be passed to the
> > lib).
> > In ser we don't use modules DEFS so much so we haven't seen it so far.
> >
> > We either need a long list of DEFS excluded from the checks (that don't
> > trigger a recompile), or a separate way to specify "local" DEFS, just
> > for modules or libs (e.g. using MOD_DEFS instead of DEFS).
> > Also we must eliminate abuses like using DEFS for passing includes,
> > compiler options a.s.o.
> >
> > > A more problematic bug i run into is that the compilation of
> > > the 'perl' module run into a endlees loop during the make, because i
> > > don't have the necessary dependencies installed, and make somehow don't
> > > detects that the compilation fails.
> >
> > It's because of DEFS+=`perl -MExtUtils::Embed -e ccopts` in the module
> > Makefile. This causes the saved DEFS to be different (they will containt
> > "`perl -MExtUtils::Embed -e ccopts`") from the ones actually used
> > (the output of `perl -MExtUtils::Embed -e ccopts`). No substitution can
> > be used in DEFS.
> >
> > A simple way to fix it is to replace:
> > DEFS+=`perl -MExtUtils::Embed -e ccopts`
> > with
> > PERLCCOPST=$(shell perl -MExtUtils::Embed -e ccopts)
> > DEFS+=$(PERLCCOPTS)
>
> That solution stopped the endless loop in the sip-router, but works
> unfortunally not in the kamailio, here this breaks the compilation. But i
> don't know that much about how this perl embedding process works, would be
> cool if somebody that really use this module could take a look.
>
> > I'll try to think of a solution for using separate DEFS names for modules,
> > libs, and common part.
It's in sip-router right now, but still needs some testing (the ser
version works, but the sr version is slightly different).
Andrei
More information about the sr-dev
mailing list