[SR-Dev] exlude module from the compilation

Henning Westerholt henning.westerholt at 1und1.de
Mon Mar 16 13:08:48 CET 2009


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.

> 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.

That would be great.

Cheers,

Henning



More information about the sr-dev mailing list