On 6/29/11 6:59 PM, Chris Larson wrote:
> On Wed, Jun 29, 2011 at 4:02 PM, Andreas Mueller <schnitzelt...@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.

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to