[OE-core] How to reuse code in oe-core environment

Andreas Mueller schnitzeltony at gmx.de
Thu Jun 30 00:42:42 UTC 2011


On Thursday, June 30, 2011 02:32:56 AM Mark Hatle wrote:
> On 6/29/11 6:59 PM, Chris Larson wrote:
> > On Wed, Jun 29, 2011 at 4:02 PM, Andreas Mueller <schnitzeltony at gmx.de> 
wrote:
> >> foo() {
> >> 
> >>        # code to reuse
> >> 
> >> }
> >> 
> >> and called foo from several recipes. In oe-core the run.* scripts are
> >> much more stripped of unnecessary.  All the code included by 'require'
> >> seems to miss, so the function foo() will not be found.
> >> 
> >> My searches for examples did not lead to a hook so what is the suggested
> >> solution for reusing code for multiple recipes in oe-core?
> > 
> > The require doesn't have to do with anything. bitbake emits only the
> > functions which get called somewhere from the task being run. It
> > tracks what variables reference what other variables. If you call a
> > shell function from another shell function, it tracks this, and
> > realizes that both need to be emitted. Either you're doing something
> > wrong, or you're doing something in a way that bitbake can't track.
> > There's a variable flag you can set to explicitly add variable
> > dependencies.
> 
> There is an example of how to work around this in the rootfs_rpm.bbclass.. 
> It's a bit odd, but it has to do with the way the function is called:
> 
>         # Workaround so the parser knows we need the resolve_package
> function! if false ; then
>                 resolve_package_rpm foo ${RPMCONF_TARGET_BASE}.conf || true
>         fi
> 
> 
> ....
> 
>         pkg_name=$(resolve_package_rpm $pkg-locale-$lang
> ${RPMCONF_TARGET_BASE}.conf)
> 
> 
> So if the function is called within a subshell, the parser doesn't appear
> to know it's there.. so you have to reference it in the function somewhere
> (the if false works well for this) in order for it to be available to
> call.
I'll try to understand that tomorrow zzzzz

Andreas




More information about the Openembedded-core mailing list