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

Mark Hatle mark.hatle at windriver.com
Thu Jun 30 00:32:56 UTC 2011


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.




More information about the Openembedded-core mailing list